[ —53280,0:—53281,0:—646,Â(162):™"“":™" USE LYNX TO DISSOLVE THIS FILE":‰10 2 LYNX IX BY WILL CORLEY 12 GC PROG NOTES.64 54 P 27 GC ROUTINES.64 96 P 196 EQUATES.64 14 P 39 RULER.64 3 P 255 RULERHDR.64 7 P 72 RULERLNK.64 5 P 16 GC PROG NOTES.12 57 P 27 GC ROUTINES.128 99 P 196 EQUATES.128 15 P 39 RULER.128 42 P 35 RULERHDR.128 7 P 72 RULERLNK.128 4 P .output Ruler .header RULERhdr.rel .seq .psect $3800 RULER.rel bƒGC Prog Notes.64] 5PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠNotes on programming tools for geoCanvas.n5­ţ-…­ý-…Ё… Š… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐîeQűóÜsŮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙(000000000@ŠgeoCanvas 3.0 Tool Programmer Notes, Nate Fiedler (1/5/93) This file contains tool file formats and explains services provided by geoCanvas 3.0 to the average dynamic tool module. The file GC Routines lists all of the roƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (0¸ 000000@0ŠgeoCanvas 3.0 Dynamic Tool File Format (6/21/93) In header source file: .header .word 0 .byte 3 .byte 21 Icon should be what you want the user to see when he/she goes to select a tool. All 24 by 21 pixels will be displayed when the user chooses a tool. .byte $80+USR .byte APPLICATION .byte SEQUENTIAL .word $3800 .word $37ff .word EnterDeskTop .byte "geoTool Vx.x",0,0,0,0 .byte "your name here",0,0,0,0,0,0 .block 43 .byte "This is my tool for geoCanvas.",0 .endh The version number (x.x) can be whatever you want. GeoCanvas will only look for "geoTool V". The start address is $3800 and the execute address is EnterDeskTop. This is for a good reason; $3800 is where the tools get loaded in when runninƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (0¸ 000000@0ŠgeoCanvas 3.0 Dynamic Tool File Format (6/21/93) The first 10 bytes of the tool assembly code is a combination of jump table entries and pointers: .psect StartOfMyTool: jmp Initialization jmp LoadOut .word Sub-menu pointer .word Mouse pointer picture jmp CleanUp jmp Forget The initialization is when you would clear the variable space of your module. You can set up Main, OPV, and Key at this time. The LoadOut routine is called just before geoCanvas loads another tool. This is when you can save variables by calling SaveSelf. See details on SaveSelf in the GC Routines listing. You must also call your tool's CleanUp routine from here. The sub-menu pointer is a pointer to a menu structure. You can only have one menu and it can only be one level deep, meaning no submenus. If a $0000 is here, geoCanvas will not display a sub-menu for your tool. The mouse pointer picture is for the tool to have a unique pointer, such as a cross-hair pointer for a ruler tool. If you don't want a pointer, put mousePicData here instead. The mouse picture has to be 64 bytes long, just like a regular sprite. CleanUp is called by the tool select routine. Your routine should remove anything from the screen that it left there. For example, the Edit tool would remove the fence from the screen. Forget is called by the undo routine. Your Forget routine should clear any variables concerning position and existence of things, such as the fence or tic-marks. For example, the Ruler wouldƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (000000000@0ŠgeoCanvas 3.0 Services, Nathan Fiedler (6/21/93) The symbols listed below are in the Equates file. See the tool source files for examples on how to use these services. Š@MainŠ is the geoCanvas equivalent of appMain. Use it to have a MainLoop routine. This is where your drawing routines would probably be. Š@OPVŠ is the geoCanvas equivalent of otherPressVector. Use it to have an otherPressVector routine. Only mouse presses are passed, releases are ignored. Š@KeyŠ is the geoCanvas equivalent of keyVector. Use it to have a keyVector routine. GeoCanvas first checks to see if the key pressed was the C=T combination. If it is not that then the tool will get the key press passed to it. Š@colorsŠ contains the currently selected colors. The colors are stored the same way screen color is stored, with the high nybble for the foreground (paint) and the low nybble for the background color (canvas). Š@mseclrŠ contains the original color of the moƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (000000000@0ŠgeoCanvas Tool Programming, Nate Fiedler (6/30/93) To write a tool for geoCanvas, you go about it the same way you would to write any other program, following the formats listed previously, of course. The only difference in the write-assemble-link-debug cycle is with the debugging. Here is how to debug a geoCanvas tool that you are writing: 1. You must rename the .dbg file to "GEOCANVAS.dbg". 2. Launch the .dbg file. This will cause geoDebugger to load geoCanvas. 3. Then "go" geoCanvas; use it to open any document. 4. Select "add tool" from the "options" menu and add your tool. You now have the benefit of running your tool in the environment it was made for. When you go to rewrite, assemble, and link, make sure to "delete tool" the previous version of your tool from geoCanvas before testing the next version. In the geoCanvas 128 3.0 version, you'll need a geoDebugger that runs in 80 columns. A patch for this is available on Quantum-Link. If you do not haƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (000000000@0ŠgeoCanvas 3.0 Programming Notes, Nate Fiedler (6/21/93) Š@InterruptsŠ - There are none supported by geoCanvas, since they can cause errors that are impossible to trace and are a pain to deal with. If you want to use interrupts in your tool, you MUST disable the menus, and keyboard input (by saving, resetting, and later restoring keyVector). If you don't do this things could get real messed up. Here is a brief outline: YourInitRoutine: (0¸000000@ lda mouseOn and #%10011111 sta mouseOn ;Disables menus and icons. MoveW keyVector, keySave LoadB keyVector, 0 sta keyVector ;Disable C=T tool select. You could put your own keyboard input routine here. rts MyLoadOut: ;None needed. With menus and C=T disabled nothing would ever call LoadOut. MyFinishRoutine: ;You have to provide a way for the user to quit from your tool. Pixel edit looks for the "d" key to be pressed. Here is how to exit: lda mouseOn ora #%01000000 sta mouseOn ;Turn on menƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (0¸000000@0Š@ToolsŠ - Here is a detailed explanation of a tool's life. First, you write your tool. It exists on it's own on the disk. When run it simply returns to the deskTop, because of it's execute address in the header. Then, the user runs geoCanvas, opens a document, and then decides to add your tool to geoCanvas. GeoCanvas now finds your tool in the disk directory, reads it into a buffer, opens geoCanvas as a VLIR document, and calls WriteRecord to save your tool as a part of geoCanvas. Then geoCanvas gets your tool's icon and adds it to it's internal icon table. Now your tool is ready to be used by the geoCanvas user. The user now selects your tool icon and geoCanvas loads and initializes your tool by calling your initialization routine. Now when geoCanvas gets it's MainLoop it will call your Main routine, if one is supplied. When geoCanvas gets an otherPressVector, it will first check to see if the user clicked on the pattern select box. If not, OPV will be called. If geoCanvas gets a keyVector, it checks if C=T was pressed. If not, it calls your Key vector. Now say the user selects another tool. GeoCanvas will call your tool's LoadOut routine just before it loads the next tool. Your LoadOut routine must call your CleanUp routine to remove anything left on the screen, and then you may or may not call SaveSelf. If you call SaveSelf, geoCanvas will take your tool and write exactly the same number of bytes back to the appropriate module in geoCanvas. So, if your tool was 1000 bytes when you wrote it, then geoCanvas will save your 1000 byte tool back to it's module. Now say the user selected "options/delete tool". Then geoCanvas will show the icon table and the user selects your tool icon. GeoCanvas wilƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (0¸000000@0Š@Mouse PointerŠ - The mouse should be constrained to the drawing window when the user is drawing with your tool. The tools provide a mouse pointer picture so that the user can quickly remember which tool it is he/she is using. The tools will set a mouse "height" and "width". These are used only when the mouse "hotspot" is bigger than one pixel. For example the color tool has a height and width of 8 by 8 pixels. This is because a color card is 8 by 8 pixels. Š@Remembered positions and window movingŠ - If your tool remembers positions, like the Edit tool does with the fence, make sure that you re-check the positions with respect to the drawing window in your Init routine. This can be done by comparing your remembered positions with the window parameters (insidep or insidec). Š@Memory sizeŠ - Your tool module has from $3800 to $6000 in the computer's memory. So do all the other tools. That's why the LoadOut routine is supplied, to let your tool save what it has to before being "loaded out" by having another module loaded over top of it in memory. The sprite buffers (2-7) are free to use. Also, a0-a9 are reserved for future expansion, except as listed in the Equates file. Š@IconsŠ - GeoCanvas has no icons set up, but uses a dummy icon table, so your tool cannot use icons. Š@Window parametersŠ - The window parameters are as follows: insidep+0 = top of window in pixels (byte) insidep+1 = bottom of window (byte) insidep+2 = left of window (word) insidep+4 = right of window (word) insidep+6 = height of window (byte) insidep+7 = width of window (word) insidec+0 = top of window in cards (byte) insidec+1 = bottom of window (byte) insidec+2 = left of window (byte) insidec+3 = right of window (byƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5‚GC ROUTINES.64  `‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     (0¸000000@0Š@Copy and PasteŠ - Here is how to use the Copy and Paste routines. 1. Set the region to copied or pasted in the GEOS text boundaries. 2. Set a flag in your tool (make sure the flag is in the .psect section), indicating that your tool is calling one of these tools. 3. Call StartDraw 4. Jump to (not jsr) Copy or Paste. GeoCanvas will then call your tool's LoadOut, and then load the geoCanvas module to do the copy or paste operation. 5. When geoCanvas is done with the copy or paste, it will call PrevTool, which will cause your tool to be loaded again. When your Init routine is called, check the flag you set in step 2 and if it's set, then call StopDraw and clear the flag. 6. Now do your tool initialization as you normally would. Š@StartDraw/StopDrawŠ - It is important that you call StartDraw and then StopDraw. They disable the menus, which also disables the keyboard shortcuts, and the pattern select box. So, if you want any of these things turned off temporarily, call StartDraw to do it. Of couse, calling StartDraw will overwrite the undo buffer. Š@Shortcuts/Cursor ControlŠ - It is recommended that you use the tool source code to see how to support keyboard menu shortcuts and cursor control of the mouse. Š@ProcessesŠ - There are no processes used anywhere in geoCanvas. A tool can set up it's own processes using the GEOS process support routines. Š@Text Box CoordinatesŠ - The coordinates of the text box are: 1 = top, 13 = bottom, and 161 = left, 318 = right. ƒ+GC Routines.64  +]_PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠListing of all routines available to tools under geoCanvas.… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐľSGŞjžq`œš"œ´éf•: Pł}­p̂Ȥž!ü˜Ä˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨0¨Đ€00000ŠCheckError low-level disk Function: Check if there were any disk errors by comparing the x register to zero. Parameters: x ERROR - byte value of error returned from a disk routine that supports error flagging (byte). Uses: Returns: nothing (Doesn't return if x <> 0) Alters: Destroys: nothing (All if x <> 0) Description: CheckError is used as a quick check for disk errors. When called, it checks the value of the x register and if it's not zero, CheckError will diƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠClearBox textbox Function: Clears the textbox. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r13 Description: This clears the textbox by redrawing the whole box. Use it to ensure that it'sƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColAddr low-level color Function: Returns the address in color memory of the position passed to it. Parameters: r3 X position - word value of the pixel x location of the color card to be addressed (word). r11L Y position - byte value of the pixel y location of the color card to be addressed (byte). Uses: Returns: r0 ADDRESS - color memory address corresponding to the position passed (word). r3 and r11L in cards Alters: Destroys: a, x, y Description: When passed a pixel location on the screen, ColAddr will calculate the address in color memory corresponding to the screen location. The color is in cards however, so the resolution of the color is 1/8th of the screen bitmap data. Example: LoadW r3,143 LoadB r11ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColFRect high-level color Function: Colors the frame of a rectangle according to the positions. Parameters: r2L Y1 - top of the rectangle (byte). r2H Y2 - bottom of the rectangle (byte). r3 X1 - left edge of the rectangle (word). r4 X2 - right edge of the rectangle (word). Uses: colors - current drawing colors Returns: nothing Alters: Destroys: a, x, y, r0, r2-r4, r11L Description: Given the rectangle coordinates, ColFRect will color the frame of a rectangle. ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColHLine mid-level color Function: Colors a horizontal line according to the positions. Parameters: r3 X1 - left end of horizontal line (word). r4 X2 - right end of horizontal line (word). r11L Y - pixel position of line (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0, r3-r4, r11L Description: When passed horizontal line coordinates, ColHLine will color the corresponding color memory with the current drawiƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColLine high-level color Function: Colors an arbitrary line given two sets of coordinates. Parameters: r3 X1 - x position of first endpoint (word). r11L Y1 - y position of first endpoint (byte). r4 X2 - x position of second endpoint (word). r11H Y2 - y position of second endpoint (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0, r3, r4, r7-r13 Description: When passed the coordinates of an arbitrary line, ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColPoint mid-level color Function: This will color a single point according to the coordinates. Parameters: r3 X1 - x coordinate of pixel (word). r11L Y1 - y coordinate of pixel (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0, r3, r11L Description: Given pixel coordinates ColPoint will color the cooresponding color memory location. Example: LoadW r3,80 LoadB r11L,40 jmp ColPoint See also: ColAddr, ColLƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColRect high-level color Function: Colors a rectangle according to the set of coordinates. Parameters: r2L Y1 - top of rectangle (byte). r2H Y2 - bottom of rectangle (byte). r3 X1 - left edge of rectangle (word). r4 X2 - right edge of rectangle (word). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0, r2-r4, r11L Description: When given the coordinates for a rectangle, ColRect will fill a solid region with the curƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠColVLine mid-level color Function: Colors a vertical line according to the coordinates passed. Parameters: r4 X1 - x coordinate of line (word). r3L Y1 - y coordinate of topmost endpoint (byte). r3H Y2 - y coordinate of bottommost endpoint (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0, r3-r4, r11 Description: When given the coordinates of a vertical line, ColVLine will color the appropriate color memory. ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠCopy mid-level photoscrap Function: Saves a region into a photo scrap on the current application drive. Parameters: windowTop - top of region (byte). windowBot - bottom of region (byte). leftMargin - left side of region (word). rightMargin - right side of region (word). Uses: Returns: nothing Alters: Resets the text boundaries to the full screen. Destroys: assume a, x, y, r0-r15 Description: Given the region specified in the text boundaries, Copy will save theƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠDoDigBox dialog box Function: Prepares geoCanvas for a dialog box. Parameters: Same as DoDlgBox Uses: Returns: Same as DoDlgBox Alters: Destroys: Same as DoDlgBox Description: If you want to use dialog boxes in yoƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠDoubleClick low-level mouse Function: Determines if mouse button was single- or double-clicked and returns status. Parameters: none Uses: mouseData Returns: status register - carry set if double-click Alters: Destroys: a Description: Use this in your OPV routine to determine if the user single- or double-clicked the mouse button. It uses a polled-mouse method to it's determination. Example: MyOPV: jsr DoubleClick bcs 10$ ;handle single-click rts 10$: ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠFetchColor low-level color Function: Retrieves the entire color memory from an internal buffer. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r4 Description: When called this routine retrivƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠFetchTool low-level screen Function: Retrieves the lower 184 lines of the screen from an internal buffer. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r3L Description: When called this rouƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠFileList high-level dialogbox Function: This is a dialog box already designed and tested for use as a file select box. Parameters: r5 BUFFER - 17 byte buffer for file name that will be selected by user (word). r7L FILETYPE - GEOS file type to select from (byte). r10 PERMANENT NAME - file's permanent name to select from. Restricts choices to specific type of file. (word). Uses: Returns: r0L SYSDBDATA - contains either an OPEN or CANCEL value, as returned by DoDlgBox. BUFFER - contains either a null string (if no files to select from) or a filename of a selected file. Alters: Destroys: Same as DoDigBox Description: FileList displays a standard file list box and lets the user select a file according to the paraƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠGetPattern low-level pattern Function: Sets the curPattern variable to point to an internal pattern buffer in geoCanvas. Parameters: none Uses: Returns: nothing Alters: Destroys: a Description: Call this routine just before you want to draw a patterned object on the screen. There is no way to access other patterns with GetPattern. See LoadPatt for loading other patterns into memory. Example: jsr GetPattern LoadB r2L,10 LoadB r2H,20 LoadW r3,50 LoadW r4,80 ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠImpScrn low-level screen Function: Imprints the lower 184 lines of the forescreen to the backscreen buffer. Parameters: none Uses: Returns: nothing Alters: Destroys: a, y, r0-r2 Description: Use this to ensure thaƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠInRegion mid-level mouse Function: Given the region and saved mouse position this routine will determine if the mouse is within the region. Parameters: r2L Y1 - top of region (byte). r2H Y2 - bottom of region (byte). r3 X1 - left side of region (word). r4 X2 - right side of region (word). r0 X - x position of mouse (word). r1L Y - y position of mouse (byte). Uses: Returns: status register - zero flag set if not in region Alters: Destroys: a Description: InRegion is used to determine if the mouse is within a certain region. InRegion returns a $ff in .a if the mouse is in the region and a $00 if not. To get the mouse position into r0, r1L call MseTor0. Example: MyOPV: jsr MseTor0 LoadB r2L, 10 LoadB ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠIsColOn low-level color Function: Returns the status of the color feature of geoCanvas. Parameters: none Uses: Returns: status flag - zero flag set if color is on Alters: Destroys: a Description: ŠIsColOnŠ determines if the user has the color turned on or off and returns it's status. All the geoCanvas color routines (except ColAddr) call this routine before doing any color operations. ¨0¨Đ€00000 Example: jsr IsColOn beq 10$ ;handle colorƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠLoadPatt mid-level pattern Function: Loads a geoCanvas pattern into computer memory. Parameters: a PATTERN - a pattern number, 0-35 (byte). Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r13 Description: LoadPatt loads the pattern specified. It will not accept values greater than 35. It is not useful to use this routine to retrieve a certain pattern based on it's appearance since the user can edit the pattern. Example: jmp LoadPatt See also: GetPattern,ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠMseColor mid-level mouse Function: Sets or returns the color of the mouse. Parameters: a COLOR - new color of mouse; if $80 then MseColor will return the color of the mouse (byte). Uses: Returns: (a) Alters: Destroys: x, y, (a) Description: MseColor will set the mouse color to the one passed. The colors correspond to Commodore screen colors. If the high bit is set when MseColor is called, then it will return the current mouse color. Example: lda #BLUE jmp Msƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠMseToCardPos mid-level mouse Function: Returns the current mouse position in cards. Parameters: none Uses: Returns: r0L X - x position of mouse in cards r0H Y - y position of mouse in cards Alters: Destroys: a, x,ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠMseTor0 low-level mouse Function: Saves the mouse position. Parameters: none Uses: Returns: r0 X - x position of mouse r1L Y - y position of mouse Alters: Destroys: a Description: MseTor0 moves the current mouse ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠPaste mid-level photoscrap Function: Reads in a photo scrap from disk into the specified region. Parameters: windowTop - top of region (byte). windowBot - bottom of region (byte). leftMargin - left side of region (word). rightMargin - right side of region (word). Uses: Returns: nothing Alters: Resets GEOS text boundaries. Destroys: Šassume Ša, x, y, r0-r15 ¨0¨Đ€00000 Description: Given a region as specified by the text boundaries Paste wiƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠPrevTool high-level module Function: Loads and returns control to the previous tool. Parameters: none Uses: Returns: nothing Alters: Destroys: n/a Description: PrevTool loads and initializes the previous tool. Thƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠPrintXYD high-level textbox Function: Displays the x, y, and distance of a set of two points. Parameters: r2L Y1 - y position of first endpoint (byte). r3 X1 - x position of first endpint (word). r2H Y2 - y position of second endpoint (byte). r4 X2 - x position of second endpoint (word). Uses: Returns: nothing Alters: Destroys: Šassume Ša, x, y, r0-r15 ¨0¨Đ€00000 Description: PrintXYD will calculate the width, height, and distance between two points. The two points can be the upper-left and lower-right corners of a region or the endpoints of a line. It will display the measurements in either pixels or inches depending on which the user has selected. Example: LoadB r2L,10 LoadB r2H,50ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠPutText mid-level textbox Function: Displays a text string in the text box. Parameters: r0 POINTER - to null-terminated text string (word). Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r13 Description: Givƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠRecScrn low-level screen Function: Recovers the lower 184 lines of the screen from the backscreen buffer to the forescreen. Parameters: none Uses: Returns: nothing Alters: Destroys: a, y, r0-r2 Description: RecScrƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠSavePatt mid-level pattern Function: Saves the current pattern to the REU. Eventually it gets saved to geoCanvas itself in it's preferences module. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, yƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠSaveSelf mid-level module Function: Call this to resave your module to geoCanvas. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r4, r6-r7 Description: Call SaveSelf to have your module writƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠStartDraw mid-level draw Function: Prepares for a tool to start drawing. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r3L Description: StartDraw turns off menus and saves the backscreen imƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠStashColor low-level color Function: Save the entire color memory to an internal buffer. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r4 Description: StashColor is reserved for the tool's use only. It is useful in doing repeated color operations while drawing rectangles and the like. Example: jsr StashColor jsr StartDraw rts ;to MainLoop MyMainLoop: jsr FetchColor jsr RecScrn ;draw object with color rts ;to MainLoop See also: Feƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠStashTool low-level screen Function: Saves the lower 184 lines of the backscreen to the REU. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r3L Description: StashTool will save the backscreeƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠStopDraw mid-level draw Function: Call this after your tool is done drawing. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y Description: Call StopDraw when your tool is done drawing to the screeƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_‚EQUATES.64      ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     ¨0¨Đ€00000ŠUndo mid-level draw Function: Removes changes from the screen. Parameters: none Uses: Returns: nothing Alters: Destroys: assume a, x, y, r0-r15 Description: Undo will recover the screen and color which was saved the last time StartDraw was called. It also calls the module's Forget routine, so it is not necessary to call your own Forget if you call Undo. Example: jmp Undo See also: StartDraw, StopDraw 0ƒ- Equates.64      - ] PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠEquates symbols file­ż?\, A0 ˇÁ˝8‰ n5­ţ-…­ý-…Ё… Š… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐ‡'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;************************************************ ; geoCanvas 3.0 Equates file Nate Fiedler ; Started: 12/30/92 ;************************************************ RES_BASE = $0400 ;base of resident module SWAP_BASE = $3800 ;base for dynamic tool modules SWAP_SIZE = $6000-SWAP_BASE ;max size of tool module ;geoCanvas screen equates GCSCRSIZE = 7360 ;size of saved screen GCSCRLN = 16 ;start of region saved by screen routines ;That value must be divisible by 8 to work with RecScrn and ImpScrn. GCSCROFF = GCSCRLN*40 ;offset to start of saved region MAXTOOLS = 29 ;max tools allowable DYN_MOD = 6 ;record #; start of dynamic modules ;where first one is 1 (resident = 0) TMTOP = 15 ;top of tool attr. menu TMLEFT = 88 ;left of tool attr. menu insidep == APP_VAR+0 ;(9) inside edge of window (drawing area) insidec == APP_VAR+9 ;(6) inside edge of window in cards Main == a0 ;vector for MainLoop OPV == a1 ;vector for otherPressVector Key == a2 ;vector for keyVƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_ƒ- Equates.64      - ] ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     Xpp°Xppppp0 ;These are geoCanvas services provided to tools. MseTor0 == RES_BASE+3*1 MseToCardPos == RES_BASE+3*2 DoubleClick == RES_BASE+3*3 MseColor == RES_BASE+3*4 InRegion == RES_BASE+3*5 ImpScrn == RES_BASE+3*6 RecScrn == RES_BASE+3*7 StartDraw == RES_BASE+3*8 StopDraw == RES_BASE+3*9 Undo == RES_BASE+3*10 StashTool == RES_BASE+3*11 FetchTool == RES_BASE+3*12 StashColor == RES_BASE+3*13 FetchColor == RES_BASE+3*14 PrevTool == RES_BASE+3*15 SaveSelf == RES_BASE+3*16 Copy == RES_BASE+3*17 Paste == RES_BASE+3*18 CheckError == RES_BASE+3*19 FileList == RES_BASE+3*20 DoDigBox == RES_BASE+3*21 IsColOn == RES_BASE+3*22 ColPoint == RES_BASE+3*23 ColAddr == RES_BASE+3*24 ColRect == RES_BASE+3*25 ColFRect == RES_BASE+3*26 ColLine == RES_BASE+3*27 ColHLine == RES_BASE+3*28 ColVLine == RES_BASE+3*29 PrintXYD == RES_BASE+3*30 ClearBox == RES_BASE+3*31 PutText == RES_BASE+3*32 GetPattern == RES_BASE+3*33 LoadPatt == RES_BASE+3*34 SavePatt == RES_BASE+3*35ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_ƒ- Equates.64      - ] ‚9RULER.64        %‚RULERHDR.64     ‚RULERLNK.64     Xpp°Xppppp0  kƒ RULER.64         ` %PRG formatted GEOS file V1.0ž~ đ€‚Ep8pinGCnes.64  +]_ƒ- Equates.64      - ] ‚9RULER.64        %ƒRULERhdr.64     ]ƒRULERlnk.64     ]ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠSource for ruler tool.\, A0 ˇÁ˝8‰ n5­ţ-…­ý-…Ё… Š… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐ  . .....˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙. ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ƒRULERhdr.64     ]PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đ  ˇÁĚ.Ý.Š.> 1 59ŠĐ  ŒĹ. ŒÄ.  9 č< ˘<`Š€ Ј" ŽĹ.Ęđ Šr Ї" `Œ(@˘É1đʎsAŠÚ˘9 V&­…ÉĐ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙H˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;************************************************ ; geoTool header file Nate Fiedler ; Started: 2/5/93 ;************************************************ .if Pass1 .noeqin .noglbl .include geosSym .glbl .eqin .endif .header .word 0 .byte 3 .byte 21 @ .byte $80|USR .byte APPLICATION .byte SEQUENTIAL .word $3000 .word $2fff .word EnterDeskTop .byte "geoTool V1.0",0,0,0,0 .byte "Nate Fiedler",0,0,0,0,0,0,0,0 .block 43 .byte "geoCanvas ruler tool.ƒ128_DUALTOP     ^ yƒ&GEOWRITE 128    &X ƒGC Prog Notes.64] 5ƒ+GC Routines.64  +]_ƒ- Equates.64      - ] ‚9RULER.64        %ƒRULERhdr.64     ]‚RULERLNK.64     š˙˙ţ€€€€˙ó‰$ƒ‰$ƒˆˆˆˆˆˆ˙ó€€€€˙ƒ?˙˙ ż1ƒRULERlnk.64     ]PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đ  ˇÁĚ.Ý.Š.ŠÝ… ř( Ť> 1 59ŠĐ  ŒĹ. ŒÄ.  9 č< ˘<`Š€ Ј" ŽĹ.Ęđ Šr Ї" `Œ(@˘É1đʎsAŠÚ˘9 V&­…ÉĐ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;*************************************** ; geoTool link file Nate Fiedler ; Started: 2/5/93 ;*************************************** .output Ruler .header RULERhdr.rel .seq .psect $ 3800 Xpp°Xppppp RULER.rel ƒ2GC Prog Notes.122]8PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠNotes on how to program tools under geoCanvas.…­ý-…Ё… Š… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐ ˜ČróÜsü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙(000000000@ŠgeoCanvas 3.0 Tool Programmer Notes, Nate Fiedler (1/5/93) This file contains tool file formats and explains services provided by geoCanvas 3.0 to the average dynamic tool module. The file named GC Routines lists all of the routines available to tools under geoCanvas, and explains in detail their use. The symbols for the routines are listed in the Equates file, and are in a jump table format similar to the GEOS Kernal jump table. The tools for GC64 and GC128 are incomƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(0¸ 000000@0ŠgeoCanvas 3.0 Dynamic Tool File Format (6/21/93) In header source file: .header .word 0 .byte 3 .byte 21 Icon should be what you want the user to see when he/she goes to select a tool. All 24 by 21 pixels will be displayed when the user chooses a tool. .byte $80+USR .byte APPLICATION .byte SEQUENTIAL .word $3800 .word $37ff .word EnterDeskTop .byte "geoTool128 Vx.x",0,0,0,0 .byte "your name here",0,0,0,0,0,0 .block 43 .byte "This is my tool for geoCanvas.",0 .endh The version number (x.x) can be whatever you want. GeoCanvas will only look for "geoTool128 V". The start address is $3800 and the execute address is EnterDeskTop. This is for a good reason. One, $3800 is where the tools do get loaded in whƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(0¸ 000000@0ŠgeoCanvas 3.0 Dynamic Tool File Format (6/21/93) The first 10 bytes of the actual tool assembly code is a combination of jump table entries and pointers: .psect StartOfMyTool: jmp Initialization jmp LoadOut .word Sub-menu pointer .word Mouse pointer picture jmp CleanUp jmp Forget The initialization is typically when you would clear the variable space of your module. You can also set up the Main, OPV, and Key vectors at this time. The Edit tool displays it's fence here. The LoadOut routine is called just before geoCanvas loads another module, either another tool or a geoCanvas module. This is when you can save variables by calling SaveSelf. See details on SaveSelf in the GC Routines listing. You must also call your tool's CleanUp routine from here. The sub-menu pointer is a pointer to a GEOS menu structure. You can only have one menu and it can only be one level deep, meaning no submenus. If a $0000 is here, geoCanvas will not display a sub-menu for your tool. The mouse pointer picture is for the tool to have a unique pointer, such as a cross-hair pointer for a ruler tool. If you don't want a pointer, put $0000 here instead. The mouse picture has to be 64 bytes long, just like a regular sprite. CleanUp is called by the tool select routine. Your routine should remove anything from the screen that it left there. For example, the Edit tool would remove the fence from the screen. Forget is called by the undo routine. Your Forget routine should clear aƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(000000000@0ŠgeoCanvas 3.0 Services, Nate Fiedler (6/21/93) The symbols listed below are in the Equates file. See the tool source files for examples on how to use these services. Š@MainŠ is the geoCanvas equivalent of appMain. Use it to have a MainLoop routine. This is where your drawing routines would probably be. Š@OPVŠ is the geoCanvas equivalent of otherPressVector. Use it to have an otherPressVector routine. Only mouse presses are passed, releases are ignored. Š@KeyŠ is the geoCanvas equivalent of keyVector. Use it to have a keyVector routine. GeoCanvas first checks to see if the key pressed was the C=T combination. If it is not C=T then the tool will get the key press passed to it. Š@colorsŠ contains the currently selected colors. The colors are stored the same way screen color is stored, with the high nybble for the foreground (paint) and the low nybble for the background color (canvas). Š@VDCCOLORŠ is a word pointer to the start of color memory in the VDC. Š@curScrBotŠ is a byte value indicating screen height. Use it instead of 199, since it can also be 175. Š@monoModeŠ is a byte flag indicating if GC128 is in mono mode. A $00 = not mono, $ff = mono. Š@drawingŠ indicates if tool is currently drawing. A $00 = no, $ff = yes. You can set this to prevent shortcuts, the pattern select box, and if you don't want mouseBot and windowBot to be reset to curScrBot during mainloop. Š@my80colorsŠ is a copy of the scr8ƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(000000000@0ŠgeoCanvas Tool Programming, Nate Fiedler (6/30/93) To write a tool for geoCanvas, you go about it the same way you would to write any other program, following the formats listed previously, of course. The only difference in the write-assemble-link-debug cycle is with the debugging. Here is how to debug a geoCanvas tool that you are writing: 1. You must rename the .dbg file to "GEOCANVAS.dbg". 2. Launch the .dbg file. This will cause geoDebugger to load geoCanvas. 3. Then "go" geoCanvas; use it to open any document. 4. Select "add tool" from the "options" menu and add your tool. You now have the benefit of running your tool in the environment it was made for. When you go to rewrite, assemble, and link, make sure to "delete tool" the previous version of your tool from geoCanvas before testing the next version. In the geoCanvas 128 3.0 version, you'll need a geoDebugger that runs in 80 columns. A patch for this is available on Quantum-Link. If you do not haƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(000000000@0ŠgeoCanvas 3.0 Programming Notes, Nate Fiedler (6/21/93) Š@InterruptsŠ - There are none supported by geoCanvas, since they can cause errors that are impossible to trace and are a pain to deal with. If you want to use interrupts in your tool, you MUST disable the menus, and keyboard input (by saving, resetting, and later restoring keyVector). If you don't do this things could get real messed up. Here is a brief outline: YourInitRoutine: (0¸000000@ lda mouseOn and #%10011111 sta mouseOn ;Disables menus and icons. MoveW keyVector, keySave LoadB keyVector, 0 sta keyVector ;Disable C=T tool select. You could put your own keyboard input routine here. rts MyLoadOut: ;None needed. With menus and C=T disabled nothing would ever call LoadOut. MyFinishRoutine: ;You have to provide a way for the user to quit from your tool. Pixel edit looks for the "d" key to be pressed. Here is how to exit: lda mouseOn ora #%01000000 sta mouseOn ;Turn on menƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(0¸000000@0Š@ToolsŠ - Here is a detailed explanation of a tool's life. First, you write your tool. It exists on it's own on the disk. When run it simply returns to the deskTop, because of it's execute address in the header. Then, the user runs geoCanvas, opens a document, and then decides to add your tool to geoCanvas. GeoCanvas now finds your tool in the disk directory, reads it into a buffer, opens geoCanvas as a VLIR document, and calls WriteRecord to save your tool as a part of geoCanvas. Then geoCanvas gets your tool's icon and adds it to it's internal icon table. Now your tool is ready to be used by the geoCanvas user. The user now selects your tool icon and geoCanvas loads and initializes your tool by calling your initialization routine. Now when geoCanvas gets it's MainLoop it will call your Main routine, if one is supplied. When geoCanvas gets an otherPressVector, it will first check to see if the user clicked on the pattern select box. If not, OPV will be called. If geoCanvas gets a keyVector, it checks if C=T was pressed. If not, it calls your Key vector. Now say the user selects another tool. GeoCanvas will call your tool's LoadOut routine just before it loads the next tool. Your LoadOut routine must call your CleanUp routine to remove anything left on the screen, and then you may or may not call SaveSelf. If you call SaveSelf, geoCanvas will take your tool and write exactly the same number of bytes back to the appropriate module in geoCanvas. So, if your tool was 1000 bytes when you wrote it, then geoCanvas will save your 1000 byte tool back to it's module. Now say the user selected "options/delete tool". Then geoCanvas will show the icon table and the user selects your tool icon. GeoCanvas wilƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(0¸000000@0Š@Mouse PointerŠ - The mouse should be constrained to the drawing window when the user is drawing with your tool. The tools provide a mouse pointer picture so that the user can quickly remember which tool it is he/she is using. The tools will set a mouse "height" and "width". These are used only when the mouse "hotspot" is bigger than one pixel. For example the color tool has a height and width of 8 by 8 pixels. This is because a color card is 8 by 8 pixels. Š@Remembered positions and window movingŠ - If your tool remembers positions, like the Edit tool does with the fence, make sure that you re-check the positions with respect to the drawing window in your Init routine. This can be done by comparing your remembered positions with the window parameters (insidep or insidec). Š@Memory sizeŠ - Your tool module has from $3800 to $6000 in the computer's memory. So do all the other tools. That's why the LoadOut routine is supplied, to let your tool save what it has to before being "loaded out" by having another module loaded over top of it in memory. The sprite buffers (2-7) are free to use. Also, a0-a9 Šare reserved for future expansionŠ, except as listed in the Equates file. (0¸000000@0 Š@IconsŠ - GeoCanvas has no icons set up, but uses a dummy icon table, so your tool cannot use icons. Š@Window parametersŠ - The window parameters are as follows: insidep+0 = top of window in pixels (byte) insidep+1 = bottom of window (byte) insidep+2 = left of window (word) insidep+4 = right of window (word) insidep+6 = height of window (byte) insidep+7 = width of window (word) insidec+0 = top of window in cards (byte) insidec+1 = bottom of window (byte) insidec+2 = left of window (byƒ2GC Prog Notes.122]8‚GC ROUTINES.128 c‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#(0¸000000@0Š@Copy and PasteŠ - Here is how to use the Copy and Paste routines. 1. Set the region to copied or pasted in the GEOS text boundaries. 2. Set a flag in your tool (make sure the flag is in the .psect section), indicating that your tool is calling one of these tools. 3. Call StartDraw 4. Jump to (not jsr) Copy or Paste. GeoCanvas will then call your tool's LoadOut, and then load the geoCanvas module to do the copy or paste operation. 5. When geoCanvas is done with the copy or paste, it will call PrevTool, which will cause your tool to be loaded again. When your Init routine is called, check the flag you set in step 2 and if it's set, then call StopDraw and clear the flag. 6. Now do your tool initialization as you normally would. Š@StartDraw/StopDrawŠ - It is important that you call StartDraw and then StopDraw. They disable the menus, which also disables the keyboard shortcuts, and the pattern select box. So, if you want any of these things turned off temporarily, call StartDraw to do it. Of couse, calling StartDraw will overwrite the undo buffer. Š@Shortcuts/Cursor ControlŠ - It is recommended that you use the tool source code to see how to support keyboard menu shortcuts and cursor control of the mouse. Š@ProcessesŠ - There are no processes used anywhere in geoCanvas. A tool can set up it's own processes using the GEOS process support routines. Š@Text Box CoordinatesŠ - The coordinates of the text box are: 1 = top, 13 = bottom, and 161 = left, 318 = right.aƒ3GC Routines.128 3]bPRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠListing of all routines available to tools under geoCanvas.… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐľS]­mĄtcœš"s´éf•3c ł}ÁŸ­L˂Ȥ‡žîü’Ä˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨0¨Đ€00000ŠCheckError low-level disk Function: Check if there were any disk errors by comparing the x register to zero. Parameters: x ERROR - byte value of error returned from a disk routine that supports error flagging (byte). Uses: Returns: nothing (Doesn't return if x <> 0) Alters: Destroys: nothing (All if x <> 0) Description: CheckError is used as a quick check for disk errors. When called, it checks the value of the x register and if it's not zero, CheckError will diƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠClearBox textbox Function: Clears the textbox. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r13 Description: This clears the textbox by redrawing the whole box. Use it to ensure that it'sƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColAddr low-level color Function: Returns the address in color memory of the position passed to it. Parameters: r3 X position - word value of the pixel x location of the color card to be addressed (word). r11L Y position - byte value of the pixel y location of the color card to be addressed (byte). Uses: VDCCOLOR Returns: r0 ADDRESS - color memory address corresponding to the position passed (word). r3 and r11L in cards Alters: Destroys: a, x, y Description: When passed a pixel location on the screen, ColAddr will calculate the address in color memory corresponding to the screen location. The color is in cards however, so the resolution of the color is 1/8th of the screen bitmap data. Also calls NewVDCAddr. ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColFRect high-level color Function: Colors the frame of a rectangle according to the positions. Parameters: r2L Y1 - top of the rectangle (byte). r2H Y2 - bottom of the rectangle (byte). r3 X1 - left edge of the rectangle (word). r4 X2 - right edge of the rectangle (word). Uses: colors - current drawing colors Returns: nothing Alters: Destroys: a, x, y, r0-r1L r2-r4, r11L Description: Given the rectangle coordinates, ColFRect will color the frame of a rectanglƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColHLine mid-level color Function: Colors a horizontal line according to the positions. Parameters: r3 X1 - left end of horizontal line (word). r4 X2 - right end of horizontal line (word). r11L Y - pixel position of line (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0-r1L r3-r4, r11L Description: When passed horizontal line coordinates, ColHLine will color the corresponding color memory with the current drƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColLine high-level color Function: Colors an arbitrary line given two sets of coordinates. Parameters: r3 X1 - x position of first endpoint (word). r11L Y1 - y position of first endpoint (byte). r4 X2 - x position of second endpoint (word). r11H Y2 - y position of second endpoint (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0-r1L r3, r4, r7-r13 Description: When passed the coordinates of an arbitrary linƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColPoint mid-level color Function: This will color a single point according to the coordinates. Parameters: r3 X1 - x coordinate of pixel (word). r11L Y1 - y coordinate of pixel (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0-r1L r3, r11L Description: Given pixel coordinates ColPoint will color the cooresponding color memory location. Example: LoadW r3,80 LoadB r11L,40 jmp ColPoint See also: ColAddr, Cƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColRect high-level color Function: Colors a rectangle according to the set of coordinates. Parameters: r2L Y1 - top of rectangle (byte). r2H Y2 - bottom of rectangle (byte). r3 X1 - left edge of rectangle (word). r4 X2 - right edge of rectangle (word). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0-r1L r2-r4, r11L Description: When given the coordinates for a rectangle, ColRect will fill a solid region with the ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠColVLine mid-level color Function: Colors a vertical line according to the coordinates passed. Parameters: r4 X1 - x coordinate of line (word). r3L Y1 - y coordinate of topmost endpoint (byte). r3H Y2 - y coordinate of bottommost endpoint (byte). Uses: colors - currently selected drawing colors Returns: nothing Alters: Destroys: a, x, y, r0-r1L r3-r4, r11 Description: When given the coordinates of a vertical line, ColVLine will color the appropriate color memorƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠCopy mid-level photoscrap Function: Saves a region into a photo scrap on the current application drive. Parameters: windowTop - top of region (byte). windowBot - bottom of region (byte). leftMargin - left side of region (word). rightMargin - right side of region (word). Uses: Returns: nothing Alters: Resets the text boundaries to the full screen. Destroys: assume a, x, y, r0-r15 Description: Given the region specified in the text boundaries, Copy will save theƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠDoDigBox dialog box Function: Prepares geoCanvas for a dialog box. Parameters: Same as DoDlgBox Uses: Returns: Same as DoDlgBox Alters: Destroys: Same as DoDlgBox Description: If you want to use dialog boxes in yoƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠDoubleClick low-level mouse Function: Determines if mouse button was single- or double-clicked and returns status. Parameters: none Uses: mouseData Returns: status register - carry set if double-click Alters: Destroys: a Description: Use this in your OPV routine to determine if the user single- or double-clicked the mouse button. It uses a polled-mouse method to it's determination. Example: MyOPV: jsr DoubleClick bcs 10$ ;handle single-click rts 10$: ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠFetchColorŠ low-level color Function: Restore color from specified buffer. Parameters: r1 BUFFER - pointer to a 2000 byte buffer in which color is stored (word). Uses: Returns: Alters: Destroys: a, x, y, r1, r2 Description: Call FetchColor after having called StashColor. Between calling StashColor and FetchColor you can modify the screen color. This is useful for rectangle draw routines that work repeatedly, similar to FetchTool. Example: LoadW r1, saveColoƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€000000ŠFetchTool low-level screen Function: Retrieves the lower 184 lines of the screen from an internal buffer. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r3L Description: When called this rouƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠFileList high-level dialogbox Function: This is a dialog box already designed and tested for use as a file select box. Parameters: r5 BUFFER - 17 byte buffer for file name that will be selected by user (word). r7L FILETYPE - GEOS file type to select from (byte). r10 PERMANENT NAME - file's permanent name to select from. Restricts choices to specific type of file. (word). Uses: Returns: r0L SYSDBDATA - contains either an OPEN or CANCEL value, as returned by DoDlgBox. BUFFER - contains either a null string (if no files to select from) or a filename of a selected file. Alters: Destroys: Same as DoDigBox Description: FileList displays a standard file list box and lets the user select a file according to the paraƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠGetPattern low-level pattern Function: Sets the curPattern variable to point to an internal pattern buffer in geoCanvas. Parameters: none Uses: Returns: nothing Alters: Destroys: a Description: Call this routine just before you want to draw a patterned object on the screen. There is no way to access other patterns with GetPattern. See LoadPatt for loading other patterns into memory. Example: jsr GetPattern LoadB r2L,10 LoadB r2H,20 LoadW r3,50 LoadW r4,80 ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠImpScrn low-level screen Function: Imprints the lower 184 lines of the forescreen to the backscreen buffer. Parameters: none Uses: Returns: nothing Alters: Destroys: a, y, r0-r3 Description: Use this to ensure thaƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠInRegion mid-level mouse Function: Given the region and saved mouse position this routine will determine if the mouse is within the region. Parameters: r2L Y1 - top of region (byte). r2H Y2 - bottom of region (byte). r3 X1 - left side of region (word). r4 X2 - right side of region (word). r0 X - x position of mouse (word). r1L Y - y position of mouse (byte). Uses: Returns: status register - zero flag set if not in region Alters: Destroys: a Description: InRegion is used to determine if the mouse is within a certain region. InRegion returns a $ff in .a if the mouse is in the region and a $00 if not. To get the mouse position into r0, r1L call MseTor0. Example: MyOPV: jsr MseTor0 LoadB r2L, 10 LoadB ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠIsColOn low-level color Function: Returns the status of the color feature of geoCanvas. Parameters: none Uses: Returns: status flag - zero flag set if color is on Alters: Destroys: a Description: IsColOn determines if the user has the color turned on or off and returns it's status. All the geoCanvas color routines (except ColAddr) call this routine before doing any color operations. Also checks for mono mode. Example: jsr IsColOn beq 10$ ;handle color turnedƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠLda80Fore low-level screen Function: Load value from VDC memory into a. Parameters: none Uses: Returns: a VALUE - from VDC memory (byte) Alters: Destroys: x Description: Call this to load a value from the VDC memoƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€000000ŠLoadPatt mid-level pattern Function: Loads a geoCanvas pattern into computer memory. Parameters: a PATTERN - a pattern number, 0-35 (byte). Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r13 Description: LoadPatt loads the pattern specified. It will not accept values greater than 35. It is not useful to use this routine to retrieve a certain pattern based on it's appearance since the user can edit the pattern. Example: jmp LoadPatt See also: GetPattern,ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠMseToCardPos mid-level mouse Function: Returns the current mouse position in cards. Parameters: none Uses: Returns: r0L X - x position of mouse in cards r0H Y - y position of mouse in cards Alters: Destroys: a, x,ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠMseTor0 low-level mouse Function: Saves the mouse position. Parameters: none Uses: Returns: r0 X - x position of mouse r1L Y - y position of mouse Alters: Destroys: a Description: MseTor0 moves the current mouse ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠNewVDCAddr low-level screen Function: Set VDC address pointer. Parameters: a ADDRESS LOW - low byte of new address (byte). y ADDRESS HIGH - high byte of new address (byte). Uses: Returns: nothing Alters: Destroys:ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€000000ŠPaste mid-level photoscrap Function: Reads in a photo scrap from disk into the specified region. Parameters: windowTop - top of region (byte). windowBot - bottom of region (byte). leftMargin - left side of region (word). rightMargin - right side of region (word). Uses: Returns: nothing Alters: Resets GEOS text boundaries. Destroys: assume a, x, y, r0-r15 Description: Given a region as specified by the text boundaries Paste will read and display a photo scrap iƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠPrevTool high-level module Function: Loads and returns control to the previous tool. Parameters: none Uses: Returns: nothing Alters: Destroys: n/a Description: PrevTool loads and initializes the previous tool. Thƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠPrintXYD high-level textbox Function: Displays the x, y, and distance of a set of two points. Parameters: r2L Y1 - y position of first endpoint (byte). r3 X1 - x position of first endpint (word). r2H Y2 - y position of second endpoint (byte). r4 X2 - x position of second endpoint (word). Uses: Returns: nothing Alters: Destroys: assume a, x, y, r0-r15 Description: PrintXYD will calculate the width, height, and distance between two points. The two points can be the upper-left and lower-right corners of a region or the endpoints of a line. It will display the measurements in either pixels or inches depending on which the user has selected. Example: LoadB r2L,10 LoadB r2H,50 LoadW r3,40 LoadW r4,100 jmp Pƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠPutText mid-level textbox Function: Displays a text string in the text box. Parameters: r0 POINTER - to null-terminated text string (word). Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r13 Description: Givƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠRecScrn low-level screen Function: Recovers the lower 184 lines of the screen from the backscreen buffer to the forescreen. Parameters: none Uses: Returns: nothing Alters: Destroys: a, y, r0-r3 Description: RecScrƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠSavePatt mid-level pattern Function: Saves the current pattern to the REU. Eventually it gets saved to geoCanvas itself in it's preferences module. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, yƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠSaveSelf mid-level module Function: Call this to resave your module to geoCanvas. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r4, r6-r7 Description: Call SaveSelf to have your module writƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠSta80Fore low-level screen Function: Store value in a to VDC memory. Parameters: a VALUE - byte value to store to VDC memory (byte). Uses: Returns: nothing Alters: Destroys: x Description: Call Sta80Fore to store ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€000000ŠStartDraw mid-level draw Function: Prepares for a tool to start drawing. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r4L Description: StartDraw turns off menus and saves the backscreen imƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠStashColorŠ low-level color Function: Save color to specified buffer. Parameters: r1 BUFFER - pointer to buffer for 2000 bytes of color to be copied to (word). Uses: Returns: Alters: Destroys: a, x, y, r1, r2 Dƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€000000ŠStashTool low-level screen Function: Saves the lower 184 lines of the backscreen to the REU. Parameters: none Uses: Returns: nothing Alters: Destroys: a, x, y, r0-r3L Description: StashTool will save the backscreeƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠStopDraw mid-level draw Function: Call this after your tool is done drawing. Parameters: none Uses: Returns: nothing Alters: Destroys: a Description: Call StopDraw when your tool is done drawing to the screen. Itƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]b‚EQUATES.128     ‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#¨0¨Đ€00000ŠUndo mid-level draw Function: Removes changes from the screen. Parameters: none Uses: Returns: nothing Alters: Destroys: assume a, x, y, r0-r15 Description: Undo will recover the screen and color which was saved the last time StartDraw was called. It also calls the module's Forget routine, so it is not necessary to call your own Forget if you call Undo. Example: jmp Undo See also: StartDraw, StopDraw oƒEquates.128     ]PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠEquates symbols file­ż?\, A0 ˇÁ˝8‰ n5­ţ-…­ý-…Ё… Š… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐgm'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;************************************************ ; geoCanvas128 3.0 Equates file Nate Fiedler ; Started: 6/25/93 ;************************************************ RES_BASE = $0400 ;base of resident module SWAP_BASE = $3800 ;base for dynamic tool modules SWAP_SIZE = $6000-SWAP_BASE ;max size of tool module ;geoCanvas screen equates GCSCRLN = 16 ;Start of region saved by screen routines. GCSCRSIZE = (200-GCSCRLN)*80 ;Total size of saved screen. GCFSSIZE = 100*80 ;Amount saved at BACK_SCR_BASE. GCBSSIZE = (100-GCSCRLN)*80 ;Amount saved at SCREEN_BASE. GCSCROFF = GCSCRLN*80 ;Offset to start of saved region. insidep == APP_VAR+0 ;inside edge of window (drawing area) insidec == APP_VAR+9 ;inside edge of window in cards MAXTOOLS = 29 ;max tools allowable DYN_MOD = 6 ;record #; start of dynamic modules ;where first one is 1 (resident = 0) TMTOP = 15 ;top of tool attr. menu TMLEFT = 120 ;left of tool attr. menu Main == a0 ;vector for MainLoop OPV == a1 ;vector for otherPressVector Key == a2 ;vector for keyVector colors == a3L ;current paint and canvas colors curScrBot == a3H ;Current bottom of screen (199 or 176). VDCCOLOR == a4 ;Address of start of VDC color. drawing == a5L ;tool actively drawingƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 ;These are geoCanvas services provided to tools. MseTor0 == RES_BASE+3*1 MseToCardPos == RES_BASE+3*2 DoubleClick == RES_BASE+3*3 ; MseColor == RES_BASE+3*4 ;Not used in GC128 InRegion == RES_BASE+3*5 ImpScrn == RES_BASE+3*6 RecScrn == RES_BASE+3*7 StartDraw == RES_BASE+3*8 StopDraw == RES_BASE+3*9 Undo == RES_BASE+3*10 StashTool == RES_BASE+3*11 FetchTool == RES_BASE+3*12 StashColor == RES_BASE+3*13 FetchColor == RES_BASE+3*14 PrevTool == RES_BASE+3*15 SaveSelf == RES_BASE+3*16 Copy == RES_BASE+3*17 Paste == RES_BASE+3*18 CheckError == RES_BASE+3*19 FileList == RES_BASE+3*20 DoDigBox == RES_BASE+3*21 IsColOn == RES_BASE+3*22 ColPoint == RES_BASE+3*23 ColAddr == RES_BASE+3*24 ColRect == RES_BASE+3*25 ColFRect == RES_BASE+3*26 ColLine == RES_BASE+3*27 ColHLine == RES_BASE+3*28 ColVLine == RES_BASE+3*29 PrintXYD == RES_BASE+3*30 ClearBox == RES_BASE+3*31 PutText == RES_BASE+3*32 GetPattern == RES_BASE+3*33 LoadPatt == RES_BASE+3*34 SavePƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]‚9RULER.128       *‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0  nƒ7RULER.128       7])PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đŒż?˘É1đʎ AŠSource for ruler tool.\, A0 ˇÁ˝8‰ n5­ţ-…­ý-…Ё… Š… ś'ŠĐF & % t %ŠĐ7Š €ÂŠĐ/ x9ŠĐ‹ lČĎä}ߌ#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;************************************************ ; Ruler tool module Nate Fiedler ; Started: 2/5/93 ;************************************************ .if Pass1 .noeqin .noglbl .include geosSym .include natesMac .include Equates .glbl .eqin .endif .psect jmp InitTool ;initialization jmp LoadOut ;save self and cleanup .word toolmenu ;submenu .word toolPtr ;tool pointer picture jmp TraceOff ;remove tracelines jmp Forget ;forget tic-marks; called by Undo .ramsect inWindow: .block 1 anchorX: .block 2 anchorY: .block 1 lastX: .block 2 lastY: .block 1 traceDrawn: .block 1 ;flag indicating if tracers drawn ticDrawn: .block 1 ;flag indicating if tic-marks are ready saveRegs: .block 32 ;save area for registers saveƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 InitTool: LoadW Main,DrawTool LoadW OPV,TurnOn LoadW Key,Keyin jmp ChkOutWin ;Check if tic-marks outside of window. LoadOut: jsr TraceOff ;remove tracelines jmp SaveSelf ;save settings toolmenu: .byte TMTOP,TMBOT .word TMLEFT,TMRIGHT .byte VERTICAL|TMCOUNT .word marktext .byte MENU_ACTION .word DoMark,tractext .byte MENU_ACTION .word DoTrace,constext .byte MENU_ACTION .word DoConst TMCOUNT = (*-(toolmenu+7))/5 TMBOT = TMTOP+(14*TMCOUNT)+7-1 TMRIGHT = TMLEFT+112-1 TMS = TMRIGHT-23 marktext: .byte " tic-mark",GOTOX,[TMS,]TMS,128,24,'M',27,0 tractext: .byte " trace lines",GOTOX,[TMS,]TMS,128,24,'L',27,0 constext: .byte " constrain",GOTOX,[TMS,]TMS,128,24,'C',27,0 DoMark: lda #'*' cmp marktext bne 10$ lda #' ' 10$: sta marktext jmp GotoFirstMenu DoTrace: lda #'*' cmp tractext bne 10$ jsr TraceOff ;Remove tracelines from screen lda #' ' 10$: sta tractext jmp GotoFirstMenu DoConst: lda #'*' cmp constext bne 10$ lda #' ' 10$: sta constext jmp Gotoƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 TurnOn: jsr IsMseInWin lda inWindow bne 10$ rts 10$: MoveW r0,anchorX MoveB r1L,anchorY ;set anchor point jsr TraceOff ;remove tracers if drawn LoadW OPV,TurnOff jsr StartDraw ;save screen/color for undo  LoadW r1,saveColor  jsr StashColor Xpp°Xppppp0 MoveB insidep+0,mouseTop ;Constrain mouse to window. MoveB insidep+1,mouseBot MoveW insidep+2,mouseLeft MoveW insidep+4,mouseRight rts TurnOff: LoadW OPV,TurnOn LoadB mouseTop,0 ;unconstrain mouse sta mouseLeft sta mouseLeft+1 MoveB curScrBot,mouseBot LoadW mouseRight,639 jsr EndRuler ;remove ruler line and draw tic-marks jmp StopDraw ;enable undo IsMseInWin: lda menuNumber bne 20$ MoveB insidep+0,r2L MoveB insidep+1,r2H MoveW ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 DrawTool: jsr IsMseInWin ;check if mouse in window lda inWindow bne 5$ jmp TraceOff ;remove trace lines if on 5$: CmpW r0,lastX bne 10$ CmpB r1L,lastY ;compare to last known position beq 20$ 10$: MoveW r0,lastX ;save new position MoveB r1L,lastY jsr TraceOn ;draw trace lines if on CmpWI OPV,TurnOff ;not same position, are we drawing? beq 30$ 20$: rts ;not drawing 30$: CmpBI tractext,'*' beq 40$ jsr RecScrn ;don't recover if Tracers already did 40$:  LoadW r1,saveColor  jsr FetchColor ;Remove color, too. Xpp°Xppppp0 MoveW anchorX,r3 MoveB anchorY,r11L MoveW lastX,r4 MoveB lastY,r11H jsr linecons jsr SaveRegs lda #0 sec jsr DrawLine ;draw ruler line jsr LoadRegs jsr ColLine jƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 linecons: CmpBI constext,'*' ;constrain lines beq 5$ rts 5$: CmpB r11L,r11H bcc 10$ lda r11L sub r11H sta r1L bra 20$ 10$: lda r11H sub r11L sta r1L 20$: CmpW r3,r4 bcc 30$ MoveW r3,r0 SubW r4,r0 bra 40$ 30$:ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 cont2: CmpW r3,r4 php CmpB r11L,r11H bcc 10$ lda r11L sub r11H sta r0L bra 20$ 10$: lda r11H sub r11L sta r0L 20$: plp php bcc 25$ MoveW r3,r1 SubW insidep+2,r1 bra 28$ 25$: MoveW insidep+4,r1 SubW r3,r1 28ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 EndRuler: jsr RecScrn  LoadW r1,saveColor  jsr FetchColor ;Remove color, too. Xpp°Xppppp0 CmpBI marktext,'*' ;tic-marks on? beq 10$ jmp Forget ;no, exit; reset after ending a line without tic-marks 10$: MoveW anchorX,ticX1 ;save tic-mark positions MoveB anchorY,ticY1 MoveW lastX,ticX2 MoveB lastY,ticY2 LoadB ticDrawn,$ff ;set tic-makrs to initialized MoveW ticX1,r3 ;draw tic-marks MoveB ticY1,r11L MoveW ticX2,r4 MoveB ticY2,r11H jsr linecons PushW r4 PushB r11H lda #0 sec jsr DrawPoint PopB r11L PopW r3 lda #0 sec jsr DrawPoint jmp ImpScrn ChkOutWin: CmpB ticY1,insidep+0 ;Check that tic-marks are within window. bcc 10$ CmpB insidep+1,ticY2 bcc 10$ CmpW ticX1,insidep+2 bƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 TraceOn: CmpBI tractext,'*' ;draws trace lines using lastX,Y beq 10$ rts 10$: jsr RecScrn ;removes tic-marks LoadB traceDrawn,$ff ;set tracers drawn flag LoadW r3,8 ;Just inside left of leftmost window. LoadW r4,631 ;Just inside right of rightmost window. MoveB lastY,r11L lda #%11101110 jsr HorizontalLine LoadB r3L,32 ;Just inside top of highest window lda curScrBot sub #8 sta r3H MoveW lastX,r4 lda #%11101110 jmp VerticalLine TraceOff: CmpBI tractext,'*' ;removes tracelines but leaves tic-marks beq 5$ rts ;don't check if not turned on 5$: lda traceDrawn bne 10$ rts ;don't remove if not drawn 10$: LoadB traceDrawn,0 ;reset tracers drawn flag jmp RecScrn ;removes tic-marks Forget: LoadB ticX1,0 ;forƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 Keyin: CmpBI keyData,KEY_UP bne 10$ jmp KeyUp 10$: cmp #KEY_DOWN bne 20$ jmp KeyDown 20$: cmp #KEY_LEFT bne 30$ jmp KeyLeft 30$: cmp #KEY_RIGHT bne 40$ jmp KeyRight 40$: jmp ChkShorts KeyUp: dec mouseYPos jmp ChkTop KeyDown: inc mouseYPos jmp ChkBottom KeyLeft: DecW2 mouseXPos jmp ChkLeft KeyRight: IncW mouseXPos jmp ChkRight ChkTop: CmpB mouseYPos,mouseTop bcc 20$ CmpB mouseYPos,mouseBot bcs 20$ rts 20$: jmp KeyDown ChkBottom: CmpB mouseYPos,mouseBot beƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 ChkShorts: lda menuNumber ;Don't do while menus down, and bne 10$ lda mouseOn and #%01000000 ;account for menus being off beq 10$ lda drawing ;and tool drawing in progress. bne 10$ lda keyData bpl 10$ ;If high bit not set, then not a shortcut. ldy #0 and #%01111111 ;Remove shortcut flag. cmp #'a' bcc 5$ cmp #'z'+1 bcs 5$ sub #('a'-'A') ;Make them all upper-case letters. 5$: cmp shorts,y beq 20$ iny cpy #NUMSHORTS bcc 5$ 10$: rts 20$: tya asl a tay lƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 ŠtoolPtr: .byte %11011111,%11111111 ;Mouse picture mask. .byte %10011111,%11111111 .byte %00000000,%00000000 .byte %11011111,%11111110 .byte %11010110,%01100110 .byte %11010000,%00000000 .byte %11011111,%11111110 .byte %11000000,%00000000 .byte %11000000,%00000000 ;Mouse picture image. .byte %10000000,%00000000 .byte %00000000,%00000000 .byte %00011111,%11111110 .byte %00010110,%01100110 .byte %00010000,%00000000 .byte %00011111,%11111110 .byte %0000000ƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])‚9RULERHDR.128    ‚9RULERLNK.128    ƒgeoPack         . [ '#Xpp°Xppppp0 aƒ8 RULERhdr.128    8 ])PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đ  ˇÁĚ.Ý.Š.> 1 59ŠĐ  ŒĹ. ŒÄ.  9 č< ˘<`Š€ Ј" ŽĹ.Ęđ Šr Ї" `Œ(@˘É1đʎsAŠÚ˘9 V&­…ÉĐ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙H˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;************************************************ ; geoTool header file Nate Fiedler ; Started: 2/5/93 ;************************************************ .if Pass1 .noeqin .noglbl .include geosSym .glbl .eqin .endif .header .word 0 .byte 3 .byte 21 @ .byte $80|USR .byte APPLICATION .byte SEQUENTIAL .word $3200 .word $31ff .word EnterDeskTop .byte "geoTool128 V1.0",0,0,0,0 .byte "Nate Fiedler",0,0,0,0,0,0,0,0 .block 43 .byte "geoCanvas128 ruler toƒ2GC Prog Notes.122]8ƒ3GC Routines.128 3]bƒEquates.128     ]ƒ7RULER.128       7])ƒ8 RULERhdr.128    8 ])‚9RULERLNK.128    ƒgeoPack         . [ '#š˙˙ţ€€€€˙ó‰$ƒ‰$ƒˆˆˆˆˆˆ˙ó€€€€˙ƒ?˙˙ żaƒ8RULERlnk.128    8]PRG formatted GEOS file V1.0ż˙˙˙€˙ˆ‹˙ÁŠAŠ˙ńŠ€ŠŽŠ€Šż‘Š€ŠŸŠ€Šż‘Ž€‚ż‘ƒ€€€€˙ń˙˙˙ƒ˙˙Write Image V2.1geoWrite V2.1đ  ˇÁĚ.Ý.Š.ŠÝ… ř( Ť> 1 59ŠĐ  ŒĹ. ŒÄ.  9 č< ˘<`Š€ Ј" ŽĹ.Ęđ Šr Ї" `Œ(@˘É1đʎsAŠÚ˘9 V&­…ÉĐî˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Xpp°Xppppp ;*************************************** ; geoTool128 link file Nate Fiedler ; Started: 2/5/93 ;*************************************** .output Ruler .header RULERhdr.rel .seq .psect $3800 RULER.rel