home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib14.dsk / RAM-MANAGER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  123 lines

  1. 10  REM  **********************
  2. 11  REM  *    RAM-MANAGER     *
  3. 12  REM  *   BY BILL CHRIST   *
  4. 13  REM  * COPYRIGHT (C) 1983 *
  5. 14  REM  * BY MICROSPARC, INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 100  HIMEM: 24063
  9. 110  PRINT  CHR$(4);"BLOAD RAM-BINARY"
  10. 120  POKE 24657,94: POKE 24658,99
  11. 130  DIM C$(4),F$(9),M(9,2),TY$(9)
  12. 140 A = 24584:AA = 24435:C = 256:CD = 24434:D = 1:FS = 12287:I = 24410:M = 24676:P = 24657:PS = 25438:M(0,1) =  PEEK(P) + PEEK(P +1) *C +1:S = 6:TF =  -1
  13. 150 B$ =  CHR$(8):H$ = "0123456789ABCDEF":R$ =  CHR$(13):U$ =  CHR$(95)
  14. 160  FOR T = 1 TO 4: READ C$(T): NEXT T: FOR T = 0 TO 28: READ T1: POKE 768 +T,T1: NEXT T
  15. 170  TEXT : HOME : PRINT "COMMAND < >";
  16. 180  FOR T = 1 TO 4: HTAB 15: PRINT T;". ";C$(T): NEXT T
  17. 190  VTAB 3: PRINT "FREE BYTES": PRINT " <";FS;">"
  18. 200  PRINT : PRINT "CURRENT FILES:"; TAB( 28);"SLOT  <";S;">": PRINT  TAB( 28);"DRIVE <";D;">": PRINT  TAB( 3);"TYPE  LENGTH  FILE": VTAB 22: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": VTAB 9
  19. 210 L = 12 +TF: IF TF <0  THEN 240
  20. 220  FOR T = 0 TO TF: PRINT T;"."; TAB( 5);TY$(T); TAB( 9);:FL = M(T,2) -M(T,1) +1: IF FL <10000  THEN  FOR T1 = 1 TO (5 - LEN( STR$(FL))): PRINT " ";: NEXT T1
  21. 230  PRINT FL; TAB( 17); LEFT$(F$(T),24);: NEXT T: PRINT 
  22. 240  VTAB 1: HTAB 10: GET T$:T =  VAL( LEFT$(T$,1)): IF T <1  OR T >4  THEN 180
  23. 250  PRINT T$
  24. 260  ON T GOSUB 310,530,700,940
  25. 270  GOTO 170
  26. 280  REM 
  27. 290  REM  SELECT A PROGRAM
  28. 300  REM 
  29. 310  IF FS <35  THEN  VTAB L: PRINT "THERE IS NO ROOM TO ADD ANOTHER FILE.": GOSUB 1150: RETURN 
  30. 320  IF TF = 9  THEN  VTAB L: PRINT "ONLY 10 FILES CAN BE SELECTED AT A TIME": GOSUB 1150: RETURN 
  31. 330  GOSUB 1000
  32. 340 F$ = "FILE TO SELECT:": GOSUB 1080
  33. 350  IF  LEFT$(F$,1) =  CHR$(32)  THEN  RETURN 
  34. 360 T =  PEEK(P) + PEEK(P +1) *C
  35. 370  FOR T1 = 1 TO 30: POKE T +T1, ASC( MID$ (F$,T1,1)) +128: NEXT T1: POKE I,S *16: POKE I +1,D
  36. 380 L = L +2: VTAB L: PRINT "INSERT DISK: <CR> CONTINUES <SP> ABORTS";
  37. 390  GET T$: IF T$ < >R$  AND T$ < > CHR$(32)  THEN 390
  38. 400  IF T$ =  CHR$(32)  THEN  RETURN 
  39. 410  CALL 24064
  40. 420 T1 =  PEEK(CD)
  41. 430  IF T1 <255  THEN 460
  42. 440  POKE T +32,T1:TF = TF +1:F$(TF) = F$:M(TF,2) =  PEEK(P) + PEEK(P +1) *C: IF TF <9  THEN M(TF +1,1) = M(TF,2) +1
  43. 450 FS = FS -(M(TF,2) -M(TF,1) +1):TY$(TF) =  CHR$(65 +( PEEK(M(TF,1) +30) = 34)): RETURN 
  44. 460  IF T1 = 0  THEN  VTAB L: HTAB 1: PRINT "THE FILE ";F$: CALL  -868: PRINT "IS NOT ON THIS DISK.": GOSUB 1150: RETURN 
  45. 470  IF T1 = 1  THEN  VTAB L: HTAB 1: PRINT "THE FILE ";F$: CALL  -868: PRINT "IS NOT AN A OR B TYPE FILE": GOSUB 1150: RETURN 
  46. 480 T1 =  PEEK(T +31):T1 =  PEEK(T +T1 +1) + PEEK(T +T1 +2) *C +T1 +2
  47. 490  VTAB L: HTAB 1: PRINT "THE FILE ";F$: CALL  -868: PRINT "IS TOO LONG, ";T1;" BYTES.": GOSUB 1150: RETURN 
  48. 500  REM 
  49. 510  REM  DESELECT A PROGRAM
  50. 520  REM 
  51. 530  IF TF <0  THEN  RETURN 
  52. 540  VTAB L: PRINT "PROGRAM TO DESELECT (0-";TF;"):  < >";B$;B$;
  53. 550  GET T$:T =  ASC(T$): IF (T <48  OR T >48 +TF)  AND T$ < >R$  THEN 550
  54. 560  PRINT T$:T = T -48: IF T$ = R$  THEN  RETURN 
  55. 570 L = 0: IF TF = 0  THEN 650
  56. 580  FOR T1 = 0 TO TF: IF T < >T1  THEN L = L +(M(T1,2) -M(T1,1) +1)
  57. 590  NEXT T1: IF T = TF  THEN 650
  58. 600  POKE 769,M(T +1,1) - INT(M(T +1,1)/C) *C: POKE 773, INT(M(T +1,1)/C)
  59. 610  POKE 777,M(TF,2) - INT(M(TF,2)/C) *C: POKE 781, INT(M(TF,2)/C)
  60. 620  POKE 785,M(T,1) - INT(M(T,1/C) *C: POKE 789, INT(M(T,1)/C)
  61. 630  CALL 768
  62. 640  FOR T1 = T TO (TF -1):M(T1,2) = M(T1,1) +(M(T1 +1,2) -M(T1 +1,1)):M(T1 +1,1) = M(T1,2) +1:TY$(T1) = TY$(T1 +1):F$(T1) = F$(T1 +1): NEXT T1
  63. 650 TF = TF -1:FS = 12287 -L:L = L +PS: POKE P,L - INT(L/C) *C: POKE P +1, INT(L/C)
  64. 660  RETURN 
  65. 670  REM 
  66. 680  REM  SAVE A UTILITY FILE
  67. 690  REM 
  68. 700  IF TF <0  THEN  RETURN 
  69. 710  GOSUB 1000
  70. 720 F$ = "FILE TO SAVE PROGRAMS IN:": GOSUB 1080:FS$ = F$: IF  LEFT$(FS$,1) =  CHR$(32)  THEN  RETURN 
  71. 730 L = L +1:F$ = "AMPERSAND & ADDRESS:":T1$ = "3CA"
  72. 740  VTAB L: PRINT F$;" ($";T1$;") ";: CALL  -868: INPUT T$:T = 970: GOSUB 1190: IF T <0  OR T >49151  THEN 740
  73. 750  IF  LEN(T$) = 0  THEN T$ = T1$
  74. 760  VTAB L: PRINT F$;" <$";T$;">";: CALL  -868: PRINT 
  75. 770  POKE A,T - INT(T/C) *C: POKE A +5, INT(T/C)
  76. 780  FOR T1 = 12 TO 37  STEP 5: POKE A +T1,T - INT(T/C) *C: POKE A +T1 +1, INT(T/C):T = T +1: NEXT T1
  77. 790 L = L +1:F$ = "MENU ADDRESS:":T1$ = "9317"
  78. 800  VTAB L: PRINT F$;" ($";T1$;") ";: CALL  -868: INPUT T$:T = 37655: GOSUB 1190: IF T <0  OR T >37655  THEN 800
  79. 810  IF  LEN(T$) = 0  THEN T$ = T1$
  80. 820  VTAB L: PRINT F$;" <$";T$;">";: CALL  -868: PRINT 
  81. 830  POKE M,T - INT(T/C) *C: POKE M +4, INT(T/C): POKE M +16,T - INT(T/C) *C: POKE M +17, INT(T/C)
  82. 840 L = L +1: IF TF <9  THEN L = L +1
  83. 850  VTAB L: PRINT "INSERT DISK: <CR> CONTINUES <SP> ABORTS";
  84. 860  GET T$: IF T$ < >R$  AND T$ < > CHR$(32)  THEN 860
  85. 870  IF T$ =  CHR$(32)  THEN  RETURN 
  86. 880  POKE M(TF,1) +31,0:L = M(TF,2) -AA +1
  87. 890  PRINT : PRINT  CHR$(4);"BSAVE";FS$;",A";AA;",L";L;",S";S;",D";D
  88. 900  POKE M(TF,1) +31,255: RETURN 
  89. 910  REM 
  90. 920  REM  QUIT
  91. 930  REM 
  92. 940  VTAB L: INPUT "DO YOU REALLY WISH TO QUIT ?";T$:T$ =  MID$ (T$,1,1): IF T$ < >"Y"  THEN  RETURN 
  93. 950  HIMEM: 38400
  94. 960  VTAB 22: END 
  95. 970  REM 
  96. 980  REM  GET SLOT AND DRIVE
  97. 990  REM 
  98. 1000  VTAB 6: HTAB 35: GET T$:T =  VAL(T$): IF (T <1  OR T >7)  AND T$ < >R$  THEN 1000
  99. 1010  IF T$ < >R$  THEN S = T: PRINT T$
  100. 1020  VTAB 7: HTAB 35: GET T$:T =  VAL(T$): IF (T <1  OR T >4)  AND T$ < >R$  THEN 1020
  101. 1030  IF T$ < >R$  THEN D = T: PRINT T$
  102. 1040  RETURN 
  103. 1050  REM 
  104. 1060  REM  FILE NAME INPUT ROUTINE
  105. 1070  REM 
  106. 1080  VTAB L: HTAB 1: PRINT F$: PRINT  TAB( 5);"<";: FOR T = 1 TO 30: PRINT U$;: NEXT T: PRINT ">":F$ = "":T = 0: VTAB L +1: HTAB 6
  107. 1090  FOR T1 = 1 TO 10000: GET T$: IF T$ < >R$  AND T$ < >B$  AND T <30  AND   NOT (T = 0  AND (T$ <"A"  OR T$ >"Z"))  THEN F$ = F$ +T$:T = T +1: PRINT T$;: NEXT T1
  108. 1100  IF T$ = R$  THEN  VTAB L: HTAB 1: CALL  -868: PRINT "FILE:  <";F$;">": CALL  -868: FOR T = 1 TO 30:F$ = F$ +" ": NEXT T:F$ =  LEFT$(F$,30): RETURN 
  109. 1110  IF T$ < >B$  AND T = 30  THEN  NEXT T1
  110. 1120  IF T = 0  AND (T$ <"A"  OR T$ >"Z")  THEN  NEXT T1
  111. 1130  IF T >0  THEN  PRINT B$;U$;B$;:T = T -1:F$ =  MID$ (F$,1,T)
  112. 1140  NEXT T1
  113. 1150  VTAB 24: HTAB 8: PRINT "HIT ANY KEY TO CONTINUE";: GET T$: RETURN 
  114. 1155  GOSUB 1000: HOME :D$ =  CHR$(4): PRINT : PRINT D$;"CATALOG,S"S",D"D: GOSUB 1150: RETURN 
  115. 1160  REM 
  116. 1170  REM  CONVERT FROM HEX TO DEC
  117. 1180  REM 
  118. 1190  IF  LEN(T$) >4  THEN T =  -1: RETURN 
  119. 1200  IF  LEN(T$) = 0  THEN  RETURN 
  120. 1210 T = 0: FOR T1 = 1 TO  LEN(T$): FOR T2 = 0 TO 15: IF  MID$ (T$, LEN(T$) +1 -T1,1) < > MID$ (H$,T2 +1,1)  THEN  NEXT T2:T =  -1: RETURN 
  121. 1220 T = T +T2 *16 ^(T1 -1): NEXT T1: RETURN 
  122. 1230  DATA  SELECT A PROGRAM,DESELECT A PROGRAM,SAVE A UTILITY FILE,QUIT
  123. 1240  DATA  169,0,133,60,169,0,133,61,169,0,133,62,169,0,133,63,169,0,133,66,169,0,133,67,160,0,76,44,254