home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / geos / programming / documents / geostechref.txt < prev    next >
Encoding:
Text File  |  1996-02-04  |  211.1 KB  |  5,875 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.                           geos pROGRAMMER'S rEFERENCE gUIDE
  60.  
  61.  
  62.  
  63.                                      WRITTEN BY
  64.  
  65.  
  66.  
  67.                                aLEXANDER dONALD bOYCE
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.                                        pREFACE
  150.  
  151.  
  152.  
  153.  
  154.  
  155.                tHIS DOCUMENT WAS WRITTEN AFTER HAVING DISASSEMBLED THE geos
  156.  
  157.           kERNAL  AND COMPLETELY COMMENTING AND REVERSE ENGINEERING IT.  iT
  158.  
  159.           TOOK  A  GREAT DEAL OF TIME TO DO THIS,  BUT i DID IT  BECAUSE  i
  160.  
  161.           ENJOY   COMPUTER  PROGRAMMING  AND  DECIPHERING  OTHER   PEOPLE'S
  162.  
  163.           PROGRAMS.  bECAUSE  OF THE AMOUNT OF EFFORT INVOLVED IN  CREATING
  164.  
  165.           THIS DOCUMENT,  i DO NOT REALLY WISH TO GIVE IT AWAY.  hOWEVER, i
  166.  
  167.           KNOW  THERE ARE OTHER PROGRAMMERS WHO WILL BENEFIT FROM  MY  HARD
  168.  
  169.           WORK.  tHEREFORE i AM OFFERING THIS DOCUMENT AS SHAREWARE. iF YOU
  170.  
  171.           GET  GOOD USE OUT OF THIS DOCUMENT,  SEND ME WHATEVER YOU FEEL IT
  172.  
  173.           IS WORTH TO YOU (OR SOME REASONABLE AMOUNT,  PERSONNALY i FIND IT
  174.  
  175.           INVALUABLE).  a  FEW  DOLLARS WOULD BE APPRECIATED.  hERE  IS  MY
  176.  
  177.           ADDRESS:
  178.  
  179.                          aLEXANDER dONALD bOYCE
  180.  
  181.                          2269 gRANDVIEW aVE., aPT. 1
  182.  
  183.                          cLEVELAND hEIGHTS, oHIO 44106-3144
  184.  
  185.  
  186.  
  187.                tHANK YOU AND HAPPY COMPUTING!!
  188.  
  189.  
  190.  
  191.                                    aLEX bOYCE
  192.  
  193.                                    oCTOBER 1986
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.                                   tABLE OF cONTENTS
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.           cHAPTER 1      geos kERNAL rOUTINES
  288.  
  289.                          dEFINES  ALL THE geos KERNAL ROUTINES  ALONG  WITH
  290.  
  291.                          THEIR INPUT AND OUTPUT REQUIREMENTS.
  292.  
  293.  
  294.  
  295.           cHAPTER 2      dEVICE dRIVERS
  296.  
  297.                          dEFINES THE FORMAT FOR iNPUT AND pRINTER dRIVERS.
  298.  
  299.  
  300.  
  301.           cHAPTER 3      fILE fORMATS
  302.  
  303.                          dESCRIBES  THE  FORMAT  OF ALL OF  geos'S  VARIOUS
  304.  
  305.                          FILES.
  306.  
  307.  
  308.  
  309.           cHAPTER 4      dIRECTORY sTRUCTURE
  310.  
  311.                          dESCRIBES   THE   STRUCTURE  OF  A   geos   DISK'S
  312.  
  313.                          DIRECTORY.
  314.  
  315.  
  316.  
  317.           cHAPTER 5      iNFORMATION sECTOR fORMAT
  318.  
  319.                          dESCRIBES  THE STRUCTURE AND THE DATA CONTAINED IN
  320.  
  321.                          A FILE'S INFORMATION SECTOR.
  322.  
  323.  
  324.  
  325.           cHAPTER 6      mEMORY mAP
  326.  
  327.                          dEFINES THE MEMORY LOCATIONS USED BY geos.
  328.  
  329.  
  330.  
  331.  
  332.  
  333.           aPPENDIX i     geos eRRORS
  334.  
  335.                          dEFINES THE ERROR NUMBERS THAT CAN BE RETURNED  BY
  336.  
  337.                          THE geos kERNAL ROUTINES.
  338.  
  339.  
  340.  
  341.           aPPENDIX ii    gLOSSARY
  342.  
  343.                          dEFINES SEVERAL TERMS USED IN THIS DOCUMENT.
  344.  
  345.  
  346.  
  347.           aPPENDIX iii   fILL pATTERNS
  348.  
  349.                          a REPRESENTATION OF geos'S 32 FILL PATTERNS.
  350.  
  351.  
  352.  
  353.           aPPENDIX iv    pROGRAMMING nOTES
  354.  
  355.                          iNFORMATION NECESSARY FOR geos PROGRAMMING.
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.           geos kERNAL rOUTINES                                      1-1
  404.  
  405.  
  406.  
  407.  
  408.  
  409.                                 aLPHABETICAL lISTING
  410.  
  411.  
  412.  
  413.           abs16     $c16f     16 BIT ABSOLUTE VALUE                   1-9
  414.  
  415.           alloc     $c292     fIND AND ALLOCATE A DISK BLOCK          1-9
  416.  
  417.           append    $c289     aDD A vlir CHAIN                        1-9
  418.  
  419.           basic     $c241     rESTART basic                           1-10
  420.  
  421.           blkcmp    $c26e     mEMORY BLOCK COMPARISON                 1-10
  422.  
  423.           blkfil    $c17b     mEMORY BLOCK FILL                       1-10
  424.  
  425.           blkfl2    $c1b4     mEMORY BLOCK FILL WITH INLINE DATA      1-11
  426.  
  427.           blkmov    $c268     mEMORY BLOCK MOVE                       1-11
  428.  
  429.           blkset    $c181     mULTIPLE MEMORY LOCATION
  430.  
  431.                                    INITIALIZATION                     1-11
  432.  
  433.           cbox      $c142     dRAW A CLICK BOX                        1-12
  434.  
  435.           cbox2     $c1ab     dRAW A CLICK BOX WITH INLINE DATA       1-12
  436.  
  437.           cboxes    $c15a     dRAW A TABLE OF CLICK BOXES             1-13
  438.  
  439.           charst    $c1b1     gET A CHARACTER'S STATS                 1-13
  440.  
  441.           chgdrv    $c2bc     cHANGE DISK DRIVE DEVICE NUMBER         1-14
  442.  
  443.           ckmous    $c2b3     cHECK IF MOUSE IS INSIDE A WINDOW       1-14
  444.  
  445.           clrrdy    $c232     sTOP TURBODOS IN A DRIVE                1-14
  446.  
  447.           clrsts    $c235     sTOP AND REMOVE TURBODOS IN A DRIVE     1-15
  448.  
  449.           clsmnu    $c190     cLOSE CURRENT MENU                      1-15
  450.  
  451.           clsser    $c25f     cLOSE SERIAL COMMUNICATION              1-15
  452.  
  453.           clswin    $c2bf     cLOSE A WINDOW                          1-15
  454.  
  455.           cmdtbl    $c103     iNITIALIZE A TABLE OF RECURRING
  456.  
  457.                                    TIMED EVENTS                       1-16
  458.  
  459.           cmenus    $c1bd     cLOSE ALL MENU LEVELS                   1-16
  460.  
  461.           convrt    $c1ea     cONVERT A DISK TO geos FORMAT           1-16
  462.  
  463.           copyb     $c12d     cOPY A BOX FROM SCREEN 1 TO SCREEN 2    1-17
  464.  
  465.           copyb2    $c1a5     cOPY A BOX FROM SCREEN 1 TO SCREEN 2
  466.  
  467.                                    WITH INLINE DATA                   1-17
  468.  
  469.           copyb3    $c250     cOPY A BOX FROM SCREEN 2 TO SCREEN 1    1-17
  470.  
  471.           copyb4    $c253     cOPY A BOX FROM SCREEN 2 TO SCREEN 1
  472.  
  473.                                    WITH INLINE DATA                   1-17
  474.  
  475.           copyl     $c11e     cOPY A LINE FROM SCREEN 2 TO SCREEN 1   1-18
  476.  
  477.           copysp    $c1c6     cOPY A SPRITE DATA BLOCK                1-18
  478.  
  479.           cursof    $c29e     tURN OFF THE TEXT CURSOR                1-18
  480.  
  481.           curson    $c29b     tURN ON THE TEXT CURSOR                 1-18
  482.  
  483.           cwidth    $c1c9     gET A CHARACTER'S WIDTH                 1-19
  484.  
  485.           cwrite    $c223     vERIFY BEFORE WRITING SECTOR            1-19
  486.  
  487.           dec16     $c175     dECREMENT A 16 BIT INTEGER              1-19
  488.  
  489.           decode    $c20e     cOMPUTE THE CHECKSUM OF A MEMORY
  490.  
  491.                                    REGION                             1-20
  492.  
  493.           delay     $c199     sET UP A TIME DELAY                     1-20
  494.  
  495.           delet2    $c244     dELETE A TEMPORARY FILE                 1-20
  496.  
  497.           delete    $c238     dELETE A FILE                           1-20
  498.  
  499.           dirdsk    $c1f0     cREATE A DIRECTORY ENTRY ON DISK        1-21
  500.  
  501.           dirmem    $c1f3     cREATE A DIRECTORY ENTRY IN MEMORY      1-21
  502.  
  503.           draw      $c2aa     dRAW A CODED IMAGE                      1-22
  504.  
  505.           draw2     $c2c5     dRAW A CODED IMAGE WITH USER PATCHES    1-22
  506.  
  507.           drawch    $c202     dRAW A CHARACTER ON THE SCREEN          1-23
  508.  
  509.           drvnam    $c298     cOMPUTE ADDRESS OF DISK'S NAME          1-23
  510.  
  511.           drvset    $c2b0     sELECT A DRIVE                          1-23
  512.  
  513.           drwmnu    $c193     dRAW THE CURRENT MENU                   1-23
  514.  
  515.           dsetup    $c214     sETUP A DRIVE WITH TURBODOS             1-24
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.           geos kERNAL rOUTINES                                      1-2
  536.  
  537.  
  538.  
  539.  
  540.  
  541.           dspchr    $c145     dISPLAY A CHARACTER                     1-24
  542.  
  543.           dspnum    $c184     dISPLAY A 16 BIT INTEGER                1-25
  544.  
  545.           dsptx2    $c1ae     dISPLAY A TEXT STRING WITH INLINE
  546.  
  547.                                    DATA                               1-26
  548.  
  549.           dsptxt    $c148     dISPLAY A TEXT STRING                   1-26
  550.  
  551.           enable    $c106     eNABLE A RECURRING TIMED EVENT          1-26
  552.  
  553.           eramns    $c157     eRASE ALL MENUS                         1-27
  554.  
  555.           eramnu    $c154     eRASE THE CURRENT MENU                  1-27
  556.  
  557.           exertn    $c109     fORCE A RECURRING TIMED EVENT TO RUN    1-27
  558.  
  559.           falloc    $c1fc     aLLOCATE SECTORS FOR A FILE             1-27
  560.  
  561.           faloc2    $c24d     aLLOCATE SECTORS FOR A FILE             1-28
  562.  
  563.           font      $c1cc     mAKE A MEMORY RESIDENT FONT THE
  564.  
  565.                                    CURRENT FONT                       1-28
  566.  
  567.           forbid    $c10c     pREVENT A RECURRING TIMED EVENT FROM
  568.  
  569.                                    RUNNING                            1-28
  570.  
  571.           free      $c226     fREE A FILE'S SECTORS                   1-29
  572.  
  573.           geosck    $c1de     cHECK IF A DISK IS geos FORMAT          1-29
  574.  
  575.           getbyt    $c2b6     gET A BYTE FROM A FILE                  1-29
  576.  
  577.           getin     $c2a7     rEAD A CHARACTER FROM THE KEYBOARD      1-30
  578.  
  579.           goto      $c280     gOTO A SPECIFIC vlir CHAIN              1-30
  580.  
  581.           grphc2    $c1a8     pROCESS A GRAPHIC COMMAND TABLE WITH
  582.  
  583.                                    INLINE DATA                        1-30
  584.  
  585.           grphic    $c136     pROCESS A GRAPHIC COMMAND TABLE         1-30
  586.  
  587.           hline     $c118     dRAW A HORIZONTAL LINE IN A PATTERN     1-31
  588.  
  589.           hole      $c1f6     fIND A HOLE IN THE DIRECTORY            1-32
  590.  
  591.           indjmp    $c1d8     pERFORM AN INDIRECT JUMP                1-32
  592.  
  593.           init01    $c271     iNITIALIZE geos VARIABLES               1-32
  594.  
  595.           initdv    $c1e1     iNITIALIZE A DRIVE                      1-32
  596.  
  597.           initms    $c14e     iNITIALIZE THE MOUSE                    1-33
  598.  
  599.           input     $c1ba     rEAD A LINE OF TEXT FROM THE USER       1-33
  600.  
  601.           insert    $c286     iNSERT A vlir CHAIN                     1-34
  602.  
  603.           intbm     $c17e     iNTELLIGENT MEMORY BLOCK MOVE           1-34
  604.  
  605.           intbm2    $c1b7     iNTELLIGENT MEMORY BLOCK MOVE WITH
  606.  
  607.                                    INLINE DATA                        1-34
  608.  
  609.           inuse     $c2ad     cHECK IF A DISK SECTOR IS IN USE        1-35
  610.  
  611.           invbox    $c12a     rEVERSE VIDEO A BOX                     1-35
  612.  
  613.           invlin    $c11b     rEVERSE VIDEO A HORIZONTAL LINE         1-35
  614.  
  615.           irqrtn    $c100     irq ROUTINE                             1-36
  616.  
  617.           lchain    $c1ff     lOAD A CHAIN INTO MEMORY, GIVEN THE
  618.  
  619.                                    INITIAL TRACK AND SECTOR           1-36
  620.  
  621.           ldswap    $c23e     lOAD THE swapfile                       1-36
  622.  
  623.           line      $c130     dRAW/eRASE/cOPY AN ARBITRARY LINE       1-37
  624.  
  625.           load      $c208     lOAD A FILE, GIVEN A FILE NAME          1-37
  626.  
  627.           load2     $c211     lOAD A FILE, GIVEN A DIRECTORY ENTRY    1-38
  628.  
  629.           load3     $c21d     lOAD AND RUN A FILE, GIVEN A
  630.  
  631.                                    DIRECTORY ENTRY                    1-38
  632.  
  633.           loadad    $c229     gET A FILE'S LOAD ADDRESS               1-39
  634.  
  635.           loadsw    $c217     lOAD A FILE WITH MEMORY SWAPPING        1-39
  636.  
  637.           lookup    $c20b     lOOKUP A FILE IN THE DIRECTORY          1-40
  638.  
  639.           main      $c1c3     geos'S MAIN LOOP                        1-40
  640.  
  641.           makcur    $c1c0     cREATE THE TEXT CURSOR SPRITE           1-41
  642.  
  643.           masl      $c15d     mULTIPLE 16 BIT ARITHMETIC SHIFT
  644.  
  645.                                    LEFT                               1-41
  646.  
  647.           menu      $c151     mENU PROCESSOR                          1-42
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.           geos kERNAL rOUTINES                                      1-3
  668.  
  669.  
  670.  
  671.  
  672.  
  673.           mlsr      $c262     mULTIPLE 16 BIT LOGICAL SHIFT RIGHT     1-43
  674.  
  675.           mousof    $c18d     tURN OFF THE MOUSE                      1-43
  676.  
  677.           mouson    $c18a     tURN ON THE MOUSE                       1-43
  678.  
  679.           neg16     $c172     nEGATE A 16 BIT INTEGER                 1-43
  680.  
  681.           next      $c27a     mOVE TO NEXT vlir CHAIN                 1-44
  682.  
  683.           numblk    $c1db     cOMPUTE NUMBER OF FREE BLOCKS ON
  684.  
  685.                                    DISK                               1-44
  686.  
  687.           opndsk    $c2a1     oPEN A DISK                             1-44
  688.  
  689.           opnser    $c25c     oPEN SERIAL COMMUNICATION               1-45
  690.  
  691.           pbox      $c127     dRAW AN OUTLINE IN A PATTERN            1-45
  692.  
  693.           pbox2     $c1a2     dRAW A SOLID OUTLINE WITH INLINE
  694.  
  695.                                    DATA                               1-45
  696.  
  697.           permit    $c10f     aLLOW A RECURRING TIMED EVENT TO
  698.  
  699.                                    EXECUTE                            1-45
  700.  
  701.           pfill     $c124     fILL A BOX WITH A PATTERN               1-46
  702.  
  703.           pfill2    $c19f     fILL A BOX WITH A PATTERN WITH
  704.  
  705.                                    INLINE DATA                        1-46
  706.  
  707.           plot      $c133     dRAW/eRASE/cOPY A POINT ON THE
  708.  
  709.                                    SCREEN                             1-46
  710.  
  711.           posspr    $c1cf     pOSITION A SPRITE                       1-47
  712.  
  713.           prev      $c27d     mOVE TO PREVIOUS vlir CHAIN             1-47
  714.  
  715.           random    $c187     cHANGE THE RANDOM NUMBER                1-47
  716.  
  717.           rd180     $c247     rEAD TRACK 18 SECTOR 0                  1-47
  718.  
  719.           read      $c1e4     rEAD A SECTOR                           1-48
  720.  
  721.           read2     $c21a     rEAD A SECTOR WITH DRIVE PRESET         1-48
  722.  
  723.           reboot    $c000     rEBOOT geos                             1-48
  724.  
  725.           remove    $c283     rEMOVE A vlir CHAIN                     1-49
  726.  
  727.           rename    $c259     rENAME A FILE                           1-49
  728.  
  729.           resetm    $c19c     rESET THE MOUSE                         1-49
  730.  
  731.           restrt    $c22c     lOAD AND RUN desktop                    1-49
  732.  
  733.           rowadr    $c13c     cOMPUTE MEMORY ADDRESS OF A ROW ON
  734.  
  735.                                    THE SCREEN                         1-50
  736.  
  737.           run       $c22f     rUN A PROGRAM THAT IS IN MEMORY         1-50
  738.  
  739.           save      $c1ed     sAVE MEMORY TO A FILE                   1-51
  740.  
  741.           save2     $c1f9     sAVE MEMORY TO PREALLOCATED SECTORS     1-51
  742.  
  743.           sd1616    $c16c     sIGNED 16 BIT DIVISION                  1-51
  744.  
  745.           selbsw    $c14b     sELECT THE bsw FONT                     1-52
  746.  
  747.           setpat    $c139     sELECT A FILL PATTERN                   1-52
  748.  
  749.           sproff    $c1d5     tURN OFF A SPRITE                       1-52
  750.  
  751.           spron     $c1d2     tURN ON A SPRITE                        1-52
  752.  
  753.           start     $c115     sTART A RECURRING TIMED EVENT'S
  754.  
  755.                                    TIMER                              1-53
  756.  
  757.           stop      $c112     sTOP A RECURRING TIMED EVENT'S TIMER    1-53
  758.  
  759.           strcmp    $c26b     sTRING COMPARE                          1-53
  760.  
  761.           strcpy    $c265     sTRING COPY                             1-53
  762.  
  763.           syserr    $c2c2     rEPORT SYSTEM ERROR                     1-54
  764.  
  765.           table     $c23b     cREATE A TABLE OF FILE NAMES            1-54
  766.  
  767.           tbljmp    $c2a4     pERFORM A JUMP THROUGH A TABLE          1-54
  768.  
  769.           test      $c13f     tEST THE VALUE OF A PIXEL               1-55
  770.  
  771.           trace     $c205     cREATE A LIST OF SECTORS USED BY A
  772.  
  773.                                    FILE                               1-55
  774.  
  775.           ud1616    $c169     uNSIGNED 16 BIT DIVISION                1-55
  776.  
  777.           um1616    $c166     uNSIGNED 16 BIT BY 16 BIT MULTIPLY      1-56
  778.  
  779.           um168     $c163     uNSIGNED 16 BIT BY 8 BIT MULTIPLY       1-56
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.           geos kERNAL rOUTINES                                      1-4
  800.  
  801.  
  802.  
  803.  
  804.  
  805.           umul88    $c160     uNSIGNED 8 BIT BY 8 BIT MULTIPLY        1-56
  806.  
  807.           update    $c295     uPDATE A vlir FILE                      1-57
  808.  
  809.           vclose    $c277     cLOSE A vlir FILE                       1-57
  810.  
  811.           vline     $c121     dRAW A VERTICAL LINE IN A PATTERN       1-57
  812.  
  813.           vload     $c28c     lOAD A vlir CHAIN                       1-58
  814.  
  815.           vopen     $c274     oPEN A vlir FILE                        1-58
  816.  
  817.           vsave     $c28f     sAVE MEMORY TO A vlir CHAIN             1-59
  818.  
  819.           whatis    $c196     wHO KNOWS WHAT THIS ROUTINE DOES???     1-59
  820.  
  821.           window    $c256     wINDOW PROCESSOR                        1-60
  822.  
  823.           wr180     $c24a     wRITE TO TRACK 18 SECTOR 0              1-62
  824.  
  825.           write     $c1e7     wRITE A SECTOR                          1-62
  826.  
  827.           write2    $c220     wRITE A SECTOR WITH DRIVE PRESET        1-62
  828.  
  829.           zfill     $c178     fILL A MEMORY REGION WITH ZEROES        1-62
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.           geos kERNAL rOUTINES                                      1-5
  932.  
  933.  
  934.  
  935.  
  936.  
  937.                                  sEQUENTIAL lISTING
  938.  
  939.  
  940.  
  941.           reboot    $c000     rEBOOT geos                             1-48
  942.  
  943.           irqrtn    $c100     irq ROUTINE                             1-36
  944.  
  945.           cmdtbl    $c103     iNITIALIZE A TABLE OF RECURRING
  946.  
  947.                                    TIMED EVENTS                       1-16
  948.  
  949.           enable    $c106     eNABLE A RECURRING TIMED EVENT          1-26
  950.  
  951.           exertn    $c109     fORCE A RECURRING TIMED EVENT TO RUN    1-27
  952.  
  953.           forbid    $c10c     pREVENT A RECURRING TIMED EVENT FROM
  954.  
  955.                                    RUNNING                            1-28
  956.  
  957.           permit    $c10f     aLLOW A RECURRING TIMED EVENT TO
  958.  
  959.                                    EXECUTE                            1-45
  960.  
  961.           stop      $c112     sTOP A RECURRING TIMED EVENT'S TIMER    1-53
  962.  
  963.           start     $c115     sTART A RECURRING TIMED EVENT'S
  964.  
  965.                                    TIMER                              1-53
  966.  
  967.           hline     $c118     dRAW A HORIZONTAL LINE IN A PATTERN     1-31
  968.  
  969.           invlin    $c11b     rEVERSE VIDEO A HORIZONTAL LINE         1-35
  970.  
  971.           copyl     $c11e     cOPY A LINE FROM SCREEN 2 TO SCREEN 1   1-18
  972.  
  973.           vline     $c121     dRAW A VERTICAL LINE IN A PATTERN       1-57
  974.  
  975.           pfill     $c124     fILL A BOX WITH A PATTERN               1-46
  976.  
  977.           pbox      $c127     dRAW AN OUTLINE IN A PATTERN            1-45
  978.  
  979.           invbox    $c12a     rEVERSE VIDEO A BOX                     1-35
  980.  
  981.           copyb     $c12d     cOPY A BOX FROM SCREEN 1 TO SCREEN 2    1-17
  982.  
  983.           line      $c130     dRAW/eRASE/cOPY AN ARBITRARY LINE       1-37
  984.  
  985.           plot      $c133     dRAW/eRASE/cOPY A POINT ON THE
  986.  
  987.                                    SCREEN                             1-46
  988.  
  989.           grphic    $c136     pROCESS A GRAPHIC COMMAND TABLE         1-30
  990.  
  991.           setpat    $c139     sELECT A FILL PATTERN                   1-52
  992.  
  993.           rowadr    $c13c     cOMPUTE MEMORY ADDRESS OF A ROW ON
  994.  
  995.                                    THE SCREEN                         1-50
  996.  
  997.           test      $c13f     tEST THE VALUE OF A PIXEL               1-55
  998.  
  999.           cbox      $c142     dRAW A CLICK BOX                        1-12
  1000.  
  1001.           dspchr    $c145     dISPLAY A CHARACTER                     1-24
  1002.  
  1003.           dsptxt    $c148     dISPLAY A TEXT STRING                   1-26
  1004.  
  1005.           selbsw    $c14b     sELECT THE bsw FONT                     1-52
  1006.  
  1007.           initms    $c14e     iNITIALIZE THE MOUSE                    1-33
  1008.  
  1009.           menu      $c151     mENU PROCESSOR                          1-42
  1010.  
  1011.           eramnu    $c154     eRASE THE CURRENT MENU                  1-27
  1012.  
  1013.           eramns    $c157     eRASE ALL MENUS                         1-27
  1014.  
  1015.           cboxes    $c15a     dRAW A TABLE OF CLICK BOXES             1-13
  1016.  
  1017.           masl      $c15d     mULTIPLE 16 BIT ARITHMETIC SHIFT
  1018.  
  1019.                                    LEFT                               1-41
  1020.  
  1021.           umul88    $c160     uNSIGNED 8 BIT BY 8 BIT MULTIPLY        1-56
  1022.  
  1023.           um168     $c163     uNSIGNED 16 BIT BY 8 BIT MULTIPLY       1-56
  1024.  
  1025.           um1616    $c166     uNSIGNED 16 BIT BY 16 BIT MULTIPLY      1-56
  1026.  
  1027.           ud1616    $c169     uNSIGNED 16 BIT DIVISION                1-55
  1028.  
  1029.           sd1616    $c16c     sIGNED 16 BIT DIVISION                  1-51
  1030.  
  1031.           abs16     $c16f     16 BIT ABSOLUTE VALUE                   1-9
  1032.  
  1033.           neg16     $c172     nEGATE A 16 BIT INTEGER                 1-43
  1034.  
  1035.           dec16     $c175     dECREMENT A 16 BIT INTEGER              1-19
  1036.  
  1037.           zfill     $c178     fILL A MEMORY REGION WITH ZEROES        1-62
  1038.  
  1039.           blkfil    $c17b     mEMORY BLOCK FILL                       1-10
  1040.  
  1041.           intbm     $c17e     iNTELLIGENT MEMORY BLOCK MOVE           1-34
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.           geos kERNAL rOUTINES                                      1-6
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.           blkset    $c181     mULTIPLE MEMORY LOCATION
  1070.  
  1071.                                    INITIALIZATION                     1-11
  1072.  
  1073.           dspnum    $c184     dISPLAY A 16 BIT INTEGER                1-25
  1074.  
  1075.           random    $c187     cHANGE THE RANDOM NUMBER                1-47
  1076.  
  1077.           mouson    $c18a     tURN ON THE MOUSE                       1-43
  1078.  
  1079.           mousof    $c18d     tURN OFF THE MOUSE                      1-43
  1080.  
  1081.           clsmnu    $c190     cLOSE CURRENT MENU                      1-15
  1082.  
  1083.           drwmnu    $c193     dRAW THE CURRENT MENU                   1-23
  1084.  
  1085.           whatis    $c196     wHO KNOWS WHAT THIS ROUTINE DOES???     1-59
  1086.  
  1087.           delay     $c199     sET UP A TIME DELAY                     1-20
  1088.  
  1089.           resetm    $c19c     rESET THE MOUSE                         1-49
  1090.  
  1091.           pfill2    $c19f     fILL A BOX WITH A PATTERN WITH
  1092.  
  1093.                                    INLINE DATA                        1-46
  1094.  
  1095.           pbox2     $c1a2     dRAW A SOLID OUTLINE WITH INLINE
  1096.  
  1097.                                    DATA                               1-45
  1098.  
  1099.           copyb2    $c1a5     cOPY A BOX FROM SCREEN 1 TO SCREEN 2
  1100.  
  1101.                                    WITH INLINE DATA                   1-17
  1102.  
  1103.           grphc2    $c1a8     pROCESS A GRAPHIC COMMAND TABLE WITH
  1104.  
  1105.                                    INLINE DATA                        1-30
  1106.  
  1107.           cbox2     $c1ab     dRAW A CLICK BOX WITH INLINE DATA       1-12
  1108.  
  1109.           dsptx2    $c1ae     dISPLAY A TEXT STRING WITH INLINE
  1110.  
  1111.                                    DATA                               1-26
  1112.  
  1113.           charst    $c1b1     gET A CHARACTER'S STATS                 1-13
  1114.  
  1115.           blkfl2    $c1b4     mEMORY BLOCK FILL WITH INLINE DATA      1-11
  1116.  
  1117.           intbm2    $c1b7     iNTELLIGENT MEMORY BLOCK MOVE WITH
  1118.  
  1119.                                    INLINE DATA                        1-34
  1120.  
  1121.           input     $c1ba     rEAD A LINE OF TEXT FROM THE USER       1-33
  1122.  
  1123.           cmenus    $c1bd     cLOSE ALL MENU LEVELS                   1-16
  1124.  
  1125.           makcur    $c1c0     cREATE THE TEXT CURSOR SPRITE           1-41
  1126.  
  1127.           main      $c1c3     geos'S MAIN LOOP                        1-40
  1128.  
  1129.           copysp    $c1c6     cOPY  A SPRITE DATA BLOCK               1-18
  1130.  
  1131.           cwidth    $c1c9     gET A CHARACTER'S WIDTH                 1-19
  1132.  
  1133.           font      $c1cc     mAKE A MEMORY RESIDENT FONT THE
  1134.  
  1135.                                    CURRENT FONT                       1-28
  1136.  
  1137.           posspr    $c1cf     pOSITION A SPRITE                       1-47
  1138.  
  1139.           spron     $c1d2     tURN ON A SPRITE                        1-52
  1140.  
  1141.           sproff    $c1d5     tURN OFF A SPRITE                       1-52
  1142.  
  1143.           indjmp    $c1d8     pERFORM AN INDIRECT JUMP                1-32
  1144.  
  1145.           numblk    $c1db     cOMPUTE NUMBER OF FREE BLOCKS ON
  1146.  
  1147.                                    DISK                               1-44
  1148.  
  1149.           geosck    $c1de     cHECK IF A DISK IS geos FORMAT          1-29
  1150.  
  1151.           initdv    $c1e1     iNITIALIZE A DRIVE                      1-32
  1152.  
  1153.           read      $c1e4     rEAD A SECTOR                           1-48
  1154.  
  1155.           write     $c1e7     wRITE A SECTOR                          1-62
  1156.  
  1157.           convrt    $c1ea     cONVERT A DISK TO geos FORMAT           1-16
  1158.  
  1159.           save      $c1ed     sAVE MEMORY TO A FILE                   1-51
  1160.  
  1161.           dirdsk    $c1f0     cREATE A DIRECTORY ENTRY ON DISK        1-21
  1162.  
  1163.           dirmem    $c1f3     cREATE A DIRECTORY ENTRY IN MEMORY      1-21
  1164.  
  1165.           hole      $c1f6     fIND A HOLE IN THE DIRECTORY            1-32
  1166.  
  1167.           save2     $c1f9     sAVE MEMORY TO PREALLOCATED SECTORS     1-51
  1168.  
  1169.           falloc    $c1fc     aLLOCATE SECTORS FOR A FILE             1-27
  1170.  
  1171.           lchain    $c1ff     lOAD A CHAIN INTO MEMORY, GIVEN THE
  1172.  
  1173.                                    INITIAL TRACK AND SECTOR           1-36
  1174.  
  1175.           drawch    $c202     dRAW A CHARACTER ON THE SCREEN          1-23
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.           geos kERNAL rOUTINES                                      1-7
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.           trace     $c205     cREATE A LIST OF SECTORS USED BY A
  1202.  
  1203.                                    FILE                               1-55
  1204.  
  1205.           load      $c208     lOAD A FILE, GIVEN A FILE NAME          1-37
  1206.  
  1207.           lookup    $c20b     lOOKUP A FILE IN THE DIRECTORY          1-40
  1208.  
  1209.           decode    $c20e     cOMPUTE THE CHECKSUM OF A MEMORY
  1210.  
  1211.                                    REGION                             1-20
  1212.  
  1213.           load2     $c211     lOAD A FILE, GIVEN A DIRECTORY ENTRY    1-38
  1214.  
  1215.           dsetup    $c214     sETUP A DRIVE WITH TURBODOS             1-24
  1216.  
  1217.           loadsw    $c217     lOAD A FILE WITH MEMORY SWAPPING        1-39
  1218.  
  1219.           read2     $c21a     rEAD A SECTOR WITH DRIVE PRESET         1-48
  1220.  
  1221.           load3     $c21d     lOAD AND RUN A FILE, GIVEN A
  1222.  
  1223.                                    DIRECTORY ENTRY                    1-38
  1224.  
  1225.           write2    $c220     wRITE A SECTOR WITH DRIVE PRESET        1-62
  1226.  
  1227.           cwrite    $c223     vERIFY BEFORE WRITING SECTOR            1-19
  1228.  
  1229.           free      $c226     fREE A FILE'S SECTORS                   1-29
  1230.  
  1231.           loadad    $c229     gET A FILE'S LOAD ADDRESS               1-39
  1232.  
  1233.           restrt    $c22c     lOAD AND RUN desktop                    1-49
  1234.  
  1235.           run       $c22f     rUN A PROGRAM THAT IS IN MEMORY         1-50
  1236.  
  1237.           clrrdy    $c232     sTOP TURBODOS IN A DRIVE                1-14
  1238.  
  1239.           clrsts    $c235     sTOP AND REMOVE TURBODOS IN A DRIVE     1-15
  1240.  
  1241.           delete    $c238     dELETE A FILE                           1-20
  1242.  
  1243.           table     $c23b     cREATE A TABLE OF FILE NAMES            1-54
  1244.  
  1245.           ldswap    $c23e     lOAD THE swapfile                       1-36
  1246.  
  1247.           basic     $c241     rESTART basic                           1-10
  1248.  
  1249.           delet2    $c244     dELETE A TEMPORARY FILE                 1-20
  1250.  
  1251.           rd180     $c247     rEAD TRACK 18 SECTOR 0                  1-47
  1252.  
  1253.           wr180     $c24a     wRITE TO TRACK 18 SECTOR 0              1-62
  1254.  
  1255.           faloc2    $c24d     aLLOCATE SECTORS FOR A FILE             1-28
  1256.  
  1257.           copyb3    $c250     cOPY A BOX FROM SCREEN 2 TO SCREEN 1    1-17
  1258.  
  1259.           copyb4    $c253     cOPY A BOX FROM SCREEN 2 TO SCREEN 1
  1260.  
  1261.                                    WITH INLINE DATA                   1-17
  1262.  
  1263.           window    $c256     wINDOW PROCESSOR                        1-60
  1264.  
  1265.           rename    $c259     rENAME A FILE                           1-49
  1266.  
  1267.           opnser    $c25c     oPEN SERIAL COMMUNICATION               1-45
  1268.  
  1269.           clsser    $c25f     cLOSE SERIAL COMMUNICATION              1-15
  1270.  
  1271.           mlsr      $c262     mULTIPLE 16 BIT LOGICAL SHIFT RIGHT     1-43
  1272.  
  1273.           strcpy    $c265     sTRING COPY                             1-53
  1274.  
  1275.           blkmov    $c268     mEMORY BLOCK MOVE                       1-11
  1276.  
  1277.           strcmp    $c26b     sTRING COMPARE                          1-53
  1278.  
  1279.           blkcmp    $c26e     mEMORY BLOCK COMPARISON                 1-10
  1280.  
  1281.           init01    $c271     iNITIALIZE geos VARIABLES               1-32
  1282.  
  1283.           vopen     $c274     oPEN A vlir FILE                        1-58
  1284.  
  1285.           vclose    $c277     cLOSE A vlir FILE                       1-57
  1286.  
  1287.           next      $c27a     mOVE TO NEXT vlir CHAIN                 1-44
  1288.  
  1289.           prev      $c27d     mOVE TO PREVIOUS vlir CHAIN             1-47
  1290.  
  1291.           goto      $c280     gOTO A SPECIFIC vlir CHAIN              1-30
  1292.  
  1293.           remove    $c283     rEMOVE A vlir CHAIN                     1-49
  1294.  
  1295.           insert    $c286     iNSERT A vlir CHAIN                     1-34
  1296.  
  1297.           append    $c289     aDD A vlir CHAIN                        1-9
  1298.  
  1299.           vload     $c28c     lOAD A vlir CHAIN                       1-58
  1300.  
  1301.           vsave     $c28f     sAVE MEMORY TO A vlir CHAIN             1-59
  1302.  
  1303.           alloc     $c292     fIND AND ALLOCATE A DISK BLOCK          1-9
  1304.  
  1305.           update    $c295     uPDATE A vlir FILE                      1-57
  1306.  
  1307.           drvnam    $c298     cOMPUTE ADDRESS OF DISK'S NAME          1-23
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.           geos kERNAL rOUTINES                                      1-8
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.           curson    $c29b     tURN ON THE TEXT CURSOR                 1-18
  1334.  
  1335.           cursof    $c29e     tURN OFF THE TEXT CURSOR                1-18
  1336.  
  1337.           opndsk    $c2a1     oPEN A DISK                             1-44
  1338.  
  1339.           tbljmp    $c2a4     pERFORM A JUMP THROUGH A TABLE          1-54
  1340.  
  1341.           getin     $c2a7     rEAD A CHARACTER FROM THE KEYBOARD      1-30
  1342.  
  1343.           draw      $c2aa     dRAW A CODED IMAGE                      1-22
  1344.  
  1345.           inuse     $c2ad     cHECK IF A DISK SECTOR IS IN USE        1-35
  1346.  
  1347.           drvset    $c2b0     sELECT A DRIVE                          1-23
  1348.  
  1349.           ckmous    $c2b3     cHECK IF MOUSE IS INSIDE A WINDOW       1-14
  1350.  
  1351.           getbyt    $c2b6     gET A BYTE FROM A FILE                  1-29
  1352.  
  1353.           chgdrv    $c2bc     cHANGE DISK DRIVE DEVICE NUMBER         1-14
  1354.  
  1355.           clswin    $c2bf     cLOSE A WINDOW                          1-15
  1356.  
  1357.           syserr    $c2c2     rEPORT SYSTEM ERROR                     1-54
  1358.  
  1359.           draw2     $c2c5     dRAW A CODED IMAGE WITH USER PATCHES    1-22
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.           geos kERNAL rOUTINES                                      1-9
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.           fUNCTION nAME: abs16
  1466.  
  1467.           pURPOSE: 16 BIT ABSOLUTE VALUE.
  1468.  
  1469.           cALL ADDRESS: $c16f
  1470.  
  1471.           iNPUT REQUIREMENTS:
  1472.  
  1473.                x         tHE ADDRESS OF THE 16 BIT INTEGER.
  1474.  
  1475.           oUTPUT:
  1476.  
  1477.                x         tHE ADDRESS A POSITIVE 16 BIT INTEGER.
  1478.  
  1479.  
  1480.  
  1481.           dESCRIPTION:  tHIS  ROUTINE IS ONE OF THE geos MATH  ROUTINES.  x
  1482.  
  1483.           POINTS TO A 16 BIT VALUE WHICH IF FOUND TO BE NEGATIVE,  neg16 IS
  1484.  
  1485.           CALLED TO MAKE IT POSITIVE.
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.           fUNCTION nAME: alloc
  1492.  
  1493.           pURPOSE: aLLOCATE A BLOCK ON THE DISK.
  1494.  
  1495.           cALL ADDRESS: $c292
  1496.  
  1497.           iNPUT REQUIREMENTS:
  1498.  
  1499.                $08       tRACK TO START SCANNING FROM.
  1500.  
  1501.                $09       sECTOR TO START SCANNING FROM.
  1502.  
  1503.                $8200-$82ff tRACK 18 SECTOR 0, bam.
  1504.  
  1505.                $849c     sKEW FACTOR (DEFAULT IS 8).
  1506.  
  1507.           oUTPUT:
  1508.  
  1509.                $08       nEW TRACK NUMBER.
  1510.  
  1511.                $09       nEW SECTOR NUMBER.
  1512.  
  1513.           eRRORS: sEE APPENDIX i.
  1514.  
  1515.  
  1516.  
  1517.           dESCRIPTION:  tHIS  ROUTINE  EXPECTS THAT THE bam IS  ALREADY  IN
  1518.  
  1519.           MEMORY.  iT  SCANS  THE  bam STARTING AT  A  SPECIFIED  LOCATION,
  1520.  
  1521.           LOOKING  FOR  A  FREE SECTOR.  iF ONE IS FOUND  IT  IS  RETURNED,
  1522.  
  1523.           OTHERWISE AN ERROR RESULTS.   tHE SECTOR IS ALLOCATED IN THE bam,
  1524.  
  1525.           AND THE bam MUST BE UPDATED TO DISK  AFTERWARDS IN  ORDER FOR THE
  1526.  
  1527.           SECTOR TO REMAIN ALLOCATED.
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.           fUNCTION nAME: append
  1534.  
  1535.           pURPOSE: aPPEND A NEW CHAIN IN A vlir FILE.
  1536.  
  1537.           cALL ADDRESS: $c289
  1538.  
  1539.           iNPUT REQUIREMENTS:
  1540.  
  1541.                $8496     cURRENT CHAIN NUMBER.
  1542.  
  1543.           oUTPUT:
  1544.  
  1545.                $8496     iNCREMENTED BY 1.
  1546.  
  1547.                $8497     iNCREMENTED BY 1.
  1548.  
  1549.           pREPARATORY ROUTINES: vopen
  1550.  
  1551.           eRRORS: sEE APPENDIX i.
  1552.  
  1553.  
  1554.  
  1555.           dESCRIPTION:  a  HOLE IS OPENED UP IN THE vlir SECTOR IMMEDIATELY
  1556.  
  1557.           FOLLOWING  THE CURRENT CHAIN.  tHE HOLE IS FILLED  WITH  $00,$ff.
  1558.  
  1559.           tHIS  REPRESENTS  A  NULL CHAIN.  tHIS HOLE BECOMES  THE  CURRENT
  1560.  
  1561.           CHAIN.
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.           geos kERNAL rOUTINES                                      1-10
  1592.  
  1593.  
  1594.  
  1595.  
  1596.  
  1597.           fUNCTION nAME: basic
  1598.  
  1599.           pURPOSE: rESTART basic WITH OPTIONAL PROGRAM LOAD.
  1600.  
  1601.           cALL ADDRESS: $c241
  1602.  
  1603.           iNPUT REQUIREMENTS:
  1604.  
  1605.                $02-$03   pOINTER TO 40 CHARACTERS OF TEXT.
  1606.  
  1607.                $0c-$0d   pOINTER TO FILE'S DIRECTORY ENTRY.
  1608.  
  1609.                $10-$11   lOAD ADDRESS.
  1610.  
  1611.           pREPARATORY ROUTINES: lookup
  1612.  
  1613.  
  1614.  
  1615.           dESCRIPTION: tHE 40 CHARACTERS POINTED TO BY $02-$03 ARE SAVED IN
  1616.  
  1617.           A BUFFER.  iF $0c-$0d IS NON-ZERO, THE FILE IS LOADED INTO MEMORY
  1618.  
  1619.           AT  THE ADDRESS SPECIFIED BY $10-$11.  basic IS RESTARTED WITH AN
  1620.  
  1621.           INTERRUPT VECTOR. tHIS INTERRUPT IS SET UP TO GIVE basic A CHANCE
  1622.  
  1623.           TO START UP. aFTER THE TIME HAS ELAPSED, THE 40 CHARACTERS IN THE
  1624.  
  1625.           BUFFER  ARE  COPIED  TO  THE SCREEN AND A cr  IS  PLACED  IN  THE
  1626.  
  1627.           KEYBOARD BUFFER.  tHE INTERRUPT VECTOR IS THEN REMOVED,  BUT  THE
  1628.  
  1629.           nmi VECTOR IS SET UP TO REBOOT geos. tHE REBOOT CODE IS AT $c000-
  1630.  
  1631.           $c037.
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.           fUNCTION nAME: blkcmp
  1638.  
  1639.           pURPOSE: cOMPARES TWO BLOCKS OF MEMORY FOR A FIXED LENGTH.
  1640.  
  1641.           cALL ADDRESS: $c26e
  1642.  
  1643.           iNPUT REQUIREMENTS:
  1644.  
  1645.                a         bYTE COUNT.
  1646.  
  1647.                x         aDDRESS OF ZERO PAGE SOURCE POINTER.
  1648.  
  1649.                y         aDDRESS OF ZERO PAGE DESTINATION POINTER.
  1650.  
  1651.           oUTPUT:
  1652.  
  1653.                z FLAG    sET ACCORDINGLY.
  1654.  
  1655.  
  1656.  
  1657.           dESCRIPTION: tHE x AND y REGISTERS POINT TO ZERO PAGE POINTERS. a
  1658.  
  1659.           HAS  THE  NUMBER OF BYTES TO BE COMPARED (1-255).  iF a IS  ZERO,
  1660.  
  1661.           THIS ROUTINE WILL COMPARE UP TO AND INCLUDING A ZERO BYTE.  tHE z
  1662.  
  1663.           FLAG IS SET ACCORDINGLY. sEE strcmp.
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.           fUNCTION nAME: blkfil
  1670.  
  1671.           pURPOSE: fILLS A MEMORY REGION WITH A SPECIFIED BYTE.
  1672.  
  1673.           cALL ADDRESS: $c17b
  1674.  
  1675.           iNPUT REQUIREMENTS:
  1676.  
  1677.                $02-$03   tHE LENGTH OF THE REGION.
  1678.  
  1679.                $04-$05   tHE ADDRESS OF THE REGION.
  1680.  
  1681.                $06       tHE BYTE TO FILL THE REGION WITH.
  1682.  
  1683.  
  1684.  
  1685.           dESCRIPTION: a SIMPLE LOOP FILLS MEMORY WITH THE SPECIFIED BYTE.
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.           geos kERNAL rOUTINES                                      1-11
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.           fUNCTION nAME: blkfl2
  1730.  
  1731.           pURPOSE: iDENTICAL TO blkfil, BUT WITH INLINE DATA.
  1732.  
  1733.           cALL ADDRESS: $c1b4
  1734.  
  1735.  
  1736.  
  1737.           dESCRIPTION:   tHIS  ROUTINE  TAKES  THE  INLINE  DATA  AND  SETS
  1738.  
  1739.           EVERYTHING UP BEFORE CALLING blkfil. fOR EXAMPLE:
  1740.  
  1741.                 jsr blkfl2
  1742.  
  1743.                .word lENGTH OF REGION
  1744.  
  1745.                .word aDDRESS OF REGION
  1746.  
  1747.                .byte bYTE TO FILL MEMORY WITH
  1748.  
  1749.                cONTROL RETURNS HERE UPON COMPLETION.
  1750.  
  1751.  
  1752.  
  1753.  
  1754.  
  1755.           fUNCTION nAME: blkmov
  1756.  
  1757.           pURPOSE: cOPY A BLOCK OF MEMORY.
  1758.  
  1759.           cALL ADDRESS: $c268
  1760.  
  1761.           iNPUT REQUIREMENTS:
  1762.  
  1763.                a         bYTE COUNT.
  1764.  
  1765.                x         aDDRESS OF ZERO PAGE SOURCE POINTER.
  1766.  
  1767.                y         aDDRESS OF ZERO PAGE DESTINATION POINTER.
  1768.  
  1769.  
  1770.  
  1771.           dESCRIPTION:  tHE  x AND y REGISTERS POINT TO ZERO PAGE POINTERS.
  1772.  
  1773.           a  HAS  THE NUMBER OF BYTES TO BE TRANSFERRED (1-255).  iF  a  IS
  1774.  
  1775.           ZERO, THIS ROUTINE WILL COPY UP TO AND INCLUDING A ZERO BYTE. sEE
  1776.  
  1777.           strcpy.
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.           fUNCTION nAME: blkset
  1784.  
  1785.           pURPOSE: uSES A TABLE TO SET VARIOUS MEMORY LOCATIONS IN A
  1786.  
  1787.                    UNIFORM MANNER.
  1788.  
  1789.           cALL ADDRESS: $c181
  1790.  
  1791.           iNPUT REQUIREMENTS:
  1792.  
  1793.                $02-$03   aDDRESS OF A DATA TABLE.
  1794.  
  1795.  
  1796.  
  1797.           dESCRIPTION:  tHIS  ROUTINE  ALLOWS MANY MEMORY LOCATIONS  TO  BE
  1798.  
  1799.           SPECIFIED  AND SET IN AN ORDERLY MANNER.  tHE FORMAT OF THE  DATA
  1800.  
  1801.           TABLE IS AS FOLLOWS:
  1802.  
  1803.                #BYTES    dESCRIPTION
  1804.  
  1805.                   2      aDDRESS TO STORE VALUES AT.
  1806.  
  1807.                   1      # OF VALUES THAT FOLLOW.
  1808.  
  1809.                   ?      vALUES TO BE STORED AT THE DESIGNATED MEMORY
  1810.  
  1811.                          REGION.
  1812.  
  1813.                  ...     mORE DEFINITIONS.
  1814.  
  1815.                   2      aN ADDRESS OF $0000 ENDS THE TABLE.
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.           geos kERNAL rOUTINES                                      1-12
  1856.  
  1857.  
  1858.  
  1859.  
  1860.  
  1861.           fUNCTION nAME: cbox
  1862.  
  1863.           pURPOSE: dRAWS A CLICK BOX ON THE SCREEN.
  1864.  
  1865.           cALL ADDRESS: $c142
  1866.  
  1867.           iNPUT REQUIREMENTS:
  1868.  
  1869.                $02-$03   pOINTER TO THE GRAPHIC DATA.
  1870.  
  1871.                $04       cOLUMN IN CHARACTERS.
  1872.  
  1873.                $05       tHE ROW IN PIXELS.
  1874.  
  1875.                $06       tHE WIDTH IN BYTES.
  1876.  
  1877.                $07       tHE HEIGHT IN PIXELS.
  1878.  
  1879.  
  1880.  
  1881.           dESCRIPTION:  tHIS  ROUTINE  DRAWS A CLICK BOX ON THE  SCREEN.  a
  1882.  
  1883.           CLICK BOX IS A BOX LIKE oK,  oPEN, ETC. tHESE BOXES ARE GENERALLY
  1884.  
  1885.           PART  OF  A WINDOW DESCRIPTION.  tHE GRAPHIC DATA IS IN  A  CODED
  1886.  
  1887.           FORMAT. tHIS FORMAT CONSISTS OF A CODE BYTE FOLLOWED BY 1 OR MORE
  1888.  
  1889.           DATA BYTES.
  1890.  
  1891.                1) cODE BYTES LESS THAN 128 MEAN  THAT THE FOLLOWING BYTE IS
  1892.  
  1893.                   TO BE REPEATED THAT MANY TIMES.
  1894.  
  1895.                2) cODE  BYTES  RANGING FROM 128 TO 219 MEAN THAT IF 128  IS
  1896.  
  1897.                   SUBTRACTED  FROM  THE CODE BYTE, THEN THE  RESULT IS  THE
  1898.  
  1899.                   NUMBER OF DATA BYTES THAT FOLLOW.
  1900.  
  1901.                3) cODE BYTES RANGING FROM 220 TO 225 ARE SPECIAL. fIRST 219
  1902.  
  1903.                   IS  SUBTRACTED  FROM  THE CODE BYTE,  THE RESULT  IS  THE
  1904.  
  1905.                   NUMBER OF BYTES IN THE PATTERN.  fOLLOWING THIS CODE BYTE
  1906.  
  1907.                   IS A REPETITION COUNT FOR THE PATTERN. fOLLOWING THIS ARE
  1908.  
  1909.                   THE  BYTES  THAT  CONSTITUTE  THE  PATTERN.  tHESE  COULD
  1910.  
  1911.                   INCLUDE EITHER OF THE PREVIOUS TWO CODE TYPES.
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.           fUNCTION nAME: cbox2
  1918.  
  1919.           pURPOSE: iDENTICAL TO cbox, BUT WITH INLINE DATA.
  1920.  
  1921.           cALL ADDRESS: $c1ab
  1922.  
  1923.  
  1924.  
  1925.           dESCRIPTION:  tHIS  ROUTINE  TAKES  A CLICK BOX  DESCRIPTOR  FROM
  1926.  
  1927.           INLINE  DATA AND DRAWS IT.  tHE INLINE DATA DOES not INCLUDE  THE
  1928.  
  1929.           PROCESSING VECTOR, IE.
  1930.  
  1931.                 jsr drwcb2
  1932.  
  1933.                .word ADDRESS OF GRAPHIC IMAGE
  1934.  
  1935.                .byte START COLUMN IN BYTES
  1936.  
  1937.                .byte START MARGIN IN PIXELS
  1938.  
  1939.                .byte WIDTH OF BOX IN BYTES
  1940.  
  1941.                .byte HEIGHT OF BOX IN PIXELS
  1942.  
  1943.                cONTROL RETURNS HERE AFTER THE BOX IS DRAWN.
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986.  
  1987.           geos kERNAL rOUTINES                                      1-13
  1988.  
  1989.  
  1990.  
  1991.  
  1992.  
  1993.           fUNCTION nAME: cboxes
  1994.  
  1995.           pURPOSE: dRAWS ALL OF THE CLICK BOXES IN A TABLE.
  1996.  
  1997.           cALL ADDRESS: $c15a
  1998.  
  1999.           iNPUT REQUIREMENTS:
  2000.  
  2001.                $02-$03   pOINTER TO A CLICK BOX TABLE (uSUALLY $880c).
  2002.  
  2003.           pREPARATORY ROUTINES: window (OPTIONAL).
  2004.  
  2005.  
  2006.  
  2007.           dESCRIPTION: tHIS ROUTINE DRAWS ALL OF THE CLICK BOXES BY CALLING
  2008.  
  2009.           cbox  REPEATEDLY  UNTIL THE TABLE IS  EXHAUSTED.  tHE  initms  IS
  2010.  
  2011.           CALLED  TO  SET  THE MOUSE'S POSITION.  cLICK TABLE FORMAT:
  2012.  
  2013.                #BYTES    dESCRIPTION
  2014.  
  2015.                   1      # CLICK BOXES IN TABLE.
  2016.  
  2017.                   2      cOLUMN TO PLACE MOUSE IN (0 WILL PREVENT
  2018.  
  2019.                          PLACEMENT).
  2020.  
  2021.                   1      rOW TO PLACE MOUSE IN.
  2022.  
  2023.           tHIS IS FOLLOWED BY SETS OF 8 BYTES, ONE FOR EACH CLICK BOX.
  2024.  
  2025.                   2       aDDRESS OF GRAPHIC DATA.
  2026.  
  2027.                   1       cOLUMN POSITION OF BOX IN CHARACTERS.
  2028.  
  2029.                   1       rOW POSITION OF BOX IN PIXELS.
  2030.  
  2031.                   1       wIDTH OF BOX IN BYTES.
  2032.  
  2033.                   1       hEIGHT OF BOX IN PIXELS.
  2034.  
  2035.                   2       aDDRESS OF ROUTINE TO PROCESS THIS BOX.
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.           fUNCTION nAME: charst
  2042.  
  2043.           pURPOSE: gET STATISTICS FOR A CHARACTER.
  2044.  
  2045.           cALL ADDRESS: $c1b1
  2046.  
  2047.           iNPUT REQUIREMENTS:
  2048.  
  2049.                a         tHE CHARACTER.
  2050.  
  2051.           oUTPUT:
  2052.  
  2053.                a         tHE POSITION OF THE UNDERLINE.
  2054.  
  2055.                y         tHE CHARACTER'S WIDTH.
  2056.  
  2057.                x         tHE CHARACTER'S HEIGHT.
  2058.  
  2059.  
  2060.  
  2061.           dESCRIPTION:  gIVEN THE ascii VALUE OF A CHARACTER,  THIS ROUTINE
  2062.  
  2063.           COMPUTES AND RETURNS THE HEIGHT AND WIDTH, TAKING THE STYLE  INTO
  2064.  
  2065.           ACCOUNT. tHE # PIXELS ABOVE THE UNDERLINE FOR THE PRESENT FONT IS
  2066.  
  2067.           ALSO RETURNED.
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.  
  2083.  
  2084.  
  2085.  
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.           geos kERNAL rOUTINES                                      1-14
  2120.  
  2121.  
  2122.  
  2123.  
  2124.  
  2125.           fUNCTION nAME: chgdrv
  2126.  
  2127.           pURPOSE: cHANGE THE DEVICE NUMBER OF A DRIVE.
  2128.  
  2129.           cALL ADDRESS: $c2bc
  2130.  
  2131.           iNPUT REQUIREMENTS:
  2132.  
  2133.                a         nEW DEVICE NUMBER FOR DRIVE.
  2134.  
  2135.                $8489     cURRENT DRIVE NUMBER.
  2136.  
  2137.           oUTPUT:
  2138.  
  2139.                $ba       nEW DEVICE NUMBER.
  2140.  
  2141.                $8489     nEW DEVICE NUMBER.
  2142.  
  2143.                $8492-$8495 aPPROPRIATE BYTES ARE RESET AND SET.
  2144.  
  2145.           eRRORS: sEE APPENDIX i.
  2146.  
  2147.  
  2148.  
  2149.           dESCRIPTION: tHE CURRENT DRIVE IS MADE READY, THEN THE NEW DEVICE
  2150.  
  2151.           NUMBER IS SENT TO TURBODOS WHICH WILL CHANGE IT.  tHIS RESULTS IN
  2152.  
  2153.           THE  DRIVE BEING SET AS THE CURRENT DRIVE BUT WITH A  NEW  DEVICE
  2154.  
  2155.           NUMBER,  AND  WITH TURBODOS UP AND RUNNING.  tHE STATUS BYTES  AT
  2156.  
  2157.           $8492-$8495 ARE CHANGED, THE OLD ONE IS RESET AND THE NEW ONE HAS
  2158.  
  2159.           BITS 6 AND 7 SET.
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.           fUNCTION nAME: ckmous
  2166.  
  2167.           pURPOSE: cHECK IF THE MOUSE IS IN A BOX.
  2168.  
  2169.           cALL ADDRESS: $c2b3
  2170.  
  2171.           iNPUT REQUIREMENTS:
  2172.  
  2173.                $06       tOP MARGIN.
  2174.  
  2175.                $07       bOTTOM MARGIN.
  2176.  
  2177.                $08-$09   lEFT MARGIN.
  2178.  
  2179.                $0a-$0b   rIGHT MARGIN.
  2180.  
  2181.           oUTPUT:
  2182.  
  2183.                a         $00 - OUTSIDE BOX, $ff - INSIDE BOX.
  2184.  
  2185.  
  2186.  
  2187.           dESCRIPTION:  tHIS  ROUTINE  SIMPLY  COMPARES THE  PRESENT  MOUSE
  2188.  
  2189.           LOCATION   STORED   AT  LOCATIONS  $3a-$3c  AGAINST   THE   BOX'S
  2190.  
  2191.           BOUNDARIES. a IS SET TO $00 IF THE MOUSE IS OUTSIDE, $ff IF IT IS
  2192.  
  2193.           INSIDE.
  2194.  
  2195.  
  2196.  
  2197.  
  2198.  
  2199.           fUNCTION nAME: clrrdy
  2200.  
  2201.           pURPOSE: tURN OFF TURBODOS.
  2202.  
  2203.           cALL ADDRESS: $c232
  2204.  
  2205.           iNPUT REQUIREMENTS:
  2206.  
  2207.                $8489     cURRENT DRIVE NUMBER.
  2208.  
  2209.  
  2210.  
  2211.           dESCRIPTION: tURBODOS IS TERMINATED IN THE CURRENT DRIVE.
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231.  
  2232.  
  2233.  
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.           geos kERNAL rOUTINES                                      1-15
  2252.  
  2253.  
  2254.  
  2255.  
  2256.  
  2257.           fUNCTION nAME: clrsts
  2258.  
  2259.           pURPOSE: cLEAR THE DRIVE READY STATUS.
  2260.  
  2261.           cALL ADDRESS: $c235
  2262.  
  2263.           iNPUT REQUIREMENTS:
  2264.  
  2265.                $8489     cURRENT DRIVE NUMBER.
  2266.  
  2267.           oUTPUT:
  2268.  
  2269.                aPPROPRIATE STATUS BYTE IS RESET.
  2270.  
  2271.  
  2272.  
  2273.           dESCRIPTION:  tHIS  ROUTINE  TERMINATES TURBODOS IN  THE  CURRENT
  2274.  
  2275.           DRIVE, AND RESETS THE DRIVE STATUS BYTE AT $8492-$8495.
  2276.  
  2277.  
  2278.  
  2279.  
  2280.  
  2281.           fUNCTION nAME: clsmnu
  2282.  
  2283.           pURPOSE: bACKS UP A MENU LEVEL.
  2284.  
  2285.           cALL ADDRESS: $c190
  2286.  
  2287.  
  2288.  
  2289.           dESCRIPTION:  tHIS ROUTINE ERASES THE PRESENT MENU, AND POPS BACK
  2290.  
  2291.           ONE LEVEL.
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.           fUNCTION nAME: clsser
  2298.  
  2299.           pURPOSE: cLOSE OFF SERIAL COMMUNICATION.
  2300.  
  2301.           cALL ADDRESS: $c25f
  2302.  
  2303.           eRRORS: sEE APPENDIX i.
  2304.  
  2305.  
  2306.  
  2307.           dESCRIPTION:  tHIS  ROUTINE  RESETS THE i/o  PORTS  AFTER  SERIAL
  2308.  
  2309.           COMMUNICATION IS COMPLETE. tHIS ROUTINE IS CALLED AFTER CALLS  TO
  2310.  
  2311.           read2, write2 OR cwrite.
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  
  2317.           fUNCTION nAME: clswin
  2318.  
  2319.           pURPOSE: cLOSE A WINDOW.
  2320.  
  2321.           cALL ADDRESS: $c2bf
  2322.  
  2323.           oUTPUT:
  2324.  
  2325.                $02       cOMMAND BYTE FROM WINDOW PROCESSOR.
  2326.  
  2327.                $851d     cOMMAND BYTE FROM WINDOW PROCESSOR.
  2328.  
  2329.  
  2330.  
  2331.           dESCRIPTION:  tHE  WINDOW IS ERASED AND THE MEMORY ADDRESSES THAT
  2332.  
  2333.           THE WINDOW PROCESSOR SAVED ARE RESTORED.  cONTROL RETURNS TO  THE
  2334.  
  2335.           CALLER OF window.
  2336.  
  2337.  
  2338.  
  2339.  
  2340.  
  2341.  
  2342.  
  2343.  
  2344.  
  2345.  
  2346.  
  2347.  
  2348.  
  2349.  
  2350.  
  2351.  
  2352.  
  2353.  
  2354.  
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.           geos kERNAL rOUTINES                                      1-16
  2384.  
  2385.  
  2386.  
  2387.  
  2388.  
  2389.           fUNCTION nAME: cmdtbl
  2390.  
  2391.           pURPOSE: sETS UP A TABLE OF RECURRING TIMED EVENTS.
  2392.  
  2393.           cALL ADDRESS: $c103
  2394.  
  2395.           iNPUT REQUIREMENTS:
  2396.  
  2397.                a         tHE NUMBER OF ENTRIES IN THE TABLE.
  2398.  
  2399.                $02-$03   a POINTER TO THE TABLE OF COUNTERS AND ROUTINE
  2400.  
  2401.                          ADDRESSES.
  2402.  
  2403.  
  2404.  
  2405.           dESCRIPTION:  tHIS ROUTINE COPIES A TABLE OF SUBROUTINE ADDRESSES
  2406.  
  2407.           AND  COUNTER  VALUES INTO geos'S TABLES AT $872d AND  $8755.  tHE
  2408.  
  2409.           COUNTERS  WILL BE DECREMENTED ON EACH CALL TO irqrtn.  wHEN  THEY
  2410.  
  2411.           REACH ZERO,  THEY ARE RESET AND THE ASSOCIATED ROUTINE IS  CALLED
  2412.  
  2413.           BY  THE  geos MAIN LOOP.  tHE COMMAND BYTES ARE INITIALLY SET  TO
  2414.  
  2415.           DISABLE THE COUNTERS. sEVERAL CALLS TO enable ARE NEEDED TO START
  2416.  
  2417.           THE COUNTERS RUNNING,  ONE FOR EACH ENTRY IN THE TABLE. tHE TABLE
  2418.  
  2419.           CONSISTS  OF  PAIRS OF WORDS.  tHE FIRST IS THE  ADDRESS  OF  THE
  2420.  
  2421.           SUBROUTINE  TO BE EXECUTED EACH TIME THE COUNTER REACHES ZERO AND
  2422.  
  2423.           THE  SECOND  IS  THE  COUNTER VALUE .  tHIS  APPEARS  TO  BE  THE
  2424.  
  2425.           RUDIMENTS  OF MULTITASKING geos.  tHE TABLE OF COMMAND  BYTES  AT
  2426.  
  2427.           $8719  ARE  BIT  ORIENTED AND OPERATE ACCORDING TO  THE FOLLOWING
  2428.  
  2429.           TABLE:
  2430.  
  2431.                bIT 7 - tIMER REACHED ZERO, CALL THE SUBROUTINE.
  2432.  
  2433.                bIT 6 - dISABLE THE EXECUTION OF THE ROUTINE.  tHIS DOES not
  2434.  
  2435.                        AFFECT THE COUNTER.
  2436.  
  2437.                bIT 5 - iNITIALLY SET BY cmdtbl,  CAUSES THE COUNTER TO STOP
  2438.  
  2439.                        RUNNING.
  2440.  
  2441.                bIT 4 - tHOUGH  NOT REFERENCED ANYWHERE IN THE geos  kERNAL,
  2442.  
  2443.                        THIS  BIT ALSO STOPS THE COUNTER.  tHIS BIT  IS  not
  2444.  
  2445.                        TOUCHED  BY  ANY  OF THE  geos  ROUTINES,  INCLUDING
  2446.  
  2447.                        enable.
  2448.  
  2449.  
  2450.  
  2451.  
  2452.  
  2453.           fUNCTION nAME: cmenus
  2454.  
  2455.           pURPOSE: cLOSES ALL MENU LEVELS.
  2456.  
  2457.           cALL ADDRESS: $c1bd
  2458.  
  2459.           pREPARATORY ROUTINES: menu
  2460.  
  2461.  
  2462.  
  2463.           dESCRIPTION:  tHIS ROUTINE IS NOT THE SAME eramns.  tHE MENUS ARE
  2464.  
  2465.           CLEARED  ONE AT A TIME AND THE PREVIOUS LEVELS ARE REPROCESSED IN
  2466.  
  2467.           REVERSE ORDER UNTIL ALL MENUS ARE CLOSED.
  2468.  
  2469.  
  2470.  
  2471.  
  2472.  
  2473.           fUNCTION nAME: convrt
  2474.  
  2475.           pURPOSE: cONVERTS A DISK TO geos FORMAT.
  2476.  
  2477.           cALL ADDRESS: $c1ea
  2478.  
  2479.           eRRORS: sEE APPENDIX
  2480.  
  2481.  
  2482.  
  2483.           dESCRIPTION:  tHIS  ROUTINE  MODIFIES  THE  DIRECTORY  HEADER  TO
  2484.  
  2485.           INCLUDE THE geos FORMAT MESSAGE. iT ALSO ALLOCATES A SECTOR TO BE
  2486.  
  2487.           USED FOR THE BORDER FROM desktop.
  2488.  
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  
  2496.  
  2497.  
  2498.  
  2499.  
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.  
  2513.  
  2514.  
  2515.           geos kERNAL rOUTINES                                      1-17
  2516.  
  2517.  
  2518.  
  2519.  
  2520.  
  2521.           fUNCTION nAME: copyb
  2522.  
  2523.           pURPOSE: cOPIES A BOX FROM SCREEN 2 TO SCREEN 1.
  2524.  
  2525.           cALL ADDRESS: $c12d
  2526.  
  2527.           iNPUT REQUIREMENTS:
  2528.  
  2529.                $06       tHE TOP MARGIN.
  2530.  
  2531.                $07       tHE BOTTOM MARGIN.
  2532.  
  2533.                $08-$09   tHE LEFT MARGIN.
  2534.  
  2535.                $0a-$0b   tHE RIGHT MARGIN.
  2536.  
  2537.  
  2538.  
  2539.           dESCRIPTION:  tHIS  ROUTINE COPIES A BOX FROM SCREEN 2 ($6000) TO
  2540.  
  2541.           SCREEN 1 ($a000).  lOCATION $2f IS UNAFFECTED. tHIS ROUTINE CALLS
  2542.  
  2543.           copyl REPEATEDLY TO COPY EACH LINE OF THE BOX.
  2544.  
  2545.  
  2546.  
  2547.  
  2548.  
  2549.           fUNCTION nAME: copyb2
  2550.  
  2551.           pURPOSE: iDENTICAL TO copyb, BUT WITH INLINE DATA.
  2552.  
  2553.           cALL ADDRESS: $c1a5
  2554.  
  2555.  
  2556.  
  2557.           dESCRIPTION:  tHIS  ROUTINE COPIES A BOX FROM SCREEN 2 ($6000) TO
  2558.  
  2559.           SCREEN 1 ($a000).  tHE BOX DESCRIPTOR IS INLINE WITH THE  CALLING
  2560.  
  2561.           CODE.  sEE pfill2 FOR AN EXAMPLE.
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.           fUNCTION nAME: copyb3
  2568.  
  2569.           pURPOSE: cOPIES A BOX FROM SCREEN 2 TO SCREEN 1.
  2570.  
  2571.           cALL ADDRESS: $c250
  2572.  
  2573.           iNPUT REQUIREMENTS:
  2574.  
  2575.                $06       tHE TOP MARGIN.
  2576.  
  2577.                $07       tHE BOTTOM MARGIN.
  2578.  
  2579.                $08-$09   tHE LEFT MARGIN.
  2580.  
  2581.                $0a-$0b   tHE RIGHT MARGIN.
  2582.  
  2583.  
  2584.  
  2585.           dESCRIPTION:  tHIS  ROUTINE COPIES A BOX FROM SCREEN 1 ($a000) TO
  2586.  
  2587.           SCREEN 2 ($6000).  lOCATION $2f IS UNAFFECTED. tHIS ROUTINE CALLS
  2588.  
  2589.           copyl REPEATEDLY TO COPY EACH LINE OF THE BOX.
  2590.  
  2591.  
  2592.  
  2593.  
  2594.  
  2595.           fUNCTION nAME: copyb4
  2596.  
  2597.           pURPOSE: iDENTICAL TO copyb3, BUT WITH INLINE DATA.
  2598.  
  2599.           cALL ADDRESS: $c253
  2600.  
  2601.  
  2602.  
  2603.           dESCRIPTION:  tHIS  ROUTINE COPIES A BOX FROM SCREEN 1 ($a000) TO
  2604.  
  2605.           SCREEN 2 ($6000).  tHE BOX DESCRIPTOR IS INLINE WITH THE  CALLING
  2606.  
  2607.           CODE.  sEE pfill2 FOR AN EXAMPLE.
  2608.  
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.  
  2618.  
  2619.  
  2620.  
  2621.  
  2622.  
  2623.  
  2624.  
  2625.  
  2626.  
  2627.  
  2628.  
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  
  2634.  
  2635.  
  2636.  
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.  
  2645.  
  2646.  
  2647.           geos kERNAL rOUTINES                                      1-18
  2648.  
  2649.  
  2650.  
  2651.  
  2652.  
  2653.           fUNCTION nAME: copyl
  2654.  
  2655.           pURPOSE: cOPIES A HORIZONAL LINE FROM SCREEN 2 TO SCREEN 1.
  2656.  
  2657.           cALL ADDRESS: $c11e
  2658.  
  2659.           iNPUT REQUIREMENTS:
  2660.  
  2661.                $08-$09   tHE LEFT MARGIN.
  2662.  
  2663.                $0a-$0b   tHE RIGHT MARGIN.
  2664.  
  2665.                $18       tHE ROW NUMBER.
  2666.  
  2667.  
  2668.  
  2669.           dESCRIPTION:  tHIS ROUTINE COPIES A HORIZONTAL LINE FROM SCREEN 2
  2670.  
  2671.           ($6000) TO SCREEN 1 ($a000). lOCATION $2f IS UNAFFECTED.
  2672.  
  2673.  
  2674.  
  2675.  
  2676.  
  2677.           fUNCTION nAME: copysp
  2678.  
  2679.           pURPOSE: cOPIES A SPRITE INTO geos'S STORAGE AREA.
  2680.  
  2681.           cALL ADDRESS: $c1c6
  2682.  
  2683.           iNPUT REQUIREMENTS:
  2684.  
  2685.                $08       tHE SPRITE NUMBER (0-7).
  2686.  
  2687.                $0a-$0b   pOINTER TO THE SPRITE DATA.
  2688.  
  2689.  
  2690.  
  2691.           dESCRIPTION:  tHIS ROUTINE SIMPLY COPIES 63 BYTES OF DATA POINTED
  2692.  
  2693.           TO  BY  $0a-$0b TO THE SPECIFIED SPRITE BLOCK.  geos USES  SPRITE
  2694.  
  2695.           BLOCKS 40 TO 47.
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.           fUNCTION nAME: cursof
  2702.  
  2703.           pURPOSE: tURN OFF TEXT CURSOR.
  2704.  
  2705.           cALL ADDRESS: $c29e
  2706.  
  2707.           oUTPUT:
  2708.  
  2709.                $84b4     bIT 6 IS CLEARED.
  2710.  
  2711.           pREPARATORY ROUTINES: curson
  2712.  
  2713.  
  2714.  
  2715.           dESCRIPTION:  sPRITE 1 (geos'S TEXT CURSOR) IS TURNED OFF,  BIT 6
  2716.  
  2717.           OF LOCATION $84b4 IS RESET. tHE BLINK RATE IS SET TO 60 (ONCE PER
  2718.  
  2719.           SECOND).
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.           fUNCTION nAME: curson
  2726.  
  2727.           pURPOSE: tURN ON TEXT CURSOR.
  2728.  
  2729.           cALL ADDRESS: $c29b
  2730.  
  2731.           iNPUT REQUIREMENTS:
  2732.  
  2733.                $84be-$84bf cOLUMN TO PLACE CURSOR IN.
  2734.  
  2735.                $84c0     rOW TO PLACE CURSOR ON.
  2736.  
  2737.           oUTPUT:
  2738.  
  2739.                $84b4     bIT 6 IS SET.
  2740.  
  2741.  
  2742.  
  2743.           dESCRIPTION: tURNS ON SPRITE 1 AND POSITIONS IT. iT ALSO SETS BIT
  2744.  
  2745.           6  OF  LOCATION  $84b4.  tHE BLINK RATE IS SET TO  60,  ONCE  PER
  2746.  
  2747.           SECOND. sPRITE 1 IS THE TEXT CURSOR FOR geos.
  2748.  
  2749.  
  2750.  
  2751.  
  2752.  
  2753.  
  2754.  
  2755.  
  2756.  
  2757.  
  2758.  
  2759.  
  2760.  
  2761.  
  2762.  
  2763.  
  2764.  
  2765.  
  2766.  
  2767.  
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.  
  2777.  
  2778.  
  2779.           geos kERNAL rOUTINES                                      1-19
  2780.  
  2781.  
  2782.  
  2783.  
  2784.  
  2785.           fUNCTION nAME: cwidth
  2786.  
  2787.           pURPOSE: rETURNS THE WIDTH OF A CHARACTER.
  2788.  
  2789.           cALL ADDRESS: $c1c9
  2790.  
  2791.           iNPUT REQUIREMENTS:
  2792.  
  2793.                a         tHE ascii VALUE OF THE CHARACTER.
  2794.  
  2795.           oUTPUT:
  2796.  
  2797.                a         tHE WIDTH OF THE CHARACTER.
  2798.  
  2799.  
  2800.  
  2801.           dESCRIPTION:  tHIS ROUTINE SIMPLY TAKES THE DIFFERENCE OF THE BIT
  2802.  
  2803.           STREAM INDICES TO GET THE CHARACTERS WIDTH.  tHE DELETE CHARACTER
  2804.  
  2805.           HAS  ITS  WIDTH  LOADED FROM $8807.  tHIS ROUTINE  IS  CALLED  BY
  2806.  
  2807.           charst.
  2808.  
  2809.  
  2810.  
  2811.  
  2812.  
  2813.           fUNCTION nAME: cwrite
  2814.  
  2815.           pURPOSE: cONDITIONALLY WRITE A SECTOR TO DISK.
  2816.  
  2817.           cALL ADDRESS: $c223
  2818.  
  2819.           iNPUT REQUIREMENTS:
  2820.  
  2821.                $04       tRACK NUMBER.
  2822.  
  2823.                $05       sECTOR NUMBER.
  2824.  
  2825.                $0a-$0b   pOINTER TO DATA BUFFER.
  2826.  
  2827.           pREPARATORY ROUTINES: dsetup
  2828.  
  2829.           eRRORS: sEE APPENDIX i.
  2830.  
  2831.  
  2832.  
  2833.           dESCRIPTION: tHE FIRST THING THIS ROUTINE DOES IS TRY TO READ THE
  2834.  
  2835.           DESIRED  SECTOR.  iF THE READ SUCCEEDS,  NOTHING  HAPPENS.  tHREE
  2836.  
  2837.           ATTEMPTS ARE MADE AT THE READ.   aFTER THESE  READ  ATTEMPTS, THE
  2838.  
  2839.           SECTOR IS WRITTEN TO THE DISK, BY  CALLING write2.   iF THE WRITE
  2840.  
  2841.           SUCCEEDED  WITHOUT ANY ERRORS,  THEN THE ROUTINE RESTARTS ITSELF.
  2842.  
  2843.           iT WILL MAKE FIVE ATTEMPTS AT THIS LOOP.  iF AFTER FIVE ATTEMPTS,
  2844.  
  2845.           THE SECTOR CAN NOT BE READ RELIABLY,  AN ERROR 39  RESULTS.  tHIS
  2846.  
  2847.           ROUTINE  IS USUALLY CALLED AFTER THE SECTOR HAS BEEN WRITTEN  OUT
  2848.  
  2849.           WITH  A  CALL TO write2.  write CALLS THIS ROUTINE TO VERIFY  THE
  2850.  
  2851.           SECTOR.
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.           fUNCTION nAME: dec16
  2858.  
  2859.           pURPOSE: dECREMENTS A 16 BIT VALUE.
  2860.  
  2861.           cALL ADDRESS: $c175
  2862.  
  2863.           iNPUT REQUIREMENTS:
  2864.  
  2865.                x         tHE ADDRESS OF THE 16 BIT INTEGER.
  2866.  
  2867.           oUTPUT:
  2868.  
  2869.                x         tHE ADDRESS OF THE 16 BIT RESULT.
  2870.  
  2871.  
  2872.  
  2873.           dESCRIPTION:  tHIS  ROUTINE IS ONE OF THE geos MATH  ROUTINES.  x
  2874.  
  2875.           POINTS TO A 16 BIT VALUE WHICH IS DECREMENTED BY 1.
  2876.  
  2877.  
  2878.  
  2879.  
  2880.  
  2881.  
  2882.  
  2883.  
  2884.  
  2885.  
  2886.  
  2887.  
  2888.  
  2889.  
  2890.  
  2891.  
  2892.  
  2893.  
  2894.  
  2895.  
  2896.  
  2897.  
  2898.  
  2899.  
  2900.  
  2901.  
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908.  
  2909.  
  2910.  
  2911.           geos kERNAL rOUTINES                                      1-20
  2912.  
  2913.  
  2914.  
  2915.  
  2916.  
  2917.           fUNCTION nAME: decode
  2918.  
  2919.           pURPOSE: cOMPUTE A CHECKSUM FOR A DATA REGION.
  2920.  
  2921.           cALL ADDRESS: $c20e
  2922.  
  2923.           iNPUT REQUIREMENTS:
  2924.  
  2925.                $02-$03   pOINTER TO DATA REGION.
  2926.  
  2927.                $04-$05   lENGTH OF REGION.
  2928.  
  2929.           oUTPUT:
  2930.  
  2931.                $06-$07   cHECKSUM OF REGION.
  2932.  
  2933.  
  2934.  
  2935.           dESCRIPTION:  tHIS  ROUTINE IS CALLED BY THE BOOTUP  ROUTINES  TO
  2936.  
  2937.           COMPUTE  THE  CHECKSUM  OF geos boot.  tHIS CHECKSUM IS  USED  TO
  2938.  
  2939.           CREATE THE INTERRUPT VECTOR ADDRESS.  tHE REASON FOR THIS WAS  TO
  2940.  
  2941.           PREVENT  PIRACY.  tHIS  CAN BE USED TO CHECK THE INTEGRITY  OF  A
  2942.  
  2943.           MEMORY REGION.  tHIS IS ACTUALLY MORE OF A crc COMPUTATION THEN A
  2944.  
  2945.           CHECKSUM AND THE FORMULA IS A LITTLE TOO COMPLEX TO EXPLAIN HERE.
  2946.  
  2947.  
  2948.  
  2949.  
  2950.  
  2951.           fUNCTION nAME: delay
  2952.  
  2953.           pURPOSE: sETS UP A TIME DELAY.
  2954.  
  2955.           cALL ADDRESS: $c199
  2956.  
  2957.           iNPUT REQUIREMENTS:
  2958.  
  2959.                $02-$03   aMOUNT OF TIME DELAY VALUE IN 60THS OF A SECOND.
  2960.  
  2961.  
  2962.  
  2963.           dESCRIPTION:  tHE  COUNTER IS  SAVED ON A STACK, AS WELL  AS  THE
  2964.  
  2965.           RETURN  ADDRESS  OF THE CALLER.  cONTROL IS PASSED BACK  A  LEVEL
  2966.  
  2967.           HIGHER  THAN THE CALLER.  wHEN THE TIMER RUNS OUT,  CONTROL  WILL
  2968.  
  2969.           RETURN  WHERE  IT LEFT OFF.  tHIS ALLOWS PROGRAMS TO  INCORPORATE
  2970.  
  2971.           DELAYS  WITHOUT HALTING geos'S MANY INDEPENDANT  PROCESSES.  tHIS
  2972.  
  2973.           AND cmdtbl APPEAR TO BE THE BEGINNINGS OF MULTITASKING FOR geos.
  2974.  
  2975.  
  2976.  
  2977.  
  2978.  
  2979.           fUNCTION nAME: delet2
  2980.  
  2981.           pURPOSE: dELETE A TEMPORARY FILE.
  2982.  
  2983.           cALL ADDRESS: $c244
  2984.  
  2985.           iNPUT REQUIREMENTS:
  2986.  
  2987.                $08-$09   pOINTER TO TABLE OF TRACKS AND SECTORS.
  2988.  
  2989.                $0e-$0f   pOINTER TO FILE NAME.
  2990.  
  2991.           eRRORS: sEE APPENDIX i.
  2992.  
  2993.  
  2994.  
  2995.           dESCRIPTION: tHIS ROUTINE REMOVES THE FILE FROM THE DIRECTORY. iT
  2996.  
  2997.           USES  THE TABLE OF TRACKS AND SECTORS TO FREE UP THE SECTORS USED
  2998.  
  2999.           BY  THE FILE.  tHIS ROUTINE IS USED TO CLEAN UP A TEMPORARY  FILE
  3000.  
  3001.           THAT WAS NOT COMPLETED.
  3002.  
  3003.  
  3004.  
  3005.  
  3006.  
  3007.           fUNCTION nAME: delete
  3008.  
  3009.           pURPOSE: dELETE A FILE FROM THE DISK.
  3010.  
  3011.           cALL ADDRESS: $c238
  3012.  
  3013.           iNPUT REQUIREMENTS:
  3014.  
  3015.                $02-$03   pOINTER TO FILE NAME.
  3016.  
  3017.           eRRORS: sEE APPENDIX i.
  3018.  
  3019.  
  3020.  
  3021.           dESCRIPTION:  tHE  SPECIFIED  FILE IS DELETED  FROM  THE  CURRENT
  3022.  
  3023.           DRIVE.
  3024.  
  3025.  
  3026.  
  3027.  
  3028.  
  3029.  
  3030.  
  3031.  
  3032.  
  3033.  
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.           geos kERNAL rOUTINES                                      1-21
  3044.  
  3045.  
  3046.  
  3047.  
  3048.  
  3049.           fUNCTION nAME: dirdsk
  3050.  
  3051.           pURPOSE: cREATES A DIRECTORY ENTRY ON THE DISK.
  3052.  
  3053.           cALL ADDRESS: $c1f0
  3054.  
  3055.           iNPUT REQUIREMENTS:
  3056.  
  3057.                $14-$15   $8100, REQUIRED.
  3058.  
  3059.                $16       # OF DIRECTORY SECTORS TO SKIP FIRST.
  3060.  
  3061.                $8100-$81ff iNFORMATION SECTOR FOR FILE.
  3062.  
  3063.                $8300-    tRACK AND SECTOR LIST FOR FILE.
  3064.  
  3065.           oUTPUTS:
  3066.  
  3067.                $8400-$841d dIRECTORY ENTRY.
  3068.  
  3069.                dIRECTORY ENTRY IS WRITTEN TO THE DISK.
  3070.  
  3071.           pREPARATORY ROUTINES: falloc
  3072.  
  3073.           eRRORS: sEE APPENDIX
  3074.  
  3075.  
  3076.  
  3077.           dESCRIPTION:  tHIS  ROUTINE  IS  USED BY save AND  CALLS  dirmem.
  3078.  
  3079.           bECAUSE  OF THIS, ASSUMPTIONS ARE MADE.  tHE FIRST  IS  THAT  THE
  3080.  
  3081.           INFORMATION  SECTOR  IS  AT $8100-$81ff AND  THAT  $14-$15  POINT
  3082.  
  3083.           THERE.  tHE  FIRST  TWO BYTES OF THE INFORMATION SECTOR  ARE  THE
  3084.  
  3085.           ADDRESS OF THE FILENAME.  tHESE ARE RESET BY THIS ROUTINE TO $00,
  3086.  
  3087.           $ff.  aNOTHER  ASSUMPTION MADE BY THIS ROUTINE IS THAT $8300 IS A
  3088.  
  3089.           LIST OF USEABLE TRACKS AND SECTORS; SPECIFICALLY, $8300-$8301 ARE
  3090.  
  3091.           THE  TRACK AND SECTOR FOR THE INFORMATION SECTOR AND  $8302-$8303
  3092.  
  3093.           ARE THE TRACK AND SECTOR OF THE FIRST SECTOR OF THE FILE.
  3094.  
  3095.  
  3096.  
  3097.  
  3098.  
  3099.           fUNCTION nAME: dirmem
  3100.  
  3101.           pURPOSE: cREATE A DIRECTORY ENTRY IN MEMORY.
  3102.  
  3103.           cALL ADDRESS: $c1f3
  3104.  
  3105.           iNPUT REQUIREMENTS:
  3106.  
  3107.                $14-$15   $8100, REQUIRED.
  3108.  
  3109.                $8100-$81ff iNFORMATION SECTOR FOR FILE.
  3110.  
  3111.                $8300-    tRACK AND SECTOR LIST FOR FILE.
  3112.  
  3113.           oUTPUTS:
  3114.  
  3115.                $8400-$841d dIRECTORY ENTRY.
  3116.  
  3117.           pREPARATORY ROUTINES: falloc
  3118.  
  3119.           eRRORS: sEE APPENDIX
  3120.  
  3121.  
  3122.  
  3123.           dESCRIPTION:   sEE  dirdsk  FOR  A  COMPLETE  LIST  OF  ALL   THE
  3124.  
  3125.           ASSUMPTIONS MADE BY THIS ROUTINE.
  3126.  
  3127.  
  3128.  
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.           geos kERNAL rOUTINES                                      1-22
  3176.  
  3177.  
  3178.  
  3179.  
  3180.  
  3181.           fUNCTION nAME: draw
  3182.  
  3183.           pURPOSE: dRAW A SECTION OF A CODED GRAPHIC IMAGE.
  3184.  
  3185.           cALL ADDRESS: $c2aa
  3186.  
  3187.           iNPUT REQUIREMENTS:
  3188.  
  3189.                $02-$03   pOINTER TO GRAPHIC IMAGE DATA.
  3190.  
  3191.                $04       cOLUMN TO START ON, IN BYTES.
  3192.  
  3193.                $05       rOW TO START DRAWING THE IMAGE ON.
  3194.  
  3195.                $06       iMAGE WIDTH IN BYTES.
  3196.  
  3197.                $07       iMAGE HEIGHT IN PIXELS
  3198.  
  3199.                $18       # BYTES TO SKIP ON THE LEFT SIDE.
  3200.  
  3201.                $19       # BYTES ON THE RIGHT SIDE.
  3202.  
  3203.                $1a-$1b   # ROWS TO SKIP DOWN.
  3204.  
  3205.  
  3206.  
  3207.           dESCRIPTION:  tHE  CODING OF THE IMAGE IS THE SAME AS THAT OF THE
  3208.  
  3209.           CLICK BOXES, SEE cbox FOR MORE INFORMATION. tHIS ROUTINE SEEMS TO
  3210.  
  3211.           BE  FOR DRAWING PIECES OF pHOTO sCRAPS.  pHOTO sCRAPS  HAVE  THIS
  3212.  
  3213.           CODED FORMAT.  tHE PARAMETERS FOR THIS ROUTINE ALLOW A SECTION OF
  3214.  
  3215.           THE IMAGE TO BE DRAWN BY SPECIFYING HOW MANY ROWS TO SKIP DOWN,AS
  3216.  
  3217.           WELL  AS HOW MANY BYTES TO SKIP ON THE LEFT AND THE RIGHT OF  THE
  3218.  
  3219.           DESIRED  SECTION.  tHIS IS NOT USED BY geoPAINT  UNLESS  geoPAINT
  3220.  
  3221.           CONVERTS  ITS  FILES  BECAUSE  THEY ARE IN  A  DIFFERENT  FORMAT;
  3222.  
  3223.           HOWEVER, pHOTO sCRAPS ARE IN THIS FORMAT.
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.           fUNCTION nAME: draw2
  3230.  
  3231.           pURPOSE: dRAW A SECTION OF A CODED GRAPHIC IMAGE.
  3232.  
  3233.           cALL ADDRESS: $c2c5
  3234.  
  3235.           iNPUT REQUIREMENTS:
  3236.  
  3237.                $02-$03   pOINTER TO GRAPHIC IMAGE DATA.
  3238.  
  3239.                $04       cOLUMN TO START ON, IN BYTES.
  3240.  
  3241.                $05       rOW TO START DRAWING THE IMAGE ON.
  3242.  
  3243.                $06       iMAGE WIDTH IN BYTES.
  3244.  
  3245.                $07       iMAGE HEIGHT IN PIXELS
  3246.  
  3247.                $18       # BYTES TO SKIP ON THE LEFT SIDE.
  3248.  
  3249.                $19       # BYTES ON THE RIGHT SIDE.
  3250.  
  3251.                $1a-$1b   # ROWS TO SKIP DOWN.
  3252.  
  3253.                $1c-$1d   fIRST USER VECTOR.
  3254.  
  3255.                $1e-$1f   sECOND USER VECTOR.
  3256.  
  3257.  
  3258.  
  3259.           dESCRIPTION:  tHIS  ROUTINE  IS IDENTICAL TO  draw,  EXCEPT  THAT
  3260.  
  3261.           BEFORE EACH BYTE IS READ,  THE FIRST USER ROUTINE IS CALLED.  tHE
  3262.  
  3263.           SECOND  USER  ROUTINE IS CALLED BEFORE READING EACH BYTE THAT  IS
  3264.  
  3265.           NOT  PART OF A PATTERN (cOMMAND BYTES GREATER  THAN  219).  tHESE
  3266.  
  3267.           USER  ROUTINES  MIGHT BE FOR DISK READING,  IN ORDER TO  DRAW  AN
  3268.  
  3269.           IMAGE THAT IS NOT MEMORY RESIDENT.
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304.  
  3305.  
  3306.  
  3307.           geos kERNAL rOUTINES                                      1-23
  3308.  
  3309.  
  3310.  
  3311.  
  3312.  
  3313.           fUNCTION nAME: drawch
  3314.  
  3315.           pURPOSE: dRAWS A CHARACTER.
  3316.  
  3317.           cALL ADDRESS: $c202
  3318.  
  3319.           iNPUT REQUIREMENTS:
  3320.  
  3321.                a         tHE ascii VALUE OF THE CHARACTER.
  3322.  
  3323.                $05       rOW TO PRINT ON (1 ABOVE THE UNDERLINE).
  3324.  
  3325.                $18-$19   cOLUMN TO PRINT IN.
  3326.  
  3327.                $33       tHE TOP MARGIN (uSUALLY 0).
  3328.  
  3329.                $34       tHE BOTTOM MARGIN (uSUALLY 199).
  3330.  
  3331.  
  3332.  
  3333.           dESCRIPTION: tHIS ROUTINE IS NOT EXACTLY THE SAME AS dspchr. tHIS
  3334.  
  3335.           ROUTINE DOES NOT PROCESS CONTROL CHARACTERS AT ALL.  iT ALSO DOES
  3336.  
  3337.           NOT  CHECK LEFT AND RIGHT MARGINS AT ALL.  iT ONLY CHECKS TOP AND
  3338.  
  3339.           BOTTOM MARGINS SO THAT IT STAYS ON SCREEN.
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.           fUNCTION nAME: drvnam
  3346.  
  3347.           pURPOSE: cOMPUTE THE ADDRESS OF THE DISK'S NAME.
  3348.  
  3349.           cALL ADDRESS: $c298
  3350.  
  3351.           iNPUT REQUIREMENTS:
  3352.  
  3353.                x         aDDRESS TO PLACE POINTER IN.
  3354.  
  3355.                $8489     cURRENT DRIVE NUMBER.
  3356.  
  3357.           oUTPUT:
  3358.  
  3359.                lOCATION IN ZERO PAGE POINTED TO BY x HAS THE ADDRESS OF THE
  3360.  
  3361.                CURRENT DRIVE'S NAME.
  3362.  
  3363.           pREPARATORY ROUTINES: opndsk
  3364.  
  3365.  
  3366.  
  3367.           dESCRIPTION:  tHIS  ROUTINE  COMPUTES THE ADDRESS OF THE  CURRENT
  3368.  
  3369.           DRIVE'S  NAME  BY MULTIPLYING THE DRIVE NUMBER (MINUS 8)  BY  18,
  3370.  
  3371.           THEN  THE  OFFSET OF $841e IS ADDED TO THAT.  tHE RESULT  OF  THE
  3372.  
  3373.           COMPUTATION IS STORED AT THE ZERO PAGE ADDRESS IN x.
  3374.  
  3375.  
  3376.  
  3377.  
  3378.  
  3379.           fUNCTION nAME: drvset
  3380.  
  3381.           pURPOSE: sET CURRENT DRIVE.
  3382.  
  3383.           cALL ADDRESS: $c2b0
  3384.  
  3385.           iNPUT REQUIREMENTS:
  3386.  
  3387.                a         dEVICE NUMBER OF DRIVE (8-11).
  3388.  
  3389.           oUTPUT:
  3390.  
  3391.                $ba       sET TO NEW DEVICE NUMBER.
  3392.  
  3393.                $8489     sET TO NEW DRIVE NUMBER.
  3394.  
  3395.  
  3396.  
  3397.           dESCRIPTION:  iF  THE  DRIVE BEING SPECIFIED IS NOT  THE  CURRENT
  3398.  
  3399.           DRIVE  THEN  clrrdy IS CALLED TO CLEAR THE  CURRENT  DRIVE.  tHEN
  3400.  
  3401.           LOCATIONS $ba AND $8489 ARE SET TO THE NEW DRIVE NUMBER. nO OTHER
  3402.  
  3403.           LOCATIONS  ARE AFFECTED,  NOR IS ANYTHING ACTUALLY DONE WITH  THE
  3404.  
  3405.           DRIVE.
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.           fUNCTION nAME: drwmnu
  3412.  
  3413.           pURPOSE: rEDRAWS THE PRESENT MENU.
  3414.  
  3415.           cALL ADDRESS: $c193
  3416.  
  3417.  
  3418.  
  3419.           dESCRIPTION: tHIS ROUTINE REDRAWS THE CURRENT MENU.
  3420.  
  3421.  
  3422.  
  3423.  
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.  
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436.  
  3437.  
  3438.  
  3439.           geos kERNAL rOUTINES                                      1-24
  3440.  
  3441.  
  3442.  
  3443.  
  3444.  
  3445.           fUNCTION nAME: dsetup
  3446.  
  3447.           pURPOSE: sETS UP A DRIVE WITH TURBODOS.
  3448.  
  3449.           cALL ADDRESS: $c214
  3450.  
  3451.           iNPUT REQUIREMENTS:
  3452.  
  3453.                $8489     cURRENT DRIVE NUMBER.
  3454.  
  3455.           eRRORS: sEE aPPENDIX i.
  3456.  
  3457.  
  3458.  
  3459.           dESCRIPTION:  tHIS ROUTINE INITIALIZES THE CURRENT DRIVE, SENDING
  3460.  
  3461.           TURBODOS IF NECESSARY.  iT THEN CAUSES THE DRIVE TO RUN TURBODOS.
  3462.  
  3463.           tHIS ROUTINE IS CALLED BY SEVERAL OF THE DISK i/o ROUTINES,  MOST
  3464.  
  3465.           NOTABLY  ARE  read AND write.  uPON INITIALIZING THE  DRIVE,  THE
  3466.  
  3467.           DRIVE'S STATUS BYTE IS SET TO THE APPROPRIATE VALUE.  tHE  STATUS
  3468.  
  3469.           BYTES  ARE  STORED  AT  $8492-$8495 AND  HAVE THE  FOLLOWING  BIT
  3470.  
  3471.           DEFINITIONS:
  3472.  
  3473.                          bIT 7     tURBODOS IS LOADED.
  3474.  
  3475.                          bIT 6     tURBODOS IS RUNNING.
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.           fUNCTION nAME: dspchr
  3482.  
  3483.           pURPOSE: dISPLAYS A CHARACTER ON THE SCREEN.
  3484.  
  3485.           cALL ADDRESS: $c145
  3486.  
  3487.           iNPUT REQUIREMENTS:
  3488.  
  3489.                a         tHE CHARACTER TO BE PRINTED.
  3490.  
  3491.                $02-$03   pOINTER TO EXTRA DATA (uSED BY A FEW CONTROL
  3492.  
  3493.                          CHARACTERS, NOT NEEDED OTHERWISE).
  3494.  
  3495.                $05       tHE ROW FOR PRINTING (1 ABOVE THE UNDERLINE).
  3496.  
  3497.                $18-$19   tHE COLUMN TO START PRINTING.
  3498.  
  3499.                $33       tHE TOP MARGIN (uSUALLY 0).
  3500.  
  3501.                $34       tHE BOTTOM MARGIN (uSUALLY 199).
  3502.  
  3503.                $35-$36   tHE LEFT MARGIN.
  3504.  
  3505.                $37-$38   tHE RIGHT MARGIN.
  3506.  
  3507.           pREPARATORY ROUTINES: selbsw OR font
  3508.  
  3509.           eRRORS: bRANCHES THROUGH $84ab-$84ac IF RIGHT MARGIN IS EXCEEDED.
  3510.  
  3511.  
  3512.  
  3513.           dESCRIPTION:  tHIS  ROUTINE  DISPLAYS  A  CHARACTER  IN  A  GIVEN
  3514.  
  3515.           LOCATION  IN  THE  CURRENT FONT AND  STYLE.  tHE  STYLE  BYTE  IN
  3516.  
  3517.           LOCATION $2e IS CODED AS FOLLOWS:
  3518.  
  3519.                  bIT      dESCRIPTION
  3520.  
  3521.                   7       uNDERLINE
  3522.  
  3523.                   6       bOLDFACE
  3524.  
  3525.                   5       rEVERSED
  3526.  
  3527.                   4       iTALICS
  3528.  
  3529.                   3       oUTLINED
  3530.  
  3531.           eITHER selbsw OR font MUST BE CALLED PRIOR TO USING THIS ROUTINE,
  3532.  
  3533.           IN  ORDER  TO SET UP THE FONT POINTERS.  selbsw IS CALLED  DURING
  3534.  
  3535.           geos'S  BOOTUP  PROCEDURE,  AS  WELL AS BY  THE  MENU  PROCESSOR.
  3536.  
  3537.           sEVERAL CONTROL CHARACTERS HAVE SPECIAL PROPERTIES.  tHOSE  WHICH
  3538.  
  3539.           REQUIRE A DATA POINTER ARE MARKED WITH AN ASTERISK.
  3540.  
  3541.  
  3542.  
  3543.  
  3544.  
  3545.  
  3546.  
  3547.  
  3548.  
  3549.  
  3550.  
  3551.  
  3552.  
  3553.  
  3554.  
  3555.  
  3556.  
  3557.  
  3558.  
  3559.  
  3560.  
  3561.  
  3562.  
  3563.  
  3564.  
  3565.  
  3566.  
  3567.  
  3568.  
  3569.  
  3570.  
  3571.           geos kERNAL rOUTINES                                      1-25
  3572.  
  3573.  
  3574.  
  3575.  
  3576.  
  3577.                                cONTROL cHARACTER tABLE
  3578.  
  3579.  
  3580.  
  3581.                cTRL-h  dELETE PREVIOUS CHARACTER.
  3582.  
  3583.                cTRL-i  tAB.
  3584.  
  3585.                cTRL-j  mOVE STRAIGHT DOWN A LINE.
  3586.  
  3587.                cTRL-k  sET TEXT CURSOR TO 0,0.
  3588.  
  3589.                cTRL-l  mOVE STRAIGHT UP A LINE.
  3590.  
  3591.                cTRL-m  mOVE TO THE BEGINNING OF THE NEXT LINE.
  3592.  
  3593.                cTRL-n  tURN ON UNDERLINING.
  3594.  
  3595.                cTRL-o  tURN OFF UNDERLINING.
  3596.  
  3597.              * cTRL-p  fOLLOWED BY A TABLE SUITABLE FOR grphic.
  3598.  
  3599.                cTRL-r  tURN ON REVERSE VIDEO.
  3600.  
  3601.                cTRL-s  tURN OFF REVERSE VIDEO.
  3602.  
  3603.              * cTRL-t  fOLLOWED BY 2 BYTES WHICH SPECIFY THE NEW COLUMN.
  3604.  
  3605.              * cTRL-u  fOLLOWED BY A BYTE WHICH SPECIFIES THE NEW ROW.
  3606.  
  3607.              * cTRL-v  fOLLOWED BY 3 BYTES WHICH SPECIFY THE NEW PRINT 
  3608.  
  3609.                        POSITION.
  3610.  
  3611.              * cTRL-w  sKIPS THE NEXT 3 BYTES.
  3612.  
  3613.                cTRL-x  tURN ON bOLDFACE.
  3614.  
  3615.                cTRL-y  tURN ON iTALICS.
  3616.  
  3617.                cTRL-z  tURN ON oUTLINE.
  3618.  
  3619.                cTRL-  tURN OFF ALL EFFECTS, RETURN TO PLAIN TEXT.
  3620.  
  3621.  
  3622.  
  3623.           tHOSE  ENTRIES  MARKED WITH AN ASTERISK (*) SHOULD ONLY  BE  USED
  3624.  
  3625.           FROM  dsptxt BECAUSE THEY REQUIRE $02-$03 TO BE A POINTER TO  GET
  3626.  
  3627.           EXTRA  DATA.  aS  WITH grphic,  cTRL-p MUST BE THE  LAST  COMMAND
  3628.  
  3629.           BECAUSE  THE  ZERO  BYTE THAT TERMINATES  grphic  WILL  TERMINATE
  3630.  
  3631.           dsptxt.
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.           fUNCTION nAME: dspnum
  3638.  
  3639.           pURPOSE: dISPLAY AN UNSIGNED 16 BIT INTEGER.
  3640.  
  3641.           cALL ADDRESS: $c184
  3642.  
  3643.           iNPUT REQUIREMENTS:
  3644.  
  3645.                a         cONTROL VALUE (sEE DESCRIPTION).
  3646.  
  3647.                $02-$03   tHE VALUE TO BE DISPLAYED.
  3648.  
  3649.  
  3650.  
  3651.           dESCRIPTION:  tHIS  ROUTINE  CONVERTS  THE VALUE  AT  $02-$03  TO
  3652.  
  3653.           DECIMAL ascii AND DISPLAYS IT USING dspchr.  tHE CONTROL VALUE IN
  3654.  
  3655.           a IS DEFINED AS FOLLOWS:
  3656.  
  3657.                BIT 7     0 - RIGHT JUSTIFY THE NUMBER.
  3658.  
  3659.                          1 - LEFT JUSTIFY THE NUMBER, IE. NO JUSTIFY.
  3660.  
  3661.                BIT 6     0 - PRINT LEADING ZEROES.
  3662.  
  3663.                          1 - SKIP LEADING ZEROES.
  3664.  
  3665.                BITS 0-5  tHE FIELD WIDTH IN PIXELS FOR RIGHT JUSTIFICATION.
  3666.  
  3667.  
  3668.  
  3669.  
  3670.  
  3671.  
  3672.  
  3673.  
  3674.  
  3675.  
  3676.  
  3677.  
  3678.  
  3679.  
  3680.  
  3681.  
  3682.  
  3683.  
  3684.  
  3685.  
  3686.  
  3687.  
  3688.  
  3689.  
  3690.  
  3691.  
  3692.  
  3693.  
  3694.  
  3695.  
  3696.  
  3697.  
  3698.  
  3699.  
  3700.  
  3701.  
  3702.  
  3703.           geos kERNAL rOUTINES                                      1-26
  3704.  
  3705.  
  3706.  
  3707.  
  3708.  
  3709.           fUNCTION nAME: dsptx2
  3710.  
  3711.           pURPOSE: iDENTICAL TO dsptxt, BUT WITH INLINE CODE.
  3712.  
  3713.           cALL ADDRESS: $c1ae
  3714.  
  3715.           iNPUT REQUIREMENTS:
  3716.  
  3717.                $35-$36   tHE LEFT MARGIN.
  3718.  
  3719.                $37-$38   tHE RIGHT MARGIN.
  3720.  
  3721.           pREPARATORY ROUTINES: selbsw OR font
  3722.  
  3723.           eRRORS: bRANCHES THROUGH $84ab-$84ac IF RIGHT MARGIN IS EXCEEDED.
  3724.  
  3725.  
  3726.  
  3727.           dESCRIPTION:  tHIS ROUTINE CREATES A POINTER TO THE  TEXT,  CALLS
  3728.  
  3729.           dsptxt, THEN RETURNS TO THE CODE IMMEDIATELY FOLLOWING THE TEXT.
  3730.  
  3731.                 jsr dsptx2
  3732.  
  3733.                .word tHE COLUMN TO START PRINTING IN
  3734.  
  3735.                .byte rOW FOR LINE OF PRINT (1 ABOVE THE UNDERLINE)
  3736.  
  3737.                .byte tEXT TO BE DISPLAYED
  3738.  
  3739.                .byte 0
  3740.  
  3741.                cONTROL RETURNS HERE AFTER TEXT IS PRINTED.
  3742.  
  3743.  
  3744.  
  3745.  
  3746.  
  3747.           fUNCTION nAME: dsptxt
  3748.  
  3749.           pURPOSE: dISPLAYS AN ENTIRE STRING OF TEXT.
  3750.  
  3751.           cALL ADDRESS: $c148
  3752.  
  3753.           iNPUT REQUIREMENTS:
  3754.  
  3755.                $02-$03   pOINTER TO TEXT STRING.
  3756.  
  3757.                $05       tHE ROW FOR PRINTING (1 ABOVE THE UNDERLINE).
  3758.  
  3759.                $18-$19   tHE COLUMN IN WHICH TO START PRINTING.
  3760.  
  3761.                $33       tHE TOP MARGIN (uSUALLY 0).
  3762.  
  3763.                $34       tHE BOTTOM MARGIN (uSUALLY 199).
  3764.  
  3765.                $35-$36   tHE LEFT MARGIN.
  3766.  
  3767.                $37-$38   tHE RIGHT MARGIN.
  3768.  
  3769.           pREPARATORY ROUTINES: selbsw OR font
  3770.  
  3771.           eRRORS: bRANCHES THROUGH $84ab-$84ac IF RIGHT MARGIN IS EXCEEDED.
  3772.  
  3773.  
  3774.  
  3775.           dESCRIPTION:  tHIS ROUTINE CALLS dspchr TO DISPLAY EACH CHARACTER
  3776.  
  3777.           IN A STRING. tHE STRING IS TERMINATED BY A ZERO BYTE.
  3778.  
  3779.  
  3780.  
  3781.  
  3782.  
  3783.           fUNCTION nAME: enable
  3784.  
  3785.           pURPOSE: eNABLES A RECURRING TIMED EVENT.
  3786.  
  3787.           cALL ADDRESS: $c106
  3788.  
  3789.           iNPUT REQUIREMENTS:
  3790.  
  3791.                x         tHE INDEX INTO THE COMMAND TABLE AT $8719.
  3792.  
  3793.           pREPARATORY ROUTINES: cmdtbl
  3794.  
  3795.  
  3796.  
  3797.           dESCRIPTION:  tHIS ROUTINE ENABLES A SPECIFIC TIMER IN THE  TABLE
  3798.  
  3799.           AT $8719 BY RESETTING BITS 5 AND 6 IN THE COMMAND TABLE.  iT ALSO
  3800.  
  3801.           COPIES  THE  INITIAL  VALUE INTO THE TIMER TABLE  AT  $87f1.  tHE
  3802.  
  3803.           COMMAND  TABLE  MUST  HAVE BEEN PREVIOUSLY SET UP BY  A  CALL  TO
  3804.  
  3805.           cmdtbl.
  3806.  
  3807.  
  3808.  
  3809.  
  3810.  
  3811.  
  3812.  
  3813.  
  3814.  
  3815.  
  3816.  
  3817.  
  3818.  
  3819.  
  3820.  
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.  
  3833.  
  3834.  
  3835.           geos kERNAL rOUTINES                                      1-27
  3836.  
  3837.  
  3838.  
  3839.  
  3840.  
  3841.           fUNCTION nAME: eramns
  3842.  
  3843.           pURPOSE: eRASES ALL OPEN MENUS.
  3844.  
  3845.           cALL ADDRESS: $c157
  3846.  
  3847.           pREPARATORY ROUTINES: menu
  3848.  
  3849.  
  3850.  
  3851.           dESCRIPTION:  tHIS  ROUTINE  ERASES ALL OF THE  MENUS.  iT  CALLS
  3852.  
  3853.           eramnu REPEATEDLY TO ACCOMPLISH THIS. iT THEN SETS THE MENU LEVEL
  3854.  
  3855.           COUNTER ($84b7) TO $00.
  3856.  
  3857.  
  3858.  
  3859.  
  3860.  
  3861.           fUNCTION nAME: eramnu
  3862.  
  3863.           pURPOSE: eRASES THE CURRENT MENU FROM THE SCREEN.
  3864.  
  3865.           cALL ADDRESS: $c154
  3866.  
  3867.           pREPARATORY ROUTINES: menu
  3868.  
  3869.  
  3870.  
  3871.           dESCRIPTION:  tHIS  ROUTINE WILL ERASE THE CURRENT MENU.  iT DOES
  3872.  
  3873.           not POP UP A LEVEL.  iT SIMPLY ERASES IT FROM THE SCREEN.  iF THE
  3874.  
  3875.           VECTOR AT $84b1 WAS SET, THEN THAT IS THE ROUTINE CALLED TO ERASE
  3876.  
  3877.           THE MENU;  OTHERWISE, A BLANK PATTERN IS SELECTED WITH setpat AND
  3878.  
  3879.           pfill IS CALLED. tHE DEFAULT SETTING FOR $84b1 IS copyb.
  3880.  
  3881.  
  3882.  
  3883.  
  3884.  
  3885.           fUNCTION nAME: exertn
  3886.  
  3887.           pURPOSE: fORCES A TIMED EVENT TO EXECUTE,REGARDLESS OF ITS TIMER.
  3888.  
  3889.           cALL ADDRESS: $c109
  3890.  
  3891.           iNPUT REQUIREMENTS:
  3892.  
  3893.                x         tHE INDEX INTO THE COMMAND BYTE TABLE AT $8719.
  3894.  
  3895.           pREPARATORY ROUTINES: cmdtbl
  3896.  
  3897.  
  3898.  
  3899.           dESCRIPTION:  tHIS  ROUTINE SETS BIT 7 OF A SPECIFIC COMMAND BYTE
  3900.  
  3901.           IN THE TABLE AT $8719. tHIS SIMULATES THE TIMER HAVING RUN OUT.
  3902.  
  3903.  
  3904.  
  3905.  
  3906.  
  3907.           fUNCTION nAME: falloc
  3908.  
  3909.           pURPOSE: aLLOCATE ENOUGH SECTORS FOR A FILE.
  3910.  
  3911.           cALL ADDRESS: $c1fc
  3912.  
  3913.           iNPUT REQUIREMENTS:
  3914.  
  3915.                $06-$07   nUMBER OF BYTES TO BE SAVED.
  3916.  
  3917.                $0a-$0b   aDDRESS OF BUFFER FOR TRACK AND SECTOR LIST.
  3918.  
  3919.           oUTPUT:
  3920.  
  3921.                bUFFER IS FILLED WITH A SET OF TRACKS AND SECTORS.
  3922.  
  3923.           eRRORS: sEE aPPENDIX
  3924.  
  3925.  
  3926.  
  3927.           dESCRIPTION:  gIVEN A BYTE COUNT AND A POINTER TO A BUFFER,  THIS
  3928.  
  3929.           ROUTINE  ATTEMPTS  TO ALLOCATE ENOUGH SECTORS.  tHIS  ROUTINE  IS
  3930.  
  3931.           CALLED PRIOR TO SAVING A FILE.  tHE TRACK AND SECTOR LIST IS  NOT
  3932.  
  3933.           LIMITED  IN LENGTH,  AVAILABLE DISK SPACE NOT  WITHSTANDING.  tHE
  3934.  
  3935.           LIST   IS  TERMINATED  WITH  A  TRACK  NUMBER  OF  ZERO  AND  THE
  3936.  
  3937.           APPROPRIATE BYTE COUNT IN THE SECTOR LOCATION.  nOTE IF AN  ERROR
  3938.  
  3939.           OCCURS  DURING THE ALLOCATION,  THE SECTORS ALREADY ALLOCATED ARE
  3940.  
  3941.           NOT  FREED  UP.  eITHER  THIS MUST BE DONE OR THE  DISK  MUST  BE
  3942.  
  3943.           VALIDATED.
  3944.  
  3945.  
  3946.  
  3947.  
  3948.  
  3949.  
  3950.  
  3951.  
  3952.  
  3953.  
  3954.  
  3955.  
  3956.  
  3957.  
  3958.  
  3959.  
  3960.  
  3961.  
  3962.  
  3963.  
  3964.  
  3965.  
  3966.  
  3967.           geos kERNAL rOUTINES                                      1-28
  3968.  
  3969.  
  3970.  
  3971.  
  3972.  
  3973.           fUNCTION nAME: faloc2
  3974.  
  3975.           pURPOSE: aLLOCATE ENOUGH SECTORS FOR A FILE.
  3976.  
  3977.           cALL ADDRESS: $c24d
  3978.  
  3979.           iNPUT REQUIREMENTS:
  3980.  
  3981.                $06-$07   nUMBER OF BYTES TO BE SAVED.
  3982.  
  3983.                $08       tRACK TO START LOOKING FROM.
  3984.  
  3985.                $09       sECTOR TO START LOOKING FROM.
  3986.  
  3987.                $0a-$0b   aDDRESS OF BUFFER FOR TRACK AND SECTOR LIST.
  3988.  
  3989.           oUTPUT:
  3990.  
  3991.                bUFFER IS FILLED WITH A SET OF TRACKS AND SECTORS.
  3992.  
  3993.           eRRORS: sEE aPPENDIX
  3994.  
  3995.  
  3996.  
  3997.           dESCRIPTION:  tHIS  ROUTINE IS ALMOST IDENTICAL TO falloc.  aS  A
  3998.  
  3999.           MATTER OF FACT, falloc FALLS INTO THIS ROUTINE AFTER SETTING $08-
  4000.  
  4001.           $09 TO POINT TO TRACK 1 SECTOR 0. tHIS ROUTINE ALLOWS THE USER TO
  4002.  
  4003.           SPECIFY  WHERE  ON THE DISK TO START LOOKING  FOR  FREE  SECTORS,
  4004.  
  4005.           POSSIBLY SPEEDING THINGS UP.
  4006.  
  4007.  
  4008.  
  4009.  
  4010.  
  4011.           fUNCTION nAME: font
  4012.  
  4013.           pURPOSE: cHANGE THE CURRENT FONT.
  4014.  
  4015.           cALL ADDRESS: $c1cc
  4016.  
  4017.           iNPUT REQUIREMENTS:
  4018.  
  4019.                $02-$03   pOINTER TO FONT HEADER IN MEMORY.
  4020.  
  4021.           oUTPUT:
  4022.  
  4023.                $26       # PIXELS ABOVE LINE OF PRINT.
  4024.  
  4025.                $27-$28   tHE NUMBER OF BYTES IN THE BIT STREAM.
  4026.  
  4027.                $29       tHE POINT SIZE.
  4028.  
  4029.                $2a-$2b   pOINTER TO THE TABLE OF THE BIT STREAM INDICES.
  4030.  
  4031.                $2c-$2d   pOINTER TO THE BIT STREAM.
  4032.  
  4033.  
  4034.  
  4035.           dESCRIPTION: tHIS ROUTINE SIMPLY COPIES THE HEADER BLOCK FROM THE
  4036.  
  4037.           FONT TO ZERO PAGE.  tHIS MAKES THE FONT THE CURRENT FONT FOR  ALL
  4038.  
  4039.           CHARACTER OUTPUT. (sEE dspchr, dsptxt AND dsptx2).
  4040.  
  4041.  
  4042.  
  4043.  
  4044.  
  4045.           fUNCTION nAME: forbid
  4046.  
  4047.           pURPOSE: dISABLES THE EXECUTION OF A TIMED EVENT.
  4048.  
  4049.           cALL ADDRESS: $c10c
  4050.  
  4051.           iNPUT REQUIREMENTS:
  4052.  
  4053.                x         tHE INDEX INTO THE COMMAND TABLE AT $8719.
  4054.  
  4055.           pREPARATORY ROUTINES: cmdtbl
  4056.  
  4057.  
  4058.  
  4059.           dESCRIPTION:  tHIS ROUTINE SETS BIT 6 OF A SPECIFIC COMMAND  BYTE
  4060.  
  4061.           IN THE TABLE AT $8719.  tHIS PREVENTS THE ASSOCIATED ROUTINE FROM
  4062.  
  4063.           EXECUTING, REGARDLESS OF ITS TIMER.  tHIS DOES not STOP THE TIMER
  4064.  
  4065.           FROM  RUNNING.  iF  THE  TIMER  RUNS OUT  WHILE  THE  ROUTINE  IS
  4066.  
  4067.           DISABLED,  WHEN  THE TIMER IS REENABLED,  THE ASSOCIATED  ROUTINE
  4068.  
  4069.           WILL BE EXECUTED. tHIS ROUTINE IS THE COMPLEMENT TO permit.
  4070.  
  4071.  
  4072.  
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.  
  4079.  
  4080.  
  4081.  
  4082.  
  4083.  
  4084.  
  4085.  
  4086.  
  4087.  
  4088.  
  4089.  
  4090.  
  4091.  
  4092.  
  4093.  
  4094.  
  4095.  
  4096.  
  4097.  
  4098.  
  4099.           geos kERNAL rOUTINES                                      1-29
  4100.  
  4101.  
  4102.  
  4103.  
  4104.  
  4105.           fUNCTION nAME: free
  4106.  
  4107.           pURPOSE: dEALLOCATES ALL OF A FILE'S SECTORS.
  4108.  
  4109.           cALL ADDRESS: $c226
  4110.  
  4111.           iNPUT REQUIREMENTS:
  4112.  
  4113.                $14-$15   pOINTER TO DIRECTORY ENTRY.
  4114.  
  4115.           pREPARATORY ROUTINES: lookup (pOINTER MUST BE COPIED).
  4116.  
  4117.           eRRORS: sEE aPPENDIX i.
  4118.  
  4119.  
  4120.  
  4121.           dESCRIPTION:  gIVEN  THE  DIRECTORY ENTRY OF A FILE,  ALL OF  ITS
  4122.  
  4123.           SECTORS ARE  RETURNED TO THE FREE  POOL.  tHE  DIRECTORY  POINTER
  4124.  
  4125.           SHOULD  BE  POINTING TO THE DIRECTORY ENTRY AT $8400 AND NOT  THE
  4126.  
  4127.           POINTER RETURNED BY lookup.  tHIS IS DUE TO MEMORY CONFLICTS THAT
  4128.  
  4129.           WILL ARISE. tHIS ROUTINE USES $8000-$82ff FOR ITS BUFFER AREAS.
  4130.  
  4131.  
  4132.  
  4133.  
  4134.  
  4135.           fUNCTION nAME: geosck
  4136.  
  4137.           pURPOSE: cHECKS IF A DISK IS geos FORMAT OR NOT.
  4138.  
  4139.           cALL ADDRESS: $c1de
  4140.  
  4141.           iNPUT REQUIREMENTS:
  4142.  
  4143.                $0c-$0d   pOINTER TO BUFFER WITH TRACK 18 SECTOR 0.
  4144.  
  4145.           oUTPUT:
  4146.  
  4147.                z         sET IF NON-geos, RESET IF geos FORMAT.
  4148.  
  4149.                a,$848b   $00 IF NON-geos, $ff IF geos FORMAT.
  4150.  
  4151.  
  4152.  
  4153.           dESCRIPTION:  tHIS  ROUTINE  EXPECTS THAT TRACK 18 SECTOR  0  HAS
  4154.  
  4155.           ALREADY  BEEN  READ.  iT  COMPARES 11 BYTES,  STARTING  WITH  THE
  4156.  
  4157.           173RD,  AGAINST 'geos FORMAT'.  iT SETS $848b SO THAT THE CURRENT
  4158.  
  4159.           DRIVE IS KEPT TRACK OF.
  4160.  
  4161.  
  4162.  
  4163.  
  4164.  
  4165.           fUNCTION nAME: getbyt
  4166.  
  4167.           pURPOSE: rEAD A BYTE FROM A FILE.
  4168.  
  4169.           cALL ADDRESS: $c2b6
  4170.  
  4171.           iNPUT REQUIREMENTS:
  4172.  
  4173.                $0c       iNDEX OF LAST BYTE IN BUFFER.
  4174.  
  4175.                $0d       iNDEX TO NEXT CHARACTER IN BUFFER.
  4176.  
  4177.                $0a-$0b   pOINTER TO DISK BUFFER.
  4178.  
  4179.           oUTPUT:
  4180.  
  4181.                a         cHARACTER THAT WAS READ.
  4182.  
  4183.           eRRORS: sEE aPPENDIX i.
  4184.  
  4185.  
  4186.  
  4187.           dESCRIPTION:  tHE INITIAL SECTOR MUST HAVE BEEN READ BECAUSE  THE
  4188.  
  4189.           FIRST TWO BYTES IN THE BUFFER ARE USED TO FIND THE NEXT TRACK AND
  4190.  
  4191.           SECTOR.  bYTES  ARE READ FROM THE BUFFER UNTIL THERE ARE NO MORE,
  4192.  
  4193.           THEN  THE NEXT SECTOR IS READ FROM THE DISK.  tHIS  CAN  CONTINUE
  4194.  
  4195.           UNTIL  THE LAST CHARACTER OF THE LAST SECTOR IS READ.  aFTER THIS
  4196.  
  4197.           AN ERROR 11 (eND OF FILE) WILL BE RETURNED.
  4198.  
  4199.  
  4200.  
  4201.  
  4202.  
  4203.  
  4204.  
  4205.  
  4206.  
  4207.  
  4208.  
  4209.  
  4210.  
  4211.  
  4212.  
  4213.  
  4214.  
  4215.  
  4216.  
  4217.  
  4218.  
  4219.  
  4220.  
  4221.  
  4222.  
  4223.  
  4224.  
  4225.  
  4226.  
  4227.  
  4228.  
  4229.  
  4230.  
  4231.           geos kERNAL rOUTINES                                      1-30
  4232.  
  4233.  
  4234.  
  4235.  
  4236.  
  4237.           fUNCTION nAME: getin
  4238.  
  4239.           pURPOSE: gET A KEY FROM THE KEYBOARD.
  4240.  
  4241.           cALL ADDRESS: $c2a7
  4242.  
  4243.           oUTPUT:
  4244.  
  4245.                a         cHARACTER OR $00 IF THERE ARE NONE.
  4246.  
  4247.  
  4248.  
  4249.           dESCRIPTION: tHIS ROUTINE TAKES A KEY FROM  THE  KEYBOARD BUFFER,
  4250.  
  4251.           IF THERE IS ONE. iF THERE ARE NO CHARACTERS IN THE BUFFER, THEN A
  4252.  
  4253.           ZERO IS RETURNED.
  4254.  
  4255.  
  4256.  
  4257.  
  4258.  
  4259.           fUNCTION nAME: goto
  4260.  
  4261.           pURPOSE: gET A SPECIFIC vlir CHAIN.
  4262.  
  4263.           cALL ADDRESS: $c280
  4264.  
  4265.           iNPUT REQUIREMENTS:
  4266.  
  4267.                a         vlir CHAIN NUMBER.
  4268.  
  4269.           oUTPUT:
  4270.  
  4271.                y         tRACK OF vlir CHAIN.
  4272.  
  4273.                $04       tRACK OF vlir CHAIN.
  4274.  
  4275.                $05       sECTOR OF vlir CHAIN.
  4276.  
  4277.                $8496     sET TO a.
  4278.  
  4279.           pREPARATORY ROUTINES: vopen
  4280.  
  4281.           eRRORS: sEE aPPENDIX i.
  4282.  
  4283.  
  4284.  
  4285.           dESCRIPTION: tHIS ROUTINE GETS THE TRACK AND SECTOR OF A SPECIFIC
  4286.  
  4287.           CHAIN  IN  THE OPEN vlir FILE.  iT DOES NOT CHECK TO SEE  IF  THE
  4288.  
  4289.           CHAIN EXISTS (IE.  TRACK IS ZERO). iT DOES CHECK IF THIS CHAIN IS
  4290.  
  4291.           GREATER  THAN  ZERO  AND  LESS THAN THE  NUMBER  OF  vlir  CHAINS
  4292.  
  4293.           (lOCATION $8497). vlir CHAINS ARE NUMBERED FROM 0 TO n-1, WHERE n
  4294.  
  4295.           IS THE NUMBER OF CHAINS.
  4296.  
  4297.  
  4298.  
  4299.  
  4300.  
  4301.           fUNCTION nAME: grphc2
  4302.  
  4303.           pURPOSE: iDENTICAL TO grphic, BUT WITH INLINE DATA.
  4304.  
  4305.           cALL ADDRESS: $c1a8
  4306.  
  4307.  
  4308.  
  4309.           dESCRIPTION:  tHIS ROUTINE TAKES AN INLINE DATA TABLE, CREATES  A
  4310.  
  4311.           POINTER TO IT, THEN CALLS grphic TO PROCESS IT. sEE pfill2 FOR AN
  4312.  
  4313.           EXAMPLE OF INLINE DATA TABLES.
  4314.  
  4315.  
  4316.  
  4317.  
  4318.  
  4319.           fUNCTION nAME: grphic
  4320.  
  4321.           pURPOSE: pROCESS SEVERAL GRAPHICS COMMANDS DESIGNATED BY A TABLE.
  4322.  
  4323.           cALL ADDRESS: $c136
  4324.  
  4325.           iNPUT REQUIREMENTS:
  4326.  
  4327.                $02-$03   pOINTER TO THE TABLE OF COMMANDS.
  4328.  
  4329.  
  4330.  
  4331.           dESCRIPTION: tHIS ROUTINE EXECUTES  THE GRAPHIC  COMMANDS PRESENT
  4332.  
  4333.           IN A TABLE. tHIS ROUTINE IS USED BY dspchr (cONTROL-p),dsptxt (bY
  4334.  
  4335.           CALLING  dspchr), AND window (cOMMAND 15).  tHE  FOLLOWING  TABLE
  4336.  
  4337.           DESCRIBES THE AVAILABLE COMMANDS.
  4338.  
  4339.  
  4340.  
  4341.  
  4342.  
  4343.  
  4344.  
  4345.  
  4346.  
  4347.  
  4348.  
  4349.  
  4350.  
  4351.  
  4352.  
  4353.  
  4354.  
  4355.  
  4356.  
  4357.  
  4358.  
  4359.  
  4360.  
  4361.  
  4362.  
  4363.           geos kERNAL rOUTINES                                      1-31
  4364.  
  4365.  
  4366.  
  4367.  
  4368.  
  4369.                                 gRAPHIC cOMMAND tABLE
  4370.  
  4371.  
  4372.  
  4373.                 cOMMAND   #bYTES  dESCRIPTION
  4374.  
  4375.                   0         1     sTOP, END OF TABLE.
  4376.  
  4377.                   1         4     sET COLUMN AND ROW VARIABLES.
  4378.  
  4379.                   2         4     dRAW A LINE.
  4380.  
  4381.                   3         4     pATTERN FILL A REGION.
  4382.  
  4383.                   4         1     nO OPERATION.
  4384.  
  4385.                   5         2     sET FILL PATTERN.
  4386.  
  4387.                   6         4+    sET POSITION AND DISPLAY TEXT. must be
  4388.  
  4389.                                   LAST COMMAND BECAUSE THE ZERO BYTE THAT
  4390.  
  4391.                                   ENDS THE TEXT ALSO ENDS THIS COMMAND
  4392.  
  4393.                                   TABLE.
  4394.  
  4395.                   7         4     dRAW A SOLID LINED BOX.
  4396.  
  4397.                   8         3     aDD AN OFFSET TO COLUMN VARIABLE.
  4398.  
  4399.                   9         2     aDD AN OFFSET TO ROW VARIABLE.
  4400.  
  4401.                   10        4     aDD OFFSETS TO BOTH COLUMN AND ROW
  4402.  
  4403.                                   VARIABLES.
  4404.  
  4405.  
  4406.  
  4407.           cOMMAND 1 IS USED TO SET THE COLUMN AND ROW VARIABLES USED BY ALL
  4408.  
  4409.           OF THE OTHER COMMANDS WHICH REQUIRE TWO POINTS. tHE FORMAT OF THE
  4410.  
  4411.           COMMANDS  IS  THAT ALL OF THE NECESSARY DATA FOLLOWS THE  COMMAND
  4412.  
  4413.           BYTE.  fOR EXAMPLE, THE COMMANDS TO ERASE THE ENTIRE SCREEN WOULD
  4414.  
  4415.           LOOK LIKE THIS:
  4416.  
  4417.                .byte $05,$00
  4418.  
  4419.                .byte $01
  4420.  
  4421.                .word 0
  4422.  
  4423.                .byte 0
  4424.  
  4425.                .byte $03
  4426.  
  4427.                .word 320
  4428.  
  4429.                .byte 199
  4430.  
  4431.                .byte $00
  4432.  
  4433.           iN THE CASE OF COMMAND 6,  AFTER THE COLUMN AND ROW BYTES IN  THE
  4434.  
  4435.           COMMAND COMES THE TEXT THAT IS TO BE DISPLAYED.  fOR EXAMPLE:
  4436.  
  4437.                .byte $06
  4438.  
  4439.                .word 50
  4440.  
  4441.                .byte 50
  4442.  
  4443.                .byte 'hELLO WORLD!'
  4444.  
  4445.                .byte $00
  4446.  
  4447.  
  4448.  
  4449.  
  4450.  
  4451.           fUNCTION nAME: hline
  4452.  
  4453.           pURPOSE: dRAWS A HORIZONAL LINE ON THE SCREEN.
  4454.  
  4455.           cALL ADDRESS: $c118
  4456.  
  4457.           iNPUT REQUIREMENTS:
  4458.  
  4459.                a         tHE ACTUAL BIT PATTERN FOR THE LINE.
  4460.  
  4461.                $08-$09   tHE LEFT MARGIN.
  4462.  
  4463.                $0a-$0b   tHE RIGHT MARGIN.
  4464.  
  4465.                $18       tHE ROW NUMBER.
  4466.  
  4467.  
  4468.  
  4469.           dESCRIPTION:  tHIS  ROUTINE DRAWS A HORIZONTAL LINE ON THE  HIRES
  4470.  
  4471.           SCREEN IN A GIVEN PATTERN.  sEE ALSO rowadr.
  4472.  
  4473.  
  4474.  
  4475.  
  4476.  
  4477.  
  4478.  
  4479.  
  4480.  
  4481.  
  4482.  
  4483.  
  4484.  
  4485.  
  4486.  
  4487.  
  4488.  
  4489.  
  4490.  
  4491.  
  4492.  
  4493.  
  4494.  
  4495.           geos kERNAL rOUTINES                                      1-32
  4496.  
  4497.  
  4498.  
  4499.  
  4500.  
  4501.           fUNCTION nAME: hole
  4502.  
  4503.           pURPOSE: fIND A HOLE IN THE DIRECTORY, OR MAKE ONE.
  4504.  
  4505.           cALL ADDRESS: $c1f6
  4506.  
  4507.           oUTPUT:
  4508.  
  4509.                y         iNDEX OF HOLE IN BUFFER.
  4510.  
  4511.                $04       dIRECTORY TRACK NUMBER (sHOULD BE 18).
  4512.  
  4513.                $05       dIRECTORY SECTOR NUMBER.
  4514.  
  4515.                $16       # DIRECTORY SECTORS TO SKIP FIRST.
  4516.  
  4517.                $8000-$80ff bUFFER FOR DIRECTORY SECTOR.
  4518.  
  4519.  
  4520.  
  4521.           dESCRIPTION:  tHIS ROUTINE SCANS THE DISK'S DIRECTORY LOOKING FOR
  4522.  
  4523.           A  DELETED FILE, BY FIRST SKIPPING A CERTAIN NUMBER  OF  SECTORS.
  4524.  
  4525.           tHIS  ALLOWS THE  USER TO FIND A HOLE IN A GIVEN  DIRECTORY PAGE.
  4526.  
  4527.           iF ONE IS NOT FOUND IN ANY  OF THE  AVAILABLE  DIRECTORY SECTORS,
  4528.  
  4529.           THEN A NEW SECTOR IS ADDED TO THE DIRECTORY.
  4530.  
  4531.  
  4532.  
  4533.  
  4534.  
  4535.           fUNCTION nAME: indjmp
  4536.  
  4537.           pURPOSE: cONDITIONAL JUMP.
  4538.  
  4539.           cALL ADDRESS: $c1d8
  4540.  
  4541.           iNPUT REQUIREMENTS:
  4542.  
  4543.                a         tHE HIGH BYTE OF THE JUMP VECTOR.
  4544.  
  4545.                x         tHE LOW BYTE OF THE JUMP VECTOR.
  4546.  
  4547.  
  4548.  
  4549.           dESCRIPTION: iF a AND x ARE ZERO, THE JUMP IS NOT PERFORMED. iF a
  4550.  
  4551.           AND x ARE NONZERO, THE JUMP IS PERFORMED.
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.           fUNCTION nAME: init01
  4558.  
  4559.           pURPOSE: pART OF geos'S BOOTUP PROCESS.
  4560.  
  4561.           cALL ADDRESS: $c271
  4562.  
  4563.  
  4564.  
  4565.           dESCRIPTION:  iNITIALIZES  THE vic CHIP AND THE i/o  CHIPS.  sOME
  4566.  
  4567.           GLOBAL   MEMORY   IS  ALSO  INITIALIZED.   iT  ALSO  RESETS   THE
  4568.  
  4569.           PREFERENCES AND ALL THE DRIVES.  tHE DEFAULT DRIVE IS RESET BY  A
  4570.  
  4571.           CALL TO dsetup.
  4572.  
  4573.  
  4574.  
  4575.  
  4576.  
  4577.           fUNCTION nAME: initdv
  4578.  
  4579.           pURPOSE: iNITIALIZES A DRIVE.
  4580.  
  4581.           cALL ADDRESS: $c1e1
  4582.  
  4583.           iNPUT REQUIREMENTS:
  4584.  
  4585.                $04       tRACK TO POSITION THE DISK DRIVE HEAD AT.
  4586.  
  4587.                $05       sECTOR TO POSITION THE DISK DRIVE HEAD AT.
  4588.  
  4589.           eRRORS: sEE aPPENDIX
  4590.  
  4591.  
  4592.  
  4593.           dESCRIPTION:  mAKES SURE THAT CURRENT DRIVE HAS TURBODOS RUNNING.
  4594.  
  4595.           iT ALSO POSITIONS THE HEAD OVER A PARTICULAR SECTOR.
  4596.  
  4597.  
  4598.  
  4599.  
  4600.  
  4601.  
  4602.  
  4603.  
  4604.  
  4605.  
  4606.  
  4607.  
  4608.  
  4609.  
  4610.  
  4611.  
  4612.  
  4613.  
  4614.  
  4615.  
  4616.  
  4617.  
  4618.  
  4619.  
  4620.  
  4621.  
  4622.  
  4623.  
  4624.  
  4625.  
  4626.  
  4627.           geos kERNAL rOUTINES                                      1-33
  4628.  
  4629.  
  4630.  
  4631.  
  4632.  
  4633.           fUNCTION nAME: initms
  4634.  
  4635.           pURPOSE: iNITIALIZES THE MOUSE.
  4636.  
  4637.           cALL ADDRESS: $c14e
  4638.  
  4639.           iNPUT REQUIREMENTS:
  4640.  
  4641.                c FLAG    cLEAR IF THE MOUSE POSITION SHOULD NOT BE SET.
  4642.  
  4643.                c FLAG    sET IF THE MOUSE POSITION SHOULD BE SET.
  4644.  
  4645.                y         tHE ROW POSITION FOR THE MOUSE (OPTIONAL).
  4646.  
  4647.                $18-$19   tHE COLUMN POSITION FOR THE MOUSE (OPTIONAL).
  4648.  
  4649.  
  4650.  
  4651.           dESCRIPTION: tHIS ROUTINE TURNS ON THE MOUSE AND  POSITIONS IT IF
  4652.  
  4653.           DESIRED.  iF THE COLUMN IS SET TO 0,  THE MOUSE IS NOT POSITIONED
  4654.  
  4655.           EVEN  IS  THE c FLAG IS SET.  iT ALSO SETS UP THE BUTTON  PRESSED
  4656.  
  4657.           VECTOR $84a1-$84a2 AND THE CLOSE MENU VECTOR $84a7-$84a8. iT ALSO
  4658.  
  4659.           CLEARS THE FLAG AT $84b6.  tHIS ROUTINE DOES NOT ACTUALLY TURN ON
  4660.  
  4661.           THE MOUSE.  iT CALLS mouson TO RESET BIT 7 OF LOCATION $30;  THIS
  4662.  
  4663.           WILL CAUSE geos'S INTERRUPT ROUTINES TO TURN ON THE MOUSE.
  4664.  
  4665.  
  4666.  
  4667.  
  4668.  
  4669.           fUNCTION nAME: input
  4670.  
  4671.           pURPOSE: iNPUT A LINE OF TEXT FROM THE USER.
  4672.  
  4673.           cALL ADDRESS: $c1ba
  4674.  
  4675.           iNPUT REQUIREMENTS:
  4676.  
  4677.                $02-$03   aDDRESS OF TEXT AND BUFFER.
  4678.  
  4679.                $04       fLAG BYTE ($87d3).
  4680.  
  4681.                $05       rOW TO PRINT TEXT ON (1 ABOVE THE UNDERLINE).
  4682.  
  4683.                $06       mAXIMUM LENGTH OF INPUT.
  4684.  
  4685.                $0a-$0b   vECTOR FOR USER ROUTINE FOR RIGHT MARGIN EXCEEDED
  4686.  
  4687.                          (OPTIONAL).
  4688.  
  4689.                $18-$19   cOLUMN TO START PRINTING TEXT AT.
  4690.  
  4691.                $84a3-$84a4 aDDRESS FOR cr ENTERED.
  4692.  
  4693.           oUTPUT:
  4694.  
  4695.                $24-$25   pOINTER TO TEXT BUFFER (COPIED FROM $02-$03).
  4696.  
  4697.                bUFFER WILL BE MODIFIED ACCORDING TO THE USER'S INPUT.
  4698.  
  4699.                $84a3-$84a4 cLEARED TO $0000.
  4700.  
  4701.  
  4702.  
  4703.           dESCRIPTION:  tHIS ROUTINE IS RATHER POWERFUL. iT DISPLAYS A LINE
  4704.  
  4705.           OF TEXT,  IF THERE WAS ANY TEXT TO DISPLAY.  tHEN THE TEXT CURSOR
  4706.  
  4707.           IS  TURNED  ON.  sEVERAL OF THE JUMP VECTORS ARE USED.
  4708.  
  4709.           $84ab-$84ac  IS THE VECTOR FOR THE RIGHT MARGIN  BEING  EXCEEDED.
  4710.  
  4711.           $84a9-$84aa  IS  THE VECTOR FOR A CHARACTER BEING  TYPED.  $84a3-
  4712.  
  4713.           $84a4 IS THE VECTOR FOR cr ENTERED.  aFTER EVERYTHING IS SET  UP,
  4714.  
  4715.           CONTROL RETURNS TO THE CALLER;  HOWEVER,  THE INPUT IS HANDLED BY
  4716.  
  4717.           THE INTERRUPT DRIVERS. wHEN A cr IS ENTERED, CONTROL GOES THROUGH
  4718.  
  4719.           THE  VECTOR  AT $84a3-$84a4.  tHE FLAG BYTE AT  LOCATION  $04  IS
  4720.  
  4721.           COPIED TO $87d3 AND HAS THE FOLLOWING PROPERTY:  iF BIT 7 IS SET,
  4722.  
  4723.           THEN  USE THE USER'S ROUTINE WHOSE ADDRESS IS STORED AT LOCATIONS
  4724.  
  4725.           $0a-$0b FOR THE RIGHT MARGIN IS EXCEEDED ROUTINE.
  4726.  
  4727.  
  4728.  
  4729.  
  4730.  
  4731.  
  4732.  
  4733.  
  4734.  
  4735.  
  4736.  
  4737.  
  4738.  
  4739.  
  4740.  
  4741.  
  4742.  
  4743.  
  4744.  
  4745.  
  4746.  
  4747.  
  4748.  
  4749.  
  4750.  
  4751.  
  4752.  
  4753.  
  4754.  
  4755.  
  4756.  
  4757.  
  4758.  
  4759.           geos kERNAL rOUTINES                                      1-34
  4760.  
  4761.  
  4762.  
  4763.  
  4764.  
  4765.           fUNCTION nAME: insert
  4766.  
  4767.           pURPOSE: iNSERT A NEW CHAIN IN A vlir FILE.
  4768.  
  4769.           cALL ADDRESS: $c286
  4770.  
  4771.           iNPUT REQUIREMENTS:
  4772.  
  4773.                $8496     cURRENT CHAIN NUMBER.
  4774.  
  4775.           oUTPUT:
  4776.  
  4777.                $8497     iNCREMENTED BY 1.
  4778.  
  4779.           pREPARATORY ROUTINES: vopen
  4780.  
  4781.           eRRORS: sEE aPPENDIX i.
  4782.  
  4783.  
  4784.  
  4785.           dESCRIPTION: a HOLE IS OPENED UP IN THE vlir SECTOR STARTING WITH
  4786.  
  4787.           THE  CURRENT  CHAIN.  tHE  HOLE  IS  FILLED  WITH  $00,$ff.  tHIS
  4788.  
  4789.           REPRESENTS A NULL CHAIN.
  4790.  
  4791.  
  4792.  
  4793.  
  4794.  
  4795.           fUNCTION nAME: intbm
  4796.  
  4797.           pURPOSE: iNTELLIGENT BLOCK MOVE.
  4798.  
  4799.           cALL ADDRESS: $c17e
  4800.  
  4801.           iNPUT REQUIREMENTS:
  4802.  
  4803.                $02-$03   tHE SOURCE ADDRESS.
  4804.  
  4805.                $04-$05   tHE DESTINATION ADDRESS.
  4806.  
  4807.                $06-$07   tHE LENGTH OF THE REGION TO BE MOVED.
  4808.  
  4809.  
  4810.  
  4811.           dESCRIPTION:  tHIS  ROUTINE  WILL  PERFORM  AN  INTELLIGENT,  IE.
  4812.  
  4813.           NONCONFLICTING,  BLOCK MOVE OF MEMORY.  iF AN ATTEMPT IS MADE  TO
  4814.  
  4815.           MOVE A BLOCK OF MEMORY TO A DESTINATION THAT IS WITHIN THE BLOCK,
  4816.  
  4817.           THE  TRANSFER  IS  DONE FROM BACK TO FRONT SO AS TO  PREVENT  THE
  4818.  
  4819.           CONFLICT, OR 'RIPPLE EFFECT'.
  4820.  
  4821.  
  4822.  
  4823.  
  4824.  
  4825.           fUNCTION nAME: intbm2
  4826.  
  4827.           pURPOSE: iDENTICAL TO intbm, BUT WITH INLINE DATA.
  4828.  
  4829.           cALL ADDRESS: $c1b7
  4830.  
  4831.  
  4832.  
  4833.           dESCRIPTION:  tHIS ROUTINE USES THE INLINE DATA TO SET EVERYTHING
  4834.  
  4835.           UP BEFORE CALLING intbm. fOR EXAMPLE:
  4836.  
  4837.                 jsr intbm2
  4838.  
  4839.                .word sOURCE ADDRESS
  4840.  
  4841.                .word dESTINATION ADDRESS
  4842.  
  4843.                .word lENGTH OF TRANSFER
  4844.  
  4845.                cONTROL RETURNS HERE UPON COMPLETION.
  4846.  
  4847.  
  4848.  
  4849.  
  4850.  
  4851.  
  4852.  
  4853.  
  4854.  
  4855.  
  4856.  
  4857.  
  4858.  
  4859.  
  4860.  
  4861.  
  4862.  
  4863.  
  4864.  
  4865.  
  4866.  
  4867.  
  4868.  
  4869.  
  4870.  
  4871.  
  4872.  
  4873.  
  4874.  
  4875.  
  4876.  
  4877.  
  4878.  
  4879.  
  4880.  
  4881.  
  4882.  
  4883.  
  4884.  
  4885.  
  4886.  
  4887.  
  4888.  
  4889.  
  4890.  
  4891.           geos kERNAL rOUTINES                                      1-35
  4892.  
  4893.  
  4894.  
  4895.  
  4896.  
  4897.           fUNCTION nAME: inuse
  4898.  
  4899.           pURPOSE: cHECK IF A DISK SECTOR IS IN USE.
  4900.  
  4901.           cALL ADDRESS: $c2ad
  4902.  
  4903.           iNPUT REQUIREMENTS:
  4904.  
  4905.                $0e       tRACK TO BE CHECKED.
  4906.  
  4907.                $0f       sECTOR TO BE CHECKED.
  4908.  
  4909.                $8200-$82ff tRACK 18 SECTOR 0, bam BUFFER.
  4910.  
  4911.           oUTPUT:
  4912.  
  4913.                x         iNDEX INTO bam OF THE APPROPRIATE BYTE.
  4914.  
  4915.                z FLAG    sET IF THE SECTOR IS IN USE.
  4916.  
  4917.                $11       iNDEX TO TRACK'S DATA IN bam.
  4918.  
  4919.                $13       bIT MASK FOR THE DESIRED SECTOR.
  4920.  
  4921.           pREPARATORY ROUTINES: rd180
  4922.  
  4923.  
  4924.  
  4925.           dESCRIPTION: tHIS ROUTINE IS USED BY alloc TO TEST IF A SECTOR IS
  4926.  
  4927.           ALREADY IN USE.
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  
  4933.           fUNCTION nAME: invbox
  4934.  
  4935.           pURPOSE: iNVERTS THE PIXELS IN A BOX.
  4936.  
  4937.           cALL ADDRESS: $c12a
  4938.  
  4939.           iNPUT REQUIREMENTS:
  4940.  
  4941.                $06       tHE TOP MARGIN.
  4942.  
  4943.                $07       tHE BOTTOM MARGIN.
  4944.  
  4945.                $08-$09   tHE LEFT MARGIN.
  4946.  
  4947.                $0a-$0b   tHE RIGHT MARGIN.
  4948.  
  4949.  
  4950.  
  4951.           dESCRIPTION:  tHIS ROUTINE REVERSES THE PIXELS IN A GIVEN BOX  BY
  4952.  
  4953.           REPEATEDLY CALLING invlin. sEE ALSO rowadr.
  4954.  
  4955.  
  4956.  
  4957.  
  4958.  
  4959.           fUNCTION nAME: invlin
  4960.  
  4961.           pURPOSE: iNVERTS A HORIZONAL LINE ON THE SCREEN.
  4962.  
  4963.           cALL ADDRESS: $c11b
  4964.  
  4965.           iNPUT REQUIREMENTS:
  4966.  
  4967.                $08-$09   tHE LEFT MARGIN.
  4968.  
  4969.                $0a-$0b   tHE RIGHT MARGIN.
  4970.  
  4971.                $18       tHE ROW NUMBER.
  4972.  
  4973.  
  4974.  
  4975.           dESCRIPTION:  tHIS  ROUTINE REVERSES THE PIXELS ON  A  HORIZONTAL
  4976.  
  4977.           LINE ON THE HIRES SCREEN. iF THE PIXEL WAS ON IT WILL NOW BE OFF;
  4978.  
  4979.           IF IT WAS OFF IT WILL NOW BE TURNED ON. sEE ALSO rowadr.
  4980.  
  4981.  
  4982.  
  4983.  
  4984.  
  4985.  
  4986.  
  4987.  
  4988.  
  4989.  
  4990.  
  4991.  
  4992.  
  4993.  
  4994.  
  4995.  
  4996.  
  4997.  
  4998.  
  4999.  
  5000.  
  5001.  
  5002.  
  5003.  
  5004.  
  5005.  
  5006.  
  5007.  
  5008.  
  5009.  
  5010.  
  5011.  
  5012.  
  5013.  
  5014.  
  5015.  
  5016.  
  5017.  
  5018.  
  5019.  
  5020.  
  5021.  
  5022.  
  5023.           geos kERNAL rOUTINES                                      1-36
  5024.  
  5025.  
  5026.  
  5027.  
  5028.  
  5029.           fUNCTION nAME: irqrtn
  5030.  
  5031.           pURPOSE: hANDLES  SEVERAL  ITEMS  THAT  OCCUR  AT  REGULAR  TIMED
  5032.  
  5033.                    INTERVALS.
  5034.  
  5035.           cALL ADDRESS: $c100
  5036.  
  5037.           oUTPUTS: sEE DESCRIPTION
  5038.  
  5039.  
  5040.  
  5041.           dESCRIPTION: geos SETS UP THE RASTER INTERRUPT ON THE vic CHIP TO
  5042.  
  5043.           CAUSE  AN INTERRUPT EVERY SIXTIETH OF A SECOND.  tHIS ROUTINE  IS
  5044.  
  5045.           CALLED  BY  geos AFTER EACH INTERRUPT.  fIRST IT READS THE  INPUT
  5046.  
  5047.           DEVICE  AND  UPDATES  THE MOUSE'S  POSITION,  TURNING  IT  ON  IF
  5048.  
  5049.           NECESSARY. iT THEN SCANS THE COMMAND TABLE AT $8719 TO SEE IF ANY
  5050.  
  5051.           OF THE COMMAND BYTES HAVE BOTH BITS 4 AND 5 RESET. iF SO, IT THEN
  5052.  
  5053.           DECREMENTS  THE  ASSOCIATED  COUNTER AT  $86f1.  iF  THE  COUNTER
  5054.  
  5055.           REACHES  ZERO,  ITS  VALUE IS RESET AND BIT 7 OF  THE  ASSOCIATED
  5056.  
  5057.           COMMAND  BYTE IS SET.  tHIS WILL CAUSE THE APPROPRIATE SUBROUTINE
  5058.  
  5059.           TO BE EXECUTED THE NEXT TIME THE TABLE IS POLLED.  tHE NEXT  PART
  5060.  
  5061.           OF THIS ROUTINE IS TO DECREMENT ALL NONZERO COUNTERS IN THE STACK
  5062.  
  5063.           AT  $877f.  tHE ROUTINE TO BLINK THE TEXT CURSOR IS CALLED  NEXT.
  5064.  
  5065.           fINALLY, THE RANDOM NUMBER GENERATOR AT $850a IS UPDATED.
  5066.  
  5067.  
  5068.  
  5069.  
  5070.  
  5071.           fUNCTION nAME: lchain
  5072.  
  5073.           pURPOSE: lOAD MEMORY FROM DISK.
  5074.  
  5075.           cALL ADDRESS: $c1ff
  5076.  
  5077.           iNPUT REQUIREMENTS:
  5078.  
  5079.                $04       iNITIAL TRACK NUMBER.
  5080.  
  5081.                $05       iNITIAL SECTOR NUMBER.
  5082.  
  5083.                $06-$07   bYTE COUNT OF LOAD.
  5084.  
  5085.                $10-$11   lOAD ADDRESS.
  5086.  
  5087.           oUTPUT:
  5088.  
  5089.                $0c       iNDEX TO LAST SECTOR LOADED.
  5090.  
  5091.                $8300-    lIST OF TRACKS AND SECTORS TRACK WERE LOADED.
  5092.  
  5093.           pREPARATORY ROUTINES: loadad
  5094.  
  5095.           eRRORS: sEE aPPENDIX i.
  5096.  
  5097.  
  5098.  
  5099.           dESCRIPTION:  tHIS ROUTINE ASSUMES THAT THE FILE HAS BEEN LOCATED
  5100.  
  5101.           IN THE DIRECTORY AND THAT THE INITIAL TRACK AND SECTOR ARE KNOWN.
  5102.  
  5103.  
  5104.  
  5105.  
  5106.  
  5107.           fUNCTION nAME: ldswap
  5108.  
  5109.           pURPOSE: rELOAD THE swapfile.
  5110.  
  5111.           cALL ADDRESS: $c23e
  5112.  
  5113.           pREPARATORY ROUTINES: loadsw
  5114.  
  5115.           eRRORS: sEE aPPENDIX i.
  5116.  
  5117.  
  5118.  
  5119.           dESCRIPTION:  tHIS ROUTINE RELOADS THE swapfile, THEN DELETES IT.
  5120.  
  5121.           tHE  LAST WINDOW DESCRIPTION IS REPROCESSED TO RESTORE THE SCREEN
  5122.  
  5123.           AND  CONTROL  IS  RETURNED TO THE ORIGINAL  PROGRAM  THAT  CALLED
  5124.  
  5125.           loadsw.
  5126.  
  5127.  
  5128.  
  5129.  
  5130.  
  5131.  
  5132.  
  5133.  
  5134.  
  5135.  
  5136.  
  5137.  
  5138.  
  5139.  
  5140.  
  5141.  
  5142.  
  5143.  
  5144.  
  5145.  
  5146.  
  5147.  
  5148.  
  5149.  
  5150.  
  5151.  
  5152.  
  5153.  
  5154.  
  5155.           geos kERNAL rOUTINES                                      1-37
  5156.  
  5157.  
  5158.  
  5159.  
  5160.  
  5161.           fUNCTION nAME: line
  5162.  
  5163.           pURPOSE: dRAWS, ERASES OR COPIES A LINE ON THE HIRES SCREEN.
  5164.  
  5165.           cALL ADDRESS: $c130
  5166.  
  5167.           iNPUT REQUIREMENTS:
  5168.  
  5169.                n FLAG  c fLAG   oPERATION
  5170.  
  5171.                   1       x     cOPY
  5172.  
  5173.                   0       1     dRAW
  5174.  
  5175.                   0       0     eRASE
  5176.  
  5177.                $08-$09   tHE COLUMN FOR THE FIRST ENDPOINT.
  5178.  
  5179.                $0a-$0b   tHE COLUMN FOR THE SECOND ENDPOINT.
  5180.  
  5181.                $18       tHE ROW FOR THE FIRST ENDPOINT.
  5182.  
  5183.                $19       tHE ROW FOR THE SECOND ENDPOINT.
  5184.  
  5185.  
  5186.  
  5187.           dESCRIPTION:  tHIS  IS A VERY VERSATILE ROUTINE.  iT CAN COPY  AN
  5188.  
  5189.           ARBITRARY  LINE  FROM ONE SCREEN TO ANOTHER,  AS WELL AS DRAW  OR
  5190.  
  5191.           ERASE LINES.  tHIS ROUTINE PLACES NO RESTRICTIONS ON THE RELATIVE
  5192.  
  5193.           POSITIONS OF THE ENDPOINTS.  tHIS ROUTINE CALLS plot TO PLOT  THE
  5194.  
  5195.           POINTS. sEE ALSO rowadr.
  5196.  
  5197.  
  5198.  
  5199.  
  5200.  
  5201.           fUNCTION nAME: load
  5202.  
  5203.           pURPOSE: lOAD AND RUN A FILE.
  5204.  
  5205.           cALL ADDRESS: $c208
  5206.  
  5207.           iNPUT REQUIREMENTS:
  5208.  
  5209.                $02       fLAG BYTE (sEE DESCRIPTION).
  5210.  
  5211.                $06-$07   oPTIONAL DATA POINTER.
  5212.  
  5213.                $08-$09   oPTIONAL DATA POINTER.
  5214.  
  5215.                $0e-$0f   pOINTER TO FILENAME.
  5216.  
  5217.                $10-$11   lOAD ADDRESS (OPTIONAL).
  5218.  
  5219.           oUTPUT:
  5220.  
  5221.                $8100-$81ff iNFO SECTOR FOR FILE.
  5222.  
  5223.                $8300-$83ff tABLE OF TRACKS AND SECTORS THAT WERE LOADED.
  5224.  
  5225.           eRRORS: sEE aPPENDIX
  5226.  
  5227.  
  5228.  
  5229.           dESCRIPTION:  tHIS ROUTINE LOADS AND RUNS A GIVEN FILE.  tHE FILE
  5230.  
  5231.           MUST BE ONE OF THE FOLLOWING geos TYPES:
  5232.  
  5233.                          sYSTEM fILE         dESK aCCESSORY
  5234.  
  5235.                          aPPLICATION         aPPLICATION dATA
  5236.  
  5237.                          pRINTER dRIVER      iNPUT dRIVER
  5238.  
  5239.           tHE EXECUTION ADDRESS IS TAKEN FROM THE INFORMATION SECTOR. iF IT
  5240.  
  5241.           IS ZERO,  THE FILE IS NOT EXECUTED, ONLY LOADED.  vlir FILES HAVE
  5242.  
  5243.           ONLY  THEIR  FIRST CHAIN LOADED.  dESK aCCESSORIES SWAP  OUT  THE
  5244.  
  5245.           MEMORY  THAT  THEY USE TO  THE  swapfile.  uPON  COMPLETION,  THE
  5246.  
  5247.           swapfile  IS  RELOADED.  tHE  FLAG BYTE AT LOCATION $02  HAS  TWO
  5248.  
  5249.           PURPOSES.  tHIS  FIRST  IS IF BIT 0 IS SET AND THE  FILE  WAS  AN
  5250.  
  5251.           APPLICATION, THEN IT IS NOT EXECUTED.  aLSO IF BIT 0 IS SET, THEN
  5252.  
  5253.           LOCATIONS  $10-$11  HAVE THE LOAD ADDRESS;  OTHERWISE,  THE  LOAD
  5254.  
  5255.           ADDRESS IS TAKEN FROM THE INFORMATION SECTOR.  tHIS BIT DOES  NOT
  5256.  
  5257.           APPLY  TO dESK aCCESSORIES.  iF EITHER BIT 6 OR 7 ARE  SET,  THEN
  5258.  
  5259.           $06-$07  POINTS TO 16 BYTES WHICH ARE COPIED TO $8453 (dISK  NAME
  5260.  
  5261.           FOR DRIVE 10),  AND $07-$08 POINT TO 16 BYTES WHICH ARE COPIED TO
  5262.  
  5263.           $8442 (dISK NAME FOR DRIVE 11). 
  5264.  
  5265.  
  5266.  
  5267.  
  5268.  
  5269.  
  5270.  
  5271.  
  5272.  
  5273.  
  5274.  
  5275.  
  5276.  
  5277.  
  5278.  
  5279.  
  5280.  
  5281.  
  5282.  
  5283.  
  5284.  
  5285.  
  5286.  
  5287.           geos kERNAL rOUTINES                                      1-38
  5288.  
  5289.  
  5290.  
  5291.  
  5292.  
  5293.           fUNCTION nAME: load2
  5294.  
  5295.           pURPOSE: lOAD A FILE.
  5296.  
  5297.           cALL ADDRESS: $c211
  5298.  
  5299.           iNPUT REQUIREMENTS:
  5300.  
  5301.                $14-$15   pOINTER TO DIRECTORY ENTRY.
  5302.  
  5303.                $886b     fLAG BYTE.
  5304.  
  5305.                $886c-$886d lOAD ADDRESS.
  5306.  
  5307.           oUTPUT:
  5308.  
  5309.                $8100-$81ff iNFO SECTOR FOR FILE.
  5310.  
  5311.                $8300-$83ff tABLE OF TRACKS AND SECTORS THAT WERE LOADED.
  5312.  
  5313.           pREPARATORY ROUTINES: lookup (pOINTER MUST BE COPIED)
  5314.  
  5315.           eRRORS: sEE aPPENDIX
  5316.  
  5317.  
  5318.  
  5319.           dESCRIPTION:  tHIS ROUTINE IS CALLED BY load TO PERFORM THE LOAD.
  5320.  
  5321.           tHIS  ROUTINE DOES NOT TRY TO EXECUTE THE FILE LOADED,  NOR IS IT
  5322.  
  5323.           LIMITED TO THE FILE TYPES THAT load IS. hOWEVER, THIS ROUTINE CAN
  5324.  
  5325.           NOT  BE USED TO LOAD nON-geos FILES BECAUSE THE INFO SECTOR  MUST
  5326.  
  5327.           BE  PRESENT.  iF BIT 0 OF LOCATION $886b IS SET,  THEN  THE  LOAD
  5328.  
  5329.           ADDRESS  IS TAKEN FROM LOCATIONS $886c-$886d INSTEAD OF THE  INFO
  5330.  
  5331.           SECTOR.  tHE  DIRECTORY ENTRY  POINTER SHOULD POINT TO $8400  AND
  5332.  
  5333.           NOT  THE  POINTER  RETURNED  BY lookup.  tHIS IS  DUE  TO  MEMORY
  5334.  
  5335.           CONFLICTS THAT WILL ARISE.
  5336.  
  5337.  
  5338.  
  5339.  
  5340.  
  5341.           fUNCTION nAME: load3
  5342.  
  5343.           pURPOSE: lOAD AND POSSIBLY RUN A FILE.
  5344.  
  5345.           cALL ADDRESS: $c21d
  5346.  
  5347.                $02       fLAG BYTE (sEE DESCRIPTION).
  5348.  
  5349.                $06-$07   oPTIONAL DATA POINTER.
  5350.  
  5351.                $08-$09   oPTIONAL DATA POINTER.
  5352.  
  5353.                $0e-$0f   pOINTER TO FILENAME.
  5354.  
  5355.                $10-$11   lOAD ADDRESS (OPTIONAL).
  5356.  
  5357.           oUTPUT:
  5358.  
  5359.                $8100-$81ff iNFO SECTOR FOR FILE.
  5360.  
  5361.                $8300-$83ff tABLE OF TRACKS AND SECTORS THAT WERE LOADED.
  5362.  
  5363.           eRRORS: sEE aPPENDIX
  5364.  
  5365.  
  5366.  
  5367.           dESCRIPTION:  tHIS ROUTINE IS CALLED BY load TO LOAD  aPPLICATION
  5368.  
  5369.           FILES.  lIKE load2, THIS ROUTINE IS NOT LIMITED TO ANY PARTICULAR
  5370.  
  5371.           FILE TYPE, EXCEPT THAT IT ALSO CAN NOT LOAD A nON-geos FILE.  sEE
  5372.  
  5373.           load  FOR A DESCRIPTION OF THE FLAG BYTE,  DATA POINTERS AND LOAD
  5374.  
  5375.           ADDRESS.
  5376.  
  5377.  
  5378.  
  5379.  
  5380.  
  5381.  
  5382.  
  5383.  
  5384.  
  5385.  
  5386.  
  5387.  
  5388.  
  5389.  
  5390.  
  5391.  
  5392.  
  5393.  
  5394.  
  5395.  
  5396.  
  5397.  
  5398.  
  5399.  
  5400.  
  5401.  
  5402.  
  5403.  
  5404.  
  5405.  
  5406.  
  5407.  
  5408.  
  5409.  
  5410.  
  5411.  
  5412.  
  5413.  
  5414.  
  5415.  
  5416.  
  5417.  
  5418.  
  5419.           geos kERNAL rOUTINES                                      1-39
  5420.  
  5421.  
  5422.  
  5423.  
  5424.  
  5425.           fUNCTION nAME: loadad
  5426.  
  5427.           pURPOSE: gET THE LOAD ADDRESS OF A FILE.
  5428.  
  5429.           cALL ADDRESS: $c229
  5430.  
  5431.           iNPUT REQUIREMENTS:
  5432.  
  5433.                $14-$15   pOINTER TO DIRECTORY ENTRY.
  5434.  
  5435.           oUTPUT:
  5436.  
  5437.                $04       tRACK OF FILE'S FIRST SECTOR.
  5438.  
  5439.                $05       sECTOR OF FILE'S FIRST SECTOR.
  5440.  
  5441.                $10-$11   lOAD ADDRESS FOR FILE.
  5442.  
  5443.                $8100-$81ff iNFO SECTOR FOR FILE.
  5444.  
  5445.                $8300-$8301 tRACK AND SECTOR OF INFO SECTOR.
  5446.  
  5447.           eRRORS: sEE aPPENDIX i.
  5448.  
  5449.  
  5450.  
  5451.           dESCRIPTION:  tHIS  ROUTINE LOADS THE INFO SECTOR FOR A FILE INTO
  5452.  
  5453.           THE  BUFFER AT $8100.  tHE LOAD ADDRESS IS SET FROM  $8147-$8148.
  5454.  
  5455.           tHIS ROUTINE IS CALLED BY ALL THE LOAD ROUTINES.
  5456.  
  5457.  
  5458.  
  5459.  
  5460.  
  5461.           fUNCTION nAME: loadsw
  5462.  
  5463.           pURPOSE: lOAD AND RUN A FILE USING THE swapfile.
  5464.  
  5465.           cALL ADDRESS: $c217
  5466.  
  5467.           iNPUT REQUIREMENTS:
  5468.  
  5469.                $14-$15   pOINTER TO DIRECTORY ENTRY.
  5470.  
  5471.           oUTPUT:
  5472.  
  5473.                $8100-$81ff iNFO SECTOR FOR FILE (mODIFIED).
  5474.  
  5475.                $8300-$83ff lIST OF TRACKS AND SECTORS THAT WERE LOADED.
  5476.  
  5477.           pREPARATORY ROUTINES: lookup (pOINTER MUST BE COPIED).
  5478.  
  5479.           eRRORS: sEE aPPENDIX i.
  5480.  
  5481.  
  5482.  
  5483.           dESCRIPTION:  tHIS ROUTINE IS USED TO LOAD dESK aCCESSORIES.  tHE
  5484.  
  5485.           INFO  SECTOR IS LOADED TO DETERMINE THE NECESSARY MEMORY  REGION.
  5486.  
  5487.           tHIS  REGION  IS SAVED TO A FILE CALLED  'swapfile',  WHOSE  INFO
  5488.  
  5489.           SECTOR  IS THE SAME AS THE FILE TO BE LOADED.  tHE DIFFERENCE  IS
  5490.  
  5491.           THAT THE TEXT FIELD IS CLEARED,  AND THE FILE TYPE IS sYSTEM FILE
  5492.  
  5493.           (tYPE 4). ldswap MUST BE EVENTUALLY CALLED TO RELOAD THE swapfile
  5494.  
  5495.           AND  RETURN  TO NORMAL OPERATION.  tHE  DIRECTORY  ENTRY  POINTER
  5496.  
  5497.           SHOULD  POINT TO $8400, AND THE POINTER RETURNED BY lookup.  tHIS
  5498.  
  5499.           IS DUE TO MEMORY CONFLICTS THAT WILL ARISE.
  5500.  
  5501.  
  5502.  
  5503.  
  5504.  
  5505.  
  5506.  
  5507.  
  5508.  
  5509.  
  5510.  
  5511.  
  5512.  
  5513.  
  5514.  
  5515.  
  5516.  
  5517.  
  5518.  
  5519.  
  5520.  
  5521.  
  5522.  
  5523.  
  5524.  
  5525.  
  5526.  
  5527.  
  5528.  
  5529.  
  5530.  
  5531.  
  5532.  
  5533.  
  5534.  
  5535.  
  5536.  
  5537.  
  5538.  
  5539.  
  5540.  
  5541.  
  5542.  
  5543.  
  5544.  
  5545.  
  5546.  
  5547.  
  5548.  
  5549.  
  5550.  
  5551.           geos kERNAL rOUTINES                                      1-40
  5552.  
  5553.  
  5554.  
  5555.  
  5556.  
  5557.           fUNCTION nAME: lookup
  5558.  
  5559.           pROCEDURE: lOOKUP A FILENAME IN THE DIRECTORY.
  5560.  
  5561.           cALL ADDRESS: $c20b
  5562.  
  5563.           iNPUT REQUIREMENTS:
  5564.  
  5565.                $0e-$0f   pOINTER TO FILENAME.
  5566.  
  5567.                $886e     fLAG BYTE.
  5568.  
  5569.           oUTPUT:
  5570.  
  5571.                $04       tRACK FOR DIRECTORY SECTOR.
  5572.  
  5573.                $05       sECTOR FOR DIRECTORY SECTOR.
  5574.  
  5575.                $0c-$0d   pOINTER TO FILE NAME ENTRY.
  5576.  
  5577.                $8000-$80ff dIRECTORY SECTOR.
  5578.  
  5579.                $8400-$841d cOPY OF DIRECTORY ENTRY.
  5580.  
  5581.           eRRORS: sEE aPPENDIX
  5582.  
  5583.  
  5584.  
  5585.           dESCRIPTION:  tHIS IS A VERY USEFUL ROUTINE.  gIVEN A TEXT STRING
  5586.  
  5587.           OF A FILENAME, THIS ROUTINE WILL FIND IT IN THE DIRECTORY. iF THE
  5588.  
  5589.           FLAG  BYTE  AT $886e IS $00,  THEN BOTH DRIVES 8 AND  9  WILL  BE
  5590.  
  5591.           SCANNED IF NECESSARY. iF THE FLAG IS $ff, THEN THE LOOKUP IS ONLY
  5592.  
  5593.           TO THE CURRENT DRIVE.  iF THERE IS ONLY ONE DRIVE, THEN THIS FLAG
  5594.  
  5595.           HAS  NO EFFECT.  tHE DIRECTORY SECTOR IS LOADED INTO A BUFFER  AT
  5596.  
  5597.           $8000, AND THE TRACK AND SECTOR ARE IN LOCATIONS $04 AND $05. tHE
  5598.  
  5599.           PARTICULAR  DIRECTORY ENTRY IS COPIED TO $8400 AND THE POINTER TO
  5600.  
  5601.           THE ENTRY IN THE BUFFER IS STORED AT $0c-$0d.
  5602.  
  5603.  
  5604.  
  5605.  
  5606.  
  5607.           fUNCTION nAME: main
  5608.  
  5609.           pURPOSE: eNTERS geos'S MAIN LOOP.
  5610.  
  5611.           cALL ADDRESS: $c1c3
  5612.  
  5613.           iNPUT REQUIREMENTS:
  5614.  
  5615.                $849b-$849C aDDRESS OF USER'S ADDITION TO geos'S MAIN LOOP
  5616.  
  5617.                            (OPTIONAL).
  5618.  
  5619.  
  5620.  
  5621.           dESCRIPTION: tHIS LOOP DOES WHATEVER POLLING IS NEEDED. fIRST THE
  5622.  
  5623.           BUTTON  IS  CHECKED,  AS WELL AS  THE  KEYBOARD AND  THE  MOUSE'S
  5624.  
  5625.           POSITION.  tHE COMMAND TABLE AT $8719 (sEE cmdtbl) IS SCANNED FOR
  5626.  
  5627.           EXECUTABLE  ROUTINES.  tHEN THE COUNTERS AT $877f (sEE delay) ARE
  5628.  
  5629.           CHECKED;  THOSE  THAT  HAVE REACHED ZERO  HAVE  THEIR  ASSOCIATED
  5630.  
  5631.           ROUTINES EXECUTED. tHE MEMORY IMAGE OF THE CLOCK IS UPDATED. tHEN
  5632.  
  5633.           THE ALARM CLOCK IS CHECKED.  fINALLY,  THE USER'S ADDITION TO THE
  5634.  
  5635.           MAIN  LOOP,  IF THERE IS ONE,  IS EXECUTED.  tHIS LOOP  CONTINUES
  5636.  
  5637.           FOREVER.
  5638.  
  5639.  
  5640.  
  5641.  
  5642.  
  5643.  
  5644.  
  5645.  
  5646.  
  5647.  
  5648.  
  5649.  
  5650.  
  5651.  
  5652.  
  5653.  
  5654.  
  5655.  
  5656.  
  5657.  
  5658.  
  5659.  
  5660.  
  5661.  
  5662.  
  5663.  
  5664.  
  5665.  
  5666.  
  5667.  
  5668.  
  5669.  
  5670.  
  5671.  
  5672.  
  5673.  
  5674.  
  5675.  
  5676.  
  5677.  
  5678.  
  5679.  
  5680.  
  5681.  
  5682.  
  5683.           geos kERNAL rOUTINES                                      1-41
  5684.  
  5685.  
  5686.  
  5687.  
  5688.  
  5689.           fUNCTION nAME: makcur
  5690.  
  5691.           pURPOSE: mAKES A VERTICAL BAR CURSOR SPRITE.
  5692.  
  5693.           cALL ADDRESS: $c1c0
  5694.  
  5695.           iNPUT REQUIREMENTS:
  5696.  
  5697.                a         tHE HEIGHT OF THE CURSOR MINUS 1 (0-41)
  5698.  
  5699.           oUTPUT:
  5700.  
  5701.                sPRITE BLOCK #41 ($8a40-$8a7e) IS MADE INTO A VERTICAL BAR
  5702.  
  5703.                OF A GIVEN HEIGHT.
  5704.  
  5705.  
  5706.  
  5707.           dESCRIPTION:  gIVEN THE DESIRED HEIGHT, A VERTICAL BAR IS CREATED
  5708.  
  5709.           IN THE SPRITE BLOCK.  iF THE HEIGHT IS GREATER THAN 21,  THEN THE
  5710.  
  5711.           HEIGHT  IS  HALVED  AND THE SPRITE IS  y-EXPANDED.  nO  CHECK  IS
  5712.  
  5713.           PERFORMED ON THE HEIGHT. iF A HEIGHT GREATER THAN 41 IS USED THEN
  5714.  
  5715.           THE MEMORY FOR NEXT FEW SPRITES WILL BE AFFECTED.
  5716.  
  5717.  
  5718.  
  5719.  
  5720.  
  5721.           fUNCTION nAME: masl
  5722.  
  5723.           pURPOSE: 16 BIT MULTIPLE ARITHMETIC SHIFT LEFTS.
  5724.  
  5725.           cALL ADDRESS: $c15d
  5726.  
  5727.           iNPUT REQUIREMENTS:
  5728.  
  5729.                y         tHE SHIFT COUNT.
  5730.  
  5731.                x         tHE ADDRESS OF THE 16 BIT VALUE TO BE SHIFTED.
  5732.  
  5733.           oUTPUT:
  5734.  
  5735.                x         rESULT OF SHIFTS.
  5736.  
  5737.  
  5738.  
  5739.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x HAS
  5740.  
  5741.           THE  ADDRESS  OF A 16 BIT INTEGER IN ZERO PAGE,  WHICH IS  TO  BE
  5742.  
  5743.           SHIFTED LEFT BY THE COUNT IN y.
  5744.  
  5745.  
  5746.  
  5747.  
  5748.  
  5749.  
  5750.  
  5751.  
  5752.  
  5753.  
  5754.  
  5755.  
  5756.  
  5757.  
  5758.  
  5759.  
  5760.  
  5761.  
  5762.  
  5763.  
  5764.  
  5765.  
  5766.  
  5767.  
  5768.  
  5769.  
  5770.  
  5771.  
  5772.  
  5773.  
  5774.  
  5775.  
  5776.  
  5777.  
  5778.  
  5779.  
  5780.  
  5781.  
  5782.  
  5783.  
  5784.  
  5785.  
  5786.  
  5787.  
  5788.  
  5789.  
  5790.  
  5791.  
  5792.  
  5793.  
  5794.  
  5795.  
  5796.  
  5797.  
  5798.  
  5799.  
  5800.  
  5801.  
  5802.  
  5803.  
  5804.  
  5805.  
  5806.  
  5807.  
  5808.  
  5809.  
  5810.  
  5811.  
  5812.  
  5813.  
  5814.  
  5815.           geos kERNAL rOUTINES                                      1-42
  5816.  
  5817.  
  5818.  
  5819.  
  5820.  
  5821.           fUNCTION nAME: menu
  5822.  
  5823.           pURPOSE: dRAWS AND SETS EVERYTHING UP FOR PULL DOWN MENUS AND
  5824.  
  5825.                    SUBMENUS.
  5826.  
  5827.           cALL ADDRESS: $c151
  5828.  
  5829.           iNPUT REQUIREMENTS:
  5830.  
  5831.                a         mENU OPTION TO POSITION MOUSE ON (0 TO #OPTIONS-1)
  5832.  
  5833.                $02-$03   pOINTER TO THE MENU DESCRIPTOR.
  5834.  
  5835.  
  5836.  
  5837.           dESCRIPTION:  tHIS  IS  AN extremely POWERFUL  ROUTINE.  iT  DOES
  5838.  
  5839.           everything  FOR  MENU  PROCESSING.  oNCE CONTROL RETURNS  TO  THE
  5840.  
  5841.           PROGRAM THAT CREATED THE MENU, THE PROGRAM CAN RETURN TO THE geos
  5842.  
  5843.           MAIN  LINE,  OR DO ANYTHING ELSE.  iT IS IMPORTANT TO  NOTE  THAT
  5844.  
  5845.           MENUS ONLY APPEAR ON SCREEN 1. lOCATION $2f IS SAVED AND RESTORED
  5846.  
  5847.           DURING  THE  DRAWING PHASE.  tHE LEFT AND RIGHT MARGINS ARE  ALSO
  5848.  
  5849.           LEFT  UNALTERED.  tHE  FOLLOWING  IS  A  DESCRIPTION  OF  A  MENU
  5850.  
  5851.           DESCRIPTOR:
  5852.  
  5853.                #BYTES    dESCRIPTION
  5854.  
  5855.                   1      tOP MARGIN OF ENTIRE MENU.
  5856.  
  5857.                   1      bOTTOM MARGIN OF ENTIRE MENU.
  5858.  
  5859.                   2      lEFT MARGIN OF ENTIRE MENU.
  5860.  
  5861.                   2      rIGHT MARGIN OF ENTIRE MENU.
  5862.  
  5863.                   1      cODE BYTE:
  5864.  
  5865.                           BIT 7 - VERTICAL MENU.
  5866.  
  5867.                           BIT 6 - SET  SECONDARY  BOX  DESCRIPTOR  TO  FULL
  5868.  
  5869.                                   SCREEN; THIS ALLOWS THE MOUSE TO BE MOVED
  5870.  
  5871.                                   OUTSIDE  OF A MENU WITHOUT CAUSING IT  TO
  5872.  
  5873.                                   BE CLOSED.
  5874.  
  5875.                           BITS 0-4 - # ENTRIES IN MENU.
  5876.  
  5877.           tHIS  IS  FOLLOWED  BY SETS OF 5 BYTES;  AS  MANY  AS  THERE  ARE
  5878.  
  5879.           ENTRIES.
  5880.  
  5881.                   2      aDDRESS OF THE TEXT FOR THIS OPTION.
  5882.  
  5883.                   1      cODE BYTE WHICH DESCRIBES WHAT TO DO WITH THE
  5884.  
  5885.                          ADDRESS THAT FOLLOWS:
  5886.  
  5887.                           BIT 7 - OPERAND IS THE ADDRESS OF A SUBMENU
  5888.  
  5889.                                   DESCRIPTOR.
  5890.  
  5891.                           BIT 6 - CALL SUBROUTINE, IT MUST RETURN A RESULT
  5892.  
  5893.                                   IN $02-$03 WHICH IS EITHER 0 OR THE
  5894.  
  5895.                                   ADDRESS OF THE NEXT SUBMENU.
  5896.  
  5897.                           iF  NEITHER BIT IS SET,  THEN WHEN THIS OPTION IS
  5898.  
  5899.                           SELECTED  IT  WILL FLASH  BEFORE  THE ROUTINE  IS
  5900.  
  5901.                           EXECUTED.  cONTROL  DOES NOT RETURN TO  THE  MENU
  5902.  
  5903.                           PROCESSOR.
  5904.  
  5905.                   2       aDDRESS OF EITHER A SUBMENU DESCRIPTOR OR A
  5906.  
  5907.                           ROUTINE TO BE EXECUTED.
  5908.  
  5909.  
  5910.  
  5911.  
  5912.  
  5913.  
  5914.  
  5915.  
  5916.  
  5917.  
  5918.  
  5919.  
  5920.  
  5921.  
  5922.  
  5923.  
  5924.  
  5925.  
  5926.  
  5927.  
  5928.  
  5929.  
  5930.  
  5931.  
  5932.  
  5933.  
  5934.  
  5935.  
  5936.  
  5937.  
  5938.  
  5939.  
  5940.  
  5941.  
  5942.  
  5943.  
  5944.  
  5945.  
  5946.  
  5947.           geos kERNAL rOUTINES                                      1-43
  5948.  
  5949.  
  5950.  
  5951.  
  5952.  
  5953.           fUNCTION nAME: mlsr
  5954.  
  5955.           pURPOSE: 16 BIT MULTIPLE LOGICAL SHIFT RIGHTS.
  5956.  
  5957.           cALL ADDRESS: $c262
  5958.  
  5959.           iNPUT REQUIREMENTS:
  5960.  
  5961.                y         tHE SHIFT COUNT.
  5962.  
  5963.                x         tHE ADDRESS OF THE 16 BIT VALUE TO BE SHIFTED.
  5964.  
  5965.           oUTPUT:
  5966.  
  5967.                x         rESULT OF SHIFTS.
  5968.  
  5969.  
  5970.  
  5971.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x HAS
  5972.  
  5973.           THE  ADDRESS  OF A 16 BIT INTEGER IN ZERO PAGE,  WHICH IS  TO  BE
  5974.  
  5975.           SHIFTED RIGHT BY THE COUNT IN y.
  5976.  
  5977.  
  5978.  
  5979.  
  5980.  
  5981.           fUNCTION nAME: mousof
  5982.  
  5983.           pURPOSE: tURNS OFF THE MOUSE.
  5984.  
  5985.           cALL ADDRESS: $c18d
  5986.  
  5987.  
  5988.  
  5989.           dESCRIPTION:  tHIS  ROUTINE  RESETS BIT 7 OF  LOCATION  $30,  AND
  5990.  
  5991.           ACTUALLY TURNS OFF THE MOUSE SPRITE.
  5992.  
  5993.  
  5994.  
  5995.  
  5996.  
  5997.           fUNCTION nAME: mouson
  5998.  
  5999.           pURPOSE: tURNS ON THE MOUSE.
  6000.  
  6001.           cALL ADDRESS: $c18a
  6002.  
  6003.  
  6004.  
  6005.           dESCRIPTION:  tHIS  ROUTINE  SETS  BIT 7  OF  LOCATION  $30.  tHE
  6006.  
  6007.           INTERRUPT ROUTINES WILL TURN ON THE MOUSE WHEN IT TRIES TO UPDATE
  6008.  
  6009.           ITS POSITION.
  6010.  
  6011.  
  6012.  
  6013.  
  6014.  
  6015.           fUNCTION nAME: neg16
  6016.  
  6017.           pURPOSE: nEGATES A 16 BIT VALUE.
  6018.  
  6019.           cALL ADDRESS: $c172
  6020.  
  6021.           iNPUT REQUIREMENTS:
  6022.  
  6023.                x         tHE ADDRESS OF THE 16 BIT INTEGER
  6024.  
  6025.           oUTPUT:
  6026.  
  6027.                x         tHE ADDRESS OF THE 16 BIT RESULT.
  6028.  
  6029.  
  6030.  
  6031.           dESCRIPTION:  tHIS  ROUTINE IS ONE OF THE geos MATH  ROUTINES.  x
  6032.  
  6033.           POINTS TO A 16 BIT VALUE WHICH IS NEGATED.  tHE VALUE OF x IS NOT
  6034.  
  6035.           AFFECTED.
  6036.  
  6037.  
  6038.  
  6039.  
  6040.  
  6041.  
  6042.  
  6043.  
  6044.  
  6045.  
  6046.  
  6047.  
  6048.  
  6049.  
  6050.  
  6051.  
  6052.  
  6053.  
  6054.  
  6055.  
  6056.  
  6057.  
  6058.  
  6059.  
  6060.  
  6061.  
  6062.  
  6063.  
  6064.  
  6065.  
  6066.  
  6067.  
  6068.  
  6069.  
  6070.  
  6071.  
  6072.  
  6073.  
  6074.  
  6075.  
  6076.  
  6077.  
  6078.  
  6079.           geos kERNAL rOUTINES                                      1-44
  6080.  
  6081.  
  6082.  
  6083.  
  6084.  
  6085.           fUNCTION nAME: next
  6086.  
  6087.           pURPOSE: mOVE TO NEXT vlir CHAIN.
  6088.  
  6089.           cALL ADDRESS: $c27a
  6090.  
  6091.           oUTPUT:
  6092.  
  6093.                y         tRACK OF vlir CHAIN.
  6094.  
  6095.                $04       tRACK OF vlir CHAIN.
  6096.  
  6097.                $05       sECTOR OF vlir CHAIN.
  6098.  
  6099.                $8496     iNCREMENTED BY 1.
  6100.  
  6101.           pREPARATORY ROUTINES: vopen
  6102.  
  6103.           eRRORS: sEE aPPENDIX i.
  6104.  
  6105.  
  6106.  
  6107.           dESCRIPTION:  tHIS ROUTINE GETS THE TRACK AND SECTOR OF THE  NEXT
  6108.  
  6109.           CHAIN  IN  THE OPEN vlir FILE.  iT DOES NOT CHECK TO SEE  IF  THE
  6110.  
  6111.           CHAIN EXISTS (IE. TRACK IS ZERO).  iT DOES CHECK IF THIS CHAIN IS
  6112.  
  6113.           IN RANGE (AGAINST $8497).
  6114.  
  6115.  
  6116.  
  6117.  
  6118.  
  6119.           fUNCTION nAME: numblk
  6120.  
  6121.           pURPOSE: cOUNTS THE NUMBER OF FREE BLOCKS IN THE bam THAT IS IN
  6122.  
  6123.                    ram.
  6124.  
  6125.           cALL ADDRESS: $c1db
  6126.  
  6127.           iNPUT REQUIREMENTS:
  6128.  
  6129.                $0c-$0d   pOINTER TO BUFFER WITH TRACK 18 SECTOR 0.
  6130.  
  6131.           oUTPUT:
  6132.  
  6133.                $0a-$0b   tHE NUMBER OF FREE BLOCKS.
  6134.  
  6135.           pREPARATORY ROUTINES: rd180
  6136.  
  6137.  
  6138.  
  6139.           dESCRIPTION:  tHIS  ROUTINE EXPECTS THAT THE bam HAS ALREADY BEEN
  6140.  
  6141.           READ INTO MEMORY.  aLL THAT IT DOES IS ADD UP THE NUMBER OF  FREE
  6142.  
  6143.           BLOCKS IN EACH TRACK.
  6144.  
  6145.  
  6146.  
  6147.  
  6148.  
  6149.           fUNCTION nAME: opndsk
  6150.  
  6151.           pURPOSE: oPENS A DISK TO geos.
  6152.  
  6153.           cALL ADDRESS: $c2a1
  6154.  
  6155.           iNPUT REQUIREMENTS:
  6156.  
  6157.                $8489     cURRENT DRIVE NUMBER.
  6158.  
  6159.           oUTPUT:
  6160.  
  6161.                $848b     $00/$ff gEOS FORMAT OR NOT.
  6162.  
  6163.                $841e-$8465 aPPROPRIATE BUFFER WILL HAVE DISK'S NAME.
  6164.  
  6165.           eRRORS: sEE aPPENDIX i.
  6166.  
  6167.  
  6168.  
  6169.           dESCRIPTION:  tHE CURRENT DRIVE IS INITIALIZED BY CALLING initdv.
  6170.  
  6171.           geos  FORMAT IS CHECKED FOR,  AND THE DISK'S NAME IS COPIED  INTO
  6172.  
  6173.           THE APPROPRIATE BUFFER AT $841e-$8465.
  6174.  
  6175.  
  6176.  
  6177.  
  6178.  
  6179.  
  6180.  
  6181.  
  6182.  
  6183.  
  6184.  
  6185.  
  6186.  
  6187.  
  6188.  
  6189.  
  6190.  
  6191.  
  6192.  
  6193.  
  6194.  
  6195.  
  6196.  
  6197.  
  6198.  
  6199.  
  6200.  
  6201.  
  6202.  
  6203.  
  6204.  
  6205.  
  6206.  
  6207.  
  6208.  
  6209.  
  6210.  
  6211.           geos kERNAL rOUTINES                                      1-45
  6212.  
  6213.  
  6214.  
  6215.  
  6216.  
  6217.           fUNCTION nAME: opnser
  6218.  
  6219.           pURPOSE: oPEN SERIAL COMMUNICATION.
  6220.  
  6221.           cALL ADDRESS: $c25c
  6222.  
  6223.           eRRORS: sEE aPPENDIX i.
  6224.  
  6225.  
  6226.  
  6227.           dESCRIPTION:  tHIS  ROUTINE SETS UP THE i/o PORTS FOR HIGH  SPEED
  6228.  
  6229.           SERIAL COMMUNICATION WITH THE DISK DRIVES. tHIS ROUTINE IS CALLED
  6230.  
  6231.           PRIOR TO CALLING read2, write2 OR cwrite.
  6232.  
  6233.  
  6234.  
  6235.  
  6236.  
  6237.           fUNCTION nAME: pbox
  6238.  
  6239.           pURPOSE: dRAWS THE OUTLINE OF A RECTANGULAR BOX IN A GIVEN
  6240.  
  6241.                    PATTERN.
  6242.  
  6243.           cALL ADDRESS: $c127
  6244.  
  6245.           iNPUT REQUIREMENTS:
  6246.  
  6247.                a         tHE ACTUAL BIT PATTERN FOR THE BOX.
  6248.  
  6249.                $06       tHE TOP MARGIN.
  6250.  
  6251.                $07       tHE BOTTOM MARGIN.
  6252.  
  6253.                $08-$09   tHE LEFT MARGIN.
  6254.  
  6255.                $0a-$0b   tHE RIGHT MARGIN.
  6256.  
  6257.  
  6258.  
  6259.           dESCRIPTION:  tHIS ROUTINE DRAWS THE OUTLINE OF A RECTANGULAR BOX
  6260.  
  6261.           IN  A GIVEN PATTERN.  tHIS ROUTINE CALLS hline AND vline TO  DRAW
  6262.  
  6263.           THE OUTLINE. sEE ALSO rowadr.
  6264.  
  6265.  
  6266.  
  6267.  
  6268.  
  6269.           fUNCTION nAME: pbox2
  6270.  
  6271.           pURPOSE: iDENTICAL TO pbox, BUT WITH INLINE DATA.
  6272.  
  6273.           cALL ADDRESS: $c1a2
  6274.  
  6275.  
  6276.  
  6277.           dESCRIPTION:  tHIS ROUTINE DRAWS A SOLID OUTLINE OF A BOX,  WHICH
  6278.  
  6279.           IS DESCRIBED BY INLINE CODE. sEE pfill2 FOR AN EXAMPLE.
  6280.  
  6281.  
  6282.  
  6283.  
  6284.  
  6285.           fUNCTION nAME: permit
  6286.  
  6287.           pURPOSE: eNABLES THE EXECUTION OF A TIMED EVENT.
  6288.  
  6289.           cALL ADDRESS: $c10f
  6290.  
  6291.           iNPUT REQUIREMENTS:
  6292.  
  6293.                x         tHE INDEX INTO THE COMMAND TABLE AT $8719.
  6294.  
  6295.           pREPARATORY ROUTINES: cmdtbl
  6296.  
  6297.  
  6298.  
  6299.           dESCRIPTION: tHIS ROUTINE RESETS BIT 6 OF A SPECIFIC COMMAND BYTE
  6300.  
  6301.           IN  THE TABLE AT $8719.  tHIS ALLOWS THE ASSOCIATED ROUTINE TO BE
  6302.  
  6303.           EXECUTED WHEN ITS TIMER RUNS OUT.  iF THE TIMER HAD RUN OUT WHILE
  6304.  
  6305.           THE ROUTINE WAS DISABLED,  geos WILL EXECUTE THE ROUTINE WHEN  IT
  6306.  
  6307.           GETS TO IT. tHIS IS THE COMPLEMENT TO forbid.
  6308.  
  6309.  
  6310.  
  6311.  
  6312.  
  6313.  
  6314.  
  6315.  
  6316.  
  6317.  
  6318.  
  6319.  
  6320.  
  6321.  
  6322.  
  6323.  
  6324.  
  6325.  
  6326.  
  6327.  
  6328.  
  6329.  
  6330.  
  6331.  
  6332.  
  6333.  
  6334.  
  6335.  
  6336.  
  6337.  
  6338.  
  6339.  
  6340.  
  6341.  
  6342.  
  6343.           geos kERNAL rOUTINES                                      1-46
  6344.  
  6345.  
  6346.  
  6347.  
  6348.  
  6349.           fUNCTION nAME: pfill
  6350.  
  6351.           pURPOSE: fILLS A RECTANGULAR BOX WITH A SELECTED DESIGN.
  6352.  
  6353.           cALL ADDRESS: $c124
  6354.  
  6355.           iNPUT REQUIREMENTS:
  6356.  
  6357.                $06       tHE TOP MARGIN.
  6358.  
  6359.                $07       tHE BOTTOM MARGIN.
  6360.  
  6361.                $08-$09   tHE LEFT MARGIN.
  6362.  
  6363.                $0a-$0b   tHE RIGHT MARGIN.
  6364.  
  6365.           pREPARATORY ROUTINES: setpat
  6366.  
  6367.  
  6368.  
  6369.           dESCRIPTION:  tHIS  ROUTINE  FILLS A RECTANGULAR BOX IN  A  GIVEN
  6370.  
  6371.           DESIGN.  tHIS ROUTINE CALLS hline REPEATEDLY. sEE ALSO rowadr.
  6372.  
  6373.  
  6374.  
  6375.  
  6376.  
  6377.           fUNCTION nAME: pfill2
  6378.  
  6379.           pURPOSE: iDENTICAL TO pfill, BUT WITH INLINE DATA.
  6380.  
  6381.           cALL ADDRESS: $c19f
  6382.  
  6383.           pREPARATORY ROUTINES: setpat
  6384.  
  6385.  
  6386.  
  6387.           dESCRIPTION:  tHIS ROUTINE IS IDENTICAL TO pfill EXCEPT THAT DATA
  6388.  
  6389.           THAT DESCRIBES THE BOX IS PART OF THE INLINE CODE.  fOR EXAMPLE:
  6390.  
  6391.                 jsr pfill2
  6392.  
  6393.                .byte tOP MARGIN
  6394.  
  6395.                .byte bOTTOM MARGIN
  6396.  
  6397.                .word lEFT MARGIN
  6398.  
  6399.                .word rIGHT MARGIN
  6400.  
  6401.                cONTROL RETURNS HERE AFTER BOX IS FILLED.
  6402.  
  6403.  
  6404.  
  6405.  
  6406.  
  6407.           fUNCTION nAME: plot
  6408.  
  6409.           pURPOSE: dRAWS, ERASES OR COPIES A PIXEL ON THE HIRES SCREEN.
  6410.  
  6411.           cALL ADDRESS: $c133
  6412.  
  6413.           iNPUT REQUIREMENTS:
  6414.  
  6415.                n FLAG  c fLAG   oPERATION
  6416.  
  6417.                   1       x     cOPY
  6418.  
  6419.                   0       1     dRAW
  6420.  
  6421.                   0       0     eRASE
  6422.  
  6423.                $08-$09   tHE COLUMN NUMBER.
  6424.  
  6425.                $18       tHE ROW NUMBER.
  6426.  
  6427.  
  6428.  
  6429.           dESCRIPTION:  tHIS  IS A VERY VERSATILE ROUTINE.  iT CAN  COPY  A
  6430.  
  6431.           POINT  FROM ONE SCREEN TO ANOTHER,  AS WELL AS DRAW OR ERASE  IT.
  6432.  
  6433.           tHIS ROUTINE IS CALLED BY line TO DRAW LINES. sEE ALSO rowadr.
  6434.  
  6435.  
  6436.  
  6437.  
  6438.  
  6439.  
  6440.  
  6441.  
  6442.  
  6443.  
  6444.  
  6445.  
  6446.  
  6447.  
  6448.  
  6449.  
  6450.  
  6451.  
  6452.  
  6453.  
  6454.  
  6455.  
  6456.  
  6457.  
  6458.  
  6459.  
  6460.  
  6461.  
  6462.  
  6463.  
  6464.  
  6465.  
  6466.  
  6467.  
  6468.  
  6469.  
  6470.  
  6471.  
  6472.  
  6473.  
  6474.  
  6475.           geos kERNAL rOUTINES                                      1-47
  6476.  
  6477.  
  6478.  
  6479.  
  6480.  
  6481.           fUNCTION nAME: posspr
  6482.  
  6483.           pURPOSE: sETS THE POSITION OF A SPRITE.
  6484.  
  6485.           cALL ADDRESS: $c1cf
  6486.  
  6487.           iNPUT REQUIREMENTS:
  6488.  
  6489.                $08       sPRITE NUMBER (0-7).
  6490.  
  6491.                $0a-$0b   sPRITE x POSITION.
  6492.  
  6493.                $0c       sPRITE y POSITION.
  6494.  
  6495.           pREPARATORY ROUTINES: copysp
  6496.  
  6497.  
  6498.  
  6499.           dESCRIPTION: tHIS ROUTINE COPIES THE SPRITE'S POSITION TO THE vic
  6500.  
  6501.           CHIP,  RELIEVING THE USER OF THE BURDEN OF HANDLING THE CROSSOVER
  6502.  
  6503.           IN THE SCREEN FROM COLUMN 255 TO COLUMN 256.
  6504.  
  6505.  
  6506.  
  6507.  
  6508.  
  6509.           fUNCTION nAME: prev
  6510.  
  6511.           pURPOSE: mOVE TO PREVIOUS vlir CHAIN.
  6512.  
  6513.           cALL ADDRESS: $c27d
  6514.  
  6515.           oUTPUT:
  6516.  
  6517.                y         tRACK OF vlir CHAIN.
  6518.  
  6519.                $04       tRACK OF vlir CHAIN.
  6520.  
  6521.                $05       sECTOR OF vlir CHAIN.
  6522.  
  6523.                $8496     dECREMENTED BY 1.
  6524.  
  6525.           pREPARATORY ROUTINES: vopen
  6526.  
  6527.           eRRORS: sEE aPPENDIX i.
  6528.  
  6529.  
  6530.  
  6531.           dESCRIPTION:  tHIS  ROUTINE  GETS  THE TRACK AND  SECTOR  OF  THE
  6532.  
  6533.           PREVIOUS CHAIN IN THE OPEN vlir FILE. iT DOES NOT CHECK TO SEE IF
  6534.  
  6535.           THE CHAIN EXISTS (IE. TRACK IS ZERO). iT DOES CHECK IF THIS CHAIN
  6536.  
  6537.           IS GREATER THAN ZERO.
  6538.  
  6539.  
  6540.  
  6541.  
  6542.  
  6543.           fUNCTION nAME: random
  6544.  
  6545.           pURPOSE: mODIFIES THE RANDOM NUMBER GENERATOR AT $850a-$850b.
  6546.  
  6547.           cALL ADDRESS: $c187
  6548.  
  6549.           oUTPUT:
  6550.  
  6551.                $850a-$850b    nEW SEED VALUE.
  6552.  
  6553.  
  6554.  
  6555.           dESCRIPTION:  tHIS  ROUTINE CHANGES THE 16 BIT RANDOM  NUMBER  AT
  6556.  
  6557.           $850a-$850b, USING A SIMPLE YET ELABORATE FORMULA.
  6558.  
  6559.  
  6560.  
  6561.  
  6562.  
  6563.           fUNCTION nAME: rd180
  6564.  
  6565.           pURPOSE: rEAD TRACK 18, SECTOR 0 FROM THE DISK.
  6566.  
  6567.           cALL ADDRESS: $c247
  6568.  
  6569.           oUTPUT:
  6570.  
  6571.                $04       $12, TRACK NUMBER.
  6572.  
  6573.                $05       $00, SECTOR NUMBER.
  6574.  
  6575.                $0a-$0b   $8200, ADDRESS OF BUFFER AREA.
  6576.  
  6577.                $8200-$82ff dATA FROM TRACK 18 SECTOR 0.
  6578.  
  6579.           eRRORS: sEE aPPENDIX i.
  6580.  
  6581.  
  6582.  
  6583.           dESCRIPTION:  tHIS  ROUTINE SETS UP THE POINTERS FOR  read,  THEN
  6584.  
  6585.           CALLS  IT TO READ THE SECTOR.  tHIS IS GENERALLY USED TO GET  THE
  6586.  
  6587.           bam INTO MEMORY.
  6588.  
  6589.  
  6590.  
  6591.  
  6592.  
  6593.  
  6594.  
  6595.  
  6596.  
  6597.  
  6598.  
  6599.  
  6600.  
  6601.  
  6602.  
  6603.  
  6604.  
  6605.  
  6606.  
  6607.           geos kERNAL rOUTINES                                      1-48
  6608.  
  6609.  
  6610.  
  6611.  
  6612.  
  6613.           fUNCTION nAME: read
  6614.  
  6615.           pURPOSE: rEAD A GIVEN TRACK AND SECTOR.
  6616.  
  6617.           cALL ADDRESS: $c1e4
  6618.  
  6619.           iNPUT REQUIREMENTS:
  6620.  
  6621.                $04       tRACK OF SECTOR TO BE READ.
  6622.  
  6623.                $05       sECTOR NUMBER TO BE READ.
  6624.  
  6625.                $0a-$0b   pOINTER TO BUFFER.
  6626.  
  6627.           eRRORS: sEE aPPENDIX
  6628.  
  6629.  
  6630.  
  6631.           dESCRIPTION:  lOADS AND RUNS TURBODOS IF IT IS NOT ALREADY THERE.
  6632.  
  6633.           tHEN READS THE DESIRED BLOCK FROM THE DISK INTO THE BUFFER.
  6634.  
  6635.  
  6636.  
  6637.  
  6638.  
  6639.           fUNCTION nAME: read2
  6640.  
  6641.           pURPOSE: rEAD A SECTOR FROM THE DISK.
  6642.  
  6643.           cALL ADDRESS: $c21a
  6644.  
  6645.           iNPUT REQUIREMENTS:
  6646.  
  6647.                $04       tRACK TO BE READ.
  6648.  
  6649.                $05       sECTOR TO BE READ.
  6650.  
  6651.                $0a-$0b   pOINTER TO BUFFER FOR DATA.
  6652.  
  6653.           oUTPUT:
  6654.  
  6655.                dATA IS READ INTO THE DESIRED BUFFER.
  6656.  
  6657.           pREPARATORY ROUTINES: dsetup
  6658.  
  6659.           eRRORS: sEE aPPENDIX i.
  6660.  
  6661.  
  6662.  
  6663.           dESCRIPTION: tHIS ROUTINE IS CALLED BY read TO READ A SECTOR. tHE
  6664.  
  6665.           DIFFERENCE  BETWEEN  THIS  ROUTINE AND read IS  THAT  read  CALLS
  6666.  
  6667.           dsetup  BEFORE  TRYING TO READ THE SECTOR.  tHIS ROUTINE  ASSUMES
  6668.  
  6669.           THAT THE DRIVE IS READY WITH TURBODOS RUNNING.
  6670.  
  6671.  
  6672.  
  6673.  
  6674.  
  6675.           fUNCTION nAME: reboot
  6676.  
  6677.           pURPOSE: rEBOOT geos.
  6678.  
  6679.           cALL ADDRESS: $c000
  6680.  
  6681.           eRRORS: iF LOAD FAILS, SYSTEM RESETS TO basic.
  6682.  
  6683.  
  6684.  
  6685.           dESCRIPTION:  tHIS  ROUTINE IS NOT PART OF THE NORMAL geos kernal
  6686.  
  6687.           JUMP  TABLE.  tHIS  IS  THE ROUTINE THAT IS SET  UP  AS  THE  nmi
  6688.  
  6689.           INTERRUPT  (restore KEY) BY geos WHEN geos RETURNS TO  basic.  iT
  6690.  
  6691.           LOADS 'geos boot', AND EXECUTES IT.
  6692.  
  6693.  
  6694.  
  6695.  
  6696.  
  6697.  
  6698.  
  6699.  
  6700.  
  6701.  
  6702.  
  6703.  
  6704.  
  6705.  
  6706.  
  6707.  
  6708.  
  6709.  
  6710.  
  6711.  
  6712.  
  6713.  
  6714.  
  6715.  
  6716.  
  6717.  
  6718.  
  6719.  
  6720.  
  6721.  
  6722.  
  6723.  
  6724.  
  6725.  
  6726.  
  6727.  
  6728.  
  6729.  
  6730.  
  6731.  
  6732.  
  6733.  
  6734.  
  6735.  
  6736.  
  6737.  
  6738.  
  6739.           geos kERNAL rOUTINES                                      1-49
  6740.  
  6741.  
  6742.  
  6743.  
  6744.  
  6745.           fUNCTION nAME: remove
  6746.  
  6747.           pURPOSE: rEMOVE A vlir CHAIN.
  6748.  
  6749.           cALL ADDRESS: $c283
  6750.  
  6751.           iNPUT REQUIREMENTS:
  6752.  
  6753.                $8496     vlir CHAIN NUMBER.
  6754.  
  6755.           oUTPUT:
  6756.  
  6757.                $8496     dECREMENTED IF GREATER THAN OR EQUAL TO $8497.
  6758.  
  6759.                $8497     dECREMENTED BY 1.
  6760.  
  6761.           pREPARATORY ROUTINES: vopen
  6762.  
  6763.           eRRORS: sEE aPPENDIX i.
  6764.  
  6765.  
  6766.  
  6767.           dESCRIPTION:  tHE  CURRENT  vlir CHAIN IS REMOVED FROM  THE  vlir
  6768.  
  6769.           SECTOR,  AND  ALL THE FOLLOWING CHAINS ARE MOVED  DOWN  ONE.  tHE
  6770.  
  6771.           SECTORS ASSOCIATED WITH THAT CHAIN ARE FREED UP.
  6772.  
  6773.  
  6774.  
  6775.  
  6776.  
  6777.           fUNCTION nAME: rename
  6778.  
  6779.           pURPOSE: rENAME A FILE.
  6780.  
  6781.           cALL ADDRESS: $c259
  6782.  
  6783.           iNPUT REQUIREMENTS:
  6784.  
  6785.                $02-$03   pOINTER TO NEW FILE NAME.
  6786.  
  6787.                $0e-$0f   pOINTER TO OLD FILE NAME.
  6788.  
  6789.           oUTPUT:
  6790.  
  6791.                $04       tRACK OF DIRECTORY SECTOR.
  6792.  
  6793.                $05       sECTOR OF DIRECTORY SECTOR.
  6794.  
  6795.                $0c-$0d   pOINTER TO FILE NAME IN DIRECTORY ENTRY.
  6796.  
  6797.                $8400-$841d cOPY OF OLD DIRECTORY ENTRY.
  6798.  
  6799.           eRRORS: sEE aPPENDIX i.
  6800.  
  6801.  
  6802.  
  6803.           dESCRIPTION: tHIS ROUTINE RENAMES A FILE BY CALLING  lookup, THEN
  6804.  
  6805.           COPYING  THE  NEW NAME INTO THE ENTRY.  fINALLY,  THE  SECTOR  IS
  6806.  
  6807.           REWRITTEN TO THE DISK.
  6808.  
  6809.  
  6810.  
  6811.  
  6812.  
  6813.           fUNCTION nAME: resetm
  6814.  
  6815.           pURPOSE: rESET THE MOUSE.
  6816.  
  6817.           cALL ADDRESS: $c19c
  6818.  
  6819.  
  6820.  
  6821.           dESCRIPTION:  tHE  FLAG AT LOCATION $30 IS SET TO  $00,  AND  THE
  6822.  
  6823.           MOUSE SPRITE IS TURNED OFF.  hOWEVER, SINCE BIT 7 OF LOCATION $30
  6824.  
  6825.           IS NOT SET, THE NEXT INTERRUPT WILL TURN IT BACK ON.
  6826.  
  6827.  
  6828.  
  6829.  
  6830.  
  6831.           fUNCTION nAME: restrt
  6832.  
  6833.           pURPOSE: rESTART desktop.
  6834.  
  6835.           cALL ADDRESS: $c22c
  6836.  
  6837.  
  6838.  
  6839.           dESCRIPTION: tHIS ROUTINE LOADS desktop AND RUNS IT. iT IS CALLED
  6840.  
  6841.           AS THE LAST PART OF THE BOOTUP PROCEDURE. tHIS IS WHERE A PROGRAM
  6842.  
  6843.           SHOULD TERMINATE.
  6844.  
  6845.  
  6846.  
  6847.  
  6848.  
  6849.  
  6850.  
  6851.  
  6852.  
  6853.  
  6854.  
  6855.  
  6856.  
  6857.  
  6858.  
  6859.  
  6860.  
  6861.  
  6862.  
  6863.  
  6864.  
  6865.  
  6866.  
  6867.  
  6868.  
  6869.  
  6870.  
  6871.           geos kERNAL rOUTINES                                      1-50
  6872.  
  6873.  
  6874.  
  6875.  
  6876.  
  6877.           fUNCTION nAME: rowadr
  6878.  
  6879.           pURPOSE: cOMPUTES THE ADDRESS OF A GIVEN ROW ON THE HIRES
  6880.  
  6881.                    SCREENS.
  6882.  
  6883.           cALL ADDRESS: $c13c
  6884.  
  6885.           iNPUT REQUIREMENTS:
  6886.  
  6887.                x         tHE ROW NUMBER.
  6888.  
  6889.                $2f       sEE DESCRIPTION.
  6890.  
  6891.           oUTPUT:
  6892.  
  6893.                $0c-$0d   pOINTER TO THE ROW ON THE DESTINATION SCREEN.
  6894.  
  6895.                $0e-$0f   pOINTER TO THE ROW ON THE SOURCE SCREEN.
  6896.  
  6897.  
  6898.  
  6899.           dESCRIPTION:  tHIS ROUTINE COMPUTES THE ADDRESS OF COLUMN 0 ON  A
  6900.  
  6901.           GIVEN ROW OF THE HIRES SCREENS. aLL OF THE GRAPHICS ROUTINES RELY
  6902.  
  6903.           ON THIS ROUTINE TO GET THE ADDRESS OF THE HIRES SCREENS. tHEY ALL
  6904.  
  6905.           TAKE  THE DATA POINTED TO BY $0e-$0f AND STORE THEIR DATA TO BOTH
  6906.  
  6907.           $0c-$0d  AND  $0e-$0f.  lOCATION $2f DETERMINES WHICH  SCREEN  IS
  6908.  
  6909.           POINTED TO BY WHICH POINTER. tHIS IS AS FOLLOWS:
  6910.  
  6911.                bIT 7  bIT 6   $0c-$0d   $0e-$0f
  6912.  
  6913.                  0      0      $af00     $af00   aPPROXIMATELY THE
  6914.  
  6915.                                                  MIDDLE OF SCREEN 1
  6916.  
  6917.                  0      1     sCREEN 2  sCREEN 2
  6918.  
  6919.                  1      0     sCREEN 1  sCREEN 1
  6920.  
  6921.                  1      1     sCREEN 1  sCREEN 2 (dEFAULT AT RESET)
  6922.  
  6923.  
  6924.  
  6925.  
  6926.  
  6927.           fUNCTION nAME: run
  6928.  
  6929.           pURPOSE: eXECUTE A PROGRAM ALREADY IN MEMORY.
  6930.  
  6931.           cALL ADDRESS: $c22f
  6932.  
  6933.           iNPUT REQUIREMENTS:
  6934.  
  6935.                $02       fLAG BYTE.
  6936.  
  6937.                $06-$07   dATA POINTER (OPTIONAL).
  6938.  
  6939.                $08-$09   dATA POINTER (OPTIONAL).
  6940.  
  6941.                $10-$11   sTART ADDRESS.
  6942.  
  6943.           oUTPUT:
  6944.  
  6945.                $06-$07   pOINTER TO DRIVE NAME 2.
  6946.  
  6947.                $08-$09   pOINTER TO DRIVE NAME 3.
  6948.  
  6949.  
  6950.  
  6951.           dESCRIPTION:  tHIS  ROUTINE PERFORMS SOME INITIALIZATIONS  BEFORE
  6952.  
  6953.           EXECUTING A LOADED PROGRAM.  iF EITHER BIT 6 OR BIT 7 OF THE FLAG
  6954.  
  6955.           BYTE AT LOCATION $02 IS SET,  THEN THE DATA POINTED TO BY $06-$07
  6956.  
  6957.           AND $08-$09 ARE COPIED INTO THE BUFFERS FOR THE 3RD AND 4TH DRIVE
  6958.  
  6959.           NAMES.  tHESE  DATA  BLOCKS  ARE LIMITED TO 16  BYTES  EACH.  tHE
  6960.  
  6961.           INITIALIZATION  PROCESS SELECTS THE bsw FONT AND INITIALIZES  ALL
  6962.  
  6963.           OF geos'S GLOBAL VARIABLES.
  6964.  
  6965.  
  6966.  
  6967.  
  6968.  
  6969.  
  6970.  
  6971.  
  6972.  
  6973.  
  6974.  
  6975.  
  6976.  
  6977.  
  6978.  
  6979.  
  6980.  
  6981.  
  6982.  
  6983.  
  6984.  
  6985.  
  6986.  
  6987.  
  6988.  
  6989.  
  6990.  
  6991.  
  6992.  
  6993.  
  6994.  
  6995.  
  6996.  
  6997.  
  6998.  
  6999.  
  7000.  
  7001.  
  7002.  
  7003.           geos kERNAL rOUTINES                                      1-51
  7004.  
  7005.  
  7006.  
  7007.  
  7008.  
  7009.           fUNCTION nAME: save
  7010.  
  7011.           pURPOSE: sAVE MEMORY TO A FILE.
  7012.  
  7013.           cALL ADDRESS: $c1ed
  7014.  
  7015.           iNPUT REQUIREMENTS:
  7016.  
  7017.                $14-$15   pOINTER TO INFORMATION SECTOR DATA.
  7018.  
  7019.                $16       # DIRECTORY SECTORS TO SKIP FIRST.
  7020.  
  7021.           eRRORS: sEE aPPENDIX
  7022.  
  7023.  
  7024.  
  7025.           dESCRIPTION: tHIS ROUTINE WILL SAVE MEMORY TO A FILE; EACH SECTOR
  7026.  
  7027.           IS VERIFIED AFTER THE WRITE IS FINISHED.  tHE INFO SECTOR HAS ALL
  7028.  
  7029.           THE NECESSARY INFORMATION.  IE.  START AND STOP  ADDRESSES,  FILE
  7030.  
  7031.           TYPE  AND  STRUCTURE.  iT  MUST ALSO CONTAIN THE ADDRESS  OF  THE
  7032.  
  7033.           FILENAME  STRING SOMEWHERE IN MEMORY, IN THE FIRST TWO BYTES.  iF
  7034.  
  7035.           THE FILE IS A vlir FILE, THE MEMORY IS SAVED TO CHAIN 0. lOCATION
  7036.  
  7037.           $16  SPECIFIES THE NUMBER OF DIRECTORY SECTORS TO SKIP FOR dirdsk
  7038.  
  7039.           AND hole.
  7040.  
  7041.  
  7042.  
  7043.  
  7044.  
  7045.           fUNCTION nAME: save2
  7046.  
  7047.           pURPOSE: sAVE MEMORY TO SPECIFIED SECTORS ON THE DISK.
  7048.  
  7049.           cALL ADDRESS: $c1f9
  7050.  
  7051.           iNPUT REQUIREMENTS:
  7052.  
  7053.                $0e-$0f   pOINTER TO LIST OF TRACKS AND SECTORS TO USE.
  7054.  
  7055.                $10-$11   sTART ADDRESS OF MEMORY TO BE SAVED.
  7056.  
  7057.           pREPARATORY ROUTINES: falloc
  7058.  
  7059.           eRRORS: sEE aPPENDIX
  7060.  
  7061.  
  7062.  
  7063.           dESCRIPTION:  tHIS ROUTINE IS CALLED BY save TO ACTUALLY SAVE THE
  7064.  
  7065.           MEMORY.  aLL  OF THE SECTORS SHOULD HAVE ALREADY BEEN  ALLOCATED.
  7066.  
  7067.           tHIS  ROUTINE  STOPS SAVING MEMORY WHEN TRACK 0 IS FOUND  IN  THE
  7068.  
  7069.           LIST OF TRACKS AND SECTORS.
  7070.  
  7071.  
  7072.  
  7073.  
  7074.  
  7075.           fUNCTION nAME: sd1616
  7076.  
  7077.           pURPOSE: sIGNED 16 BIT BY 16 BIT DIVISION.
  7078.  
  7079.           cALL ADDRESS: $c16c
  7080.  
  7081.           iNPUT REQUIREMENTS:
  7082.  
  7083.                y         tHE ADDRESS OF THE 16 BIT DIVISOR.
  7084.  
  7085.                x         tHE ADDRESS OF THE 16 BIT DIVIDEND.
  7086.  
  7087.           oUTPUT:
  7088.  
  7089.                x         tHE ADDRESS OF THE 16 BIT QUOTIENT.
  7090.  
  7091.                $12-$13   tHE 16 BIT REMAINDER.
  7092.  
  7093.  
  7094.  
  7095.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x AND
  7096.  
  7097.           y EACH HAVE THE ADDRESS OF A TERM IN THE DIVISION. bOTH TERMS ARE
  7098.  
  7099.           MADE POSITIVE WITH abs16. ud1616 IS THEN CALLED; IF THE RESULT OF
  7100.  
  7101.           THE DIVISION SHOULD BE NEGATIVE, neg16 IS CALLED. tHE QUOTIENT IS
  7102.  
  7103.           STORED  IN PLACE OF THE ORIGINAL DIVIDEND THAT x POINTED TO.  tHE
  7104.  
  7105.           DIVIDEND  IS LEFT UNTOUCHED.  tHE REMAINDER IS ALWAYS A  POSITIVE
  7106.  
  7107.           INTEGER.
  7108.  
  7109.  
  7110.  
  7111.  
  7112.  
  7113.  
  7114.  
  7115.  
  7116.  
  7117.  
  7118.  
  7119.  
  7120.  
  7121.  
  7122.  
  7123.  
  7124.  
  7125.  
  7126.  
  7127.  
  7128.  
  7129.  
  7130.  
  7131.  
  7132.  
  7133.  
  7134.  
  7135.           geos kERNAL rOUTINES                                      1-52
  7136.  
  7137.  
  7138.  
  7139.  
  7140.  
  7141.           fUNCTION nAME: selbsw
  7142.  
  7143.           pURPOSE: sELECTS THE bERKELEY sOFTWORKS FONT.
  7144.  
  7145.           cALL ADDRESS: $c14b
  7146.  
  7147.           oUTPUT:
  7148.  
  7149.                $26       # PIXELS ABOVE LINE OF PRINT.
  7150.  
  7151.                $27-$28   tHE NUMBER OF BYTES IN THE BIT STREAM.
  7152.  
  7153.                $29       tHE POINT SIZE.
  7154.  
  7155.                $2a-$2b   tHE POINTER TO THE TABLE OF INDICES INTO THE BIT
  7156.  
  7157.                          STREAM.
  7158.  
  7159.                $2c-$2d   tHE POINTER TO THE BIT STREAM.
  7160.  
  7161.  
  7162.  
  7163.           dESCRIPTION:  tHIS ROUTINE SIMPLY COPIES THE FONT HEADER DATA FOR
  7164.  
  7165.           THE bsw FONT TO ZERO PAGE FOR USE BY dspchr AND dsptxt.
  7166.  
  7167.  
  7168.  
  7169.  
  7170.  
  7171.           fUNCTION nAME: setpat
  7172.  
  7173.           pURPOSE: sETS THE CURRENT FILL PATTERN.
  7174.  
  7175.           cALL ADDRESS: $c139
  7176.  
  7177.           iNPUT REQUIREMENTS:
  7178.  
  7179.                a         tHE PATTERN NUMBER (0-31).
  7180.  
  7181.  
  7182.  
  7183.           dESCRIPTION:  tHIS  ROUTINE SETS THE FILL PATTERN USED BY  pfill,
  7184.  
  7185.           pfill2, pbox AND pbox2.
  7186.  
  7187.  
  7188.  
  7189.  
  7190.  
  7191.           fUNCTION nAME: sproff
  7192.  
  7193.           pURPOSE: tURNS OFF A SPRITE.
  7194.  
  7195.           cALL ADDRESS: $c1d5
  7196.  
  7197.           iNPUT REQUIREMENTS:
  7198.  
  7199.                $08       sPRITE NUMBER (0-7).
  7200.  
  7201.           pREPARATORY ROUTINES: copysp, posspr, spron
  7202.  
  7203.  
  7204.  
  7205.           dESCRIPTION:  tHIS ROUTINE TURNS THE SPRITE OFF, SO THAT IT IS NO
  7206.  
  7207.           LONGER VISIBLE.
  7208.  
  7209.  
  7210.  
  7211.  
  7212.  
  7213.           fUNCTION nAME: spron
  7214.  
  7215.           pURPOSE: tURNS ON A SPRITE.
  7216.  
  7217.           cALL ADDRESS: $c1d2
  7218.  
  7219.           iNPUT REQUIREMENTS:
  7220.  
  7221.                $08       sPRITE NUMBER (0-7).
  7222.  
  7223.           pREPARATORY ROUTINES: copysp, posspr
  7224.  
  7225.  
  7226.  
  7227.           dESCRIPTION:  tHIS  ROUTINE  TURNS THE SPRITE ON,  SO THAT IT  IS
  7228.  
  7229.           VISIBLE.
  7230.  
  7231.  
  7232.  
  7233.  
  7234.  
  7235.  
  7236.  
  7237.  
  7238.  
  7239.  
  7240.  
  7241.  
  7242.  
  7243.  
  7244.  
  7245.  
  7246.  
  7247.  
  7248.  
  7249.  
  7250.  
  7251.  
  7252.  
  7253.  
  7254.  
  7255.  
  7256.  
  7257.  
  7258.  
  7259.  
  7260.  
  7261.  
  7262.  
  7263.  
  7264.  
  7265.  
  7266.  
  7267.           geos kERNAL rOUTINES                                      1-53
  7268.  
  7269.  
  7270.  
  7271.  
  7272.  
  7273.           fUNCTION nAME: start
  7274.  
  7275.           pURPOSE: rESTARTS THE TIMER ON A TIMED EVENT.
  7276.  
  7277.           cALL ADDRESS: $c115
  7278.  
  7279.           iNPUT REQUIREMENTS:
  7280.  
  7281.                x         tHE INDEX INTO THE COMMAND TABLE AT $8719.
  7282.  
  7283.           pREPARATORY ROUTINES: cmdtbl
  7284.  
  7285.  
  7286.  
  7287.           dESCRIPTION: tHIS ROUTINE RESETS BIT 5 OF A SPECIFIC COMMAND BYTE
  7288.  
  7289.           IN THE TABLE AT $8719.  tHIS ENABLES THE ASSOCIATED COUNTER. tHIS
  7290.  
  7291.           ROUTINE  IS  THE  COMPLEMENT  TO stop.  tHIS  ROUTINE  IS  not  A
  7292.  
  7293.           REPLACEMENT  FOR enable.  tHIS ROUTINE DOES NOT COPY THE  TIMER'S
  7294.  
  7295.           INITIAL VALUE AS DOES enable.
  7296.  
  7297.  
  7298.  
  7299.  
  7300.  
  7301.           fUNCTION nAME: stop
  7302.  
  7303.           pURPOSE: sTOPS THE TIMER ON A TIMED EVENT.
  7304.  
  7305.           cALL ADDRESS: $c112
  7306.  
  7307.           iNPUT REQUIREMENTS:
  7308.  
  7309.                x         tHE INDEX INTO THE COMMAND TABLE AT $8719.
  7310.  
  7311.           pREPARATORY ROUTINES: cmdtbl
  7312.  
  7313.  
  7314.  
  7315.           dESCRIPTION:  tHIS ROUTINE SETS BIT 5 OF A SPECIFIC COMMAND  BYTE
  7316.  
  7317.           IN  THE TABLE AT $8719.  tHIS PREVENTS THE ASSOCIATED TIMER  FROM
  7318.  
  7319.           RUNNING. tHIS ROUTINE IS THE COMPLEMENT TO start.
  7320.  
  7321.  
  7322.  
  7323.  
  7324.  
  7325.           fUNCTION nAME: strcmp
  7326.  
  7327.           pURPOSE: cOMPARE TWO STRINGS FOR EQUALITY.
  7328.  
  7329.           cALL ADDRESS: $c26b
  7330.  
  7331.           iNPUT REQUIREMENTS:
  7332.  
  7333.                x         aDDRESS OF A ZERO PAGE POINTER.
  7334.  
  7335.                y         aDDRESS OF A ZERO PAGE POINTER.
  7336.  
  7337.           oUTPUT:
  7338.  
  7339.                z FLAG    sET ACCORDINGLY.
  7340.  
  7341.  
  7342.  
  7343.           dESCRIPTION:  tHE  x AND y REGISTERS POINT TO ZERO PAGE POINTERS.
  7344.  
  7345.           tHE TWO STRINGS ARE COMPARED UP TO A ZERO BYTE. tHE z FLAG IS SET
  7346.  
  7347.           ACCORDINGLY.
  7348.  
  7349.  
  7350.  
  7351.  
  7352.  
  7353.           fUNCTION nAME: strcpy
  7354.  
  7355.           pURPOSE: cOPY A STRING.
  7356.  
  7357.           cALL ADDRESS: $c265
  7358.  
  7359.           iNPUT REQUIREMENTS:
  7360.  
  7361.                x         aDDRESS OF ZERO PAGE SOURCE POINTER.
  7362.  
  7363.                y         aDDRESS OF ZERO PAGE DESTINATION POINTER.
  7364.  
  7365.  
  7366.  
  7367.           dESCRIPTION:  tHE  x AND y REGISTERS POINT TO ZERO PAGE POINTERS.
  7368.  
  7369.           dATA IS COPIED UP TO AND INCLUDING A ZERO BYTE.  tHIS ROUTINE  IS
  7370.  
  7371.           USED TO COPY STRINGS BY SETTING a TO ZERO AND CALLING blkmov.
  7372.  
  7373.  
  7374.  
  7375.  
  7376.  
  7377.  
  7378.  
  7379.  
  7380.  
  7381.  
  7382.  
  7383.  
  7384.  
  7385.  
  7386.  
  7387.  
  7388.  
  7389.  
  7390.  
  7391.  
  7392.  
  7393.  
  7394.  
  7395.  
  7396.  
  7397.  
  7398.  
  7399.           geos kERNAL rOUTINES                                      1-54
  7400.  
  7401.  
  7402.  
  7403.  
  7404.  
  7405.           fUNCTION nAME: syserr
  7406.  
  7407.           pURPOSE: dRAW A SYSTEM ERROR WINDOW, AND HALT SYSTEM.
  7408.  
  7409.           cALL ADDRESS: $c2c2
  7410.  
  7411.  
  7412.  
  7413.           dESCRIPTION:  a  WINDOW  IS DRAWN WITH THE MESSAGE 'sYSTEM  ERROR
  7414.  
  7415.           NEAR  $XXXX',  WHERE  XXXX IS THE HEX ADDRESS OF THE  jsr  syserr
  7416.  
  7417.           INSTRUCTION.  sINCE  THE SYSTEM ERROR WINDOW HAS NO WAY OF  BEING
  7418.  
  7419.           CLOSED, geos SIMPLY SITS IN ITS MAIN LOOP FOREVER. tHE brk VECTOR
  7420.  
  7421.           AT $84af-$84b0 IS INITIALLY SET TO THIS ROUTINE.
  7422.  
  7423.  
  7424.  
  7425.  
  7426.  
  7427.           fUNCTION nAME: table
  7428.  
  7429.           pURPOSE: cREATE A LIST OF FILENAMES.
  7430.  
  7431.           cALL ADDRESS: $c23b
  7432.  
  7433.           iNPUT REQUIREMENTS:
  7434.  
  7435.                $0e-$0f   pOINTER TO BUFFER AREA FOR FILE NAMES.
  7436.  
  7437.                $10       geos FILE TYPE.
  7438.  
  7439.                $11       mAXIMUM NUMBER OF FILE NAMES.
  7440.  
  7441.                $16-$17   pOINTER TO CLASS.
  7442.  
  7443.           oUTPUT:
  7444.  
  7445.                $11       nUMBER OF FILES NOT FOUND.
  7446.  
  7447.                tHE TABLE IS FILLED WITH FILENAMES.
  7448.  
  7449.           eRRORS: sEE aPPENDIX i.
  7450.  
  7451.  
  7452.  
  7453.           dESCRIPTION:  tHIS  IS A VERY USEFUL ROUTINE.  gIVEN A geos  FILE
  7454.  
  7455.           TYPE,  A  LIST OF FILES WITH THAT TYPE IS CREATED.  iF THE  CLASS
  7456.  
  7457.           POINTER  IS NON-ZERO THEN EACH FILE'S INFO SECTOR IS CHECKED  FOR
  7458.  
  7459.           PROPER  CLASS.  tHIS IS HOW geoPAINT AND geoWRITE CAN BOTH CREATE
  7460.  
  7461.           aPPLICATION  dATA  FILES  AND NOT  SEE  EACH  OTHERS  FILES.  tHE
  7462.  
  7463.           FILENAMES ARE TEXT STRINGS WITH ZERO BYTE TERMINATORS. eACH ENTRY
  7464.  
  7465.           IS INDEXED WITH A MULTIPLE OF 17 (16 BYTE FILENAME MAX. PLUS ZERO
  7466.  
  7467.           BYTE).  lOCATION  $11 HAS THE NUMBER OF TABLE ENTRIES NOT FILLED.
  7468.  
  7469.           tO  GET THE NUMBER OF FILES ACTUALLY FOUND,  THIS VALUE  MUST  BE
  7470.  
  7471.           SUBTRACTED FROM THE ORIGINAL MAXIMUM BUFFER LENGTH.
  7472.  
  7473.  
  7474.  
  7475.  
  7476.  
  7477.           fUNCTION nAME: tbljmp
  7478.  
  7479.           pURPOSE: jUMP THROUGH A TABLE.
  7480.  
  7481.           cALL ADDRESS: $c2a4
  7482.  
  7483.           iNPUT REQUIREMENTS:
  7484.  
  7485.                a         oFFSET INTO TABLE.
  7486.  
  7487.                $3d-$3e   tABLE ADDRESS.
  7488.  
  7489.  
  7490.  
  7491.           dESCRIPTION:  tHIS ROUTINE IS CALLED BY ALL OF THE ROUTINES  THAT
  7492.  
  7493.           HAVE  INLINE DATA.  tHEY ALL SET $3d-$3e TO THE RETURN ADDRESS OF
  7494.  
  7495.           THE  CALLER,  INDEX OFF OF THIS POINTER TO GET THEIR  DATA,  THEN
  7496.  
  7497.           CALL  THE APPROPRIATE ROUTINE.  wHEN THE ROUTINE FINISHES,  a  IS
  7498.  
  7499.           LOADED WITH THE DATA TABLE'S LENGTH AND THIS ROUTINE IS CALLED TO
  7500.  
  7501.           RETURN CONTROL TO THE CALLER AFTER THE DATA TABLE.
  7502.  
  7503.  
  7504.  
  7505.  
  7506.  
  7507.  
  7508.  
  7509.  
  7510.  
  7511.  
  7512.  
  7513.  
  7514.  
  7515.  
  7516.  
  7517.  
  7518.  
  7519.  
  7520.  
  7521.  
  7522.  
  7523.  
  7524.  
  7525.  
  7526.  
  7527.  
  7528.  
  7529.  
  7530.  
  7531.           geos kERNAL rOUTINES                                      1-55
  7532.  
  7533.  
  7534.  
  7535.  
  7536.  
  7537.           fUNCTION nAME: test
  7538.  
  7539.           pURPOSE: tESTS THE VALUE OF A POINT ON THE HIRES SCREEN.
  7540.  
  7541.           cALL ADDRESS: $c13f
  7542.  
  7543.           iNPUT REQUIREMENTS:
  7544.  
  7545.                $08-$09   tHE COLUMN NUMBER.
  7546.  
  7547.                $18       tHE ROW NUMBER.
  7548.  
  7549.           oUTPUT:
  7550.  
  7551.                c FLAG IS SET TO THE VALUE OF THE PIXEL.
  7552.  
  7553.  
  7554.  
  7555.           dESCRIPTION: tESTS WHETHER OR NOT A GIVEN PIXEL IS ON OR NOT. tHE
  7556.  
  7557.           CARRY FLAG IS SET TO THE VALUE OF THE PIXEL.
  7558.  
  7559.  
  7560.  
  7561.  
  7562.  
  7563.           fUNCTION nAME: trace
  7564.  
  7565.           pURPOSE: cREATE A TABLE OF TRACKS AND SECTORS.
  7566.  
  7567.           cALL ADDRESS: $c205
  7568.  
  7569.           iNPUT REQUIREMENTS:
  7570.  
  7571.                $04       iNITIAL TRACK NUMBER.
  7572.  
  7573.                $05       iNITIAL SECTOR NUMBER.
  7574.  
  7575.                $08-$09   aDDRESS OF TABLE TO BE CREATED.
  7576.  
  7577.           oUTPUT:
  7578.  
  7579.                tABLE  POINTED  TO BY $08-$09 IS FILLED WITH ALL THE  TRACKS
  7580.  
  7581.                AND SECTORS LINKED TO THE INITIAL SECTOR.
  7582.  
  7583.           eRRORS: sEE aPPENDIX
  7584.  
  7585.  
  7586.  
  7587.           dESCRIPTION:  gIVEN  AN INITIAL TRACK AND  SECTOR,  THIS  ROUTINE
  7588.  
  7589.           TRACES  A CHAIN AND RETURNS A LIST OF ALL THE TRACKS AND  SECTORS
  7590.  
  7591.           ENCOUNTERED.  tHIS ROUTINE USES THE BUFFER AT $8000-$80ff TO READ
  7592.  
  7593.           THE SECTORS.
  7594.  
  7595.  
  7596.  
  7597.  
  7598.  
  7599.           fUNCTION nAME: ud1616
  7600.  
  7601.           pURPOSE: uNSIGNED 16 BIT BY 16 BIT DIVISION.
  7602.  
  7603.           cALL ADDRESS: $c169
  7604.  
  7605.           iNPUT REQUIREMENTS:
  7606.  
  7607.                y         tHE ADDRESS OF THE 16 BIT DIVISOR.
  7608.  
  7609.                x         tHE ADDRESS OF THE 16 BIT DIVIDEND.
  7610.  
  7611.           oUTPUT:
  7612.  
  7613.                x         tHE ADDRESS OF THE 16 BIT QUOTIENT.
  7614.  
  7615.                $12-$13   tHE 16 BIT REMAINDER.
  7616.  
  7617.  
  7618.  
  7619.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x AND
  7620.  
  7621.           y  EACH HAVE THE ADDRESS OF A TERM IN THE DIVISION.  tHE QUOTIENT
  7622.  
  7623.           IS  STORED IN PLACE OF THE ORIGINAL DIVIDEND THAT x  POINTED  TO.
  7624.  
  7625.           tHE DIVIDEND IS LEFT UNTOUCHED.
  7626.  
  7627.  
  7628.  
  7629.  
  7630.  
  7631.  
  7632.  
  7633.  
  7634.  
  7635.  
  7636.  
  7637.  
  7638.  
  7639.  
  7640.  
  7641.  
  7642.  
  7643.  
  7644.  
  7645.  
  7646.  
  7647.  
  7648.  
  7649.  
  7650.  
  7651.  
  7652.  
  7653.  
  7654.  
  7655.  
  7656.  
  7657.  
  7658.  
  7659.  
  7660.  
  7661.  
  7662.  
  7663.           geos kERNAL rOUTINES                                      1-56
  7664.  
  7665.  
  7666.  
  7667.  
  7668.  
  7669.           fUNCTION nAME: um1616
  7670.  
  7671.           pURPOSE: uNSIGNED 16 BIT BY 16 BIT MULTIPLY.
  7672.  
  7673.           cALL ADDRESS: $c166
  7674.  
  7675.           iNPUT REQUIREMENTS:
  7676.  
  7677.                y         tHE ADDRESS OF THE 16 BIT MULTIPLIER.
  7678.  
  7679.                x         tHE ADDRESS OF THE 16 BIT MULTIPLICAND.
  7680.  
  7681.           oUTPUT:
  7682.  
  7683.                x         tHE ADDRESS OF THE 16 BIT RESULT.
  7684.  
  7685.  
  7686.  
  7687.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x AND
  7688.  
  7689.           y EACH HAVE  THE  ADDRESS  OF A TERM IN THE  MULTIPLICATION.  tHE
  7690.  
  7691.           RESULT IS  STORED  IN  PLACE OF THE  ORIGINAL MULTIPLICAND THAT x
  7692.  
  7693.           POINTED TO.  tHE MULTIPLIER POINTED TO BY y IS UNTOUCHED.
  7694.  
  7695.  
  7696.  
  7697.  
  7698.  
  7699.           fUNCTION nAME: um168
  7700.  
  7701.           pURPOSE: uNSIGNED 8 BIT BY 16 BIT MULTIPLY.
  7702.  
  7703.           cALL ADDRESS: $c163
  7704.  
  7705.           iNPUT REQUIREMENTS:
  7706.  
  7707.                y         tHE ADDRESS OF THE 8 BIT MULTIPLIER.
  7708.  
  7709.                x         tHE ADDRESS OF THE 16 BIT MULTIPLICAND.
  7710.  
  7711.           oUTPUT:
  7712.  
  7713.                x         tHE ADDRESS OF THE 16 BIT PRODUCT.
  7714.  
  7715.  
  7716.  
  7717.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x AND
  7718.  
  7719.           y  EACH  HAVE THE ADDRESS OF A TERM IN  THE  MULTIPLICATION.  tHE
  7720.  
  7721.           RESULT  IS  STORED IN PLACE OF THE ORIGINAL MULTIPLICAND  THAT  x
  7722.  
  7723.           POINTED  TO.  tHE BYTE FOLLOWING THE MULTIPLIER IS SET  TO  ZERO,
  7724.  
  7725.           THEN CONTROL PASSES TO um1616.
  7726.  
  7727.  
  7728.  
  7729.  
  7730.  
  7731.           fUNCTION nAME: umul88
  7732.  
  7733.           pURPOSE: uNSIGNED 8 BIT BY 8 BIT MULTIPLY.
  7734.  
  7735.           cALL ADDRESS: $c160
  7736.  
  7737.           iNPUT REQUIREMENTS:
  7738.  
  7739.                y         tHE ADDRESS OF THE MULTIPLIER.
  7740.  
  7741.                x         tHE ADDRESS OF THE MULTIPLICAND.
  7742.  
  7743.           oUTPUT:
  7744.  
  7745.                x         tHE ADDRESS OF THE 16 BIT PRODUCT.
  7746.  
  7747.  
  7748.  
  7749.           dESCRIPTION: tHIS ROUTINE IS ONE OF THE geos MATH ROUTINES. x AND
  7750.  
  7751.           y  EACH  HAVE THE ADDRESS OF A TERM IN  THE  MULTIPLICATION.  tHE
  7752.  
  7753.           RESULT  IS  STORED IN PLACE OF THE ORIGINAL MULTIPLICAND  THAT  x
  7754.  
  7755.           POINTED TO.  tHE VALUE THAT y POINTS TO IS LEFT UNTOUCHED.
  7756.  
  7757.  
  7758.  
  7759.  
  7760.  
  7761.  
  7762.  
  7763.  
  7764.  
  7765.  
  7766.  
  7767.  
  7768.  
  7769.  
  7770.  
  7771.  
  7772.  
  7773.  
  7774.  
  7775.  
  7776.  
  7777.  
  7778.  
  7779.  
  7780.  
  7781.  
  7782.  
  7783.  
  7784.  
  7785.  
  7786.  
  7787.  
  7788.  
  7789.  
  7790.  
  7791.  
  7792.  
  7793.  
  7794.  
  7795.           geos kERNAL rOUTINES                                      1-57
  7796.  
  7797.  
  7798.  
  7799.  
  7800.  
  7801.           fUNCTION nAME: update
  7802.  
  7803.           pURPOSE: uPDATE A vlir FILE.
  7804.  
  7805.           cALL ADDRESS: $c295
  7806.  
  7807.           oUTPUT:
  7808.  
  7809.                $8498     cLEARED TO $00.
  7810.  
  7811.           pREPARATORY ROUTINES: vopen
  7812.  
  7813.           eRRORS: sEE aPPENDIX i.
  7814.  
  7815.  
  7816.  
  7817.           dESCRIPTION: tHIS ROUTINE WRITES THE OPEN vlir FILE'S vlir SECTOR
  7818.  
  7819.           TO  DISK  AND UPDATES THE FILE'S DIRECTORY ENTRY ON  DISK  (tIME,
  7820.  
  7821.           DATE AND FILE SIZE).  tHIS OPERATION IS NOT PERFORMED IF LOCATION
  7822.  
  7823.           $8498  IS ZERO TO START WITH.  tHAT LOCATION IS A FLAG THAT TELLS
  7824.  
  7825.           WHETHER THE FILE HAS BEEN ALTERED OR NOT.  tHIS ROUTINE IS CALLED
  7826.  
  7827.           BY vclose.
  7828.  
  7829.  
  7830.  
  7831.  
  7832.  
  7833.           fUNCTION nAME: vclose
  7834.  
  7835.           pURPOSE: cLOSE A vlir FILE.
  7836.  
  7837.           cALL ADDRESS: $c277
  7838.  
  7839.           oUTPUT:
  7840.  
  7841.                $8873     cLEARED TO $00.
  7842.  
  7843.           pREPARATORY ROUTINES: vopen
  7844.  
  7845.           eRRORS: sEE aPPENDIX i.
  7846.  
  7847.  
  7848.  
  7849.           dESCRIPTION:  tHE  vlir  SECTOR IS REWRITTEN TO THE DISK AND  THE
  7850.  
  7851.           DIRECTORY  IS  UPDATED WITH A NEW TIME,  DATE AND  FILE  SIZE  BY
  7852.  
  7853.           CALLING  update.  lOCATION $8873 IS THE TRACK NUMBER OF THE  vlir
  7854.  
  7855.           SECTOR.  bY CLEARING IT,  geos SAYS THAT THE FILE IS NO LONGER IN
  7856.  
  7857.           MEMORY.
  7858.  
  7859.  
  7860.  
  7861.  
  7862.  
  7863.           fUNCTION nAME: vline
  7864.  
  7865.           pURPOSE: dRAWS A VERTICAL LINE ON THE SCREEN.
  7866.  
  7867.           cALL ADDRESS: $c121
  7868.  
  7869.           iNPUT REQUIREMENTS:
  7870.  
  7871.                a         tHE ACTUAL BIT PATTERN FOR THE LINE.
  7872.  
  7873.                $08       tHE TOP MARGIN.
  7874.  
  7875.                $09       tHE BOTTOM MARGIN.
  7876.  
  7877.                $0a-$0b   tHE RIGHT MARGIN.
  7878.  
  7879.  
  7880.  
  7881.           dESCRIPTION:  tHIS  ROUTINE  DRAWS A VERTICAL LINE ON  THE  HIRES
  7882.  
  7883.           SCREEN IN A GIVEN PATTERN. sEE ALSO rowadr.
  7884.  
  7885.  
  7886.  
  7887.  
  7888.  
  7889.  
  7890.  
  7891.  
  7892.  
  7893.  
  7894.  
  7895.  
  7896.  
  7897.  
  7898.  
  7899.  
  7900.  
  7901.  
  7902.  
  7903.  
  7904.  
  7905.  
  7906.  
  7907.  
  7908.  
  7909.  
  7910.  
  7911.  
  7912.  
  7913.  
  7914.  
  7915.  
  7916.  
  7917.  
  7918.  
  7919.  
  7920.  
  7921.  
  7922.  
  7923.  
  7924.  
  7925.  
  7926.  
  7927.           geos kERNAL rOUTINES                                      1-58
  7928.  
  7929.  
  7930.  
  7931.  
  7932.  
  7933.           fUNCTION nAME: vload
  7934.  
  7935.           pURPOSE: lOAD A vlir CHAIN.
  7936.  
  7937.           cALL ADDRESS: $c28c
  7938.  
  7939.           iNPUT REQUIREMENTS:
  7940.  
  7941.                $06-$07   mAXIMUM BYTE COUNT OF LOAD.
  7942.  
  7943.                $10-$11   lOAD ADDRESS.
  7944.  
  7945.                $8496     cURRENT CHAIN NUMBER.
  7946.  
  7947.           oUTPUT:
  7948.  
  7949.                $8302-$83ff tABLE OF TRACKS AND SECTORS THAT WERE LOADED.
  7950.  
  7951.           pREPARATORY ROUTINES: vopen
  7952.  
  7953.           eRRORS: sEE aPPENDIX i.
  7954.  
  7955.  
  7956.  
  7957.           dESCRIPTION:  tHIS  ROUTINE  LOADS THE CURRENT CHAIN  BY  CALLING
  7958.  
  7959.           lchain.
  7960.  
  7961.  
  7962.  
  7963.  
  7964.  
  7965.           fUNCTION nAME: vopen
  7966.  
  7967.           pURPOSE: oPENS A vlir FILE.
  7968.  
  7969.           cALL ADDRESS: $c274
  7970.  
  7971.           iNPUT REQUIREMENTS:
  7972.  
  7973.                $02-$03   pOINTER TO FILE NAME.
  7974.  
  7975.           oUTPUT:
  7976.  
  7977.                $04       tRACK OF vlir SECTOR.
  7978.  
  7979.                $05       sECTOR OF vlir SECTOR.
  7980.  
  7981.                $0c-$0d   pOINTER TO FILE'S DIRECTORY ENTRY.
  7982.  
  7983.                $8100-$81ff fILE'S vlir SECTOR.
  7984.  
  7985.                $8496     iNITIAL CHAIN # (sHOULD BE 0).
  7986.  
  7987.                $8497     nUMBER OF CHAINS.
  7988.  
  7989.                $8498     cLEARED TO $00. (vlir FILE MODIFIED).
  7990.  
  7991.                $8499-$849a fILE SIZE.
  7992.  
  7993.                $886f     tRACK OF FILE'S DIRECTORY ENTRY.
  7994.  
  7995.                $8870     sECTOR OF FILE'S DIRECTORY ENTRY.
  7996.  
  7997.                $8871-$8872 pOINTER TO DIRECTORY ENTRY.
  7998.  
  7999.                $8873     tRACK FOR vlir SECTOR.
  8000.  
  8001.                $8874     sECTOR FOR vlir SECTOR.
  8002.  
  8003.           eRRORS: sEE aPPENDIX i.
  8004.  
  8005.  
  8006.  
  8007.           dESCRIPTION:  tHIS ROUTINE OPENS A vlir FILE, AND SETS UP ALL THE
  8008.  
  8009.           VARIABLES ASSOCIATED WITH IT. oNLY ONE vlir FILE CAN BE OPEN AT A
  8010.  
  8011.           TIME DUE TO THE FACT THAT THESE VARIABLES ARE GLOBAL.
  8012.  
  8013.  
  8014.  
  8015.  
  8016.  
  8017.  
  8018.  
  8019.  
  8020.  
  8021.  
  8022.  
  8023.  
  8024.  
  8025.  
  8026.  
  8027.  
  8028.  
  8029.  
  8030.  
  8031.  
  8032.  
  8033.  
  8034.  
  8035.  
  8036.  
  8037.  
  8038.  
  8039.  
  8040.  
  8041.  
  8042.  
  8043.  
  8044.  
  8045.  
  8046.  
  8047.  
  8048.  
  8049.  
  8050.  
  8051.  
  8052.  
  8053.  
  8054.  
  8055.  
  8056.  
  8057.  
  8058.  
  8059.           geos kERNAL rOUTINES                                      1-59
  8060.  
  8061.  
  8062.  
  8063.  
  8064.  
  8065.           fUNCTION nAME: vsave
  8066.  
  8067.           pURPOSE: sAVE MEMORY TO A vlir CHAIN.
  8068.  
  8069.           cALL ADDRESS: $c28f
  8070.  
  8071.           iNPUT REQUIREMENTS:
  8072.  
  8073.                $06-$07   lENGTH OF SAVE.
  8074.  
  8075.                $10-$11   aDDRESS OF MEMORY TO BE SAVED.
  8076.  
  8077.                $8496     vlir CHAIN NUMBER.
  8078.  
  8079.           oUTPUT:
  8080.  
  8081.                $8300-$83ff tABLE OF TRACKS AND SECTORS THAT WERE SAVED TO.
  8082.  
  8083.           pREPARATORY ROUTINES: vopen
  8084.  
  8085.           eRRORS: sEE aPPENDIX i.
  8086.  
  8087.  
  8088.  
  8089.           dESCRIPTION:  tHIS  ROUTINE  SAVES A BLOCK OF MEMORY  TO  A  vlir
  8090.  
  8091.           CHAIN. iF THE CHAIN ALREADY EXISTED, THEN IT IS DELETED FIRST. iF
  8092.  
  8093.           THE  LENGTH  OF THE SAVE IS 0,  THEN NO SAVE IS  PERFORMED.  tHIS
  8094.  
  8095.           WOULD ALLOW THIS ROUTINE TO BE USED AS A DELETE CHAIN FUNCTION.
  8096.  
  8097.  
  8098.  
  8099.  
  8100.  
  8101.           fUNCTION nAME: whatis
  8102.  
  8103.           pURPOSE: wHO KNOWS?
  8104.  
  8105.           cALL ADDRESS: $c196
  8106.  
  8107.           oUTPUT:
  8108.  
  8109.                $02-$03   vALUE FROM $9f27-$9f28 ($3e66).
  8110.  
  8111.  
  8112.  
  8113.           dESCRIPTION: tHIS ROUTINE SEEMS TO HAVE ABSOLUTELY NO PURPOSE. iT
  8114.  
  8115.           COPIES  A VECTOR FROM $9f27-$9f28 ($3e66) TO  $02-$03.  lOCATIONS
  8116.  
  8117.           $9f27  AND $9f28 ARE CHECKED BY ANOTHER ROUTINE AT BOOTUP.  iF IT
  8118.  
  8119.           IS ZERO THEN THE FIRST vlir CHAIN OF THE KERNAL ($9000-$9fff)  IS
  8120.  
  8121.           REWRITTEN  TO  THE  DISK.  tHIS  MAY BE A  REMNANT  OF  THE  geos
  8122.  
  8123.           DEVELOPMENT  ENVIRONMENT OR IT MAY BE SOME KIND OF KERNAL VERSION
  8124.  
  8125.           NUMBER. tHE CODE LOOKS LIKE THIS:
  8126.  
  8127.                 lda $9f28
  8128.  
  8129.                 sta $03
  8130.  
  8131.                 lda $9f27
  8132.  
  8133.                 sta $02
  8134.  
  8135.                 rts
  8136.  
  8137.  
  8138.  
  8139.  
  8140.  
  8141.  
  8142.  
  8143.  
  8144.  
  8145.  
  8146.  
  8147.  
  8148.  
  8149.  
  8150.  
  8151.  
  8152.  
  8153.  
  8154.  
  8155.  
  8156.  
  8157.  
  8158.  
  8159.  
  8160.  
  8161.  
  8162.  
  8163.  
  8164.  
  8165.  
  8166.  
  8167.  
  8168.  
  8169.  
  8170.  
  8171.  
  8172.  
  8173.  
  8174.  
  8175.  
  8176.  
  8177.  
  8178.  
  8179.  
  8180.  
  8181.  
  8182.  
  8183.  
  8184.  
  8185.  
  8186.  
  8187.  
  8188.  
  8189.  
  8190.  
  8191.           geos kERNAL rOUTINES                                      1-60
  8192.  
  8193.  
  8194.  
  8195.  
  8196.  
  8197.           fUNCTION nAME: window
  8198.  
  8199.           pURPOSE: pROCESS A WINDOW DESCRIPTOR.
  8200.  
  8201.           cALL ADDRESS: $c256
  8202.  
  8203.           iNPUT REQUIREMENTS:
  8204.  
  8205.                $02-$03   pOINTER TO WINDOW DESCRIPTOR.
  8206.  
  8207.           oUTPUT:
  8208.  
  8209.                $02       wINDOW COMMAND THAT CLOSED THE WINDOW.
  8210.  
  8211.                $851d     wINDOW COMMAND THAT CLOSED THE WINDOW.
  8212.  
  8213.  
  8214.  
  8215.           dESCRIPTION:  lIKE  menu,  THIS IS ANOTHER VERY POWERFUL ROUTINE.
  8216.  
  8217.           gIVEN  A  DESCRIPTION OF THE WINDOW'S  COMMANDS, EVERYTHING  GETS
  8218.  
  8219.           HANDLED.  tHE FORMAT OF THE WINDOW DESCRIPTOR IS AS FOLLOWS:
  8220.  
  8221.                .byte wINDOW TYPE.
  8222.  
  8223.                          bIT 7     wINDOW  SIZE  FOLLOWS;   OTHERWISE,  USE
  8224.  
  8225.                                    STANDARD  WINDOW  SIZE ROWS 40  TO  135,
  8226.  
  8227.                                    COLUMNS 72 TO 263.
  8228.  
  8229.                          bITS 0-4  fILL PATTERN FOR SHADOW.  iF ZERO,  THEN
  8230.  
  8231.                                    NO SHADOW IS DRAWN.
  8232.  
  8233.                tHE  FOLLOWING  SIX BYTES ARE ONLY PRESENT IF BIT 7  OF  THE
  8234.  
  8235.                WINDOW TYPE IS SET.
  8236.  
  8237.                .byte tOP MARGIN.
  8238.  
  8239.                .byte bOTTOM MARGIN.
  8240.  
  8241.                .word lEFT MARGIN.
  8242.  
  8243.                .word rIGHT MARGIN.
  8244.  
  8245.  
  8246.  
  8247.                .byte cOMMAND BYTES FOLLOWED BY WHATEVER DATA IS NEEDED.
  8248.  
  8249.  
  8250.  
  8251.           aLL THE CLICK BOX DESCRIPTORS ARE STORED IN A TABLE AT $880c, FOR
  8252.  
  8253.           geos TO PROCESS THEM.  tHIS LIMITS THE NUMBER OF CLICK BOXES IN A
  8254.  
  8255.           WINDOW  TO  8.  sEVERAL  MEMORY  LOCATIONS  ARE  SAVED  PRIOR  TO
  8256.  
  8257.           PROCESSING THE WINDOW;  ALSO THE STACK POINTER AND RETURN ADDRESS
  8258.  
  8259.           ARE  SAVED.  aFTER THE WINDOW IS DRAWN,  CONTROL PASSES  BACK  TO
  8260.  
  8261.           main. clswin MUST BE CALLED TO RETURN TO THE CALLER. tHEREFORE IT
  8262.  
  8263.           IS  ESSENTIAL  THAT  SOME  MEANS  OF  CLOSING  A  WINDOW  EXISTS,
  8264.  
  8265.           OTHERWISE  A  SITUATION  LIKE syserr WILL OCCUR (sEE  THE  syserr
  8266.  
  8267.           ROUTINE FOR MORE INFO).
  8268.  
  8269.                tHE COMMAND THAT CLOSES THE WINDOW IS THE VALUE RETURNED  TO
  8270.  
  8271.           THE USER.  IE.  IF A CLICK BOX CLOSES THE WINDOW THEN THE COMMAND
  8272.  
  8273.           NUMBER  THAT  DREW THE CLICK BOX IS RETURNED.  hOWEVER IT IS  THE
  8274.  
  8275.           USER'S  ROUTINE'S  RESPONSIBILITY  TO SET THE VALUE  OF  LOCATION
  8276.  
  8277.           $851d IF A USER CLICK BOX IS TO CLOSE THE WINDOW.  cOMMAND #13 IS
  8278.  
  8279.           ANOTHER ONE THAT CAN CLOSE THE WINDOW.  uSER ROUTINES DO NOT HAVE
  8280.  
  8281.           TO CLOSE THE WINDOW BUT THEY MAY IF THEY SO DESIRE.
  8282.  
  8283.                tHE  FOLLOWING  IS A LIST OF THE MEMORY ADDRESSES STORED  BY
  8284.  
  8285.           THE WINDOW PROCESSOR:
  8286.  
  8287.                $22-$38   $849b-$84c0    $86c0-$87d3    $8ff8-$8fff
  8288.  
  8289.                $3f-$40   $d000-$d010    $d01b-$d01d    $d025-$d026
  8290.  
  8291.                $d015     $d028-$d02e
  8292.  
  8293.  
  8294.  
  8295.  
  8296.  
  8297.  
  8298.  
  8299.  
  8300.  
  8301.  
  8302.  
  8303.  
  8304.  
  8305.  
  8306.  
  8307.  
  8308.  
  8309.  
  8310.  
  8311.  
  8312.  
  8313.  
  8314.  
  8315.  
  8316.  
  8317.  
  8318.  
  8319.  
  8320.  
  8321.  
  8322.  
  8323.           geos kERNAL rOUTINES                                      1-61
  8324.  
  8325.  
  8326.  
  8327.  
  8328.  
  8329.                               wINDOW pROCESSOR cOMMANDS
  8330.  
  8331.  
  8332.  
  8333.           0    nO DATA. tHIS COMMAND ENDS THE WINDOW DESCRIPTOR.
  8334.  
  8335.           1    tHE DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES  AND
  8336.  
  8337.                THE ROW OFFSET IN PIXELS.  dRAW AN 'ok' CLICK BOX.
  8338.  
  8339.           2    tHE  DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES AND
  8340.  
  8341.                THE ROW OFFSET IN PIXELS.  dRAW A 'cANCEL' CLICK BOX.
  8342.  
  8343.           3    tHE DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES  AND
  8344.  
  8345.                THE ROW OFFSET IN PIXELS.  dRAW A 'yES' CLICK BOX.
  8346.  
  8347.           4    tHE DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES  AND
  8348.  
  8349.                THE ROW OFFSET IN PIXELS.  dRAW A 'nO' CLICK BOX.
  8350.  
  8351.           5    tHE  DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES AND
  8352.  
  8353.                THE ROW OFFSET IN PIXELS.  dRAW AN 'oPEN' CLICK BOX.
  8354.  
  8355.           6    tHE DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES  AND
  8356.  
  8357.                THE ROW OFFSET IN PIXELS.  dRAW A 'dISK' CLICK BOX.
  8358.  
  8359.           7-10 aRE UNDEFINED COMMANDS.
  8360.  
  8361.           11   tHE  DATA  FOR THIS COMMAND IS THE COLUMN OFFSET IN  PIXELS,
  8362.  
  8363.                THE ROW OFFSET IN PIXELS,  AND THE ADDRESS OF A TEXT STRING.
  8364.  
  8365.                tHIS  COMMAND  DISPLAYS  THE TEXT STRING  AT  THE  SPECIFIED
  8366.  
  8367.                OFFSET IN THE WINDOW.
  8368.  
  8369.           12   tHE  DATA FOR THIS COMMAND IS THE COLUMN OFFSET  IN  PIXELS,
  8370.  
  8371.                THE  ROW  OFFSET  IN  PIXELS AND ZERO PAGE  ADDRESS  OF  THE
  8372.  
  8373.                ADDRESS OF A TEXT STRING. tHIS COMMAND IS SIMILAR TO COMMAND
  8374.  
  8375.                11, EXCEPT FOR ITS METHOD OF ADDRESSING THE STRING.
  8376.  
  8377.           13   tHE  DATA FOR THIS COMMAND IS THE COLUMN OFFSET  IN  PIXELS,
  8378.  
  8379.                THE  ROW OFFSET IN PIXELS,  ZERO PAGE ADDRESS OF THE ADDRESS
  8380.  
  8381.                OF  THE  TEXT  BUFFER TO BE USED BY input  AND  THE  MAXIMUM
  8382.  
  8383.                LENGTH OF THE INPUT BUFFER.  sEE input FOR MORE INFORMATION.
  8384.  
  8385.           14   sET THE VECTOR AT $84a9-$84aa TO CLOSE THE WINDOW. gENERALLY
  8386.  
  8387.                USED WITH COMMAND 13.
  8388.  
  8389.           15   tHE DATA FOR THIS COMMAND IS THE ADDRESS OF A grphic COMMAND
  8390.  
  8391.                TABLE.  sEE grphic FOR FURTHER INFORMATION.
  8392.  
  8393.           16   tHE DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN PIXELS AND
  8394.  
  8395.                THE  ROW  OFFSET IN PIXELS.  tHIS COMMAND OPENS A  SCROLLING
  8396.  
  8397.                WINDOW OF FILENAMES.  lOCATIONS $10 AND $16-$17 MUST BE  SET
  8398.  
  8399.                PRIOR  TO  CALLING window (sEE table FOR MORE  INFORMATION).
  8400.  
  8401.                tHE FILENAMES ARE STORED AT $8300-$83ff,  TO A MAXIMUM OF 15
  8402.  
  8403.                FILENAMES.  lOCATION  $885c  WILL RETURN THE  INDEX  OF  THE
  8404.  
  8405.                SELECTED  FILE  NAME.  iF MORE THAN 6 FILES ARE  FOUND,  THE
  8406.  
  8407.                SUBWINDOW WILL HAVE A CLICK BOX FOR SCROLLING THE LIST.
  8408.  
  8409.           17   tHE DATA FOR THIS COMMAND IS THE ADDRESS OF THE ROUTINE  FOR
  8410.  
  8411.                BUTTON PRESSED.  tHIS COMMAND SETS THE VECTOR AT $84a9-$84aa
  8412.  
  8413.                TO A USER SPECIFIED ROUTINE.
  8414.  
  8415.           18   tHE DATA FOR THIS COMMAND IS THE COLUMN OFFSET IN BYTES, THE
  8416.  
  8417.                ROW  OFFSET  IN  PIXELS AND THE ADDRESS OF A USER'S  8  BYTE
  8418.  
  8419.                CLICK BOX DESCRIPTION, IN THE FOLLOWING FORMAT:
  8420.  
  8421.                          #BYTES    dESCRIPTION
  8422.  
  8423.                             2      aDDRESS OF GRAPHIC DATA.
  8424.  
  8425.                             2      nOT USED.
  8426.  
  8427.                             1      wIDTH OF BOX IN BYTES.
  8428.  
  8429.                             1      hEIGHT OF BOX IN PIXELS.
  8430.  
  8431.                             2      aDDRESS OF ROUTINE TO PROCESS THIS BOX.
  8432.  
  8433.           19   tHE  DATA  FOR  THIS  COMMAND  IS  THE  ADDRESS  OF  A  USER
  8434.  
  8435.                SUBROUTINE.  tHIS COMMAND CALLS THE USER'S SUBROUTINE.
  8436.  
  8437.  
  8438.  
  8439.  
  8440.  
  8441.  
  8442.  
  8443.  
  8444.  
  8445.  
  8446.  
  8447.  
  8448.  
  8449.  
  8450.  
  8451.  
  8452.  
  8453.  
  8454.  
  8455.           geos kERNAL rOUTINES                                      1-62
  8456.  
  8457.  
  8458.  
  8459.  
  8460.  
  8461.           fUNCTION nAME: wr180
  8462.  
  8463.           pURPOSE: wRITE TRACK 18 SECTOR 0 BACK TO DISK.
  8464.  
  8465.           cALL ADDRESS: $c24a
  8466.  
  8467.           iNPUT REQUIREMENTS:
  8468.  
  8469.                $8200-$82ff dATA FOR TRACK 18 SECTOR 0.
  8470.  
  8471.           oUTPUT:
  8472.  
  8473.                $04       $12, TRACK NUMBER.
  8474.  
  8475.                $05       $00, SECTOR NUMBER.
  8476.  
  8477.                $0a-$0b   $8200, ADDRESS OF BUFFER AREA.
  8478.  
  8479.           eRRORS: sEE aPPENDIX i.
  8480.  
  8481.  
  8482.  
  8483.           dESCRIPTION:  tHIS  ROUTINE SETS UP THE POINTERS FOR write,  THEN
  8484.  
  8485.           CALLS  IT TO WRITE THE SECTOR.  tHIS IS GENERALLY USED TO  UPDATE
  8486.  
  8487.           THE bam ON THE DISK.
  8488.  
  8489.  
  8490.  
  8491.  
  8492.  
  8493.           fUNCTION nAME: write
  8494.  
  8495.           pURPOSE: wRITE A GIVEN TRACK AND SECTOR.
  8496.  
  8497.           cALL ADDRESS: $c1e7
  8498.  
  8499.           iNPUT REQUIREMENTS:
  8500.  
  8501.                $04       tRACK OF SECTOR TO BE WRITTEN.
  8502.  
  8503.                $05       sECTOR NUMBER TO BE WRITTEN.
  8504.  
  8505.                $0a-$0b   pOINTER TO BUFFER.
  8506.  
  8507.           eRRORS: sEE aPPENDIX
  8508.  
  8509.  
  8510.  
  8511.           dESCRIPTION: lOADS TURBODOS IF IT IS NOT ALREADY THERE BY CALLING
  8512.  
  8513.           dsetup.  tHE DESIRED BLOCK IS THEN WRITTEN TO THE DISK BY CALLING
  8514.  
  8515.           write2.  fINALLY cwrite IS CALLED TO VERIFY THE SECTOR.
  8516.  
  8517.  
  8518.  
  8519.  
  8520.  
  8521.           fUNCTION nAME: write2
  8522.  
  8523.           pURPOSE: wRITE A SECTOR TO THE DISK.
  8524.  
  8525.           cALL ADDRESS: $c220
  8526.  
  8527.           iNPUT REQUIREMENTS:
  8528.  
  8529.                $04       tRACK NUMBER.
  8530.  
  8531.                $05       sECTOR NUMBER.
  8532.  
  8533.                $0a-$0b   pOINTER TO DATA BUFFER.
  8534.  
  8535.           pREPARATORY ROUTINES: dsetup
  8536.  
  8537.           eRRORS: sEE aPPENDIX i.
  8538.  
  8539.  
  8540.  
  8541.           dESCRIPTION:  tHIS  ROUTINE  IS TO write,  AS read2 IS  TO  read.
  8542.  
  8543.           dsetup MUST HAVE BEEN CALLED PRIOR TO USING THIS ROUTINE.
  8544.  
  8545.  
  8546.  
  8547.  
  8548.  
  8549.           fUNCTION nAME: zfill
  8550.  
  8551.           pURPOSE: fILLS A MEMORY REGION WITH ZEROES.
  8552.  
  8553.           cALL ADDRESS: $c178
  8554.  
  8555.           iNPUT REQUIREMENTS:
  8556.  
  8557.                $02-$03   tHE LENGTH OF THE REGION.
  8558.  
  8559.                $04-$05   tHE ADDRESS OF THE REGION.
  8560.  
  8561.  
  8562.  
  8563.           dESCRIPTION:  mEMORY  IS  FILLED WITH ZEROES BY STORING A $00  AT
  8564.  
  8565.           LOCATION $06 AND CALLING blkfil.
  8566.  
  8567.  
  8568.  
  8569.  
  8570.  
  8571.  
  8572.  
  8573.  
  8574.  
  8575.  
  8576.  
  8577.  
  8578.  
  8579.  
  8580.  
  8581.  
  8582.  
  8583.  
  8584.  
  8585.  
  8586.  
  8587.           dEVICE dRIVERS                                            2-1
  8588.  
  8589.  
  8590.  
  8591.  
  8592.  
  8593.                                     iNPUT dRIVERS
  8594.  
  8595.  
  8596.  
  8597.                iNPUT  DRIVERS EXIST IN MEMORY FROM $fe80 TO $fff9.  tHEY DO
  8598.  
  8599.           NOT HAVE A START ADDRESS SINCE THEY ARE NOT EXECUTABLE  PROGRAMS.
  8600.  
  8601.           tHE  DEFAULT  INPUT  DRIVER  (joystick) IS  BUILT INTO  THE  geos
  8602.  
  8603.           kernal;  geos  WILL ALWAYS BOOT UP WITH THE JOYSTICK AS THE INPUT
  8604.  
  8605.           DEVICE.  tHE  USER MUST SELECT ANOTHER ONE IF IT IS  SO  DESIRED.
  8606.  
  8607.           tHEY  HAVE THREE ENTRY POINTS IN THE VERY BEGINNING.  tHESE ENTRY
  8608.  
  8609.           POINTS ARE A JUMP TABLE FROM $fe80-$fe88.
  8610.  
  8611.                tHE  FIRST ENTRY POINT AT $fe80 IS THE MASTER RESET  VECTOR.
  8612.  
  8613.           tHIS  ROUTINE MUST SET THE MOUSE SPEED (lOCATION $8507) TO  ZERO,
  8614.  
  8615.           AS WELL AS RESET THE MOUSE'S POSITION TO 0,0 (lOCATIONS $3a-$3c).
  8616.  
  8617.           iT MUST ALSO CLEAR THE DIRECTION BYTE (lOCATION $8506).
  8618.  
  8619.                tHE  SECOND  VECTOR MUST RESET THE SPEED TO  ZERO  (lOCATION
  8620.  
  8621.           $8507).
  8622.  
  8623.                tHE  THIRD VECTOR ACTUALLY PERFORMS THE INPUT.  iT MUST ALSO
  8624.  
  8625.           MODIFY  THE  APPROPRIATE  FLAGS,  ADJUST THE  MOUSE'S  SPEED  AND
  8626.  
  8627.           POSITION.
  8628.  
  8629.                tHE FOLLOWING IS A SMALL MEMORY MAP OF LOCATIONS OF INTEREST
  8630.  
  8631.           TO INPUT DRIVERS:
  8632.  
  8633.           $30       mOUSE CONTROL FLAG
  8634.  
  8635.                     bIT 7 - mOUSE  IS VISIBLE,  DO NOT MODIFY  THE  MOUSE'S
  8636.  
  8637.                             POSITION IF IT IS NOT VISIBLE.
  8638.  
  8639.           $39       iNPUT STATUS FLAG
  8640.  
  8641.                     bIT 7 - tHERE  IS DATA IN THE KEYBOARD QUEUE,  THIS  IS
  8642.  
  8643.                             NOT USED BY THE INPUT DRIVER.
  8644.  
  8645.                     bIT 6 - mOUSE HAS CHANGED DIRECTION.
  8646.  
  8647.                     bIT 5 - bUTTON  STATUS HAS CHANGED,  EITHER THE  BUTTON
  8648.  
  8649.                             HAS BEEN RELEASED OR PUSHED SINCE LAST CHECKED.
  8650.  
  8651.           $3a-$3b   mOUSE'S  x  POSITION  (0-319),  RANGE CHECKING  IS  NOT
  8652.  
  8653.                     NECESSARY.
  8654.  
  8655.           $3c       mOUSE'S  y  POSITION (0-199),  RANGE  CHECKING  IS  NOT
  8656.  
  8657.                     NECESSARY.
  8658.  
  8659.           $8501     mOUSE'S MAXIMUM SPEED.
  8660.  
  8661.           $8502     mOUSE'S MINIMUM SPEED.
  8662.  
  8663.           $8503     aCCELERATION FACTOR;  ADDED OR SUBTRACTED EACH TIME THE
  8664.  
  8665.                     INPUT  DRIVE  IS  SCANNED  AND THE  DIRECTION  HAS  NOT
  8666.  
  8667.                     CHANGED.
  8668.  
  8669.           $8505     bUTTON STATUS: $00-PRESSED, $80-NOT PRESSED.
  8670.  
  8671.           $8506     dIRECTION; $ff IF NO DIRECTION IS SPECIFIED;  OTHERWISE
  8672.  
  8673.                     A NUMBER FROM 0 TO 7:
  8674.  
  8675.                                            3    2    1
  8676.  
  8677.                                              *  +  *
  8678.  
  8679.                                           4  -- * --  0
  8680.  
  8681.                                              *  +  *
  8682.  
  8683.                                            5    6    7
  8684.  
  8685.                     tHIS  LOCATION  IS  NEEDED BY THE  SCROLL  FEATURE  FOR
  8686.  
  8687.                     geoPAINT.  iF NOT USED, FOR EXAMPLE BY A kOALAPAD, THIS
  8688.  
  8689.                     FEATURE  OF geoPAINT WILL NOT WORK,  BUT  NOTHING  ELSE
  8690.  
  8691.                     WILL BE AFFECTED.
  8692.  
  8693.           $8507     mOUSE'S CURRENT SPEED.
  8694.  
  8695.  
  8696.  
  8697.  
  8698.  
  8699.  
  8700.  
  8701.  
  8702.  
  8703.  
  8704.  
  8705.  
  8706.  
  8707.  
  8708.  
  8709.  
  8710.  
  8711.  
  8712.  
  8713.  
  8714.  
  8715.  
  8716.  
  8717.  
  8718.  
  8719.           dEVICE dRIVERS                                            2-2
  8720.  
  8721.  
  8722.  
  8723.  
  8724.  
  8725.                                    pRINTER dRIVERS
  8726.  
  8727.  
  8728.  
  8729.                pRINTER  DRIVERS  EXIST IN  MEMORY  FROM  $7900-$7fff.  tHIS
  8730.  
  8731.           OVERLAPS  PART  OF  SCREEN 2.  pRINTER DRIVERS  ARE  ONLY  MEMORY
  8732.  
  8733.           RESIDENT  WHEN  THEY  ARE IN USE.  geos LOADS THE  FIRST  PRINTER
  8734.  
  8735.           DRIVER THAT IT CAN FIND ON THE DISK,  WHENEVER IT NEEDS TO  PRINT
  8736.  
  8737.           SOMETHING.  tO MAKE A PARTICULAR PRINTER DRIVER ALWAYS BE THE ONE
  8738.  
  8739.           FOUND,  ALL  THAT  MUST BE DONE IS TO PLACE IT AHEAD OF  ALL  THE
  8740.  
  8741.           OTHER  PRINTER  DRIVERS IN THE DIRECTORY.  tHERE ARE  FIVE  ENTRY
  8742.  
  8743.           POINTS  TO A PRINTER DRIVER.  tHESE FORM A JUMP TABLE FROM $7900-
  8744.  
  8745.           $790e.
  8746.  
  8747.                tHE FIRST ENTRY POINT,  AT $7900,  IS THE MASTER RESET. tHIS
  8748.  
  8749.           ROUTINE MUST INITIALIZE ANY GLOBAL VARIABLES THAT NEED TO BE SET.
  8750.  
  8751.           tHIS ROUTINE IS CALLED ONCE WHEN THE DRIVER IS LOADED.  oNLY  THE
  8752.  
  8753.           mps-1000  DRIVER USES THIS ROUTINE.  aLL THE OTHERS SIMPLY RETURN
  8754.  
  8755.           WITHOUT DOING ANYTHING.
  8756.  
  8757.                tHE   SECOND  ENTRY  POINT,   AT  $7903,   IS  THE   PRINTER
  8758.  
  8759.           INITIALIZATION.  tHIS ROUTINE IS CALLED JUST PRIOR TO PRINTING AN
  8760.  
  8761.           IMAGE. tHE x REGISTER MUST BE SET TO AN ERROR CODE IF THE PRINTER
  8762.  
  8763.           IS NOT AVAILABLE. tHIS ERROR CODE IS THE c64'S kernal STATUS BYTE
  8764.  
  8765.           AT  LOCATION  $90.  tHIS ROUTINE MUST  INITIALIZE  ANY  TEMPORARY
  8766.  
  8767.           VARIABLES USED BY THE DRIVER.
  8768.  
  8769.                tHE  THIRD  ENTRY POINT,  AT $7906,  ACTUALLY  PERFORMS  THE
  8770.  
  8771.           PRINTING  OF  A LINE.  lOCATIONS $02-$03 POINT TO THE  BIT  IMAGE
  8772.  
  8773.           GRAPHIC DATA FOR THE LINE (640 PIXELS,  8 BITS HIGH,  640 BYTES).
  8774.  
  8775.           lOCATIONS  $04-$05  POINT  TO A BUFFER AREA FREE FOR USE  BY  THE
  8776.  
  8777.           DRIVER IF IT NEEDS IT. tHIS IS MAINLY TO GIVE PRINTERS WHICH ONLY
  8778.  
  8779.           PRINT  7 PIXELS AT A TIME A PLACE TO ACCUMULATE THE  EXTRA  BITS.
  8780.  
  8781.           lOCATIONS  $06-$07 POINT TO THE COLOR DATA FOR THE LINE.  tHIS IS
  8782.  
  8783.           ONLY FOR THE BENEFIT OF COLOR PRINTERS.  tHE PRINTER DRIVER  MUST
  8784.  
  8785.           NOT MODIFIFY ANY OF THESE POINTERS.
  8786.  
  8787.                tHE FOURTH ENTRY POINT,  AT $7909,  CLOSES THE PRINTER. tHIS
  8788.  
  8789.           ROUTINE  IS CALLED WHEN THE IMAGE IS FINISHED.  tHIS ALLOWS 7 BIT
  8790.  
  8791.           PRINTERS TO PRINT THE CONTENTS OF THEIR BUFFERS.  tHIS IS ALSO TO
  8792.  
  8793.           GIVE  THE  PRINTER  DRIVER  A  CHANCE TO  PRINT  A  TOP  OF  FORM
  8794.  
  8795.           CHARACTER.
  8796.  
  8797.                tHE  FIFTH  ENTRY POINT,  AT $790c,  RETURNS THE  NUMBER  OF
  8798.  
  8799.           CHARACTER  COLUMNS THAT THE PRINTER CAN PRINT IN THE x  REGISTER.
  8800.  
  8801.           tHE  MAXIMUM  NUMBER  OF  LINES PER PAGE IS  RETURNED  IN  THE  y
  8802.  
  8803.           REGISTER.  tHE  ACCUMULATOR  IS LOADED WITH A  ZERO.  tHIS  GIVES
  8804.  
  8805.           APPLICATIONS  THE  ABILITY  TO COMPUTE  NECESSARY  BUFFER  SIZES.
  8806.  
  8807.           tYPICAL  VALUES  ARE 80 COLUMNS BY 90 LINES OR 60 COLUMNS  BY  90
  8808.  
  8809.           LINES.
  8810.  
  8811.                fINALLY,  THE PRINTER DRIVER MUST ALSO INCLUDE ITS NAME AS A
  8812.  
  8813.           STRING AT LOCATION $790f.  tHIS NAME MUST BE THE SAME AS THE FILE
  8814.  
  8815.           NAME.  geoWRITE  AND geoPAINT WILL NOT SEE THE DRIVER IF THE FILE
  8816.  
  8817.           NAME  AND  THIS TEXT STRING ARE NOT THE SAME.  desktop  DOES  NOT
  8818.  
  8819.           CARE.
  8820.  
  8821.  
  8822.  
  8823.  
  8824.  
  8825.  
  8826.  
  8827.  
  8828.  
  8829.  
  8830.  
  8831.  
  8832.  
  8833.  
  8834.  
  8835.  
  8836.  
  8837.  
  8838.  
  8839.  
  8840.  
  8841.  
  8842.  
  8843.  
  8844.  
  8845.  
  8846.  
  8847.  
  8848.  
  8849.  
  8850.  
  8851.           fILE fORMATS                                              3-1
  8852.  
  8853.  
  8854.  
  8855.  
  8856.  
  8857.  
  8858.  
  8859.                                  vlir fILE sTRUCTURE
  8860.  
  8861.  
  8862.  
  8863.                a vlir FILE IS A TREE STRUCTURED FILE.  tHE DIRECTORY POINTS
  8864.  
  8865.           TO A SINGLE SECTOR CALLED THE vlir SECTOR.  tHIS SECTOR IS A LIST
  8866.  
  8867.           OF  THE  INITIAL TRACKS AND SECTORS OF EACH OF ITS  BRANCHES  (OR
  8868.  
  8869.           CHAINS). iF THE BRANCH ADDRESS IS TRACK $00 SECTOR $ff, THEN THAT
  8870.  
  8871.           BRANCH  DOES NOT EXIST AND IS NOT USED.  iT IS A PLACE HOLDER.  a
  8872.  
  8873.           BRANCH  ADDRESS OF TRACK $00 SECTOR $00 SPECIFIES THE END OF  THE
  8874.  
  8875.           SECTOR.  tHIS  IS  USED  BY  THE vopen TO  COUNT  THE  NUMBER  OF
  8876.  
  8877.           BRANCHES. iT IS POSSIBLE NOT TO HAVE THIS END MARKER. tHAT IS THE
  8878.  
  8879.           CASE  WHEN  THERE ARE 127 BRANCHES.  tHIS LIMIT OF  127  BRANCHES
  8880.  
  8881.           EXPLAINS MANY  OF geos'S LIMITS,  IE.  127 NOTE  PAD  PAGES,  127
  8882.  
  8883.           PICTURES IN A PHOTO ALBUM, 64 PAGES AND 63 PICTURES IN A geoWRITE
  8884.  
  8885.           FILE,  ETC.  eACH BRANCH IS THE EQUIVALENT OF A NORMAL FILE,  IE.
  8886.  
  8887.           EACH SECTOR POINTS TO THE NEXT WITH THE FIRST TWO BYTES.
  8888.  
  8889.  
  8890.  
  8891.  
  8892.  
  8893.                                   fONT fILE fORMAT
  8894.  
  8895.  
  8896.  
  8897.                fONT FILES ARE vlir FILES;  THE CHAIN NUMBER (0-126) IS  THE
  8898.  
  8899.           POINT  SIZE.  geos LIMITS A FONT TO A POINT SIZE OF 48.  tHIS  IS
  8900.  
  8901.           PROBABLY   DUE  TO  MEMORY  LIMITATIONS  FOR  STORING  THE  FONT.
  8902.  
  8903.           nONEXISTANT POINT SIZES HAVE vlir CHAIN ADDRESSES OF $00,$ff.
  8904.  
  8905.                fONT  FILES  ARE IDENTIFIED BY A UNIQUE id NUMBER  WHICH  IS
  8906.  
  8907.           STORED IN THE FILE'S INFO SECTOR AT OFFSET 130.  tHE INFO  SECTOR
  8908.  
  8909.           CONTAINS A WORD IDENTIFIER FOR EACH POINT SIZE IN THE FONT. tHESE
  8910.  
  8911.           IDENTIFIERS HAVE THE FORM:  id# * 8 + POINT SIZE.  tHESE id WORDS
  8912.  
  8913.           ARE USED BY geoWRITE AND geoPAINT.
  8914.  
  8915.  
  8916.  
  8917.                     fONT FILE CHAIN FORMAT:
  8918.  
  8919.  
  8920.  
  8921.           $00       nUMBER  OF PIXELS MINUS 1 ABOVE THE UNDERLINE.  tHIS IS
  8922.  
  8923.                     THE LINE OF PRINT.
  8924.  
  8925.           $01-$02   nUMBER OF BYTES IN THE BIT STREAM.
  8926.  
  8927.           $03       pOINT SIZE, CHARACTER HEIGHT IN PIXELS.
  8928.  
  8929.           $04-$05   iNDEX  FROM  BEGINNING OF FONT TO TABLE OF  BIT  STREAM
  8930.  
  8931.                     INDICES. uSUALLY $0008.
  8932.  
  8933.           $06-$07   iNDEX FROM BEGINNING OF FONT TO FIRST BIT STREAM.
  8934.  
  8935.           $08-???   tABLE  OF WORDS WHICH ARE INDICES INTO THE BIT STREAMS;
  8936.  
  8937.                     ONE  FOR  EACH CHARACTER FROM SPACE (32) TO  THE  TILDA
  8938.  
  8939.                     (126).  tHERE IS ALSO AN EXTRA INDEX ON THE  END.  tHIS
  8940.  
  8941.                     EXTRA  INDEX IS NEEDED BECAUSE THE DIFFERENCE BETWEEN A
  8942.  
  8943.                     CHARACTER'S INDEX AND THE NEXT CHARACTER'S INDEX IS THE
  8944.  
  8945.                     WIDTH OF THE CHARACTER IN PIXELS.
  8946.  
  8947.           ???-???   pOINTED  TO BY $06-$07.  tHE FONT IS STORED AS  SEVERAL
  8948.  
  8949.                     BIT  STREAMS,  ONE FOR EACH LINE OF PIXELS.  tHE  POINT
  8950.  
  8951.                     SIZE  IS THE NUMBER OF BIT STREAMS.  aLL THE  CHARACTER
  8952.  
  8953.                     IMAGES  ARE STORED IN THE BIT STREAM.  tHE geos  kernal
  8954.  
  8955.                     HAS  SOME VERY SOPHISTICATED BIT MANIPULATION  ROUTINES
  8956.  
  8957.                     FOR ACCESSING ANY GIVEN CHARACTER.
  8958.  
  8959.  
  8960.  
  8961.  
  8962.  
  8963.  
  8964.  
  8965.  
  8966.  
  8967.  
  8968.  
  8969.  
  8970.  
  8971.  
  8972.  
  8973.  
  8974.  
  8975.  
  8976.  
  8977.  
  8978.  
  8979.  
  8980.  
  8981.  
  8982.  
  8983.           fILE fORMATS                                              3-2
  8984.  
  8985.  
  8986.  
  8987.  
  8988.  
  8989.                                   nOTES fILE fORMAT
  8990.  
  8991.  
  8992.  
  8993.                tHE  nOTES FILE CREATED BY THE nOTEPAD DESK ACCESSORY HAS  A
  8994.  
  8995.           vlir  FILE  STRUCTURE.  eACH  BRANCH  IS A  SINGLE  SECTOR  WHICH
  8996.  
  8997.           COMPRISES A PAGE OF THE NOTEPAD.  tHIS SETS THE NOTEPAD'S  LIMITS
  8998.  
  8999.           TO 127 PAGES OF 253 CHARACTERS. 127 PAGES BECAUSE OF THE LIMIT TO
  9000.  
  9001.           THE  NUMBER OF vlir CHAINS,   AND 253 CHARACTERS BECAUSE A SECTOR
  9002.  
  9003.           HOLDS 254 DATA BYTES (2 BYTES FOR THE NEXT TRACK AND SECTOR LINK)
  9004.  
  9005.           AND THE LAST CHARACTER MUST BE A ZERO TO TERMINATE TO TEXT.
  9006.  
  9007.  
  9008.  
  9009.  
  9010.  
  9011.                                   pHOTO sCRAP fILE
  9012.  
  9013.  
  9014.  
  9015.                tHE  pHOTO  sCRAP  FILE  IS A  CODED  GRAPHICS  IMAGE  IN  A
  9016.  
  9017.           SEQUENTIALLY  STRUCTURED  FILE.  tHE FIRST BYTE IS THE NUMBER  OF
  9018.  
  9019.           BYTES  WIDE  THE  IMAGE IS (ONE EIGTH OF THE  WIDTH  IN  PIXELS).
  9020.  
  9021.           tHIS  MEANS THAT PHOTO SCRAPS ARE ALWAYS EVEN MULTIPLES OF  EIGHT
  9022.  
  9023.           PIXELS WIDE.  tHE SECOND AND THIRD BYTE FORM A WORD WHICH IS  THE
  9024.  
  9025.           NUMBER  OF PIXELS HIGH THE IMAGE IS.  fOLLOWING THESE THREE BYTES
  9026.  
  9027.           IS  THE GRAPHICS IMAGE,  CODED IN THE SAME FORMAT AS A CLICK  BOX
  9028.  
  9029.           (SUITABLE FOR draw OR draw2). tHIS FORMAT CONSISTS OF A CODE BYTE
  9030.  
  9031.           FOLLOWED  BY 1 OR MORE DATA BYTES.  tHE CODE BYTES ARE CLASSIFIED
  9032.  
  9033.           INTO THE FOLLOWING THREE BASIC TYPES.
  9034.  
  9035.                1) cODE BYTES LESS THAN 128 MEAN THAT THE FOLLOWING BYTE  IS
  9036.  
  9037.                   TO BE REPEATED THAT MANY TIMES.
  9038.  
  9039.                2) cODE  BYTES  RANGING FROM 128 TO 219 MEAN THAT IF 128  IS
  9040.  
  9041.                   SUBTRACTED  FROM  THE CODE BYTE THEN THE  RESULT  IS  THE
  9042.  
  9043.                   NUMBER OF DATA BYTES THAT FOLLOW.
  9044.  
  9045.                3) cODE BYTES RANGING FROM 220 TO 255 ARE SPECIAL. fIRST 219
  9046.  
  9047.                   IS  SUBTRACTED  FROM  THE CODE BYTE,  THE RESULT  IS  THE
  9048.  
  9049.                   NUMBER   OF  BYTES  IN  THE  PATTERN  THAT  WILL  FOLLOW.
  9050.  
  9051.                   fOLLOWING  THIS CODE BYTE IS A REPETITION COUNT  FOR  THE
  9052.  
  9053.                   PATTERN. fOLLOWING THIS ARE THE BYTES THAT CONSTITUTE THE
  9054.  
  9055.                   PATTERN. tHESE COULD INCLUDE EITHER OF THE FIRST TWO CODE
  9056.  
  9057.                   TYPES.
  9058.  
  9059.           sINCE GRAPHIC IMAGES CAN BE IN COLOR,  THE COLOR DATA FOLLOWS THE
  9060.  
  9061.           GRAPHIC  IMAGE DATA.  tHE COLOR DATA IS CODED IN THE SAME WAY  AS
  9062.  
  9063.           THE GRAPHIC DATA;  HOWEVER,  EACH BYTE OF COLOR DATA IS THE COLOR
  9064.  
  9065.           FOR A BLOCK OF 8 BY 8 PIXELS (A NORMAL CHARACTER SPACE).  tHIS IS
  9066.  
  9067.           THE  REASON  THAT  geoPAINT MAKES PHOTO SCRAPS A  MULTIPLE  OF  8
  9068.  
  9069.           PIXELS HIGH AND WIDE.
  9070.  
  9071.  
  9072.  
  9073.  
  9074.  
  9075.                                    tEXT sCRAP fILE
  9076.  
  9077.  
  9078.  
  9079.                tEXT SCRAPS ARE SEQUENTIALLY STRUCTURED FILES. tHE FIRST TWO
  9080.  
  9081.           BYTES OF WHICH, FORM A WORD WHICH CONTAINS THE NUMBER OF BYTES IN
  9082.  
  9083.           THE SCRAP. fOLLOWING THIS ARE TEXT SEGMENTS IN THE SAME FORMAT AS
  9084.  
  9085.           geoWRITE  FILES,  IE.  4  CODE  BYTES  FOLLOWED BY  A  ZERO  BYTE
  9086.  
  9087.           TERMINATED STRING OF TEXT.  sEE THE geoWRITE fILE FORMAT FOR MORE
  9088.  
  9089.           INFORMATION.
  9090.  
  9091.  
  9092.  
  9093.  
  9094.  
  9095.  
  9096.  
  9097.  
  9098.  
  9099.  
  9100.  
  9101.  
  9102.  
  9103.  
  9104.  
  9105.  
  9106.  
  9107.  
  9108.  
  9109.  
  9110.  
  9111.  
  9112.  
  9113.  
  9114.  
  9115.           fILE fORMATS                                              3-3
  9116.  
  9117.  
  9118.  
  9119.  
  9120.  
  9121.                              pHOTO AND tEXT aLBUM fILES
  9122.  
  9123.  
  9124.  
  9125.                aLBUM  FILES  ARE  vlir  STRUCTURED  FILES, WITH EACH  CHAIN
  9126.  
  9127.           CONTAINING AN INDIVIDUAL PHOTO SCRAP OR TEXT SCRAP.
  9128.  
  9129.  
  9130.  
  9131.  
  9132.  
  9133.                                 geoWRITE fILE fORMAT
  9134.  
  9135.  
  9136.  
  9137.                geoWRITE  FILES  ARE vlir STRUCTURED  FILES.  tHE  FIRST  64
  9138.  
  9139.           BRANCHES  ARE  THE  64 PAGES ALLOWED IN THE  FILE.  tHE  LAST  63
  9140.  
  9141.           BRANCHES  ARE  PHOTO  SCRAPS, IF THERE ARE  ANY  PRESENT  IN  THE
  9142.  
  9143.           DOCUMENT.  sEE  THE SECTION ON pHOTO sCRAP fILES AND pHOTO aLBUMS
  9144.  
  9145.           FOR MORE INFORMATION CONCERNING THE PHOTOS.
  9146.  
  9147.                tHE  FIRST TWO BYTES OF EACH PAGE FORM A WORD WHICH  IS  THE
  9148.  
  9149.           LEFT  MARGIN'S  POSITION IN PIXELS.  tHE NEXT TWO BYTES  ARE  THE
  9150.  
  9151.           RIGHT  MARGIN'S POSITION.  tHE FIFTH THROUGH THE SIXTEENTH  BYTES
  9152.  
  9153.           FORM  6 WORDS WHICH ARE THE TAB STOP POSITIONS,  ALSO IN  PIXELS.
  9154.  
  9155.           tHE TEXT WHICH FOLLOWS IS STORED IN SEGMENTS. eACH SEGMENT STARTS
  9156.  
  9157.           WITH  4 CODE BYTES.  tHE FIRST BYTE IS A $17,  IF THIS IS A  TEXT
  9158.  
  9159.           SEGMENT (MORE LATER).  tHE NEXT TWO BYTES ARE THE FONT id  (CODED
  9160.  
  9161.           FORM  WHICH INCLUDES POINT SIZE;  SEE iNFO sECTOR LOCATIONS  $80-
  9162.  
  9163.           $9f).  tHE  FOURTH  BYTE IS THE STYLE FOR THE SEGMENT;  EACH  BIT
  9164.  
  9165.           DESIGNATING AN ATTRIBUTE:
  9166.  
  9167.                BIT 7     uNDERLINE
  9168.  
  9169.                BIT 6     bOLD
  9170.  
  9171.                BIT 5     rEVERSED, nOT USED IN geoWRITE FILES
  9172.  
  9173.                BIT 4     iTALICS
  9174.  
  9175.                BIT 3     oUTLINE
  9176.  
  9177.           fOLLOWING THE FOUR CODE BYTES IS THE TEXT STRING WHICH HAS A ZERO
  9178.  
  9179.           BYTE  TERMINATOR.  iF THE INITIAL CODE BYTE IS A $10,  THEN  THIS
  9180.  
  9181.           SEGMENT  IS  NOT A TEXT SEGMENT,  IT IS A  PHOTO  SEGMENT.  pHOTO
  9182.  
  9183.           SEGMENTS  HAVE  FIVE CODE BYTES AND NO DATA SECTION.  tHE  SECOND
  9184.  
  9185.           BYTE  IS THE WIDTH OF THE IMAGE IN BYTES.  tHE THIRD  AND  FOURTH
  9186.  
  9187.           BYTES DESIGNATE THE IMAGE'S HEIGHT IN PIXELS. pHOTO SEGMENTS HAVE
  9188.  
  9189.           AN  EXTRA CODE BYTE WHICH IS THE vlir CHAIN NUMBER FOR THE IMAGE.
  9190.  
  9191.           tHIS  COULD ALLOW A DOCUMENT TO HAVE 63 DIFFERENT IMAGES BUT  USE
  9192.  
  9193.           THE SAME IMAGE SEVERAL TIMES WITHOUT STORING IT SEVERAL TIMES.
  9194.  
  9195.  
  9196.  
  9197.  
  9198.  
  9199.  
  9200.  
  9201.  
  9202.  
  9203.  
  9204.  
  9205.  
  9206.  
  9207.  
  9208.  
  9209.  
  9210.  
  9211.  
  9212.  
  9213.  
  9214.  
  9215.  
  9216.  
  9217.  
  9218.  
  9219.  
  9220.  
  9221.  
  9222.  
  9223.  
  9224.  
  9225.  
  9226.  
  9227.  
  9228.  
  9229.  
  9230.  
  9231.  
  9232.  
  9233.  
  9234.  
  9235.  
  9236.  
  9237.  
  9238.  
  9239.  
  9240.  
  9241.  
  9242.  
  9243.  
  9244.  
  9245.  
  9246.  
  9247.           fILE fORMATS                                              3-4
  9248.  
  9249.  
  9250.  
  9251.  
  9252.  
  9253.                                 geoPAINT fILE fORMAT
  9254.  
  9255.  
  9256.  
  9257.                geoPAINT  FILES  ARE  vlir  STRUCTURED  FILES.  eACH  BRANCH
  9258.  
  9259.           REPRESENTS  2 LINES OF THE PICTURE.  tHE DATA IN THE BRANCHES  IS
  9260.  
  9261.           STORED  IN A CODED FORM THAT IS DIFFERENT FROM PHOTO  SCRAPS  AND
  9262.  
  9263.           CLICK  BOXES.  fIRST  OF  ALL,  CONSECUTIVE BYTES DO NOT  FORM  A
  9264.  
  9265.           HORIZONTAL  LINE.  tHE  BYTES  ARE IN THE SAME  SEQUENCE  AS  THE
  9266.  
  9267.           cOMMODORE  STORES  THEM ON THE HIRES  SCREEN.  eIGHT  CONSECUTIVE
  9268.  
  9269.           BYTES FILL A CHARACTER POSITION. eVERY EIGHTH BYTE IS ON THE SAME
  9270.  
  9271.           HORIZONTAL LINE.  tHE DATA IS STORED IN A CODED FORM TO  CONSERVE
  9272.  
  9273.           DISK  STORAGE.  tHE CODING IS SIMPLY A CODE BYTE FOLLOWED BY SOME
  9274.  
  9275.           DATA. cODE BYTES FALL INTO ONE OF THE FOLLOWING THREE CATAGORIES:
  9276.  
  9277.                1) cODE   BYTES  LESS  THAN  64  DETERMINE  THE  NUMBER   OF
  9278.  
  9279.                   INDIVIDUAL BYTES THAT FOLLOW.
  9280.  
  9281.                2) cODE  BYTES  RANGING  FROM 64 TO 127 ARE  USED  FOR  FILL
  9282.  
  9283.                   PATTERNS. tHE LEAST SIGNIFICANT 6 BITS DETERMINE HOW MANY
  9284.  
  9285.                   CHARACTER  POSITIONS ARE TO BE FILLED.  tHIS CODE BYTE IS
  9286.  
  9287.                   FOLLOWED BY EIGHT BYTES WHICH DETERMINE THE FILL PATTERN.
  9288.  
  9289.                3) cODE  BYTES GREATER THAN 127 ARE 128 MORE THAN THE NUMBER
  9290.  
  9291.                   OF TIMES TO REPEAT THE BYTE THAT FOLLOWS THE CODE BYTE.
  9292.  
  9293.           tHIS  CODING SCHEME IS USED TO FIRST SPECIFY THE 1280 BYTES  THAT
  9294.  
  9295.           FORM  THE TWO LINES OF THE PICTURE. tHIS IS FOLLOWED BY  THE  160
  9296.  
  9297.           BYTES WHICH FORM THE COLOR DATA FOR THE TWO LINES.
  9298.  
  9299.  
  9300.  
  9301.  
  9302.  
  9303.  
  9304.  
  9305.  
  9306.  
  9307.  
  9308.  
  9309.  
  9310.  
  9311.  
  9312.  
  9313.  
  9314.  
  9315.  
  9316.  
  9317.  
  9318.  
  9319.  
  9320.  
  9321.  
  9322.  
  9323.  
  9324.  
  9325.  
  9326.  
  9327.  
  9328.  
  9329.  
  9330.  
  9331.  
  9332.  
  9333.  
  9334.  
  9335.  
  9336.  
  9337.  
  9338.  
  9339.  
  9340.  
  9341.  
  9342.  
  9343.  
  9344.  
  9345.  
  9346.  
  9347.  
  9348.  
  9349.  
  9350.  
  9351.  
  9352.  
  9353.  
  9354.  
  9355.  
  9356.  
  9357.  
  9358.  
  9359.  
  9360.  
  9361.  
  9362.  
  9363.  
  9364.  
  9365.  
  9366.  
  9367.  
  9368.  
  9369.  
  9370.  
  9371.  
  9372.  
  9373.  
  9374.  
  9375.  
  9376.  
  9377.  
  9378.  
  9379.           dIRECTORY sTRUCTURE                                       4-1
  9380.  
  9381.  
  9382.  
  9383.  
  9384.  
  9385.  
  9386.  
  9387.                              geos dIRECTORY eNTRY fORMAT
  9388.  
  9389.  
  9390.  
  9391.           bYTE#     dESCRIPTION
  9392.  
  9393.           $00       dos FILE TYPE
  9394.  
  9395.                          bIT 7     fILE CLOSED PROPERLY.
  9396.  
  9397.                          bIT 6     fILE IS WRITE PROTECTED.
  9398.  
  9399.                          bITS 0-2  fILE TYPE
  9400.  
  9401.                                         0    del
  9402.  
  9403.                                         1    seq
  9404.  
  9405.                                         2    prg
  9406.  
  9407.                                         3    usr
  9408.  
  9409.                                         4    rel (nOT PERMITTED UNDER geos)
  9410.  
  9411.           $01       tRACK NUMBER OF FIRST SECTOR.
  9412.  
  9413.           $02       sECTOR NUMBER OF FIRST SECTOR.
  9414.  
  9415.           $03-$12   fILE NAME.
  9416.  
  9417.           $13       tRACK NUMBER FOR INFO SECTOR.
  9418.  
  9419.           $14       sECTOR NUMBER FOR INFO SECTOR.
  9420.  
  9421.           $15       fILE STRUCTURE.
  9422.  
  9423.                          0    sEQUENTIAL STRUCTURE.
  9424.  
  9425.                          1    vlir FORMAT
  9426.  
  9427.           $16       geos FILE TYPE.
  9428.  
  9429.                          0    nON-geos FILE.
  9430.  
  9431.                          1    basic pROGRAM.
  9432.  
  9433.                          2    aSSEMBLY PROGRAM.
  9434.  
  9435.                          3    dATA FILE.
  9436.  
  9437.                          4    sYSTEM FILE.
  9438.  
  9439.                          5    dESK aCCESSORY.
  9440.  
  9441.                          6    aPPLICATION.
  9442.  
  9443.                          7    aPPLICATION dATA.
  9444.  
  9445.                          8    fONT FILE.
  9446.  
  9447.                          9    pRINTER DRIVER.
  9448.  
  9449.                          10   iNPUT DRIVER.
  9450.  
  9451.           tHE  NEXT  FEW  BYTES  DEFINE THE TIME AND  DATE  OF  THE  FILE'S
  9452.  
  9453.           CREATION.
  9454.  
  9455.           $17       yEAR.
  9456.  
  9457.           $18       mONTH.
  9458.  
  9459.           $19       dAY.
  9460.  
  9461.           $1a       hOUR.
  9462.  
  9463.           $1b       mINUTE.
  9464.  
  9465.           $1c-$1d   fILE SIZE IN BLOCKS (INCLUDING INFO SECTOR).
  9466.  
  9467.  
  9468.  
  9469.  
  9470.  
  9471.  
  9472.  
  9473.  
  9474.  
  9475.  
  9476.  
  9477.  
  9478.  
  9479.  
  9480.  
  9481.  
  9482.  
  9483.  
  9484.  
  9485.  
  9486.  
  9487.  
  9488.  
  9489.  
  9490.  
  9491.  
  9492.  
  9493.  
  9494.  
  9495.  
  9496.  
  9497.  
  9498.  
  9499.  
  9500.  
  9501.  
  9502.  
  9503.  
  9504.  
  9505.  
  9506.  
  9507.  
  9508.  
  9509.  
  9510.  
  9511.           dIRECTORY sTRUCTURE                                       4-2
  9512.  
  9513.  
  9514.  
  9515.  
  9516.  
  9517.                         dIRECTORY hEADER (tRACK 18 SECTOR 0)
  9518.  
  9519.  
  9520.  
  9521.           $00       tRACK OF FIRST DIRECTORY SECTOR.
  9522.  
  9523.           $01       sECTOR OF FIRST DIRECTORY SECTOR.
  9524.  
  9525.           $02       $41, ascii 'a' INDICATING 4040 FORMAT.
  9526.  
  9527.           $03       $2a, dos VERSION.
  9528.  
  9529.           $04-$8f   bLOCK aVAILABILITY mAP,  bam, 35 TRACKS, 4  BYTES EACH.
  9530.  
  9531.                     fIRST  BYTE  HAS  NUMBER OF SECTORS FREE ON THAT TRACK.
  9532.  
  9533.                     tHE OTHER THREE BYTES ARE A BIT STREAM. bIT ZERO OF THE
  9534.  
  9535.                     FIRST  OF THE THREE BYTES IS SECTOR 0.  iF THE  BIT  IS
  9536.  
  9537.                     SET, THEN THE BLOCK IS FREE.
  9538.  
  9539.           $90-$9f   dISK NAME PADDED WITH SHIFTED SPACES ($a0).
  9540.  
  9541.           $a0-$a1   tWO EXTRA CHARACTERS FOR DISK NAME.
  9542.  
  9543.           $a2-$a3   dISK id.
  9544.  
  9545.           $a4       sHIFTED SPACE ($a0).
  9546.  
  9547.           $a5-$a6   ascii '2a' FOR dos VERSION.
  9548.  
  9549.           $a7-$aa   sHIFTED SPACES ($a0).
  9550.  
  9551.           $ab       tRACK FOR desktop'S BUFFER.
  9552.  
  9553.           $ac       sECTOR FOR desktop'S BUFFER.
  9554.  
  9555.           $ad-$bc   ascii  'geos FORMAT v1.1',  ONLY THE FIRST 11 BYTES ARE
  9556.  
  9557.                     USED TO CHECK FOR geos FORMAT.
  9558.  
  9559.           $bd-$ff   fILLED WITH ZEROES.
  9560.  
  9561.  
  9562.  
  9563.  
  9564.  
  9565.  
  9566.  
  9567.  
  9568.  
  9569.  
  9570.  
  9571.  
  9572.  
  9573.  
  9574.  
  9575.  
  9576.  
  9577.  
  9578.  
  9579.  
  9580.  
  9581.  
  9582.  
  9583.  
  9584.  
  9585.  
  9586.  
  9587.  
  9588.  
  9589.  
  9590.  
  9591.  
  9592.  
  9593.  
  9594.  
  9595.  
  9596.  
  9597.  
  9598.  
  9599.  
  9600.  
  9601.  
  9602.  
  9603.  
  9604.  
  9605.  
  9606.  
  9607.  
  9608.  
  9609.  
  9610.  
  9611.  
  9612.  
  9613.  
  9614.  
  9615.  
  9616.  
  9617.  
  9618.  
  9619.  
  9620.  
  9621.  
  9622.  
  9623.  
  9624.  
  9625.  
  9626.  
  9627.  
  9628.  
  9629.  
  9630.  
  9631.  
  9632.  
  9633.  
  9634.  
  9635.  
  9636.  
  9637.  
  9638.  
  9639.  
  9640.  
  9641.  
  9642.  
  9643.           iNFORMATION sECTOR fORMAT                                 5-1
  9644.  
  9645.  
  9646.  
  9647.  
  9648.  
  9649.  
  9650.  
  9651.                                  iNFORMATION sECTOR
  9652.  
  9653.  
  9654.  
  9655.           bYTE #    dESCRIPTION
  9656.  
  9657.           $00       $00,  TRACK  LINK  IS ZERO BECAUSE THERE  IS  ONLY  ONE
  9658.  
  9659.                     SECTOR.
  9660.  
  9661.           $01       $ff, NUMBER OF BYTES IN THIS SECTOR.
  9662.  
  9663.           $02-$04   $03, $15, $bf, iNFORMATION SECTOR IDENTIFICATION BYTES.
  9664.  
  9665.           $05-$43   iCON IMAGE IN SPRITE FORMAT.
  9666.  
  9667.           $44       dos FILE TYPE.
  9668.  
  9669.           $45       geos FILE TYPE.
  9670.  
  9671.           $46       fILE STRUCTURE, 0 FOR SEQUENTIAL, 1 FOR vlir.
  9672.  
  9673.           $47-$48   lOAD ADDRESS.
  9674.  
  9675.           $49-$4a   eND OF LOAD ADDRESS.
  9676.  
  9677.           $4b-$4c   sTART   OF  EXECUTION  ADDRESS  FOR   PROGRAM;   UNUSED
  9678.  
  9679.                     OTHERWISE.
  9680.  
  9681.           $4d-$60   cLASS OF FILE; ZERO BYTE TERMINATED.
  9682.  
  9683.           $61-$74   aUTHOR  OF FILE;  ZERO BYTE TERMINATED.  tHE  FOLLOWING
  9684.  
  9685.                     geos FILE TYPES HAVE AUTHORS:
  9686.  
  9687.                          1    basic pROGRAM       6    aPPLICATION
  9688.  
  9689.                          2    aSSEMBLY pROGRAM    9    pRINTER DRIVER
  9690.  
  9691.                          5    dESK aCCESSORY      10   iNPUT dRIVER
  9692.  
  9693.           $75-$88   fOR  aPPLICATION dATA FILES (AND dATA FILES?),  THIS IS
  9694.  
  9695.                     THE CLASS OF THE FILE THAT CREATED THIS FILE.
  9696.  
  9697.           $80-$81   fOR  FONT  FILES ONLY,  THIS IS THE id NUMBER  FOR  THE
  9698.  
  9699.                     FONT.  tHIS IS HOW geos DISTINGUISHES BETWEEN FONTS FOR
  9700.  
  9701.                     geoWRITE AND geoPAINT WITHOUT ACTUALLY STORING THE FONT
  9702.  
  9703.                     NAME. eACH FONT HAS ITS OWN UNIQUE id NUMBER. tHE KNOWN
  9704.  
  9705.                     FONTS HAVE THE FOLLOWING id NUMBERS:
  9706.  
  9707.                          0    bsw            13   tILDEN
  9708.  
  9709.                          1    uNIVERSITY     14   eVANS
  9710.  
  9711.                          2    cALIFORNIA     15   dURANT
  9712.  
  9713.                          3    rOMA           16   tELEGRAPH
  9714.  
  9715.                          4    dWINELLE       17   sUPERB
  9716.  
  9717.                          5    cORY           18   bOWDITCH
  9718.  
  9719.                          6    tOLMAN         19   oRMOND
  9720.  
  9721.                          7    bUBBLE         20   eLMWOOD
  9722.  
  9723.                          8    fONTKNOX       21   hEARST
  9724.  
  9725.                          9    hARMON         21   bRENNENS (bug)
  9726.  
  9727.                          10   mYKONOS        23   cHANNING
  9728.  
  9729.                          11   bOALT          24   pUTNAM
  9730.  
  9731.                          12   sTADIUM        25   lEcONTE
  9732.  
  9733.                     tHERE IS A BUG ON fONTpACK i,  THE bRENNENS FONT SHOULD
  9734.  
  9735.                     HAVE AN id NUMBER OF 22 (OR hEARST SHOULD). sINCE THESE
  9736.  
  9737.                     TWO FONTS HAVE THE SAME id NUMBER, ONLY ONE OF THEM CAN
  9738.  
  9739.                     BE USED IN ANY FILE,  INCLUDING IN geoPAINT.  wHEN geos
  9740.  
  9741.                     LOOKS  FOR A FONT AFTER THE USER HAS  SELECTED  IT,  IT
  9742.  
  9743.                     USES  THE id BYTE TO FIND IT.  iF THE id BYTES ARE  THE
  9744.  
  9745.                     SAME, THEN THE FIRST FILE ENCOUNTERED IS USED.
  9746.  
  9747.           $82-$9f   fOR  FONT  FILES ONLY;  id WORDS FOR EACH  POINT  SIZE.
  9748.  
  9749.                     tHESE ARE CODED AS: 64 * id# + POINT SIZE.
  9750.  
  9751.           $a0-$ff   tEXT FIELD FOR THE FILE; ZERO BYTE TERMINATED.
  9752.  
  9753.  
  9754.  
  9755.  
  9756.  
  9757.  
  9758.  
  9759.  
  9760.  
  9761.  
  9762.  
  9763.  
  9764.  
  9765.  
  9766.  
  9767.  
  9768.  
  9769.  
  9770.  
  9771.  
  9772.  
  9773.  
  9774.  
  9775.           mEMORY mAP                                                6-1
  9776.  
  9777.  
  9778.  
  9779.  
  9780.  
  9781.           $01            r6510     bUILT-IN 6510 i/o PORT, BIT ORIENTED
  9782.  
  9783.                                         bIT 0 - 0=ram, 1=basic rom
  9784.  
  9785.                                         bIT 1 - 0=ram, 1=kERNAL rom
  9786.  
  9787.                                         bIT 2 - 0=cHARACTER SET rom,
  9788.  
  9789.                                                 1=i/o PORTS
  9790.  
  9791.                                         bITS 3-5 - cASSETTE CONTROL LINES
  9792.  
  9793.                                         bITS 6-7 - uNCONNECTED
  9794.  
  9795.           $02-$03        gpnt1     gENERAL POINTER,  USUALLY USED TO PASS A
  9796.  
  9797.                                    PARAMETER TO A kERNAL ROUTINE.
  9798.  
  9799.           $04-$05        gpnt2     gENERAL POINTER
  9800.  
  9801.           $04            track     tRACK NUMBER FOR DISK OPERATIONS
  9802.  
  9803.           $05            sector    sECTOR NUMBER FOR DISK OPERATIONS
  9804.  
  9805.           $05            row       rOW TO PRINT TEXT ON
  9806.  
  9807.           $06-$0b        boxsiz    bOX SIZE DESCRIPTOR
  9808.  
  9809.           $06            bxtop     tOP ROW OF A BOX
  9810.  
  9811.           $07            bxbot     bOTTOM ROW OF A BOX
  9812.  
  9813.           $08-$09        bxleft    lEFT MARGIN OF A BOX
  9814.  
  9815.           $0a-$0b        bxrite    rIGHT MARGIN OF A BOX
  9816.  
  9817.           $0c-$0d        dirpnt    dIRECTORY  ENTRY  POINTER,  RETURNED  BY
  9818.  
  9819.                                    LOOKUP.  aLSO  USED AS  THE  DESTINATION
  9820.  
  9821.                                    INDIRECT   POINTER  FOR  HIRES   GRAPHIC
  9822.  
  9823.                                    OPERATIONS.
  9824.  
  9825.           $0e-$0f        filpnt    fILENAME  POINTER,  USED TO POINT  TO  A
  9826.  
  9827.                                    FILE NAME FOR FILE OPERATIONS. aLSO USED
  9828.  
  9829.                                    AS THE SOURCE INDIRECT POINTER FOR HIRES
  9830.  
  9831.                                    GRAPHIC OPERATIONS.
  9832.  
  9833.           $10            sgtype    sELECTED geos FILE TYPE; USED BY table
  9834.  
  9835.           $11            maxfil    mAXIMUM NUMBER OF FILES TO FIND; USED BY
  9836.  
  9837.                                    TABLE
  9838.  
  9839.           $12-$13                  tEMPORARY STORAGE AREAS
  9840.  
  9841.           $14-$15        dirpt2    aLTERNATE   DIRECTORY   ENTRY   POINTER,
  9842.  
  9843.                                    USUALLY  POINTS TO $8400.  aLSO USED  TO
  9844.  
  9845.                                    POINT TO A FILE'S INFO SECTOR WHEN IT IS
  9846.  
  9847.                                    IN MEMORY.
  9848.  
  9849.           $16            dpage     nUMBER  OF  DIRECTORY  SECTORS  TO  SKIP
  9850.  
  9851.                                    BEFORE  FINDING A HOLE IN THE DIRECTORY;
  9852.  
  9853.                                    USED  BY  FILE SAVE ROUTINES  AND  hole.
  9854.  
  9855.                                    aLSO  USED  AS A PARAMETER VALUE  TO  BE
  9856.  
  9857.                                    PASSED TO PROGRAMS.  cOULD BE  desktop'S
  9858.  
  9859.                                    PAGE NUMBER.
  9860.  
  9861.           $16-$17        classp    pOINTER TO CLASS STRING; USED BY table
  9862.  
  9863.           $18-$19        column    cOLUMN TO PRINT TEXT IN
  9864.  
  9865.           $20-$21                  uNUSED
  9866.  
  9867.           $22-$23        patern    pOINTER TO FILL PATTERN DATA
  9868.  
  9869.           $24-$25        inppnt    pOINTER TO INPUT BUFFER
  9870.  
  9871.           $26-$2e        fontdt    cURRENT FONT DATA TABLE.  sEE fONT  fILE
  9872.  
  9873.                                    fORMAT  FOR  A COMPLETE  DESCRIPTION  OF
  9874.  
  9875.                                    THIS HEADER INFORMATION.
  9876.  
  9877.           $26            pline     nUMBER  OF  PIXELS ABOVE LINE OF  PRINT.
  9878.  
  9879.                                    uNDERLINING  APPEARS 1 PIXEL  BELOW  THE
  9880.  
  9881.                                    LINE OF PRINT. 
  9882.  
  9883.           $27-$28        bslen     nUMBER   OF  BYTES  IN  THE  FONT'S  BIT
  9884.  
  9885.                                    STREAMS
  9886.  
  9887.           $29            psize     pOINT SIZE OF THE FONT
  9888.  
  9889.  
  9890.  
  9891.  
  9892.  
  9893.  
  9894.  
  9895.  
  9896.  
  9897.  
  9898.  
  9899.  
  9900.  
  9901.  
  9902.  
  9903.  
  9904.  
  9905.  
  9906.  
  9907.           mEMORY mAP                                                6-2
  9908.  
  9909.  
  9910.  
  9911.  
  9912.  
  9913.           $2a-$2b        bspnts    aDDRESS OF BIT STREAM INDICES TABLE
  9914.  
  9915.           $2c-$2d        bspnt     aDDRESS OF THE FIRST BIT STREAM
  9916.  
  9917.           $2e            style     dEFINES THE CURRENT PRINT STYLE
  9918.  
  9919.                                         bIT 7 - uNDERLINE
  9920.  
  9921.                                         bIT 6 - bOLDFACE
  9922.  
  9923.                                         bIT 5 - rEVERSED VIDEO
  9924.  
  9925.                                         bIT 4 - iTALICS
  9926.  
  9927.                                         bIT 3 - oUTLINE
  9928.  
  9929.           $2f            scnflg    cONTROLS  THE  SOURCE  AND   DESTINATION
  9930.  
  9931.                                    SCREENS,  USED BY rowadr. bITS 6 & 7 ARE
  9932.  
  9933.                                    USED   TO   DETERMINE  THE  SOURCE   AND
  9934.  
  9935.                                    DESTINATION SCREENS AS FOLLOWS:
  9936.  
  9937.                                         7 6  $0c-$0d  $0e-$0f
  9938.  
  9939.                                         0 0    af00     af00  (midscreen)
  9940.  
  9941.                                         0 1     2        1
  9942.  
  9943.                                         1 0     1        1
  9944.  
  9945.                                         1 1     1        2
  9946.  
  9947.                                    iF BIT 5 IS SET,  THEN ONLY SCREEN 1  IS
  9948.  
  9949.                                    USED FOR TEXT (mODE 10).
  9950.  
  9951.           $30            msflag    mOUSE CONTROL FLAG
  9952.  
  9953.                                         bIT 7 - mOUSE IS NOT VISIBLE
  9954.  
  9955.                                         bIT 6 - eNABLE   CHECKING   MOUSE'S
  9956.  
  9957.                                                 POSITION   AGAINST  CURRENT
  9958.  
  9959.                                                 MENU LIMITS.
  9960.  
  9961.                                         bIT 5 - eNABLE   CHECKING   MOUSE'S
  9962.  
  9963.                                                 POSITION AGAINST CLICK  BOX
  9964.  
  9965.                                                 TABLE.
  9966.  
  9967.           $31-$32        mspnt     pOINTER  TO  THE  SPRITE  DATA  FOR  THE
  9968.  
  9969.                                    DEFAULT MOUSE, USUALLY $84c1
  9970.  
  9971.           $33            topm      tOP MARGIN, USUALLY 0 (tOP OF SCREEN)
  9972.  
  9973.           $34            botm      bOTTOM  MARGIN,  USUALLY 199 (bOTTOM  OF
  9974.  
  9975.                                    SCREEN)
  9976.  
  9977.           $35-$36        leftm     lEFT MARGIN
  9978.  
  9979.           $37-$38        rightm    rIGHT MARGIN,  IF AN ATTEMPT IS MADE  TO
  9980.  
  9981.                                    PRINT  TEXT  PAST  THIS COLUMN,  CONTROL
  9982.  
  9983.                                    PASSES THROUGH $84ab.
  9984.  
  9985.           $39            inpflg    iNPUT CONTROL FLAGS
  9986.  
  9987.                                         bIT 7 - tHERE   IS  DATA   IN   THE
  9988.  
  9989.                                                 KEYBOARD BUFFER
  9990.  
  9991.                                         bIT 6 - iNPUT  DEVICE  HAS  CHANGED
  9992.  
  9993.                                                 DIRECTION
  9994.  
  9995.                                         bIT 5 - bUTTON STATUS HAS CHANGED
  9996.  
  9997.           $3a-$3b        mousex    mOUSE'S x POSITION
  9998.  
  9999.           $3c            mousey    mOUSE'S y POSITION
  10000.  
  10001.           $3f-$40        cbpnt     pOINTER TO CLICK BOX DATA TABLE
  10002.  
  10003.           $41-$42        jmpvec    jUMP VECTOR USED BY indjmp
  10004.  
  10005.           $43-$44        winpnt    pOINTER  USED BY window TO POINT TO  THE
  10006.  
  10007.                                    WINDOW DESCRIPTOR BLOCK.
  10008.  
  10009.           $8e                      tHE LEAST SIGNIFICANT 3 BITS OF LOCATION
  10010.  
  10011.                                    $dd00,  USED  BY  SERIAL  COMMUNICATIONS
  10012.  
  10013.                                    ROUTINES. tHESE THREE BITS REPRESENT THE
  10014.  
  10015.                                    vic  MEMORY  BANK NUMBER AND THE  rs-232
  10016.  
  10017.                                    OUTPUT LINE.
  10018.  
  10019.  
  10020.  
  10021.  
  10022.  
  10023.  
  10024.  
  10025.  
  10026.  
  10027.  
  10028.  
  10029.  
  10030.  
  10031.  
  10032.  
  10033.  
  10034.  
  10035.  
  10036.  
  10037.  
  10038.  
  10039.           mEMORY mAP                                                6-3
  10040.  
  10041.  
  10042.  
  10043.  
  10044.  
  10045.           $8f                      a  COPY  OF LOCATION $8e WITH THE  CLOCK
  10046.  
  10047.                                    AND DATA LINES SET.
  10048.  
  10049.           $6000-$7f3f    scren2    sECONDARY HIRES SCREEN, USED AS A BACKUP
  10050.  
  10051.                                    FOR ERASING MENUS AND WINDOWS.
  10052.  
  10053.           $7900-$7fff              pRINTER  DRIVER  ADDRESS;   SEE  PRINTER
  10054.  
  10055.                                    DRIVER DEFINITIONS
  10056.  
  10057.           $7900                    mASTER RESET FOR A PRINTER DRIVER
  10058.  
  10059.           $7903                    sELECT  PRINTER  TO BEGIN  TO  PRINT  AN
  10060.  
  10061.                                    IMAGE
  10062.  
  10063.           $7906                    oUTPUT LINE OF IMAGE
  10064.  
  10065.           $7909                    cLOSE PRINTER, END AN IMAGE
  10066.  
  10067.           $790c                    rETURN HEIGHT AND WIDTH OF PRINTED PAGE
  10068.  
  10069.           $790f                    pRINTER DRIVER'S NAME AS A TEXT STRING
  10070.  
  10071.           $8000-$80ff    buf0      dISK BUFFER #0
  10072.  
  10073.           $8100-$81ff    buf1      dISK BUFFER #1, iNFO SECTOR
  10074.  
  10075.           $8200-$82ff    buf2      dISK BUFFER #2, dIRECTORY WORK AREA
  10076.  
  10077.           $8300-$83ff    buf3      dISK  BUFFER  #3,  tABLE OF  TRACKS  AND
  10078.  
  10079.                                    SECTORS
  10080.  
  10081.           $8400-$841d    dentry    cURRENT  DIRECTORY  ENTRY,   SET  UP  BY
  10082.  
  10083.                                    lookup
  10084.  
  10085.           $841e-$842f    dname0    nAME OF DISK IN DRIVE 0 (DEVICE 8)
  10086.  
  10087.           $8430-$8441    dname1    nAME OF DISK IN DRIVE 1 (DEVICE 9)
  10088.  
  10089.           $8442-$8453    dname2    nAME OF DISK IN DRIVE 2 (DEVICE 10)
  10090.  
  10091.           $8454-$8465    dname3    nAME OF DISK IN DRIVE 3 (DEVICE 11)
  10092.  
  10093.           $8466-$8488              uNUSED
  10094.  
  10095.           $8486          bootdv    pOINT TO INDEX FROM TO REACH $848e
  10096.  
  10097.           $8489          curdrv    cURRENT DRIVE'S DEVICE NUMBER
  10098.  
  10099.           $848a          drvflg    pOINT TO INDEX FROM TO REACH $8492
  10100.  
  10101.           $848b          format    fORMAT FLAG OF CURRENT DISK,
  10102.  
  10103.                                         $00 - geos FORMAT
  10104.  
  10105.                                         $ff - nON-geos DISKETTE
  10106.  
  10107.           $848c          skew      sKEW FACTOR FOR DISKETTE OPERATIONS
  10108.  
  10109.           $848d          numdrv    nUMBER OF DRIVE IN THE SYSTEM
  10110.  
  10111.           $848e-$8491              geos  USES  THIS TABLE TO DESIGNATE  THE
  10112.  
  10113.                                    BOOT  DRIVE,  BY  PLACING A $01  IN  THE
  10114.  
  10115.                                    LOCATION   CORRESPONDING  TO  THE   BOOT
  10116.  
  10117.                                    DRIVE. tHIS TABLE IS REACHED BY INDEXING
  10118.  
  10119.                                    OFF OF $8486 WITH THE DEVICE NUMBER.
  10120.  
  10121.           $8492-$8495              dRIVE STATUS BYTES,  INDEXED FROM  $848a
  10122.  
  10123.                                    WITH THE DEVICE NUMBER.
  10124.  
  10125.                                         bIT 7 - tURBODOS IS LOADED
  10126.  
  10127.                                         bIT 6 - tURBODOS IS RUNNING
  10128.  
  10129.           $8496          chain     cURRENT vlir CHAIN NUMBER
  10130.  
  10131.           $8497          nchain    nUMBER OF vlir CHAINS IN THE OPEN FILE
  10132.  
  10133.           $8498          modflg    mODIFIED  FLAG,  SET TO $ff IF THE  OPEN
  10134.  
  10135.                                    vlir   FILE   HAS  BEEN   CHANGED;   $00
  10136.  
  10137.                                    OTHERWISE
  10138.  
  10139.           $8499-$849a    vsize     vlir FILE SIZE
  10140.  
  10141.           $849b-$849c    imain     vECTOR  FOR USER ADDITIONS TO  THE  geos
  10142.  
  10143.                                    MAIN LOOP
  10144.  
  10145.           $849d-$849e    igirq     vECTOR FOR geos'S irq ROUTINE
  10146.  
  10147.           $849f-$84a0    iuirq     vECTOR FOR A USER'S ADDITIONS TO THE irq
  10148.  
  10149.                                    ROUTINE
  10150.  
  10151.           $84a1-$84a2    ibuton    vECTOR FOR BUTTON STATUS CHANGES
  10152.  
  10153.  
  10154.  
  10155.  
  10156.  
  10157.  
  10158.  
  10159.  
  10160.  
  10161.  
  10162.  
  10163.  
  10164.  
  10165.  
  10166.  
  10167.  
  10168.  
  10169.  
  10170.  
  10171.           mEMORY mAP                                                6-4
  10172.  
  10173.  
  10174.  
  10175.  
  10176.  
  10177.           $84a3-$84a4    icrhit    vECTOR  FOR CARRIAGE RETURN ENTERED FROM
  10178.  
  10179.                                    THE KEYBOARD
  10180.  
  10181.           $84a5-$84a6    imsdir    vECTOR FOR MOUSE DIRECTION CHANGE
  10182.  
  10183.           $84a7-$84a8    iclsmn    vECTOR TO CLOSE A MENU
  10184.  
  10185.           $84a9-$84aa    iacton    tHIS VECTOR IS USED FOR A LOT OF  THINGS
  10186.  
  10187.                                    THAT  REQUIRE AN ACTION TO BE PERFORMED.
  10188.  
  10189.                                    tHESE  ITEMS INCLUDE:  A  CHARACTER  WAS
  10190.  
  10191.                                    TYPED,  THE  BUTTON  WAS  RELEASED,  THE
  10192.  
  10193.                                    BUTTON WAS PRESSED AND EITHER THE  MOUSE
  10194.  
  10195.                                    WAS VISIBLE OR bIT 5 OF msflag (LOCATION
  10196.  
  10197.                                    $30) WAS SET.
  10198.  
  10199.           $84ab-$84ac    imargn    vECTOR FOR MARGINS EXCEEDED
  10200.  
  10201.           $84ad-$84ae    ialarm    vECTOR FOR THE ALARM CLOCK ROUTINE
  10202.  
  10203.           $84af-$84b0    ibrk      vECTOR    FOR   THE   brk   INSTRUCTION,
  10204.  
  10205.                                    INITIALLY THIS IS SET TO syserr
  10206.  
  10207.           $84b1-$84b2    iclear    vECTOR  FOR A ROUTINE TO CLEAR A  REGION
  10208.  
  10209.                                    OF THE SCREEN, INITIALLY SET TO copyb3
  10210.  
  10211.           $84b3          dftime    dEFAULT DELAY VALUE FOR FLASHING BOXES
  10212.  
  10213.           $84b4          curflg    tEXT CURSOR CONTROL FLAG
  10214.  
  10215.                                         bIT 7 - bLINK THE CURSOR
  10216.  
  10217.                                         bIT 6 - cURSOR IS TURNED ON
  10218.  
  10219.                                         bITS 0-5 - bLINK RATE
  10220.  
  10221.           $84b5          cbflag    cONTROL FLAG FOR CLICK BOX
  10222.  
  10223.                                         bIT 7 - fLASH THE BOX
  10224.  
  10225.                                         bIT 6 - oNLY INVERT THE BOX
  10226.  
  10227.           $84b6          posflg    mOUSE POSITION FLAG, SET BY irqrtn
  10228.  
  10229.                                         bIT 7 - mOUSE  IS BELOW THE  BOTTOM
  10230.  
  10231.                                                 OF THE WINDOW, wnbot, $84b9
  10232.  
  10233.                                         bIT 6 - mOUSE  IS ABOVE THE TOP  OF
  10234.  
  10235.                                                 THE WINDOW, wntop, $84b8
  10236.  
  10237.                                         bIT 5 - mOUSE IS TO THE LEFT OF THE
  10238.  
  10239.                                                 WINDOW, wnleft, $84ba-$84bb
  10240.  
  10241.                                         bIT 4 - mOUSE  IS TO THE  RIGHT  OF
  10242.  
  10243.                                                 THE WINDOW,  wnrite, $84bc-
  10244.  
  10245.                                                 $84bd
  10246.  
  10247.                                         bIT 3 - mOUSE  IS OUTSIDE THE MENU,
  10248.  
  10249.                                                 mntop,    mnbot,    mnleft,
  10250.  
  10251.                                                 mnrite, $86c1-$86c6
  10252.  
  10253.           $84b7          numenu    nUMBER OF MENU LEVELS
  10254.  
  10255.           $84b8-$84bd              wINDOW SIZE DESCRIPTION
  10256.  
  10257.           $84b8          wntop     tOP ROW OF WINDOW
  10258.  
  10259.           $84b9          wnbot     bOTTOM ROW OF WINDOW
  10260.  
  10261.           $84ba-$84bb    wnleft    lEFT MARGIN OF WINDOW 
  10262.  
  10263.           $84bc-$84bd    wnrite    rIGHT MARGIN OF WINDOW
  10264.  
  10265.           $84be-$84bf    cursx     tEXT CURSOR'S x POSITION
  10266.  
  10267.           $84c0          cursy     tEXT CURSOR'S y POSITION
  10268.  
  10269.           $84c1-$84ff    dmouse    sPRITE DATA FOR DEFAULT MOUSE
  10270.  
  10271.           $8500                    uNUSED
  10272.  
  10273.           $8501          maxspd    mAXIMUM MOUSE SPEED
  10274.  
  10275.           $8502          minspd    mINIMUM MOUSE SPEED
  10276.  
  10277.           $8503          accel     mOUSE'S ACCELERATION RATE
  10278.  
  10279.           $8504          key       nEXT  KEY FROM KEYBOARD BUFFER,  SET  BY
  10280.  
  10281.                                    getin
  10282.  
  10283.  
  10284.  
  10285.  
  10286.  
  10287.  
  10288.  
  10289.  
  10290.  
  10291.  
  10292.  
  10293.  
  10294.  
  10295.  
  10296.  
  10297.  
  10298.  
  10299.  
  10300.  
  10301.  
  10302.  
  10303.           mEMORY mAP                                                6-5
  10304.  
  10305.  
  10306.  
  10307.  
  10308.  
  10309.           $8505          button    cURRENT BUTTON STATUS
  10310.  
  10311.                                         $00 - pRESSED 
  10312.  
  10313.                                         $ff - rELEASED 
  10314.  
  10315.           $8506          msdir     mOUSE'S CURRENT DIRECTION, 0-7,$ff
  10316.  
  10317.                                        3 2 1
  10318.  
  10319.                                        4 * 0
  10320.  
  10321.                                        5 6 7
  10322.  
  10323.           $8507          mspeed    cURRENT MOUSE SPEED
  10324.  
  10325.           $8508-$8509              uNUSED
  10326.  
  10327.           $850a-$850b    rndnum    rANDOM NUMBER GENERATOR VALUE
  10328.  
  10329.           $850c-$8514    tmpfnt    tEMPORARY  STORAGE FOR FONT DATA  DURING
  10330.  
  10331.                                    MENU   PROCESSING,   COPY   OF   fontdt,
  10332.  
  10333.                                    LOCATIONS $26-$2e
  10334.  
  10335.           $8515                    a COUNTER USED BY THE CLICK BOX ROUTINE,
  10336.  
  10337.                                    WHICH  IS DECREMENTED BY THE irq SERVICE
  10338.  
  10339.                                    ROUTINE IF IT IS NONZERO.  sEE  aPPENDIX
  10340.  
  10341.                                    iv.
  10342.  
  10343.           $8516          year      cURRENT YEAR (0-99)
  10344.  
  10345.           $8517          month     cURRENT MONTH
  10346.  
  10347.           $8518          day       cURRENT DAY OF THE MONTH
  10348.  
  10349.           $8519          hour      cURRENT HOUR
  10350.  
  10351.           $851a          minute    cURRENT MINUTE OF THE HOUR
  10352.  
  10353.           $851b          second    cURRENT SECOND OF THE MINUTE
  10354.  
  10355.           $851c          tenths    cURRENT TENTHS OF THE SECOND
  10356.  
  10357.           $851d          wincmd    cOMMAND  BYTE  RETURNED  BY  THE  WINDOW
  10358.  
  10359.                                    PROCESSOR
  10360.  
  10361.           $851e          pcolor    pREFERRED  COLORS;  HIGH NIBBLE FOR  THE
  10362.  
  10363.                                    FOREGROUND COLOR AND LOW NIBBLE FOR  THE
  10364.  
  10365.                                    BACKGROUND COLOR
  10366.  
  10367.           $851f-$8697    savbuf    tEMPORARY  STORAGE BUFFER FOR THE WINDOW
  10368.  
  10369.                                    PROCESSOR;    SEE   window   FOR    MORE
  10370.  
  10371.                                    INFORMATION
  10372.  
  10373.           $8698-$86bb              uNUSED
  10374.  
  10375.           $86c0          numopt    nUMBER OF OPTIONS IN THE CURRENT MENU
  10376.  
  10377.           $86c1-$86c6              cURRENT MENU SIZE DESCRIPTION
  10378.  
  10379.           $86c1          mntop     tOP ROW OF MENU
  10380.  
  10381.           $86c2          mnbot     bOTTOM ROW OF MENU
  10382.  
  10383.           $86c3-$86c4    mnleft    lEFT MARGIN OF MENU
  10384.  
  10385.           $86c5-$86c6    mnrite    rIGHT MARGIN OF MENU
  10386.  
  10387.           $86c7-$86ce    mstack    sTACK FOR MENU DESCRIPTORS
  10388.  
  10389.           $86cf-$86d2    option    mENU OPTION THAT WAS CLICKED ON, INDEXED
  10390.  
  10391.                                    BY MENU LEVEL (0-3)
  10392.  
  10393.           $86d3-$86e1    limith    mENU  OPTION  BOX  LIMITS,   EITHER  ROW
  10394.  
  10395.                                    VALUES OR COLUMN HIGH BYTES
  10396.  
  10397.           $86e2-$86f0    limitl    mENU OPTION BOX LIMITS, COLUMN LOW BYTES
  10398.  
  10399.           $86f1-$8718    timers    tABLE OF RUNNING TIMERS, SEE $8755
  10400.  
  10401.           $8719-$872c    timcmd    tIMER COMMAND BYTES
  10402.  
  10403.                                         bIT 7 - eXECUTE   ROUTINE,    TIMER
  10404.  
  10405.                                                 REACHED ZERO
  10406.  
  10407.                                         bIT 6 - dISABLE ROUTINE  EXECUTION,
  10408.  
  10409.                                                 LEAVE TIMER RUNNING
  10410.  
  10411.                                         bIT 5 - sTOP TIMER
  10412.  
  10413.                                         bIT 4 - sTOP TIMER
  10414.  
  10415.  
  10416.  
  10417.  
  10418.  
  10419.  
  10420.  
  10421.  
  10422.  
  10423.  
  10424.  
  10425.  
  10426.  
  10427.  
  10428.  
  10429.  
  10430.  
  10431.  
  10432.  
  10433.  
  10434.  
  10435.           mEMORY mAP                                                6-6
  10436.  
  10437.  
  10438.  
  10439.  
  10440.  
  10441.           $872d-$8754    timrtn    sUBROUTINE   ADDRESSES  ASSOCIATED  WITH
  10442.  
  10443.                                    EACH TIMER
  10444.  
  10445.           $8755-$877c    timval    iNITIAL  VALUES FOR  TIMERS,  COPIED  TO
  10446.  
  10447.                                    $86f1 WHEN THE TIMER REACHES ZERO
  10448.  
  10449.           $877d          numtim    nUMBER OF TIMERS IN TABLE
  10450.  
  10451.           $877e          dlysp     sTACK POINTER FOR DELAY STACK
  10452.  
  10453.           $877f-$87a6    dlyval    tIME DELAY VALUES
  10454.  
  10455.           $87a7-$87ce    dlyrtn    rETURN ADDRESSES FOR WHEN THE DELAY TIME
  10456.  
  10457.                                    HAS EXPIRED
  10458.  
  10459.           $87cf          inplen    lENGTH OF USER ENTRY
  10460.  
  10461.           $87d0          maxlen    mAXIMUM LENGTH OF USER ENTRY
  10462.  
  10463.           $87d1-$87d2    tmpvec    cOPY OF imargn, LOCATIONS $84a3-$84a4
  10464.  
  10465.           $87d3          marflg    mARGIN CONTROL FLAG,
  10466.  
  10467.                                         bIT 7 - uSER  SUPPLIES  THE  MARGIN
  10468.  
  10469.                                                 EXCEEDED  ROUTINE  FOR  THE
  10470.  
  10471.                                                 WINDOW WITH A LINE OF TEXT,
  10472.  
  10473.                                                 input OR WINDOW COMMAND 13
  10474.  
  10475.           $87d4-$87d6              cOLUMN  AND  ROW  VARIABLES  FOR  grphic
  10476.  
  10477.                                    PROCESSOR
  10478.  
  10479.           $87d7          head      hEAD OF KEYBOARD QUEUE
  10480.  
  10481.           $87d8          tail      tAIL OF KEYBOARD QUEUE
  10482.  
  10483.           $87d9          qflag     iF THIS FLAG IS ZERO,  THEN THE VALUE OF
  10484.  
  10485.                                    nxtkey, LOCATION $87ea, IS PLACED IN THE
  10486.  
  10487.                                    KEYBOARD QUEUE
  10488.  
  10489.           $87da-$87e9    queue     kEYBOARD QUEUE
  10490.  
  10491.           $87ea          nxtkey    nEXT  KEY TO BE PLACED IN  THE  KEYBOARD
  10492.  
  10493.                                    BUFFER
  10494.  
  10495.           $87eb-$87f2              uSED   BY  KEYBOARD  SCAN  ROUTINE   FOR
  10496.  
  10497.                                    DEBOUNCING THE KEYBOARD
  10498.  
  10499.           $87f3-$87fa              uSED BY KEYBOARD SCAN ROUTINE TO PREVENT
  10500.  
  10501.                                    MULTIPLE KEY HITS
  10502.  
  10503.           $87fb-$8806              uSED  BY drawch TO MANIPULATE  THE  FONT
  10504.  
  10505.                                    BIT STREAMS
  10506.  
  10507.           $8807          dwidth    wIDTH  OF PREVIOUS CHARACTER FOR  DELETE
  10508.  
  10509.                                    CHARACTER
  10510.  
  10511.           $8808                    tEMPORARY  STORAGE USED BY THE CLICK BOX
  10512.  
  10513.                                    ROUTINE
  10514.  
  10515.           $8809                    tEMPORARY  STORAGE USED BY THE CLICK BOX
  10516.  
  10517.                                    ROUTINE
  10518.  
  10519.           $880a          belflg    a NON-ZERO VALUE DISABLES ALARM CHIMES
  10520.  
  10521.           $880b                    tEMPORARY   STORAGE  USED  BY  THE   irq
  10522.  
  10523.                                    ROUTINE
  10524.  
  10525.           $880c-$884f    cbtbl     dEFAULT  CLICK  BOX  TABLE USED  BY  THE
  10526.  
  10527.                                    WINDOW PROCESSOR; SEE ALSO cboxes
  10528.  
  10529.           $880c          numcb     nUMBER OF CLICK BOXES (8 MAXIMUM)
  10530.  
  10531.           $880d-$880e    cbmsx     x  POSITION OF MOUSE AFTER  CLICK  BOXES
  10532.  
  10533.                                    HAVE BEEN DRAWN
  10534.  
  10535.           $880f          cbmsy     y  POSITION  OF MOUSE AFTER CLICK  BOXES
  10536.  
  10537.                                    HAVE BEEN DRAWN
  10538.  
  10539.           $8810-$884f    cbdefs    cLICK BOX DEFINITIONS; SEE cboxes
  10540.  
  10541.           $8850-$8851              rETURN ADDRESS OF CALLER TO loadsw
  10542.  
  10543.           $8852                    cOPY OF THE sp REGISTER FROM loadsw
  10544.  
  10545.           $8853-$8854              rETURN ADDRESS OF CALLER TO window
  10546.  
  10547.           $8855                    cOPY OF THE sp REGISTER FROM window
  10548.  
  10549.  
  10550.  
  10551.  
  10552.  
  10553.  
  10554.  
  10555.  
  10556.  
  10557.  
  10558.  
  10559.  
  10560.  
  10561.  
  10562.  
  10563.  
  10564.  
  10565.  
  10566.  
  10567.           mEMORY mAP                                                6-7
  10568.  
  10569.  
  10570.  
  10571.  
  10572.  
  10573.           $8856-$885c              uSED BY COMMAND 16 IN window
  10574.  
  10575.           $8856          numfil    nUMBER OF FILES FOUND
  10576.  
  10577.           $8857          ofsetl    lEFT INDENT OF FILE SUBWINDOW
  10578.  
  10579.           $8858          ofsetd    dOWN INDENT OF FILE SUBWINDOW
  10580.  
  10581.           $8859-$885a    tblpnt    pOINTER TO FILENAME TABLE
  10582.  
  10583.           $885b          fstfil    iNDEX OF FIRST FILE IN THE SUBWINDOW
  10584.  
  10585.           $885c          selfil    iNDEX ON SELECTED FILE
  10586.  
  10587.           $885d                    pARAMETER  PASSED TO A PROGRAM,  COPY OF
  10588.  
  10589.                                    dpage, LOCATION $16
  10590.  
  10591.           $885e                    cOPY  OF  THE  STATUS  REGISTER   DURING
  10592.  
  10593.                                    SERIAL COMMUNICATIONS
  10594.  
  10595.           $885f                    cOPY  OF  LOCATION $d01a  DURING  SERIAL
  10596.  
  10597.                                    COMMUNICATIONS
  10598.  
  10599.           $8860                    cOPY  OF  r6510,  LOCATION  $01,  DURING
  10600.  
  10601.                                    SERIAL COMMUNICATIONS
  10602.  
  10603.           $8861                    cOPY  OF  LOCATION $d015  DURING  SERIAL
  10604.  
  10605.                                    COMMUNICATION
  10606.  
  10607.           $8862                    cOPY  OF  LOCATION $dd00 BEFORE  SENDING
  10608.  
  10609.                                    tURBODOS
  10610.  
  10611.           $8863-$8866              cOMMAND BUFFER FOR tURBODOS
  10612.  
  10613.           $8867                    cOPY OF LOCATION $dd00 WITH SERIAL LINES
  10614.  
  10615.                                    CLEARED
  10616.  
  10617.           $8868                    cOPY  OF LOCATION $dd00 WITH CLOCK  LINE
  10618.  
  10619.                                    SET
  10620.  
  10621.           $8869          try1      tRY   COUNTER   FOR   DISK    READ/WRITE
  10622.  
  10623.                                    OPERATIONS
  10624.  
  10625.           $886a          dstat     dISK STATUS BYTE READ BY tURBODOS
  10626.  
  10627.           $886b          ldflag    lOAD FLAG
  10628.  
  10629.                                         bIT 0 - dO  NOT RUN THE APPLICATION
  10630.  
  10631.                                                 BEING  LOADED;  USE  ldadrs
  10632.  
  10633.                                                 LOCATIONS  $886c-$886d   AS
  10634.  
  10635.                                                 LOAD ADDRESS
  10636.  
  10637.           $886c-$886d    ldadrs    aLTERNATE FILE LOAD ADDRESS
  10638.  
  10639.           $886e                    rEPORTS WHICH DRIVE IS BEING SEARCHED
  10640.  
  10641.                                         $00 - LOGGED DISK
  10642.  
  10643.                                         $ff - CHECKING OTHER DRIVE
  10644.  
  10645.           $886f-$8874              uSED BY vlir FILE ROUTINES
  10646.  
  10647.           $886f          dtrack    tRACK  NUMBER  OF  vlir  FILE  DIRECTORY
  10648.  
  10649.                                    ENTRY
  10650.  
  10651.           $8870          dsectr    sECTOR  NUMBER  OF vlir  FILE  DIRECTORY
  10652.  
  10653.                                    ENTRY
  10654.  
  10655.           $8871-$8872    vdirpt    iNDEX INTO DIRECTORY SECTOR TO vlir FILE
  10656.  
  10657.                                    DIRECTORY ENTRY
  10658.  
  10659.           $8873          vtrack    tRACK NUMBER OF vlir SECTOR
  10660.  
  10661.           $8874          vsectr    sECTOR NUMBER OF vlir SECTOR
  10662.  
  10663.           $8875          try2      tRY COUNTER USED BY cwrite
  10664.  
  10665.           $8876          verflg    vERIFY FLAG; $00=no, $ff=yes
  10666.  
  10667.           $8877-$89ff              uNUSED
  10668.  
  10669.           $8a00-$8a3e              sPRITE DATA BLOCK #40, geos SPRITE 0
  10670.  
  10671.           $8a40-$8a7e              sPRITE DATA BLOCK #41, geos SPRITE 1
  10672.  
  10673.           $8a80-$8abe              sPRITE DATA BLOCK #42, geos SPRITE 2
  10674.  
  10675.           $8ac0-$8afe              sPRITE DATA BLOCK #43, geos SPRITE 3
  10676.  
  10677.           $8b00-$8b3e              sPRITE DATA BLOCK #44, geos SPRITE 4
  10678.  
  10679.           $8b40-$8b7e              sPRITE DATA BLOCK #45, geos SPRITE 5
  10680.  
  10681.  
  10682.  
  10683.  
  10684.  
  10685.  
  10686.  
  10687.  
  10688.  
  10689.  
  10690.  
  10691.  
  10692.  
  10693.  
  10694.  
  10695.  
  10696.  
  10697.  
  10698.  
  10699.           mEMORY mAP                                                6-8
  10700.  
  10701.  
  10702.  
  10703.  
  10704.  
  10705.           $8b80-$8bbe              sPRITE DATA BLOCK #46, geos SPRITE 6
  10706.  
  10707.           $8bc0-$8bfe              sPRITE DATA BLOCK #47, geos SPRITE 7
  10708.  
  10709.  
  10710.  
  10711.           $8c00-$8fe7    coldat    cOLOR RAM FOR HIRES SCREEN
  10712.  
  10713.           $8fe8-$8fff              sPRITE POINTERS; USUALLY SET TO 40 TO 47
  10714.  
  10715.           $9000-$9fff              fIRST SECTION OF THE geos kERNAL
  10716.  
  10717.           $a000-$bf3f    scren1    pRIMARY HIRES SCREEN
  10718.  
  10719.           $bf40-$fe7f              sECOND SECTION OF THE geos kERNAL
  10720.  
  10721.           $fe80-$fff9              iNPUT DRIVER
  10722.  
  10723.           $fe80                    mASTER RESET FOR THE INPUT DRIVER
  10724.  
  10725.           $fe83                    sET MOUSE SPEED TO ZERO
  10726.  
  10727.           $fe86                    rEAD INPUT DEVICE
  10728.  
  10729.           $fffa-$fffb              nmi VECTOR
  10730.  
  10731.           $fffc-$fffd              pOWER UP RESET VECTOR
  10732.  
  10733.           $fffe-$ffff              irq VECTOR
  10734.  
  10735.  
  10736.  
  10737.  
  10738.  
  10739.  
  10740.  
  10741.  
  10742.  
  10743.  
  10744.  
  10745.  
  10746.  
  10747.  
  10748.  
  10749.  
  10750.  
  10751.  
  10752.  
  10753.  
  10754.  
  10755.  
  10756.  
  10757.  
  10758.  
  10759.  
  10760.  
  10761.  
  10762.  
  10763.  
  10764.  
  10765.  
  10766.  
  10767.  
  10768.  
  10769.  
  10770.  
  10771.  
  10772.  
  10773.  
  10774.  
  10775.  
  10776.  
  10777.  
  10778.  
  10779.  
  10780.  
  10781.  
  10782.  
  10783.  
  10784.  
  10785.  
  10786.  
  10787.  
  10788.  
  10789.  
  10790.  
  10791.  
  10792.  
  10793.  
  10794.  
  10795.  
  10796.  
  10797.  
  10798.  
  10799.  
  10800.  
  10801.  
  10802.  
  10803.  
  10804.  
  10805.  
  10806.  
  10807.  
  10808.  
  10809.  
  10810.  
  10811.  
  10812.  
  10813.  
  10814.  
  10815.  
  10816.  
  10817.  
  10818.  
  10819.  
  10820.  
  10821.  
  10822.  
  10823.  
  10824.  
  10825.  
  10826.  
  10827.  
  10828.  
  10829.  
  10830.  
  10831.           aPPENDIX i : geos eRRORS                                  i-1
  10832.  
  10833.  
  10834.  
  10835.  
  10836.  
  10837.           geos  SUBROUTINES THAT ARE ABLE TO RETURN ERRORS,  RETURN ONE  OF
  10838.  
  10839.           THE FOLLOWING ERROR NUMBERS IN THE x REGISTER.
  10840.  
  10841.  
  10842.  
  10843.           2    iLLEGAL TRACK OR SECTOR.
  10844.  
  10845.           3    dISK FULL.
  10846.  
  10847.           5    fILE NOT FOUND.
  10848.  
  10849.           6    aTTEMPT TO DEALLOCATE AN UNALLOCATED BLOCK.
  10850.  
  10851.           7    iLLEGAL vlir CHAIN NUMBER.
  10852.  
  10853.           8    vlir FILE ERROR; ILLEGAL TRACK OR SECTOR SPECIFIED.
  10854.  
  10855.           9    tOO MANY vlir CHAINS.
  10856.  
  10857.           10   fILE IS NOT A vlir FILE.
  10858.  
  10859.           11   eND OF FILE, FILE TOO LONG.
  10860.  
  10861.           13   dEVICE NOT PRESENT.
  10862.  
  10863.           31   wRITE PROTECT IS ON.
  10864.  
  10865.           32   rEAD ERROR, NO SYNC CHARACTER.
  10866.  
  10867.           35   dISK DRIVE fdc ERRORS:
  10868.  
  10869.                     2    hEADER BLOCK NOT FOUND.
  10870.  
  10871.                     7    vERIFY ERROR AFTER WRITE.
  10872.  
  10873.                     9    hEADER BLOCK CHECKSUM ERROR.
  10874.  
  10875.                     10   dATA BLOCK TOO LONG.
  10876.  
  10877.                     11   id MISMATCH ERROR.
  10878.  
  10879.           38   dISK DRIVE fdc ERRORS:
  10880.  
  10881.                     4    dATA BLOCK NOT FOUND.
  10882.  
  10883.                     5    dATA BLOCK CHECKSUM ERROR.
  10884.  
  10885.           39   wRITE ERROR.  sEE cwrite.
  10886.  
  10887.  
  10888.  
  10889.  
  10890.  
  10891.  
  10892.  
  10893.  
  10894.  
  10895.  
  10896.  
  10897.  
  10898.  
  10899.  
  10900.  
  10901.  
  10902.  
  10903.  
  10904.  
  10905.  
  10906.  
  10907.  
  10908.  
  10909.  
  10910.  
  10911.  
  10912.  
  10913.  
  10914.  
  10915.  
  10916.  
  10917.  
  10918.  
  10919.  
  10920.  
  10921.  
  10922.  
  10923.  
  10924.  
  10925.  
  10926.  
  10927.  
  10928.  
  10929.  
  10930.  
  10931.  
  10932.  
  10933.  
  10934.  
  10935.  
  10936.  
  10937.  
  10938.  
  10939.  
  10940.  
  10941.  
  10942.  
  10943.  
  10944.  
  10945.  
  10946.  
  10947.  
  10948.  
  10949.  
  10950.  
  10951.  
  10952.  
  10953.  
  10954.  
  10955.  
  10956.  
  10957.  
  10958.  
  10959.  
  10960.  
  10961.  
  10962.  
  10963.           aPPENDIX ii : gLOSSARY                                   ii-1
  10964.  
  10965.  
  10966.  
  10967.  
  10968.  
  10969.                tHIS IS A SIMPLE GLOSSARY FOR SOME OF THE TERMS USED IN THIS
  10970.  
  10971.           MANUAL.
  10972.  
  10973.  
  10974.  
  10975.           box : a RECTANGULAR REGION ON THE HIRES GRAPHIC SCREEN.
  10976.  
  10977.  
  10978.  
  10979.           click  :  tO PRESS THE BUTTON.  uSUALLY USED TO SELECT THE OPTION
  10980.  
  10981.           BEING POINTED TO BY THE MOUSE.
  10982.  
  10983.  
  10984.  
  10985.           click box :  a SPECIAL CONTROL STRUCTURE THAT APPEARS AS A BOX ON
  10986.  
  10987.           THE  SCREEN.  tHIS  BOX IS CAPABLE OF BEING CLICKED ON  WITH  THE
  10988.  
  10989.           MOUSE. wHEN THE BOX IS CLICKED ON, SOME OPERATION OCCURS.
  10990.  
  10991.  
  10992.  
  10993.           cursor :  tHE TEXT CURSOR THAT APPEARS WHEN THE USER IS ASKED  TO
  10994.  
  10995.           TYPE SOMETHING IN ON THE KEYBOARD.  iT APPEARS AS A THIN VERTICAL
  10996.  
  10997.           BAR.
  10998.  
  10999.  
  11000.  
  11001.           double  click :  tO CLICK TWICE ON AN OPTION.  tHIS IS USED AS  A
  11002.  
  11003.           VERIFICATION METHOD,  MAKING SURE THAT THE USER WISHES TO PERFORM
  11004.  
  11005.           THAT OPERATION.
  11006.  
  11007.  
  11008.  
  11009.           font  :  dATA THAT REPRESENTS THE GRAPHICAL IMAGE OF A  CHARACTER
  11010.  
  11011.           SET.
  11012.  
  11013.  
  11014.  
  11015.           info  sector  (information  sector)  :   a  SECTOR  ON  THE  DISK
  11016.  
  11017.           ASSOCIATED WITH A FILE.  tHIS CONTAINS SOME INFORMATION ABOUT THE
  11018.  
  11019.           ASSOCIATED FILE,  IE. ICON IMAGE, LOAD ADDRESS, CLASS, AUTHOR AND
  11020.  
  11021.           TEXT FIELD.  sEE CHAPTER 5.
  11022.  
  11023.  
  11024.  
  11025.           inline  data :  tHIS RELATES TO DATA THAT IS IN THE MIDDLE  OF  A
  11026.  
  11027.           REGION  OF  MACHINE  CODE.   tHE  DATA  IMMEDIATELY  FOLLOWS  THE
  11028.  
  11029.           SUBROUTINE  CALL AND CONTROL RETURNS TO THE INSTRUCTION FOLLOWING
  11030.  
  11031.           THE DATA.  tHIS RELIEVES THE USER OF THE BURDEN OF SETTING UP THE
  11032.  
  11033.           INPUT PARAMETERS TO A SUBROUTINE THAT IS SELDOMLY CALLED OR WHOSE
  11034.  
  11035.           DATA DOES NOT CHANGE.  sEE pfill2 FOR AN EXAMPLE OF INLINE DATA.
  11036.  
  11037.  
  11038.  
  11039.           invert : tO CHANGE THE PIXELS ON THE HIRES SCREEN FROM BACKGROUND
  11040.  
  11041.           TO FOREGROUND, OR FROM FOREGROUND TO BACKGROUND.
  11042.  
  11043.  
  11044.  
  11045.           memory  swapping :  uSED BY DESK ACCESSORIES TO SAVE  THE  MEMORY
  11046.  
  11047.           THAT  THEY WOULD NORMALLY RESIDE IN.  tHIS ALLOWS THEM TO BE USED
  11048.  
  11049.           FROM  WITHIN  APPLICATIONS BECAUSE THE  APPLICATION'S  MEMORY  IS
  11050.  
  11051.           RESTORED WHEN THE DESK ACCESSORY IS FINISHED.
  11052.  
  11053.  
  11054.  
  11055.           menu :  a LIST OF OPTIONS FOR THE USER TO SELECT FROM. a MENU CAN
  11056.  
  11057.           BE  EITHER HORIZONTAL OR VERTICAL.  gENERALLY,  THE MAIN MENU  IS
  11058.  
  11059.           HORIZONTAL AND THE SUBMENUS ARE VERTICAL.
  11060.  
  11061.  
  11062.  
  11063.           mouse  :  tHE LITTLE ARROW THAT IS CONTROLLED BY THE JOYSTICK  OR
  11064.  
  11065.           OTHER INPUT DEVICE.
  11066.  
  11067.  
  11068.  
  11069.           recurring  timed  event  :  tHIS IS A SUBROUTINE THAT  IS  TO  BE
  11070.  
  11071.           EXECUTED EVERY SO OFTEN. tHE AMOUNT OF TIME BETWEEN EXECUTIONS IS
  11072.  
  11073.           STORED.   tHE  INTERRUPT  ROUTINES  DECREMENT  THE  TIMERS  EVERY
  11074.  
  11075.           SIXTIETH OF A SECOND.  wHEN THE TIMER REACHES ZERO, THE geos MAIN
  11076.  
  11077.  
  11078.  
  11079.  
  11080.  
  11081.  
  11082.  
  11083.  
  11084.  
  11085.  
  11086.  
  11087.  
  11088.  
  11089.  
  11090.  
  11091.  
  11092.  
  11093.  
  11094.  
  11095.           aPPENDIX ii : gLOSSARY                                   ii-2
  11096.  
  11097.  
  11098.  
  11099.  
  11100.  
  11101.           LOOP CALLS THE APPROPRIATE ROUTINE. tHIS ALLOWS SEVERAL THINGS TO
  11102.  
  11103.           SEEM   TO  HAPPEN  SIMULTANEOUSLY.   iT  IS  THE  BEGINNINGS   OF
  11104.  
  11105.           MULTITASKING.
  11106.  
  11107.  
  11108.  
  11109.           skew  factor  :  tHIS IS THE NUMBER OF SECTOR TO SKIP  OVER  WHEN
  11110.  
  11111.           LOOKING FOR CONSECUTIVE SECTORS FOR A FILE.  iT IS 8 FOR tURBODOS
  11112.  
  11113.           AND 10 FOR dos. tHE REASON FOR USING A SKEW FACTOR IS EFFICIENCY.
  11114.  
  11115.           iF PHYSICALLY CONSECUTIVE SECTORS WERE USED, THE DISK DRIVE WOULD
  11116.  
  11117.           HAVE  TO WAIT FOR A COMPLETE REVOLUTION OF THE DISK BETWEEN  EACH
  11118.  
  11119.           SECTOR  READ.  tHE  SKEW  FACTOR  IS  SET SO  THAT  THIS  IS  NOT
  11120.  
  11121.           NECESSARY.  a SKEW FACTOR IS SET TO A VALUE SUCH THAT BY THE TIME
  11122.  
  11123.           THE  COMPUTER  HAS  PROCESSED A SECTOR,  THE NEXT  SECTOR  IS  ON
  11124.  
  11125.           POSITION TO BE READ.
  11126.  
  11127.  
  11128.  
  11129.           string :  a SEQUENCE OF BYTES TERMINATED BY A ZERO BYTE.  uSUALLY
  11130.  
  11131.           USED FOR REPRESENTING TEXT.
  11132.  
  11133.  
  11134.  
  11135.           turbodos  :  tHE SPECIAL DISK ROUTINES USED BY bERKELEY sOFTWORKS
  11136.  
  11137.           TO SPEED UP DISK ACCESS.
  11138.  
  11139.  
  11140.  
  11141.           vlir  :  vARIABLE  lENGTH iNDEX rECORD,  A TREE  STRUCTURED  FILE
  11142.  
  11143.           STRUCTURE.  pRESENTLY geos LIMITS FILES TO 127 OF THESE RECORDS.
  11144.  
  11145.  
  11146.  
  11147.           window :  a SPECIAL CONTROL STRUCTURE THAT APPEARS AS A LARGE BOX
  11148.  
  11149.           ON THE SCREEN,  USUALLY WITH A SHADOW.  tHIS CONTROL STRUCTURE IS
  11150.  
  11151.           USED TO ELICIT SOME FORM OF USER INPUT OR SELECTION.
  11152.  
  11153.  
  11154.  
  11155.           zero byte : a SINGLE BYTE WITH THE VALUE OF ZERO.
  11156.  
  11157.  
  11158.  
  11159.  
  11160.  
  11161.  
  11162.  
  11163.  
  11164.  
  11165.  
  11166.  
  11167.  
  11168.  
  11169.  
  11170.  
  11171.  
  11172.  
  11173.  
  11174.  
  11175.  
  11176.  
  11177.  
  11178.  
  11179.  
  11180.  
  11181.  
  11182.  
  11183.  
  11184.  
  11185.  
  11186.  
  11187.  
  11188.  
  11189.  
  11190.  
  11191.  
  11192.  
  11193.  
  11194.  
  11195.  
  11196.  
  11197.  
  11198.  
  11199.  
  11200.  
  11201.  
  11202.  
  11203.  
  11204.  
  11205.  
  11206.  
  11207.  
  11208.  
  11209.  
  11210.  
  11211.  
  11212.  
  11213.  
  11214.  
  11215.  
  11216.  
  11217.  
  11218.  
  11219.  
  11220.  
  11221.  
  11222.  
  11223.  
  11224.  
  11225.  
  11226.  
  11227.           aPPENDIX iii : fILL pATTERNS                            iii-1
  11228.  
  11229.  
  11230.  
  11231.  
  11232.  
  11233.                     0              1              2              3
  11234.  
  11235.                ----------     ----------     ----------     ----------
  11236.  
  11237.                i        i     i********i     i* * * * i     i*  **  *i
  11238.  
  11239.                i        i     i********i     i * * * *i     i *    * i
  11240.  
  11241.                i        i     i********i     i* * * * i     i  *  *  i
  11242.  
  11243.                i        i     i********i     i * * * *i     i*  **  *i
  11244.  
  11245.                i        i     i********i     i* * * * i     i*  **  *i
  11246.  
  11247.                i        i     i********i     i * * * *i     i  *  *  i
  11248.  
  11249.                i        i     i********i     i* * * * i     i *    * i
  11250.  
  11251.                i        i     i********i     i * * * *i     i*  **  *i
  11252.  
  11253.                ----------     ----------     ----------     ----------
  11254.  
  11255.  
  11256.  
  11257.                     4              5              6              7
  11258.  
  11259.                ----------     ----------     ----------     ----------
  11260.  
  11261.                i***** **i     i*   *   i     i *** ***i     i*   *   i
  11262.  
  11263.                i**** * *i     i  *   * i     i** *** *i     i        i
  11264.  
  11265.                i***** **i     i*   *   i     i *** ***i     i  *   * i
  11266.  
  11267.                i**** * *i     i  *   * i     i** *** *i     i        i
  11268.  
  11269.                i***** **i     i*   *   i     i *** ***i     i*   *   i
  11270.  
  11271.                i**** * *i     i  *   * i     i** *** *i     i        i
  11272.  
  11273.                i***** **i     i*   *   i     i *** ***i     i  *   * i
  11274.  
  11275.                i**** * *i     i  *   * i     i** *** *i     i        i
  11276.  
  11277.                ----------     ----------     ----------     ----------
  11278.  
  11279.  
  11280.  
  11281.                     8              9             10             11
  11282.  
  11283.                ----------     ----------     ----------     ----------
  11284.  
  11285.                i *** ***i     i********i     i * * * *i     i       *i
  11286.  
  11287.                i********i     i        i     i * * * *i     i      * i
  11288.  
  11289.                i** *** *i     i********i     i * * * *i     i     *  i
  11290.  
  11291.                i********i     i        i     i * * * *i     i    *   i
  11292.  
  11293.                i *** ***i     i********i     i * * * *i     i   *    i
  11294.  
  11295.                i********i     i        i     i * * * *i     i  *     i
  11296.  
  11297.                i** *** *i     i********i     i * * * *i     i *      i
  11298.  
  11299.                i********i     i        i     i * * * *i     i*       i
  11300.  
  11301.                ----------     ----------     ----------     ----------
  11302.  
  11303.  
  11304.  
  11305.                    12             13             14             15
  11306.  
  11307.                ----------     ----------     ----------     ----------
  11308.  
  11309.                i*       i     i******* i     i *******i     i********i
  11310.  
  11311.                i *      i     i****** *i     i* ******i     i*   *   i
  11312.  
  11313.                i  *     i     i***** **i     i** *****i     i*   *   i
  11314.  
  11315.                i   *    i     i**** ***i     i*** ****i     i*   *   i
  11316.  
  11317.                i    *   i     i*** ****i     i**** ***i     i********i
  11318.  
  11319.                i     *  i     i** *****i     i***** **i     i*   *   i
  11320.  
  11321.                i      * i     i* ******i     i****** *i     i*   *   i
  11322.  
  11323.                i       *i     i *******i     i******* i     i*   *   i
  11324.  
  11325.                ----------     ----------     ----------     ----------
  11326.  
  11327.  
  11328.  
  11329.  
  11330.  
  11331.  
  11332.  
  11333.  
  11334.  
  11335.  
  11336.  
  11337.  
  11338.  
  11339.  
  11340.  
  11341.  
  11342.  
  11343.  
  11344.  
  11345.  
  11346.  
  11347.  
  11348.  
  11349.  
  11350.  
  11351.  
  11352.  
  11353.  
  11354.  
  11355.  
  11356.  
  11357.  
  11358.  
  11359.           aPPENDIX iii : fILL pATTERNS                            iii-2
  11360.  
  11361.  
  11362.  
  11363.  
  11364.  
  11365.                    16             17             18             19
  11366.  
  11367.                ----------     ----------     ----------     ----------
  11368.  
  11369.                i********i     i********i     i    *   i     i*   *   i
  11370.  
  11371.                i*       i     i*       i     i   ***  i     i   * *  i
  11372.  
  11373.                i*       i     i*       i     i  *   * i     i  *   * i
  11374.  
  11375.                i*       i     i*       i     i**     *i     i *     *i
  11376.  
  11377.                i*       i     i********i     i*       i     i*   *   i
  11378.  
  11379.                i*       i     i       *i     i       *i     i        i
  11380.  
  11381.                i*       i     i       *i     i      * i     i* * * * i
  11382.  
  11383.                i*       i     i       *i     i     *  i     i        i
  11384.  
  11385.                ----------     ----------     ----------     ----------
  11386.  
  11387.  
  11388.  
  11389.                    20             21             22             23
  11390.  
  11391.                ----------     ----------     ----------     ----------
  11392.  
  11393.                i*       i     i *      i     i*     * i     i      **i
  11394.  
  11395.                i *      i     i* *     i     i *   *  i     i*    *  i
  11396.  
  11397.                i  *     i     i        i     i  ***  *i     i *  *   i
  11398.  
  11399.                i        i     i        i     i *   *  i     i  **    i
  11400.  
  11401.                i      * i     i     *  i     i*     * i     i    **  i
  11402.  
  11403.                i     *  i     i    * * i     i       *i     i      * i
  11404.  
  11405.                i    *   i     i        i     i       *i     i       *i
  11406.  
  11407.                i        i     i        i     i       *i     i       *i
  11408.  
  11409.                ----------     ----------     ----------     ----------
  11410.  
  11411.  
  11412.  
  11413.                    24             25             26             27
  11414.  
  11415.                ----------     ----------     ----------     ----------
  11416.  
  11417.                i*****   i     i*       i     i * * * *i     i   *    i
  11418.  
  11419.                i *** *  i     i*       i     i* * * * i     i  *     i
  11420.  
  11421.                i  *   * i     i *     *i     i *      i     i * * *  i
  11422.  
  11423.                i *   ***i     i  ***** i     i *      i     i* * * * i
  11424.  
  11425.                i*   ****i     i    *   i     i * * * *i     i********i
  11426.  
  11427.                i   * ***i     i    *   i     i    * * i     i      * i
  11428.  
  11429.                i  *   * i     i   * *  i     i     *  i     i     *  i
  11430.  
  11431.                i ***   *i     i***   **i     i     *  i     i    *   i
  11432.  
  11433.                ----------     ----------     ----------     ----------
  11434.  
  11435.  
  11436.  
  11437.                    28             29             30             31
  11438.  
  11439.                ----------     ----------     ----------     ----------
  11440.  
  11441.                i  *     i     i *** ***i     i* ******i     i        i
  11442.  
  11443.                i * *    i     i*   *  *i     i        i     i    *   i
  11444.  
  11445.                i*   *   i     i*   ****i     i* ******i     i   * *  i
  11446.  
  11447.                i*   *   i     i*   ****i     i* ******i     i  * * * i
  11448.  
  11449.                i*   *   i     i *** ***i     i* **    i     i * * * *i
  11450.  
  11451.                i*   *   i     i*  **   i     i* **    i     i  * * * i
  11452.  
  11453.                i     * *i     i*****   i     i* **    i     i   * *  i
  11454.  
  11455.                i      * i     i*****   i     i* **    i     i    *   i
  11456.  
  11457.                ----------     ----------     ----------     ----------
  11458.  
  11459.  
  11460.  
  11461.  
  11462.  
  11463.  
  11464.  
  11465.  
  11466.  
  11467.  
  11468.  
  11469.  
  11470.  
  11471.  
  11472.  
  11473.  
  11474.  
  11475.  
  11476.  
  11477.  
  11478.  
  11479.  
  11480.  
  11481.  
  11482.  
  11483.  
  11484.  
  11485.  
  11486.  
  11487.  
  11488.  
  11489.  
  11490.  
  11491.           aPPENDIX iv : pROGRAMMING nOTES                          iv-1
  11492.  
  11493.  
  11494.  
  11495.  
  11496.  
  11497.                tHIS  SECTION CONTAINS SOME INFORMATION ON WRITING  PROGRAMS
  11498.  
  11499.           UNDER THE geos OPERATING SYSTEM.
  11500.  
  11501.                iT  IS IMPORTANT THAT ALL geos PROGRAMS HAVE AN  INFORMATION
  11502.  
  11503.           SECTOR.  iF  ONE IS MISSING,  THEN desktop WILL NOT ALLOW YOU  TO
  11504.  
  11505.           OPEN THE DISK (iT NEEDS THE ICON DATA). tHEREFORE, TO CREATE geos
  11506.  
  11507.           PROGRAMS,  IT  IS SUGGESTED THAT A SMALL basic-aSSEMBLY  LANGUAGE
  11508.  
  11509.           SHELL  BE ADDED TO THE BEGINNING OF A USER'S PROGRAM.  tHIS SHELL
  11510.  
  11511.           WILL  CONSIST OF A basic sys STATEMENT AND SOME ASSEMBLY CODE  TO
  11512.  
  11513.           DELETE  THE FILE (uSE delete) AND RESAVE THE FILE AS A geos  FILE
  11514.  
  11515.           (uSE  save).  aFTER HAVING DONE THIS, FOR COMPLETENESS, THE  INFO
  11516.  
  11517.           SECTOR  THAT IS IN MEMORY SHOULD BE REWRITTEN BECAUSE  save  WILL
  11518.  
  11519.           CLEAR  THE TEXT FIELD.  aLSO THE DIRECTORY SHOULD BE MODIFIED  TO
  11520.  
  11521.           INCLUDE THE PROPER TIME AND DATE OF FILE CREATION (uSE lookup AND
  11522.  
  11523.           write). aFTER ALL THIS HAS BEEN DONE, A CALL TO init01 AND restrt
  11524.  
  11525.           WILL  RESTART geos.  tHE convert PROGRAM BY bsw DOES NOT  CONVERT
  11526.  
  11527.           ITSELF IN THIS WAY. iT IS DESIGNED SO THAT THE INFORMATION SECTOR
  11528.  
  11529.           IS EXACTLY IN THE LAST DISK SECTOR OF THE FILE.  iT THEN MODIFIES
  11530.  
  11531.           THE  SECTOR  LINKS  OF  THE  LAST TWO  SECTORS  AND  CHANGES  THE
  11532.  
  11533.           DIRECTORY ENTRY FOR CONVERT.  tHIS LEAVES THE CONVERSION CODE  AS
  11534.  
  11535.           PART OF THE FINAL PROGRAM;  THE METHOD  OUTLINED  ABOVE DOES NOT.
  11536.  
  11537.           aNOTHER POSSIBILITY IS TO USE THE SAME METHOD AS bsw, BUT TO MAKE
  11538.  
  11539.           THE  INFO SECTOR THE FIRST SECTOR AFTER THE INITIAL  SHELL.  tHEN
  11540.  
  11541.           ONLY 1 SECTOR AND THE DIRECTORY NEED BE MODIFIED, AND SECTORS FOR
  11542.  
  11543.           THE  SHELL  PROGRAM CAN BE FREED UP.  tHIS IS ALL UP TO A  USER'S
  11544.  
  11545.           DISCRETION.
  11546.  
  11547.                iF A PROGRAM WITH A basic START (10 sys2061), IS TO USE geos
  11548.  
  11549.           IT MUST FIRST DISABLE INTERRUPTS (sei) AND THEN SET THE SYSTEM TO
  11550.  
  11551.           ALL  ram  BY LOADING LOCATION $01 WITH A VALUE OF  $30.  tHIS  IS
  11552.  
  11553.           IMPORTANT BECAUSE geos RESIDES  BENEATH THE cOMMODORE'S romS  AND
  11554.  
  11555.           i/o  SECTION.  wHEN geos NEEDS TO DO i/o,  IT SWITCHES IN THE i/o
  11556.  
  11557.           PORTS, RELIEVING THE USER OF THIS BURDEN.  aLSO A CALL TO  init01
  11558.  
  11559.           WILL SET THINGS UP SO THAT THE geos GRAPHIC SCREEN IS DISPLAYED.
  11560.  
  11561.                aPPLICATION PROGRAMS HAVE EVERYTHING SET UP FOR THEM  BEFORE
  11562.  
  11563.           THEY ARE RUN.  tO TERMINATE AN APPLICATION PROPERLY, A jmp restrt
  11564.  
  11565.           IS  MADE AT SOME POINT.  iF THE PROGRAM IS SIMPLY  A  MENU,  LIKE
  11566.  
  11567.           cONVERT,  THEN  A CALL TO menu AND AN rts IS SUFFICIENT TO BE THE
  11568.  
  11569.           MAIN BODY OF CODE.  oNE OF THE MENU OPTIONS SHOULD MAKE THE  JUMP
  11570.  
  11571.           TO restrt.  mORE ON THAT rts LATER.
  11572.  
  11573.                dESK  aCCESSORIES  ARE SIMILAR TO APPLICATIONS  EXCEPT  THAT
  11574.  
  11575.           THEY  HAVE  THE MEMORY THAT THEY RESIDE IN SAVED TO  DISK  FIRST.
  11576.  
  11577.           tHIS  MEANS  THAT THEY SHOULD BE RELATIVELY  SHORT  PROGRAMS.  tO
  11578.  
  11579.           DECIDE  WHETHER  SOMETHING  SHOULD  BE A  DESK  ACCESSORY  OR  AN
  11580.  
  11581.           APPLICATION,  ONE  NEED ONLY DETERMINE WHETHER IT IS NECESSARY TO
  11582.  
  11583.           BE  ABLE TO RUN THE PROGRAM FROM WITHIN ANOTHER APPLICATION  (IE.
  11584.  
  11585.           LIKE RUNNING pHOTO mANAGER FROM geoPAINT).  dESK ACCESSORIES ALSO
  11586.  
  11587.           HAVE  SOME  RESTRICTIONS THAT DO NOT APPLY  TO  APPLICATIONS.  iN
  11588.  
  11589.           ORDER FOR A DESK ACCESSORY TO OPEN A WINDOW,  THE WINDOW  STORAGE
  11590.  
  11591.           AREA  savbuf  MUST BE SAVED AND LATER RESTORED.  tHIS IS  BECAUSE
  11592.  
  11593.           geos  SAVED  EVERYTHING BEFORE EXECUTING THE DESK  ACCESSORY.  tO
  11594.  
  11595.           TERMINATE  A DESK ACCESSORY,  THE VECTOR imain SHOULD  BE  LOADED
  11596.  
  11597.           WITH  ldswap  AND  AN rts SHOULD BE MADE.  mORE ON THE rts  IN  A
  11598.  
  11599.           MOMENT.  aNOTHER  MEANS OF TERMINATING A DESK ACCESSORY IS SIMPLY
  11600.  
  11601.           TO JUMP TO ldswap.  iT IS THE DESK ACCESSORY'S RESPONSIBILITY  TO
  11602.  
  11603.           CLEAN UP AFTER ITSELF AND TO TAKE ITSELF OUT OF MEMORY.
  11604.  
  11605.  
  11606.  
  11607.  
  11608.  
  11609.  
  11610.  
  11611.  
  11612.  
  11613.  
  11614.  
  11615.  
  11616.  
  11617.  
  11618.  
  11619.  
  11620.  
  11621.  
  11622.  
  11623.           aPPENDIX iv : pROGRAMMING nOTES                          iv-2
  11624.  
  11625.  
  11626.  
  11627.  
  11628.  
  11629.                tHE  rts MENTIONED IN THE PREVIOUS PARAGRAPHS CAUSES geos TO
  11630.  
  11631.           RETURN TO ITS MAIN ROUTINE (main).  tHIS IS A SIMPLE POLLING LOOP
  11632.  
  11633.           THAT LOOKS FOR THINGS TO DO. hALF OF geos IS INTERRUPT DRIVEN AND
  11634.  
  11635.           HALF  OF  IT  IS POLLED.  iT FIRST CHECKS IF THE  USER  HAS  DONE
  11636.  
  11637.           ANYTHING, IN THE FOLLOWING ORDER:
  11638.  
  11639.                1)   mOUSE DIRECTION CHANGE, JUMP THROUGH imsdir
  11640.  
  11641.                2)   bUTTON STATUS CHANGE, JUMP THROUGH ibuton
  11642.  
  11643.                3)   kEY ENTERED FROM KEYBOARD, JUMP THROUGH icrhit
  11644.  
  11645.                4)   mOUSE OUTSIDE MENU, JUMP THROUGH iclsmn
  11646.  
  11647.           tHEN  THE  MAIN  LOOP LOOKS FOR SOMETHING TO DO BY  CHECKING  THE
  11648.  
  11649.           RECURRING TIMED EVENTS AND THE DELAYED ROUTINES,  EXECUTING THOSE
  11650.  
  11651.           THAT ARE READY.  tHE MAIN LOOP THEN MAINTAINS THE MEMORY IMAGE OF
  11652.  
  11653.           THE TIME AND DATE AND HANDLES THE ALARM CLOCK.  fINALLY, IF THERE
  11654.  
  11655.           IS SOMETHING AT imain, IT IS CALLED AND THE LOOP STARTS OVER.
  11656.  
  11657.                tHE irq INTERRUPT ROUTINE DOES MAINLY i/o OPERATIONS.  fIRST
  11658.  
  11659.           IT DECREMENTS LOCATION $8515 IF IT IS NON-ZERO (COUNTER FOR CLICK
  11660.  
  11661.           BOX HANDLER). tHEN IT SCANS THE KEYBOARD AND ENTERS ANY DEPRESSED
  11662.  
  11663.           KEYS INTO THE KEYBOARD BUFFER. lOCATION $880a IS THEN DECREMENTED
  11664.  
  11665.           IF IT IS NON-ZERO (CHIME COUNTER).  nEXT, A JUMP THROUGH igirq IS
  11666.  
  11667.           MADE  TO irqrtn.  aFTER WHICH,  A JUMP IS MADE THROUGH  iuirq  TO
  11668.  
  11669.           PROCESS  ANY  USER ADDITIONS TO THE irq  SERVICE  ROUTINE.  tHESE
  11670.  
  11671.           ADDITIONS  SHOULD BE FAIRLY SHORT SO AS NOT TO MAKE THE INTERRUPT
  11672.  
  11673.           TAKE TOO LONG.  fINALLY THE STATUS QUO IS RESTORED AND THINGS  GO
  11674.  
  11675.           ON THEIR MERRY WAY.
  11676.  
  11677.  
  11678.  
  11679.  
  11680.  
  11681.  
  11682.  
  11683.  
  11684.  
  11685.  
  11686.  
  11687.  
  11688.  
  11689.  
  11690.  
  11691.  
  11692.  
  11693.  
  11694.  
  11695.  
  11696.  
  11697.  
  11698.  
  11699.  
  11700.  
  11701.  
  11702.  
  11703.  
  11704.  
  11705.  
  11706.  
  11707.  
  11708.  
  11709.  
  11710.  
  11711.  
  11712.  
  11713.  
  11714.  
  11715.  
  11716.  
  11717.  
  11718.  
  11719.  
  11720.  
  11721.  
  11722.  
  11723.  
  11724.  
  11725.  
  11726.  
  11727.  
  11728.  
  11729.  
  11730.  
  11731.  
  11732.  
  11733.  
  11734.  
  11735.  
  11736.  
  11737.  
  11738.  
  11739.    tHIS SPECIAL petscii arcED VERSION OF THIS mANUAL WAS EDITED AND CREATED
  11740.  
  11741.    BY eARL gOLDBERG OF THE cOMMODORE uSERS gROUP OF kANSAS cITY.  03-dEC-86
  11742.  
  11743.  
  11744.  
  11745.  
  11746.  
  11747.  
  11748.  
  11749.