home *** CD-ROM | disk | FTP | other *** search
- From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
- Newsgroups: comp.sources.apple2
- Subject: v001SRC047: Texter -- text editor (GS Only) Part 01/02
- Message-ID: <May.10.15.46.17.1991.13826@yoko.rutgers.edu>
- Date: 10 May 91 19:46:18 GMT
- Approved: jac@paul.rutgers.edu
-
-
- Submitted-by: Joel Sumner (q4kx@cornella.ccs.cornell.edu)
- Posting-number: Volume 1, Source:47
- Archive-name: editor/texter/part01
- Architecture: ONLY_2gs
- Version-number: 1.1.1
-
- Texter is a text editor for the GS.
-
- Enjoy.
-
-
- =Read.Me
- -
- -Texter
- -
- -Version 1.1.1
- -
- -I am not perfect so please point out errors, suggestions, etc. to
- -me. I would appreciate knowing what I am doing right or wrong.
- -
- -This source is compiled with Orca/Pascal (tm Byteworks) and the
- -Resource was created with Genesys (tm SSSI) though I created APW
- -Rez (tm Apple Computer) source with Genesys so you could see what
- -the resource fork was.
- -
- -Also included is a unit by Dave Lyons of Apple Computer to utilitize
- -MessageCenter. This unit is Public Domain. I made 1 little change
- -to it because of compiler type-checking and such. His original code
- -is still there, enclosed in comments.
- -
- -This code is for demonstration purposes only. Please do not re-distribute
- -without this header.
- -
- -If you have any questions, contact me at:
- -
- - Joel Sumner
- - 19 Fossen Way
- - Andover, MA 01810
- -
- - GEnie: JOEL.SUMNER
- - Internet: q4kx@cornella.ccs.cornell.edu
- - q4kx@vax5.cit.cornell.edu
- - Bitnet: q4kx@CORNELLA
- - q4kx@CRNLVAX5
- -
- -Release Notes:
- -
- - Fixed bug in Version 1.1 where PrDefault() was called every
- - time the user selected "Page Setup" instead of calling
- - PrDefault() when Texter was started up and then PrValidate
- - after that.
- -
- =Manifest
- -
- -Read.Me
- -icons.bsc
- -messunit.pas
- -mystuffintf.pas
- -texter.doc
- -texter.pas
- -texter.r.equ
- -texter.r.src
- -texter2.pas
- -
- =texter.doc
- -
- - Texter v1.1
- - By Joel Sumner
- -
- -Background
- -----------
- - This is the next in a continuing series of little programs that
- -I have made because I needed them. This one in particular is
- -just a text editor. Simple enough. But I couldn't find one
- -that allowed you to double-click on the file from the finder
- -and have it load the text editor and the file you double-
- -clicked upon. Appleworks GS does this but many other programs
- -don't. Therefore, I decided to write one. I happened to write
- -this the same week that I had two exams and a long paper due.
- -I always seem to do that to myself. Anyway, I hope you like it.
- -
- -Use
- ----
- - You can run Texter one of two ways. Either run it as a regular
- -application just as you would any other program, or you can
- -double-click upon a text file in a finder window and Texter
- -will automatically be run and the file you clicked upon will
- -be run. You can even select more than one file and double-
- -click upon them. A maximum of 5 files will be loaded though,
- -even if you select more than that.
- -
- -Installation
- -------------
- - Included in this archive is the program (Texter), the
- -documentation file (Texter.Doc), and an Icon file (Texter.ICN).
- -Place the Icon file in the ICONS folder of your boot disk
- -and place Texter in the SYSTEM subdirectory of your boot
- -disk. It should now work just fine.
- - If you need to put Texter somewhere besides the SYSTEM
- -subdirectory of your boot disk (due to space or preference),
- -you will have to edit the attributes of the Icon file to
- -reflect the new loaction of Texter. This can be accomplished
- -with one of the Icon Editors out there. (I recommend DiCeD by
- -Dave Lyons.) Simply load the Icon file into the editor
- -and change the attributes like that says:
- -
- -*/SYSTEM/TEXTER
- -
- -to whatever pathname that Texter currently resides in.
- -(The '*' refers to your boot disk. My hard drive title is '/js'
- -and I boot off it so '*' is the same as '/js')
- -
- -Note, if you try to run the program and get a text dialog saying
- -"Error $1E06", that means that the resource fork was not copied
- -properly. Make sure you extract the archive with GSHK and copy
- -it to your destination with the Apple IIgs Finder.
- -
- -Features
- ---------
- - This is pretty no-frills. You can open up to 5 files at a
- -time. Their full pathname will be displayed in the window
- -title and part of their pathname can be seen in the 'Windows'
- -menu. If you have a bunch of windows open and you wish to
- -view one of the bottom ones, you can either move all the top
- -windows out of the way (slow way), or you can simply select
- -that window in the 'Windows' menu (fast way).
- - You can cut and paste text between windows, but the Undo
- -command does not function.
- -
- -Texter uses all of the standard Text Edit shortcuts:
- -
- -- The arrow keys can be used to move the cursor
- -- Control-D or Delete will delete the current selection or the
- - character to the left of the cursor.
- -- Clear clears the current selection
- -- Control-F removes the current selection or deletes the
- - character to the right of the cursor
- -- Control-Y removes all characters from the cursor to the
- - end of the line
- -- Control-X cuts the selection like OA-X and Cut
- -- Control-C copies the selection like OA-C and Copy
- -- Control-V pastes from the clipboard like OA-V and Paste
- -- A single click places the cursor where the click was
- -- A double click selects the word under the arrow
- -- A triple click selects the line under the arrow
- -- Holding down shift selects everything from the cursor to the
- - mouse click
- -
- -You can also print your document. I assure you that the default
- -font (Shaston 8) looks pretty horrid on a printer. Thus, simply
- -select the Choose Font option from the Goodies menu and select
- -a better font to print with. Experiment until you find something
- -that looks acceptable.
- -
- -Finally, you can choose if you want the document word-wrapped or
- -not. Simply select the toggle in the Goodies Menu. If "Word Wrap On"
- -is checked, then the current document has word wrap activated.
- -This setting is dependent on the window so turning it on or off
- -only affects the current window.
- -
- -None of the above settings are changed because, after all, this edits
- -straight text files, not word processor files.
- -
- -Other Notes
- ------------
- -- TextEdit automatically formats your files so they word wrap.
- -This takes a certain amount of time. Thus loading large files
- -(200K or more) can take a good amount of time (20-25 seconds)
- -to be formatted. Please be patient.
- -- Files cannot be loaded that are more than 1/2 of available
- -memory. This is because two copies of the file must temporarily
- -be in memory simultaneously when loading or saving files and
- -there would be no memory available to do this.
- -
- -Conclusion
- -----------
- - Well, that's about it. I hope you enjoy or use this program.
- -As you may notice, I have said nothing about money. That's
- -because I don't want any. This is Freeware. As a request though,
- -if you do actually install it and use it, please drop me a line
- -and let me know what you think. If you send it via E-Mail, even
- -the response doesn't cost anything. If you have any questions,
- -comments, or responses, I can be reached at the following
- -addresses:
- -
- -Joel Sumner
- -19 Fossen Way
- -Andover, MA 01810
- -
- -GEnie: JOEL.SUMNER
- -Internet:
- -q4kx@cornella.ccs.cornell.edu
- -q4kx@vax5.cit.cornell.edu
- -Bitnet:
- -q4kx@cornella
- -q4kx@crnlvax5
- -
- -Updates
- ---------
- -(Version 1.1)
- -- Fixed bug that caused an error $206 on startup and prevented printing
- - with anything but the ImageWriter driver.
- -- Added Goodies Menu with Word Wrap selection and Font selection.
- -- Added 'Formatting Text' dialogs.
- -- Better Tool Error dialogs to determine where errors have occurred.
- -- New (and improved) icon file.
- -
- =icons.bsc
- -FiLeStArTfIlEsTaRt
- -ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()
- -IICONS.BSC AMQuAAAAAYwwDIAA2qKAq(AHPUhtAMQuAcj0
- -GVvTlzW6BcbYAAAAOwCAEkwWAAAAb5ALAQQCAIAAAAAAAAAA5CAAAAwAAAAAAAAA
- -GVvTRLJ2BAAPAMAABAAAA8CAAAw4AoMAAAAAAAAAAAgAbFBKAMAHFAAAcslEAAwA
- -OwCAEkwWAAAAAAAAAAwAAAAAMAAAAAAAAAAIAAAABAAAAAAAAAAAAgMACAAAAIAA
- -AAAAGYAA1AAAAAgAYVEVSVEVDlkLT50TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- -AAAA4jMAFsNAbHABIwAACCJEPAQqYyLVOc2ktJTnEzjXOB18zJjmhaJJObEWyBDm
- -EYAMFBUEEYAwAIhACBABPAwSz0vtm)EAxcQgAWx)AN7l)LAwI4jgn9g(IBAUTI8i
- -pTjSwDwPb5PomTlWwoKAjKckqPvmEBQUF4UuqU9y18Z1IiRAADeCP8p1Urv0ASRi
- -RJATVLd7pCwW85Lz97e)wgxKICc4ABQQgjDsbNKAFC0HnSZGV6JZV474mbFGJMoh
- -8ZzFiFHGZsYx8fXTOLHGnIJyklaYlJd62opTl7fcncf(CFa0VddgrTvyLha0z7)y
- -yQl(MXOVl5Un6VnGnVe1MweAgaDuxl7WW7xfwe7iHScee9w09g5bMWsUGiTEyMHz
- -QtMcOt27zD6O80wv7CUEwoHgNqIgIogKanVggYi2hDAAKA4BACMAS0LPXeGgYBBn
- -ZfBYrFn)u31lD3MuAC(WRc7Ygjz7OtrpOaA3yxcASAAExj27aIqJFbA64GAFK74A
- -mnuuPchGHvGaMtoH4RUsqypUbNCSHrGHsj5fh4gBrpwniumy5mGr49ALvwq0tJ9b
- -hnCzroKWMaKe7a6CGRoegTgJBkCz6TlvEA6JLokh8KaAq42AC6u70666pppUolpP
- -OtuqMiDpFYiSHwv5YE8TmQ9oV4zx(bD60pg7MBrvAAYBLdhQ)EQNvJ42IKbMqyme
- -qb5H4m5jAgHYAWOmwsYIii85KvMrUIDrYPKrZXtgF4Jgpp9CgWQpAAwHAAAAAAAA
- -AE2e
- =messunit.pas
- -{$Keep 'MessUnit'}
- -UNIT MessUnit;
- -{
- - PUBLIC DOMAIN 20-Sep-89 v1.1
- -
- - Easy-to-use interface for reading a list of pathnames
- - passed to an application by the Finder or another
- - program selector. This list is passed in the Message
- - Center as described in the Tool Locator chapter of
- - the Toolbox Reference, Volume 2.
- -
- - Modified September 1989 for TML Pascal II.
- -
- - To use:
- - Call InitReadMC with a valid memory ID. If it returns
- - -1, no message was available. If InitReadMC returns 0
- - or 1, then a list of pathnames is available. 0 means
- - the application should OPEN the files, and 1 means it
- - should PRINT them.
- -
- - Repeatedly call ReadNextMC to get a pathname. It
- - returns FALSE when there are no more pathnames to
- - get. (To clarify, False means the PREVIOUS call gave
- - you the last available pathname.)
- -
- - Even if you are going to accept only one pathname from
- - the MessageCenter (not recommended), you should still
- - call ReadNextMC until it returns FALSE. Otherwise some
- - memory will needlessly be left allocated.
- -
- - Tip: Be sure to allow for people fiddling with their
- - icon files! Do NOT assume that any pathname given to
- - you by the MessageCenter will specify a file of the
- - type you expect--check.
- -
- - Also, don't assume that the volumes containing the files
- - are necessarily online when your application is launched.
- - You may need to ask the user to insert the correct disk.
- -
- - by David A. Lyons a.k.a. DAL Systems
- - P.O. Box 287
- - North Liberty, IA 52317
- -
- - CompuServe 72177,3233
- - GEnie D.LYONS2
- - AppleLink--PE Dave Lyons
- -}
- -
- -INTERFACE
- -
- -USES Common, ToolLocator, MemoryMgr;
- -
- -Type Str255 = string[255]; {My Additions to TYPE}
- - StringPtr = ^Str255;
- -
- -function InitReadMC(id: integer): integer;
- -function ReadNextMC(s: StringPtr): boolean;
- -
- -IMPLEMENTATION
- -type
- - myMessageRec = RECORD
- - messageNext: longint;
- - messageType: integer;
- - messageData: integer;
- - fileNames: packed array[1..32000] of char;
- - END;
- - MessagePtr = ^myMessageRec;
- - MessageH = ^MessagePtr;
- -
- -var
- - MsgHand: MessageH;
- - MsgIndex: integer;
- -
- -function InitReadMC;
- -var
- - err: integer;
- -begin
- - InitReadMC := -1;
- - MsgIndex := 1;
- - MsgHand := MessageH(NewHandle(0,id,attrNoCross,nil));
- - MessageCenter(getMessage,1,Handle(MsgHand));
- - err := ToolError;
- - MessageCenter(deleteMessage,1,nil);
- - if err=0 then
- - InitReadMC := MsgHand^^.messageData
- - else
- - DisposeHandle(handle(MsgHand));
- -end;
- -
- -function ReadNextMC;
- -var
- - len,i: integer;
- - tempStr: Str255;
- -begin
- - s^ := '**********';
- - ReadNextMC := false;
- - len := ord(MsgHand^^.FileNames[MsgIndex]);
- - if len<>0 then begin
- - ReadNextMC := true;
- - {BlockMove(@MsgHand^^.FileNames[MsgIndex],ptr(s),len+1);} {Dave's}
- - For i:=0 to len do
- - tempStr[i]:=MsgHand^^.FileNames[MsgIndex+i]; {My [Joel's] Routine}
- - MsgIndex := MsgIndex + len + 1;
- - end else
- - DisposeHandle(handle(MsgHand));
- -s^:=TempStr;
- -end;
- -
- -END.
- =mystuffintf.pas
- -{$Keep 'MyStuff'}
- -Unit MyStuff;
- -Interface
- -
- -Uses Common,
- - DialogMgr,
- - MscToolSet,
- - WindowMgr,
- - QuickDrawII,
- - {$LibPrefix '0/'}
- - MessUnit; {Dave Lyon's Unit for Message Center}
- -
- -
- -type
- - SubstArray = Array [0..1] of StringPtr;
- -
- -var
- - TempTextString: Str255;
- - result: Integer;
- - errString: StringPtr;
- - errStringArr: SubstArray;
- - errStringPtr: ^SubstArray;
- -
- -
- -PROCEDURE SystemError (ErrNum : Integer);
- -Function cnvihs(theint:integer):StringPtr;
- -Procedure ErrorBox(error,where:integer);
- -
- -Implementation
- -PROCEDURE SystemError;
- -
- - BEGIN { This is to save code - we don't need Pascal's Run-Time errors }
- - END;
- -
- -Function cnvihs; {converts integer to hex string}
- -var tmpStrPtr :StringPtr;
- - TmpStr :String;
- - i: integer;
- -begin
- -tmpstr[0]:=char(5);
- -i:=integer((theint & $F)+48);
- -if I<58 then tmpstr[5]:=char(i)
- - else tmpstr[5]:=char(i+7);
- -i:=integer((theint & $F0) div $10 +48);
- -if I<58 then tmpstr[4]:=char(i)
- - else tmpstr[4]:=char(i+7);
- -i:=integer((theint & $F00)div $100 + 48);
- -if I<58 then tmpstr[3]:=char(i)
- - else tmpstr[3]:=char(i+7);
- -i:=integer((theint & $F000)div $1000 + 48);
- -if (I<56) and (I>47) then tmpstr[2]:=char(i)
- - else if (I=40) or (I=41) then tmpstr[2]:=char(I+16)
- - else if I>41 then tmpstr[2]:=char(i+23);
- -tmpstr[1]:=char('$');
- -TempTextString:=tmpstr;
- -tmpstrPtr:=@TempTextString;
- -cnvihs:=tmpstrPtr;
- -end;
- -
- -Procedure ErrorBox; {put error dialog on screen}
- -begin
- -SysBeep;
- -errString:=cnvihs(Error);
- -new(ErrStringArr[0]);
- -errStringArr[0]^:=errString^;
- -errString:=cnvihs(where);
- -new(ErrStringArr[1]);
- -errStringArr[1]^:=errString^;
- -result:=AlertWindow(5,ptr(ErrStringPtr),pointer(2));
- -end;
- -
- -
- -END.
- =texter.r.equ
- -// --------------------------------------------------------------------
- -// Genesys created REZ defines
- -// Simple Software Systems International, Inc.
- -// APWREZ.SCG 1.2
- -// --------------------------------------------------------------------
- -
- -
- -// --- type $8004 defines
- -
- -#define Text_Edit_Control $00000001
- -
- -// --- type $8006 defines
- -
- -#define Apple_pString $00000001
- -#define File_pString $00000002
- -#define Edit_pString $00000003
- -#define Windows_pString $00000004
- -#define Goodies_pString $00000005
- -#define Undo_pString $000000FA
- -#define Cut_pString $000000FB
- -#define Copy_pString $000000FC
- -#define Paste_pString $000000FD
- -#define Clear_pString $000000FE
- -#define Close_pString $000000FF
- -#define About_pString $00000100
- -#define Quit_pString $00000101
- -#define New_pString $00000102
- -#define Open_pString $00000103
- -#define Save_pString $00000104
- -#define SaveAs_pString $00000105
- -#define Page_Setup_pString $00000107
- -#define Print_pString $00000108
- -#define Window1_pString $00000109
- -#define Window2_pString $0000010A
- -#define Window3_pString $0000010B
- -#define Window4_pString $0000010C
- -#define Window5_pString $0000010D
- -#define Word_Wrap_pString $0000010E
- -#define Choose_Font_pString $0000010F
- -#define Text_Window_Title $00010005
- -
- -// --- type $8008 defines
- -
- -#define Application_Menu_Bar $00000001
- -
- -// --- type $8009 defines
- -
- -#define Apple_Menu $00000001
- -#define File_Menu $00000002
- -#define Edit_Menu $00000003
- -#define Window_Menu $00000004
- -#define Goodies_Menu $00000005
- -
- -// --- type $800A defines
- -
- -#define Undo_Menu_Item $000000FA
- -#define Cut_Menu_Item $000000FB
- -#define Copy_Menu_Item $000000FC
- -#define Paste_Menu_Item $000000FD
- -#define Clear_Menu_Item $000000FE
- -#define Close_Menu_Item $000000FF
- -#define About_Menu_Item $00000100
- -#define Quit_Menu_Item $00000101
- -#define New_Menu_Item $00000102
- -#define Open_Menu_Item $00000103
- -#define Save_Menu_Item $00000104
- -#define SaveAs_Menu_Item $00000105
- -#define Page_Setup_Item $00000107
- -#define Print_Item $00000108
- -#define Window1_Item $00000109
- -#define Window2_Item $0000010A
- -#define Window3_Item $0000010B
- -#define Window4_Item $0000010C
- -#define Window5_Item $0000010D
- -#define Word_Wrap_Item $0000010E
- -#define Choose_Font_Item $0000010F
- -
- -// --- type $800E defines
- -
- -#define Text_Window $00000FFA
- -
- -// --- type $8010 defines
- -
- -#define Text_Window_wColor $00000001
- -
- -// --- type $8013 defines
- -
- -#define Tool_Startup_Table $00000001
- -
- -// --- type $8015 defines
- -
- -#define Printing_Alert $00000001
- -#define Tool_Error_Alert $00000002
- -#define Save_Alert $00000003
- -
- -// --- type $8016 defines
- -
- -#define Window_Text $00000003
- =texter2.pas
- -{$Keep 'Texter2'}
- -Unit Texter2;
- -Interface
- -
- -Uses Common,
- - ToolLocator,
- - DialogMgr,
- - ControlMgr,
- - WindowMgr,
- - QuickDrawII,
- - {$LibPrefix '0/'}
- - MessUnit, {Dave Lyon's Unit for Message Center}
- - MyStuff;
- -
- -type
- - Document =
- - RECORD
- - index: integer;
- - InUse: Boolean;
- - New: Boolean;
- - Saved: Boolean;
- - Wrap: boolean;
- - DocGSString: GSOSInString;
- - DocRef: Integer;
- - DocWindow: GrafPortPtr;
- - WindowTitle: Str255;
- - end;
- -
- - DocumentPtr = ^Document;
- -
- -var Windows: Array[1..5] of Document;
- -
- -Procedure DoAbout;
- -procedure NoRun(i:integer);
- -Procedure DoToFront(thewind:Integer);
- -procedure DrawWindow;
- -
- -Implementation
- -
- -
- -procedure DrawWindow;
- -begin
- -DrawControls(GetPort);
- -end; { of DrawWindow }
- -
- -Procedure DoToFront;
- -begin
- -SelectWindow(Windows[thewind].DocWindow);
- -end;
- -
- -Procedure NoRun;
- -var string2ptr:pStringPtr;
- -begin
- -string2ptr:=pStringPtr(cnvihs(i));
- -result:=TLTextMountVolume(@'Unable to run due to Tool Error #',
- - string2ptr,
- - @'Quit',
- - @'Quit');
- -end;
- -
- -Procedure DoAbout;
- -var AboutDlog,
- - ApplicPort: GrafPortPtr;
- - r: Rect;
- - itemHit: Integer;
- -
- -begin
- -ApplicPort:=GetPort;
- - SetRect(r,20,40,320,170);
- - AboutDlog :=NewModalDialog(r,true,0);
- -If ToolError<>0 then ErrorBox(ToolError,$1201);
- - SetPort(AboutDlog);
- -
- - SetRect(r,230,18,290,30);
- - NewDItem(AboutDlog,1,r,10,@'Ok',0,0,nil);
- -If ToolError<>0 then ErrorBox(ToolError,$1202);
- -
- -SetForeColor(1);
- -MoveTo(65,20);DrawString(@'Texter v1.1');
- -SetForeColor(0);
- -Moveto(20,35);DrawString(@'Another little Utility by:');
- -MoveTo(30,50);DrawString(@'Joel Sumner');
- -MoveTo(30,60);DrawString(@'19 Fossen Way');
- -MoveTo(30,70);DrawString(@'Andover, MA 01810');
- -MoveTo(30,80);DrawString(@'q4kx@cornella.ccs.cornell.edu');
- -MoveTo(30,90);DrawString(@'q4kx@CORNELLA.BITNET');
- -
- -MoveTo(15,110);DrawString(@'Some code property of ByteWorks and');
- -MoveTo(25,120);DrawString(@'Apple Computer Inc. 1986-1989');
- -
- - itemHit := ModalDialog(nil);
- -If ToolError<>0 then ErrorBox(ToolError,$1203);
- - CloseDialog(AboutDlog);
- -If ToolError<>0 then ErrorBox(ToolError,$1204);
- -SetPort(ApplicPort);
- -end; { of AboutDlog }
- -
- -END.
- -
- + END OF ARCHIVE
-