jac@yoko.rutgers.edu (Jonathan A. Chandross) (05/11/91)
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