home *** CD-ROM | disk | FTP | other *** search
/ MikeOS 4.5 / mikeos.iso / mikeos.flp / mbpp.bas < prev    next >
BASIC Source File  |  2014-12-21  |  13KB  |  844 lines

  1. REM >>>MIKEBASIC-PLUS-PLUS-LIBRARY<<<
  2. REM Library Version 3.2.3
  3. REM Copyright (C) Joshua Beck.
  4. REM Email: mikeosdeveloper@gmail.com
  5. REM Licenced under the GNU General Public Licence revision 3.
  6. REM Requires MikeOS version 4.3 or greater.
  7.  
  8. REM See the wiki at: http://mikebasicplusplus.wikispot.org/
  9.  
  10. PRINT "MB++ Library version 3.2.3"
  11. END
  12.  
  13. ANCITEXT:
  14.   GOSUB SAVEVAR
  15.   GOSUB SAVELOC
  16.   ink c
  17.   W = X
  18.   POKE Y 65430
  19.   CURSPOS X Y
  20.   POKE X 65431
  21.   DO
  22.     IF X > W THEN X = 79
  23.     if x > 78 then y = y + 1
  24.     if x > 78 then peek x 65431
  25.     PEEK J 65430
  26.     IF Y > J THEN J = 0
  27.     IF Y > 23 THEN J = 0
  28.     move x y
  29.     IF J > 0 THEN PEEK J V
  30.     IF J = 0 THEN W = J + 1
  31.     IF J < 20 THEN GOSUB ANCITXTS
  32.     IF J > 0 THEN PRINT CHR J
  33.     x = x + 1
  34.     v = v + 1
  35.   LOOP UNTIL W > J
  36.   GOSUB LOADLOC
  37.   GOSUB LOADVAR
  38. RETURN
  39.   
  40. ANCITXTS:
  41.   IF J = 0 THEN RETURN
  42.   IF J = 1 THEN V = V + 1
  43.   IF J = 1 THEN J = 255
  44.   IF J = 7 THEN J = 255
  45.   IF J = 10 THEN Y = Y + 1
  46.   IF J = 10 THEN PEEK X 65431
  47.   IF J = 10 THEN V = V + 1
  48.   IF J = 10 THEN GOTO ANCITEX2
  49. RETURN
  50.   
  51. ANICLOSE:
  52.   FOR W = 1 TO 4
  53.     READ ANICLOSC W J
  54.     GOSUB BLOCKBOX
  55.     PAUSE 1
  56.   NEXT W
  57. RETURN
  58.   
  59. ANICLOSC:
  60.   176 177 178 219
  61.  
  62. ANIEND:  
  63.   GOSUB SAVEVAR
  64.   FOR W = 1 TO 8
  65.     READ ANIENDCH W J
  66.     GOSUB BLOCKSCR
  67.     PAUSE 1
  68.     IF W = 4 THEN PAUSE 4
  69.   NEXT W
  70.   GOSUB LOADVAR
  71. RETURN
  72.  
  73. ANIENDCH:
  74.   176 177 178 219 178 177 176 0
  75.  
  76. ANIOPEN:
  77.   GOSUB SAVEVAR
  78.   FOR W = 1 TO 4
  79.     READ ANIOPENCH W J
  80.     GOSUB BLOCKBOX
  81.     PAUSE 1
  82.   NEXT W
  83.   GOSUB LOADVAR
  84. RETURN
  85.  
  86. ANIOPENCH:
  87.   219 178 177 176
  88.   
  89. ANISTART:
  90.   GOSUB SAVEVAR
  91.   FOR W = 1 TO 11
  92.     IF W < 9 THEN READ ANISTARC W J
  93.     IF W < 9 THEN GOSUB BLOCKSCR
  94.     V = W - 4
  95.     IF W > 4 THEN READ ANISTARB V J
  96.     IF W > 4 THEN GOSUB BLOCKBOR
  97.     PAUSE 1
  98.     IF W > 4 AND W < 9 THEN PAUSE 1
  99.     IF W = 8 THEN GOSUB TITLE
  100.   NEXT W
  101.   GOSUB LOADVAR
  102. RETURN
  103.   
  104. ANISTARC:
  105.   176 177 178 219 178 177 176 0
  106. ANISTARB:
  107.   219 219 219 219 178 177 176
  108.  
  109. ARRAYGET:
  110.   POKEINT J 65418
  111.   IF X > 99 THEN $E = "ARRAYGET: Array over maximum"
  112.   IF X > 99 THEN GOTO ERRBOX
  113.   IF X < 0 THEN $E = "ARRAYGET: Number below zero"
  114.   IF X < 0 THEN GOTO ERRBOX
  115.   J = X
  116.   J = J * 2
  117.   J = J + 65000
  118.   PEEKINT V J
  119.   PEEKINT J 65418
  120. RETURN
  121.  
  122. ARRAYPUT:
  123.   POKEINT J 65418
  124.   IF X > 99 THEN $E = "ARRAYGET: Array over maximum"
  125.   IF X > 99 THEN GOTO ERRBOX
  126.   IF X < 0 THEN $E = "ARRAYGET: Number below zero"
  127.   IF X < 0 THEN GOTO ERRBOX
  128.   J = X
  129.   J = J * 2
  130.   J = J + 65000
  131.   POKEINT V J
  132.   PEEKINT J 65418
  133. RETURN
  134.  
  135. ASKBOX:
  136.   GOSUB OPENBOX
  137.   move 22 11
  138.   print $5
  139.   move 22 12
  140.   print $6
  141.   move 22 13
  142.   print $7
  143.   move 22 14
  144.   print $8
  145.   move 22 15
  146.   print $9
  147.   move 27 16
  148.   print "--Yes--        --No--"
  149.   poke 1 65420
  150.   V = 1
  151.   gosub askdraw
  152.   askloop:
  153.     waitkey j
  154.     if j = 3 then gosub swleft
  155.     if j = 4 then gosub swright
  156.     if j = 13 then goto askend
  157.   goto askloop
  158. askend:
  159.   peek v 65420
  160.   j = v
  161.   if j = 0 then v = 1
  162.   if j = 1 then v = 0
  163.   GOSUB CLOSEBOX
  164.   return
  165. swleft:
  166.   peek v 65420
  167.   if v = 0 then return
  168.   if v = 1 then v = 0
  169.   poke v 65420
  170.   gosub askdraw
  171.   return
  172. swright:
  173.   peek v 65420
  174.   if v = 1 then return
  175.   if v = 0 then v = 1
  176.   poke v 65420
  177.   gosub askdraw
  178.   return
  179. askdraw:
  180.   move 27 16
  181.   if v = 0 then ink h
  182.   if v = 1 then ink c
  183.   print "--Yes--"
  184.   move 42 16
  185.   if v = 0 then ink c
  186.   if v = 1 then ink h
  187.   print "--No--"
  188. return
  189.  
  190. blockbor:
  191.   INK Z
  192.   for x = 0 to 79
  193.     move x 0
  194.     PRINT CHR J ;
  195.     move x 2
  196.     PRINT CHR J ;
  197.     move x 24
  198.     PRINT CHR J ;
  199.   next x
  200.   for x = 1 to 23
  201.     move 0 x
  202.     PRINT CHR J ;
  203.     move 79 x
  204.     PRINT CHR J ;
  205.   next x
  206. return
  207.  
  208. BLOCKBOX:
  209.   INK T
  210.   FOR X = 8 TO 17
  211.     MOVE 20 X
  212.     PRINT CHR J
  213.   NEXT X
  214.   FOR X = 21 TO 58
  215.     MOVE X 8
  216.     PRINT CHR J
  217.     MOVE X 10
  218.     PRINT CHR J
  219.     MOVE X 17
  220.     PRINT CHR J
  221.   NEXT X
  222.   FOR X = 8 TO 17
  223.     MOVE 59 X
  224.     PRINT CHR J
  225.   NEXT X
  226. RETURN
  227.  
  228. BLOCKSCR:
  229.   INK Z
  230.   MOVE 0 0
  231.   FOR X = 0 to 79
  232.     FOR Y = 0 to 24
  233.       PRINT CHR J ;
  234.     NEXT Y
  235.   NEXT X
  236. RETURN
  237.  
  238. BORDER:
  239.   GOSUB SAVEVAR
  240.   GOSUB SAVELOC
  241.   INK Z
  242.   J = 1
  243.   Y = 0
  244.   FOR W = 1 TO 2
  245.     FOR X = 0 TO 2
  246.       MOVE Y X
  247.       READ BORDERDATA J V
  248.       PRINT CHR V ;
  249.       J = J + 1
  250.     NEXT X
  251.     Y = 79
  252.   NEXT W
  253.   FOR Y = 3 TO 23
  254.     MOVE 0 Y
  255.     PRINT CHR 179 ;
  256.     MOVE 79 Y
  257.     PRINT CHR 179 ;
  258.   NEXT Y
  259.   FOR X = 1 TO 78
  260.     MOVE X 0
  261.     PRINT CHR 196 ;
  262.     MOVE X 2
  263.     PRINT CHR 196 ;
  264.     MOVE X 24
  265.     PRINT CHR 196 ;
  266.   NEXT X
  267.   MOVE 0 24
  268.   PRINT CHR 192 ;
  269.   MOVE 79 24
  270.   PRINT CHR 217 ;
  271.   GOSUB LOADLOC
  272.   GOSUB LOADVAR
  273. RETURN
  274.  
  275. BORDERDATA:
  276. 218 179 195 191 179 180
  277.  
  278. BOX:
  279.   INK T
  280.   W = 1
  281.   X = 20
  282.   FOR J = 1 TO 2
  283.     FOR Y = 8 TO 17
  284.       MOVE X Y
  285.       READ BOXDATA W V
  286.       PRINT CHR V
  287.       W = W + 1
  288.     NEXT Y
  289.     X = 59
  290.   NEXT J
  291.   V = 205
  292.   FOR X = 21 TO 58
  293.     MOVE X 8
  294.     PRINT CHR V
  295.     MOVE X 10
  296.     PRINT CHR V
  297.     MOVE X 17
  298.     PRINT CHR V
  299.   NEXT X
  300.   INK 7
  301.   move 21 9
  302.   print "                                      "
  303.   for x = 11 to 16
  304.     move 21 x
  305.     print "                                      "
  306.   next x
  307.   INK C
  308. RETURN
  309.  
  310. BOXDATA:
  311. 201 186 204 186 186 186 186 186 186 200
  312. 187 186 185 186 186 186 186 186 186 188
  313.  
  314. BOXSAVE:
  315.   INK 0
  316.   V = 64200
  317.   j = 64600
  318.   for y = 8 to 17
  319.     move 20 y
  320.     for x = 20 to 59
  321.       curschar w
  322.       poke w j
  323.       CURSCOL W
  324.       POKE W V
  325.       print " ";
  326.       j = j + 1
  327.       V = V + 1
  328.     next x
  329.   next y
  330. return
  331.  
  332. BOXREST:
  333.   V = 64200
  334.   j = 64600
  335.   for y = 8 to 17
  336.     MOVE 20 Y
  337.     for x = 20 to 59
  338.       PEEK W V
  339.       INK W
  340.       peek w j
  341.       print chr w ;
  342.       j = j + 1
  343.       V = V + 1
  344.     next x
  345.   next y
  346. return
  347.  
  348. CLOSEBOX:
  349.   POKE V 65418
  350.   CURSOR OFF
  351.   GOSUB ANICLOSE
  352.   INK 7
  353.   H = H / 16
  354.   GOSUB BOXREST
  355.   GOSUB LOADLOC
  356.   GOSUB LOADVAR
  357.   PEEK V 65418
  358. RETURN
  359.  
  360. CONTENT:
  361. RETURN
  362.  
  363. cserial:
  364.   gosub savevar
  365.   v = 0
  366.   serial rec x
  367.   if x = 4 then v = 1
  368.   if x = 5 then v = 2
  369.   if v > 0 then goto cserialc
  370.   serial send 5
  371.   serial rec x
  372.   if x > 31 then x = 5
  373.   if x = 6 then x = 3
  374.   if x = 0 then v = 6
  375.   if v > 0 then goto cserialc
  376.   v = 4
  377.   cserialc:
  378.   poke v 65418
  379.   gosub loadvar
  380.   peek v 65418
  381. return
  382.  
  383. DINBOX:
  384.   $E = "INPBOX: Invalid input type."
  385.   IF V > 1 THEN GOTO ERRBOX
  386.   IF V < 0 THEN GOTO ERRBOX
  387.   GOSUB OPENBOX
  388.   if $5 = "" then goto dinboxnf
  389.   move 22 11
  390.   print $5
  391.   move 22 12
  392.   print ">"
  393.   move 23 12
  394.   cursor on
  395.   if v = 0 then input a
  396.   if v = 1 then input $7
  397.   dinboxnf:
  398.   if $6 = "" then goto dinboxns
  399.   move 22 13
  400.   print $6
  401.   move 22 14
  402.   print ">"
  403.   move 23 14
  404.   if v = 0 then input b
  405.   if v = 1 then input $8
  406.   dinboxns:
  407.   GOSUB CLOSEBOX
  408. return
  409.  
  410. ENDPROG:
  411.   gosub aniend
  412.   cls
  413.   cursor on
  414.   FOR X = 64000 TO 65535
  415.     POKE 0 X
  416.   NEXT X
  417. end
  418.  
  419. ERRBOX:
  420.   $J = $T
  421.   $T = "Error"
  422.   GOSUB OPENBOX
  423.   POKEINT V 65418
  424.   LEN $E V
  425.   IF V > 38 THEN $E = "Error text too long!"
  426.   IF V > 38 THEN GOTO FATALERR
  427.   PEEKINT V 65418
  428.   move 22 12
  429.   print $E
  430.   MOVE 22 14
  431.   PRINT "Press escape to end program."
  432.   MOVE 22 15
  433.   print "Press any other key to continue."
  434.   cursor on
  435.   move 53 15
  436.   waitkey j
  437.   if j = 27 then gosub endprog
  438.   GOSUB CLOSEBOX
  439.   $T = $J
  440. return
  441.  
  442. FATALERR:
  443.   MOVE 2 1
  444.   INK 12
  445.   PRINT "Fatal: " ;
  446.   PRINT $E ;
  447.   WAITKEY K
  448. GOSUB ENDPROG
  449.  
  450. INPBOX:
  451.   $E = "INPBOX: Invalid input type."
  452.   IF V > 1 THEN GOTO ERRBOX
  453.   IF V < 0 THEN GOTO ERRBOX
  454.   GOSUB OPENBOX
  455.   move 22 12
  456.   print $5
  457.   move 22 13
  458.   print $6
  459.   move 22 14
  460.   print ">"
  461.   move 23 14
  462.   cursor on
  463.   if v = 1 then input $I
  464.   if v = 0 then input v
  465.   GOSUB CLOSEBOX
  466. return
  467.  
  468. LOADLOC:
  469.   POKEINT X 64164
  470.   POKEINT Y 64166
  471.   PEEK X 65428
  472.   PEEK Y 65429
  473.   MOVE X Y
  474.   PEEK X 65438
  475.   INK X
  476.   PEEKINT X 64164
  477.   PEEKINT Y 64166
  478. RETURN
  479.  
  480. LOADVAR:
  481.   POKEINT J 65426
  482.   PEEK J 65421
  483.   IF J = 0 THEN $E = "Can't load variables, none stored!"
  484.   IF J = 0 THEN GOSUB FATALERR
  485.   J = J + 65198
  486.   PEEKINT Y J
  487.   J = J - 2
  488.   PEEKINT X J
  489.   J = J - 2
  490.   PEEKINT V J
  491.   J = J - 2
  492.   PEEKINT W J
  493.   J = J - 65202
  494.   POKE J 65421
  495.   J = J + 65200
  496.   PEEKINT J J
  497. RETURN
  498.  
  499. MENUBOX:
  500.   GOSUB OPENBOX
  501.   V = 11
  502.   GOSUB MENUDRAW
  503.   MENULOOP:
  504.   DO
  505.     WAITKEY W
  506.     IF W = 1 AND V = 11 THEN LOOP ENDLESS
  507.     IF W = 2 AND V = 15 THEN LOOP ENDLESS
  508.     IF W = 1 THEN V = V - 1
  509.     IF W = 2 THEN V = V + 1
  510.     IF W < 3 THEN GOSUB MENUDRAW
  511.     IF W = 13 THEN GOTO MENUEND
  512.     IF W = 27 THEN V = 16
  513.     IF W = 27 THEN GOTO MENUEND
  514.   LOOP ENDLESS 
  515.   MENUDRAW:
  516.     J = W
  517.     W = V
  518.     GOSUB MENUITEM
  519.     IF $J = "" AND J = 1 THEN V = V + 1
  520.     IF $J = "" AND J = 2 THEN V = V - 1
  521.     IF $J = "" THEN W = 0
  522.     IF $J = "" THEN RETURN
  523.     FOR W = 11 TO 15
  524.       INK C
  525.       MOVE 22 W
  526.       IF W = V THEN INK H
  527.       GOSUB MENUITEM
  528.       X = & $J
  529.       Y = INK
  530.       INK 0
  531.       DO
  532.         PEEK J X
  533.         IF J > 32 THEN INK Y
  534.         IF J > 0 THEN PRINT CHR J ;
  535.         X = X + 1
  536.       LOOP UNTIL J = 0
  537.     NEXT W
  538.     MOVE 22 16
  539.     INK C
  540.     PRINT "Press enter to select an option."
  541.   RETURN
  542.   MENUITEM:
  543.     $J = ""
  544.     IF W = 11 THEN $J = $5
  545.     IF W = 12 THEN $J = $6
  546.     IF W = 13 THEN $J = $7
  547.     IF W = 14 THEN $J = $8
  548.     IF W = 15 THEN $J = $9
  549.   RETURN
  550.   MENUEND:
  551.     LOOP UNTIL V = V
  552.     W = V
  553.     GOSUB MENUITEM
  554.     $I = $J
  555.     V = V - 10
  556.   GOSUB CLOSEBOX
  557. RETURN
  558.  
  559. MESBOX:
  560.   GOSUB OPENBOX
  561.   move 22 11
  562.   print $5
  563.   move 22 12
  564.   print $6
  565.   move 22 13
  566.   print $7
  567.   move 22 14 
  568.   print $8
  569.   move 22 15
  570.   print $9
  571.   move 22 16
  572.   print "Press any key to continue..."
  573.   waitkey j
  574.   GOSUB CLOSEBOX
  575. return
  576.  
  577. NUMBOX:
  578.   GOSUB OPENBOX
  579.   if $5 = "" then goto numboxa
  580.   move 22 11
  581.   print $5
  582.   move 22 12
  583.   print a
  584.   numboxa:
  585.   if $6 = "" then goto numboxb
  586.   move 22 13
  587.   print $6
  588.   move 22 14
  589.   print b
  590.   numboxb:
  591.   move 22 16
  592.   print "Press any key to continue..."
  593.   waitkey j
  594.   GOSUB CLOSEBOX
  595. return
  596.  
  597. OPENBOX:
  598.   IF $T = "Error" THEN GOTO ERRNOVERIFY
  599.   POKEINT V 65418
  600.   GOSUB SAVEVAR
  601.   FOR X = 1 TO 5
  602.     IF X = 1 THEN LEN $5 V
  603.     IF X = 2 THEN LEN $6 V
  604.     IF X = 3 THEN LEN $7 V
  605.     IF X = 4 THEN LEN $8 V
  606.     IF X = 5 THEN LEN $9 V
  607.     IF V > 37 AND X = 1 THEN $E = "String $5 too long!"
  608.     IF V > 37 AND X = 2 THEN $E = "String $6 too long!"
  609.     IF V > 37 AND X = 3 THEN $E = "String $7 too long!"
  610.     IF V > 37 AND X = 4 THEN $E = "String $8 too long!"
  611.     IF V > 37 AND X = 5 THEN $E = "String $9 too long!"
  612.     IF V > 37 THEN GOTO ERRBOX
  613.   NEXT X
  614.   GOSUB LOADVAR
  615.   ERRNOVERIFY:
  616.   GOSUB SAVEVAR
  617.   GOSUB SAVELOC
  618.   POKEINT V 65418
  619.   GOSUB BOXSAVE
  620.   IF C < 0 THEN C = 7
  621.   IF C > 15 THEN C = 7
  622.   H = H * 16
  623.   H = H + C
  624.   CURSOR OFF
  625.   INK C
  626.   MOVE 22 9
  627.   PRINT $T
  628.   GOSUB ANIOPEN
  629.   GOSUB BOX
  630.   MOVE 22 9
  631.   PRINT $T
  632.   PEEKINT V 65418
  633. RETURN
  634.  
  635. pictotxt:
  636.   GOSUB SAVEVAR    
  637.   for x = 0 to 19
  638.     for y = 0 to 76
  639.       peek w v
  640.       if w = 0 then w = 32
  641.       poke w v
  642.       v = v + 1
  643.     next y
  644.     poke 10 v
  645.     v = v + 1
  646.     poke 1 v
  647.     v = v + 1
  648.     poke 1 v
  649.     v = v + 1
  650.   next x
  651.   GOSUB LOADVAR
  652. return
  653.  
  654. REFRESH:
  655.   GOSUB SAVEVAR
  656.   cls
  657.   gosub border
  658.   gosub title
  659.   GOSUB LOADVAR
  660.   gosub content
  661. return
  662.  
  663. rserial:
  664.   gosub savevar
  665.   do
  666.     serial rec w
  667.     if w = 5 then serial send 6
  668.   loop until w = 4
  669.   serial send 6
  670.   do
  671.     serial rec w
  672.     if w > 32 then w = 0
  673.   loop until w > 0
  674.   if w = 20 then goto rserialc
  675.   gosub loadvar
  676.   $E = "Serial: Invalid protocol!"
  677.   goto errbox
  678.   rserialc:
  679.   serial rec w
  680.   poke w 65418
  681.   v = w + x
  682.   v = v - 1
  683.   for w = x to v
  684.     serial rec j
  685.     poke j w
  686.   next w
  687.   gosub loadvar
  688.   peek v 65418
  689. return
  690.  
  691. SAVELOC:
  692.   POKEINT X 64164
  693.   POKEINT Y 64166
  694.   CURSPOS X Y
  695.   POKE X 65428
  696.   POKE Y 65429
  697.   X = INK
  698.   POKE X 65438
  699.   PEEKINT X 64164
  700.   PEEKINT Y 64166
  701. RETURN
  702.  
  703. SAVEVAR:
  704.   POKEINT Y 65426
  705.   PEEK Y 65421
  706.   IF Y > 198 THEN $E = "Variable storage area full!"
  707.   IF Y > 198 THEN GOSUB FATALERR
  708.   Y = Y + 65200
  709.   POKEINT J Y
  710.   Y = Y + 2
  711.   POKEINT W Y
  712.   Y = Y + 2
  713.   POKEINT V Y
  714.   Y = Y + 2
  715.   POKEINT X Y
  716.   Y = Y + 2
  717.   Y = Y - 65200
  718.   POKE Y 65421
  719.   PEEKINT Y 65426
  720.   POKEINT X 65426
  721.   PEEK X 65421
  722.   X = X + 65200
  723.   POKEINT Y X
  724.   X = X + 2
  725.   X = X - 65200
  726.   POKE X 65421
  727.   PEEKINT X 65426
  728. RETURN
  729.  
  730. SETTITLE:
  731.   GOSUB SAVEVAR
  732.   GOSUB SAVELOC
  733.   LEN $T J
  734.   IF J = 0 THEN RETURN
  735.   IF J > 78 THEN RETURN
  736.   POKE Z 65439
  737.   INK Z
  738.   MOVE 1 1
  739.   PRINT " " ;
  740.   PRINT $T ;
  741.   FOR X = J TO 76
  742.     PRINT " " ;
  743.   NEXT X
  744.   Y = & $T
  745.   J = J + 65441
  746.   FOR X = 65440 TO J
  747.     PEEK W Y
  748.     POKE W X
  749.     Y = Y + 1
  750.   NEXT X
  751.   FOR X = X TO 65514
  752.     POKE 0 X
  753.   NEXT X
  754.   GOSUB LOADLOC
  755.   GOSUB LOADVAR
  756. RETURN
  757.  
  758. sserial:
  759.   if v > 255 then $E = "Serial: Packet size too big!"
  760.   if v > 255 then goto errbox
  761.   gosub savevar
  762.   do
  763.     serial send 4
  764.     serial rec w
  765.     if w > 32 then w = 0
  766.   loop until w = 6
  767.   serial send 20
  768.   serial send v
  769.   v = v + x
  770.   v = v - 1
  771.   for w = x to v
  772.     peek j w
  773.     serial send j
  774.   next w
  775.   gosub loadvar
  776. return
  777.  
  778. STARTPRG:
  779.   FOR X = 64000 TO 65535
  780.     POKE 0 X
  781.   NEXT X
  782.   GOSUB SAVEVAR
  783.   V = 12288
  784.   GOSUB XMEM
  785.   POKE 7 65439
  786.   C = 7
  787.   H = 14
  788.   T = 7
  789.   Z = 7
  790.   INK 7
  791.   $9 = ""
  792.   GOSUB LOADVAR
  793. RETURN
  794.  
  795. TITLE:
  796.   GOSUB SAVEVAR
  797.   GOSUB SAVELOC
  798.   PEEK J 65439
  799.   INK J
  800.   MOVE 1 1
  801.   PRINT " " ;
  802.   X = 65440
  803.   DO
  804.     PEEK J X
  805.     IF J < 32 AND J > 0 THEN J = 32
  806.     PRINT CHR J ;
  807.     X = X + 1
  808.   LOOP UNTIL J = 0
  809.   CURSPOS X Y
  810.   FOR X = X TO 78
  811.     PRINT " " ;
  812.   NEXT X
  813.   GOSUB LOADLOC
  814.   GOSUB LOADVAR
  815. RETURN
  816.  
  817. XMEM:
  818.   GOSUB SAVEVAR
  819.   POKEINT V 65436
  820.   Y = 65168
  821.   FOR X = 1 TO 32
  822.     READ XMEMASM X W
  823.     POKE W Y
  824.     Y = Y + 1
  825.   NEXT X
  826.   GOSUB LOADVAR
  827. RETURN  
  828.  
  829. XMEMASM:
  830. 6 161 156 255 142 192 160 142 255 139 62 144 255 170 7 195
  831. 30 139 54 144 255 161 156 255 142 216 172 31 162 142 255 195
  832.     
  833. XGET:
  834.   POKEINT X 65424
  835.   CALL 65184
  836.   PEEK V 65422
  837. RETURN
  838.  
  839. XPUT:
  840.   POKEINT X 65424
  841.   POKE V 65422
  842.   CALL 65168
  843. RETURN
  844.