home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib24b.dsk / COMMAND.CHANGER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  162 lines

  1. 10  REM  **********************
  2. 20  REM  *   COMMAND.CHANGER  *
  3. 30  REM  * BY JAMES PATRIDGE  *
  4. 40  REM  * COPYRIGHT (C) 1985 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  CLEAR : TEXT 
  9. 90 D$ =  CHR$(4)
  10. 100  DIM NC$(28),CC$(29),SC$(28),IN(28),CS$(28)
  11. 110  GOSUB 920
  12. 120  REM  : FORMAT THE DISPLAY
  13. 130  HOME 
  14. 140 D1$ = "<< CURRENT COMMANDS >>"
  15. 150 X =  LEN(D1$)/2
  16. 160  PRINT  TAB( 20 -X)D1$
  17. 170  FOR I = 0 TO 39: PRINT "-";: NEXT I
  18. 180  PRINT 
  19. 190  FOR I = 1 TO 28
  20. 200  IF I >14  THEN  HTAB 25
  21. 210  IF I <15  THEN  HTAB 5
  22. 220  IF IN(I) >0  THEN  INVERSE 
  23. 230  PRINT CC$(I)
  24. 240  NORMAL 
  25. 250  IF I = 14  THEN  VTAB 3: PRINT 
  26. 260  NEXT I
  27. 270  PRINT 
  28. 280  FOR I = 0 TO 39: PRINT "-";: NEXT 
  29. 290  VTAB 4
  30. 300  FOR I = 1 TO 28
  31. 310  IF I >14  THEN  HTAB 20
  32. 320  IF I <10  THEN  HTAB 2
  33. 330  PRINT I")"
  34. 340  IF I = 14  THEN  VTAB 4
  35. 350  NEXT I
  36. 360  PRINT 
  37. 370  PRINT 
  38. 380  PRINT "S= STANDARD";: HTAB 20: PRINT "FREE BYTES ="FC
  39. 390  PRINT "<M> MENU ";: HTAB 20: PRINT "<R> REPLACE"
  40. 400  VTAB 23: HTAB 10: CALL  -958: INPUT "SELECTION => ";CH$
  41. 410 CH =  VAL(CH$)
  42. 420  ONERR  GOTO 1610
  43. 430  IF CH$ = "M"  THEN  PRINT D$;"RUN DOS.DESIGNER"
  44. 440  POKE 216,0
  45. 450  IF CH$ = "R"  THEN  GOTO 1070
  46. 460  IF CH$ = "S"  THEN  GOTO 1020
  47. 470  IF CH <1  OR CH >28  THEN  VTAB 23: CALL  -1052: GOTO 400
  48. 480  REM  :
  49. 490  REM  : CHANGE FORMATTER
  50. 500  REM  : BYTE SCALE
  51. 510  REM  :
  52. 520 N1$ = "000000000111111":N2$ = "123456789012345"
  53. 530  HOME 
  54. 540 D1$ = "<< DOS COMMAND CHANGER >>"
  55. 550  PRINT  TAB( 20 -X)D1$
  56. 560  PRINT : PRINT 
  57. 570 D3$ = " FREE CHR$ => "
  58. 580  FOR I = 0 TO 39: PRINT "%";: NEXT I
  59. 590  PRINT 
  60. 600  INVERSE 
  61. 610  HTAB 20: PRINT N1$
  62. 620  HTAB 20: PRINT N2$
  63. 630  NORMAL 
  64. 640  VTAB 22: INVERSE : HTAB 5: PRINT "  STANDARD DOS COMMAND => "SC$(CH)" "
  65. 650  NORMAL 
  66. 660  VTAB 8: PRINT "CURRENT COMMAND => "CC$(CH)
  67. 670  PRINT : VTAB 8: HTAB (20 + LEN(CC$(CH))): INVERSE : PRINT "<": NORMAL 
  68. 680  VTAB 9: HTAB 20: FOR I = 1 TO 15: PRINT "-";: NEXT I
  69. 690  VTAB 10: CALL  -868: HTAB (20 + LEN(CC$(CH))) +FC: IF  LEN(CC$(CH)) +(FC +20) >34  THEN  HTAB 35
  70. 700  VTAB 10: INVERSE : PRINT "<": NORMAL 
  71. 710  VTAB 10: HTAB 5: INPUT "NEW COMMAND => ";NC$(CH)
  72. 720  IF NC$(CH) = ""  THEN  GOTO 120
  73. 730  IF  LEN(NC$(CH)) <2  THEN  PRINT : PRINT "NEW COMMAND MUST AT LEAST 2 CHARACTERS": CALL  -1052: FOR I = 1 TO 2000: NEXT I: VTAB 12: CALL  -868: GOTO 690
  74. 740  IF  LEN(NC$(CH)) > LEN(CC$(CH)) +FC  THEN  PRINT : PRINT "COMMAND MUST BE =< " LEN(CC$(CH)) +FC" CHARACTERS": CALL  -1052: FOR I = 1 TO 2000: NEXT I: VTAB 12: CALL  -868: GOTO 690
  75. 750  IF  LEN(NC$(CH)) >15  THEN  PRINT : PRINT "MAXIMUM COMMAND LENGTH 15 CHARACTERS": CALL  -1052: FOR I = 1 TO 2000: NEXT I: VTAB 12: CALL  -868: GOTO 690
  76. 760  IF  LEN(CC$(CH)) > LEN(NC$(CH))  THEN FC = FC +( LEN(CC$(CH)) - LEN(NC$(CH))): GOTO 850
  77. 770  REM  :
  78. 780  REM  : RESET FREE BYTES
  79. 790  REM  :
  80. 800 FC = FC -( LEN(NC$(CH)) - LEN(CC$(CH)))
  81. 810  REM  :
  82. 820  REM  : SET NEW COMMAND TO
  83. 830  REM  : DISPLAY IN INVERSE
  84. 840  REM  :
  85. 850 CC$(CH) = NC$(CH):IN(CH) = 1
  86. 860  HOME : GOTO 120
  87. 870  REM  :
  88. 880  REM  : SET STANDARD COMMANDS
  89. 890  REM  : READ CURRENT COMMANDS
  90. 900  REM  : FROM RAM DOS IMAGE
  91. 910  REM  :
  92. 920  FOR I = 1 TO 28: READ SC$(I): NEXT I
  93. 930  FOR I = 1 TO 20:IN(I) = 0: NEXT I
  94. 940 I = 1:FC = 0
  95. 950  FOR SA = 43140 TO 43271
  96. 960 A$ =  CHR$( PEEK(SA))
  97. 970 CC$(I) = CC$(I) +A$
  98. 980  IF  ASC(A$) >128  THEN I = I +1
  99. 990  IF  ASC(A$) = 0  THEN FC = FC +1
  100. 1000  NEXT SA
  101. 1010  RETURN 
  102. 1020  RESTORE : FOR I = 1 TO 28: READ CC$(I):IN(I) = 0: NEXT I:FC = 0: GOTO 120
  103. 1030  REM  :
  104. 1040  REM  : POKE NEW TABLE INTO
  105. 1050  REM  : MEMORY.
  106. 1060  REM  :
  107. 1070  VTAB 22: HTAB 20: FLASH : PRINT "REPLACING": NORMAL 
  108. 1080  FOR I = 1 TO 28
  109. 1090  FOR J = 1 TO  LEN(CC$(I)) -1
  110. 1100 CS$ = CS$ + MID$ (CC$(I),J,1)
  111. 1110  NEXT J
  112. 1120 X =  ASC( RIGHT$(CC$(I),1))
  113. 1130  IF X >128  THEN  GOTO 1150
  114. 1140 X = X +128
  115. 1150 CS$ = CS$ + CHR$(X)
  116. 1160  NEXT I
  117. 1170  IF  LEN(CS$) <133  THEN CS$ = CS$ + CHR$(0): GOTO 1170
  118. 1180  FOR I = 1 TO 132
  119. 1190  POKE 43139 +I, ASC( MID$ (CS$,I,1))
  120. 1200  NEXT I
  121. 1210 CS$ = ""
  122. 1220  VTAB 22: CALL  -868: PRINT : INPUT "SAVE CHANGES AS A TEXT FILE (Y/N) =>";AN$
  123. 1230  IF  LEFT$(AN$,1) = "Y"  THEN  GOSUB 1290
  124. 1240  VTAB 23: CALL  -868: INVERSE : PRINT "PLEASE,";: NORMAL : PRINT " STAND BY CLEARING MEMORY "
  125. 1250  GOTO 80
  126. 1260  REM  :
  127. 1270  REM  : SAVE CHANGES TO TEXT FILE
  128. 1280  REM  :
  129. 1290  HOME : VTAB 3: PRINT "<< CREATE A COMMAND CHANGE TEXT FILE >>"
  130. 1300  PRINT : FOR I = 0 TO 39: PRINT "%";: NEXT I
  131. 1310  VTAB 10: INPUT "ENTER FILE NAME => ";NA$: CALL  -958
  132. 1320  IF NA$ = ""  THEN  CALL  -1052: PRINT "ILLEGAL FILE NAME !": GOTO 1310
  133. 1330  IF  LEN(NA$) >30  OR  ASC( LEFT$(NA$,1)) <65  OR  ASC( LEFT$(NA$,1)) >90  THEN  CALL  -1052: PRINT "ILLEGAL FILE NAME !": GOTO 1310
  134. 1340  VTAB 12: INPUT "ENTER STARTING LINE # => ";SL$: CALL  -958
  135. 1350 SL =  VAL(SL$)
  136. 1360  IF SL <1  OR SL >63999  THEN  CALL  -1052: PRINT "ILLEGAL LINE NUMBER !": GOTO 1340
  137. 1370  VTAB 10: CALL  -958: INVERSE : PRINT "CURRENT PARAMETERS : ": NORMAL 
  138. 1380  PRINT : PRINT "TEXT FILE NAME => ";NA$: PRINT : PRINT "STARTING LINE NUMBER => ";SL
  139. 1390  PRINT : INPUT "VERIFY PARAMETERS (Y/N) => ";A$
  140. 1400  IF  LEFT$(A$,1) < >"Y"  THEN  GOTO 1290
  141. 1410  PRINT D$;"MON C,I,O"
  142. 1420  PRINT D$;"OPEN"NA$
  143. 1430  PRINT D$;"DELETE"NA$
  144. 1440  PRINT D$;"OPEN"NA$
  145. 1450  PRINT D$;"WRITE"NA$
  146. 1460  FOR SA = 43140 TO 43271
  147. 1470 C = C +1
  148. 1480  IF C = 10  THEN C = 1
  149. 1490  IF C < >1  THEN 1530
  150. 1500  PRINT 
  151. 1510  PRINT SL;
  152. 1520 SL = SL +1
  153. 1530  PRINT " POKE ";SA;", "; PEEK(SA);" :";
  154. 1540  NEXT SA
  155. 1550  PRINT 
  156. 1560  PRINT D$;"CLOSE"NA$
  157. 1570  PRINT D$;"NOMONC,I,O": VTAB  PEEK(37): CALL  -868
  158. 1580  RETURN 
  159. 1590  DATA  INIT,LOAD,SAVE,RUN,CHAIN,DELETE,LOCK,UNLOCK,CLOSE,READ,EXEC,WRITE,POSITION,OPEN,APPEND
  160. 1600  DATA  RENAME,CATALOG,MON,NOMON,PR#,IN#,MAXFILES,FP,INT,BSAVE,BLOAD,BRUN,VERIFY
  161. 1610  IF  PEEK(222) = 6  THEN  HOME : VTAB 12: PRINT "INSERT DOS.DESIGNER DISK AND PRESS A KEY": WAIT  -16384,128: POKE  -16368,0: GOTO 430
  162. 1620  HOME : VTAB 22: PRINT "ERROR #"; PEEK(222);" IN LINE "; PEEK(218) + PEEK(219) *256