home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29b.dsk / SECTOR.STRETCHER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  212 lines

  1. 10  REM  **********************
  2. 20  REM  *                    *
  3. 30  REM  * SECTOR.STRETCHER   *
  4. 40  REM  * BY CHRISTOPHER BOCK*
  5. 50  REM  * COPYRIGHT 1986 BY  *
  6. 60  REM  * MICROSPARC, INC.   *
  7. 70  REM  * CONCORD, MA  01742 *
  8. 80  REM  *                    *
  9. 90  REM  **********************
  10. 100  REM  POKE MACHINE LANGUAGE PROGRAM INTO$4000
  11. 110  TEXT : HOME : NORMAL : VTAB 7: PRINT "INSTALLING MACHINE CODE, PLEASE WAIT...":TV3 = 0
  12. 120  FOR V1 = 16384 TO 16413
  13. 130  READ V2
  14. 140  POKE V1,V2
  15. 150 V3 = V3 +V2
  16. 160  NEXT 
  17. 170  FOR V1 = 24576 TO 24648: REM  POKE BOOT PROGRAM INTO $6000
  18. 180  READ V2
  19. 190  POKE V1,V2
  20. 200 V3 = V3 +V2
  21. 210  NEXT 
  22. 220  REM  IF DATA IS WRONG, STOP PROGRAM
  23. 230  IF V3 < >11452  THEN : PRINT : PRINT  CHR$(7);"THERE IS AN ERROR IN THE DATA": PRINT "CHECK TYPING AND RERUN PROGRAM": END 
  24. 240  REM  POKE MESSAGE INTO MACHINE LANGUAGE PROGRAM
  25. 250 A$ = "THIS DISK DOES NOT HAVE DOS. INSERT A DISK WITH DOS, PRESS <RETURN>       ": REM  7 SPACES
  26. 260  FOR V1 = 1 TO  LEN(A$)
  27. 270  POKE 24648 +V1, ASC( MID$ (A$,V1,1)) +128
  28. 280  NEXT 
  29. 290  REM  PRINT GREETINGS
  30. 300  TEXT : HOME 
  31. 310  PRINT  SPC( 11);"SECTOR STRETCHER": PRINT  SPC( 9);"WRITTEN BY CHRIS BOCK": PRINT "   COPYRIGHT 1986 BY MICROSPARC, INC.": PRINT 
  32. 320  PRINT "   SECTOR STRETCHER MODIFIES STANDARD"
  33. 330  PRINT "DOS 3.3 DISKS TO FREE UP MORE SPACE   "
  34. 340  PRINT "FOR DATA STORAGE. YOU MAY RELEASE THE"
  35. 350  PRINT "FOLLOWING SECTORS:"
  36. 360  PRINT 
  37. 370  PRINT "   DOS - 32 SECTORS"
  38. 380  PRINT "   NORMALLY UNUSED SECTORS - 11 SECTORS"
  39. 390  PRINT "   CATALOG SECTORS - UP TO 13 SECTORS"
  40. 400  PRINT 
  41. 410  REM  CLEAR OPTION FLAGS
  42. 420 DOS = 0:FR = 0:DIR = 0:DS = 0
  43. 430  REM  OPTION #1
  44. 440  VTAB 14: CALL  -958: PRINT "DO YOU WISH TO RELEASE THE SECTORS"
  45. 450  PRINT "OCCUPIED BY DOS? (THIS MAKES THE DISK   UNBOOTABLE) ": VTAB 22: PRINT "PRESS <ESC> TO END THE PROGRAM": VTAB 16: HTAB 13
  46. 460  GET A$: IF A$ =  CHR$(27)  THEN  TEXT : HOME : END 
  47. 470  PRINT A$
  48. 480  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN DOS = 1: GOTO 570
  49. 490  ON A$ < >"N"  AND A$ < > CHR$(110) GOTO 440: PRINT 
  50. 500  REM  OPTION #2
  51. 510  VTAB 14: CALL  -958: PRINT "DO YOU WISH TO RELEASE THE ELEVEN"
  52. 520  PRINT "NORMALLY UNUSED SECTORS? ": VTAB 22: PRINT "PRESS <ESC> TO START OVER     ": VTAB 15: HTAB 26
  53. 530  REM 
  54. 540  GET A$: IF A$ =  CHR$(27)  THEN  HTAB 1: GOTO 420
  55. 550  PRINT A$
  56. 560  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN FR = 1: PRINT : GOTO 590
  57. 570  ON A$ < >"N"  AND A$ < > CHR$(110) GOTO 510
  58. 580  REM  OPTION #3
  59. 590  VTAB 14: CALL  -958: PRINT "DO YOU WISH TO RELEASE ANY OF THE"
  60. 600  PRINT "CATALOG SECTORS? ": VTAB 22: PRINT "PRESS <ESC> TO START OVER     ": VTAB 15: HTAB 19
  61. 610  GET A$: IF A$ =  CHR$(27)  THEN  HTAB 1: GOTO 420
  62. 620  PRINT A$
  63. 630  IF A$ = "N"  OR A$ =  CHR$(110) GOTO 710
  64. 640  ON A$ < >"Y"  AND A$ < > CHR$(121) GOTO 590:DIR = 1
  65. 650  VTAB 17: CALL  -958
  66. 660  PRINT "HOW MANY CATALOG SECTORS DO YOU WANT TO KEEP? (7 FILE NAMES/SECTOR) ";
  67. 670  INPUT DS
  68. 680  IF DS <2  OR DS >14  THEN  PRINT  CHR$(7): GOTO 650
  69. 690  REM 
  70. 700  REM  PRINT OPTIONS SELECTED
  71. 710  HOME 
  72. 720  IF DOS +FR +DIR = 0  THEN  END 
  73. 730  PRINT  SPC( 13);"SECTOR STRETCHER"
  74. 740  PRINT 
  75. 750  PRINT "YOUR CHOICES ARE AS FOLLOWS"
  76. 760  PRINT 
  77. 770  IF DOS = 1  THEN  PRINT "FREE UP DOS SECTORS"
  78. 780  IF FR = 1  THEN  PRINT "RELEASE THE 11 NORMALLY UNUSED SECTORS"
  79. 790  IF DIR = 0  THEN 820
  80. 800  PRINT "RELEASE ";15 -DS;" SECTOR";: IF DS <14  THEN  PRINT "S";
  81. 810  PRINT " FROM THE CATALOG"
  82. 820  REM  START
  83. 830  POKE 34,10
  84. 840  IF DOS = 0  THEN 1190
  85. 850  HOME 
  86. 860  VTAB 12
  87. 870  PRINT "ENTER THE MESSAGE YOU WISH TO HAVE DIS-"
  88. 880  PRINT "PLAYED WHEN THIS DISK IS BOOTED."
  89. 890  INPUT A$
  90. 900  IF A$ = ""  AND  LEN(B$) >0  THEN A$ =  RIGHT$(B$,40):B$ =  LEFT$(B$,1): GOTO 950
  91. 910  PRINT 
  92. 920  PRINT "DO YOU WANT IT TO BE NORMAL, FLASHING,"
  93. 930  PRINT "OR INVERSE? (N/F/I)";
  94. 940  GET B$
  95. 950  IF B$ = "N"  OR B$ =  CHR$(110)  THEN V2 = 128: GOTO 990
  96. 960  IF B$ = "F"  OR B$ =  CHR$(102)  THEN V2 = 0: GOTO 990
  97. 970  IF B$ = "I"  OR B$ =  CHR$(105)  THEN V2 =  -64: GOTO 990
  98. 980  GOTO 940
  99. 990  IF  LEN(A$) >40  THEN 850
  100. 1000  IF  LEN(A$) = 40  THEN 1100
  101. 1010  FOR V1 = 1 TO 20 - INT( LEN(A$)/2)
  102. 1020 A$ = " " +A$
  103. 1030  NEXT 
  104. 1040  FOR V1 =  LEN(A$) +1 TO 40
  105. 1050 A$ = A$ +" "
  106. 1060  NEXT 
  107. 1070 B$ = B$ +A$
  108. 1080  VTAB 8: HTAB 1
  109. 1090  PRINT  SPC( 14);"BOOT MESSAGE"
  110. 1100  FOR V1 = 1 TO 40
  111. 1110 V3 =  ASC( MID$ (A$,V1,1))
  112. 1120  IF V3 = 32  THEN V3 = 160: GOTO 1150
  113. 1130  IF V2 < >128  AND V3 <64  THEN V3 = V3 +64
  114. 1140 V3 = V3 +V2
  115. 1150  POKE 24721 +V1,V3
  116. 1160  POKE 1063 +V1,V3
  117. 1170  NEXT 
  118. 1180  PRINT 
  119. 1190  HOME : VTAB 12: IF DIR  THEN  PRINT  CHR$(7); CHR$(7);"WARNING! DO NOT RELEASE CATALOG SECTORS FROM A DISK WHICH CONTAINS FILES.": PRINT : PRINT 
  120. 1200  PRINT "INSERT DISK TO BE ALTERED IN DRIVE 1"
  121. 1210  PRINT "AND PRESS <RETURN> TO CONTINUE, OR ": PRINT "<ESC> TO STOP"
  122. 1220  POKE  -16368,0
  123. 1230 V1 =  PEEK( -16384)
  124. 1240  IF V1 = 155  THEN  POKE  -16368,0: GOTO 300
  125. 1250  IF V1 < >141  THEN 1230
  126. 1260  POKE  -16368,0
  127. 1270  REM  READ VTOC INTO $5000-$50FF
  128. 1280  POKE 16398,0: REM  SECTOR
  129. 1290  POKE 16397,17: REM  TRACK
  130. 1300  POKE 16405,1: REM  READ
  131. 1310  POKE 16402,80: REM  BUFFER
  132. 1320  CALL 16384
  133. 1330  GOSUB 1860
  134. 1340  GOSUB 1980
  135. 1350  IF DOS = 0  THEN 1430
  136. 1360  REM  OPTION #1: OPEN DOS TRACKS (1-2)
  137. 1370  FOR V1 = 1 TO 2
  138. 1380  POKE 20536 +V1 *4,255
  139. 1390  POKE 20537 +V1 *4,255
  140. 1400  NEXT 
  141. 1410  POKE 20676,127
  142. 1420  REM  OPTION #2: OPEN 11 SECTORS ON TRACK 2
  143. 1430  IF FR = 1  THEN  POKE 20544,255: POKE 20545,224: POKE 20677,127
  144. 1440  IF DIR = 0  THEN 1630
  145. 1450  REM  OPTION #3: OPEN CHOSEN NUMBER OF SECTORS IN CATALOG
  146. 1460 V1 = 2 ^(16 -DS) -2
  147. 1470 V2 =  INT(V1/256)
  148. 1480 V1 = V1 -V2 *256
  149. 1490  POKE 20678,142 -DS
  150. 1500  REM  WRITE VTOC BACK ONTO DISK
  151. 1510  POKE 20604,V2
  152. 1520  POKE 20605,V1
  153. 1530  POKE 16405,2: REM  WRITE
  154. 1540  CALL 16384
  155. 1550  GOSUB 1860
  156. 1560  REM  SET CATALOG LINK BYTES TO ZERO
  157. 1570  POKE 16398,16 -DS: REM  SECTOR
  158. 1580  POKE 16405,1: REM  READ
  159. 1590  CALL 16384
  160. 1600  GOSUB 1860
  161. 1610  POKE 20481,0
  162. 1620  POKE 20482,0
  163. 1630  REM  SAVE EITHER VTOC OR CATALOG BACK ONTO DISK, DEPENDING ON THE VALUE OF DIR (SEE LINE 1440)
  164. 1640  POKE 16405,2: REM  WRITE
  165. 1650  CALL 16384
  166. 1660  GOSUB 1860
  167. 1670  IF DOS = 0  THEN 1740
  168. 1680  REM  IF OPTION #1 IS SELECTED, THE SAVE BOOT PROGRM ONTO TRACK 0, SECTOR 0
  169. 1690  POKE 16398,0: REM  SECTOR
  170. 1700  POKE 16397,0: REM  TRACK
  171. 1710  POKE 16402,96: REM  BUFFER
  172. 1720  CALL 16384
  173. 1730  GOSUB 1860
  174. 1740  HOME 
  175. 1750  VTAB 12
  176. 1760  PRINT "DO YOU WISH TO ALTER ANOTHER DISK? ";
  177. 1770  GET A$
  178. 1780  PRINT A$
  179. 1790  IF A$ = "N"  THEN  END 
  180. 1800  PRINT 
  181. 1810  PRINT "DO YOU WISH LEAVE THE OPTIONS SET THE"
  182. 1820  PRINT "WAY THEY ARE?";
  183. 1830  GET A$
  184. 1840  IF A$ = "N"  OR A$ =  CHR$(118)  THEN 300
  185. 1850  GOTO 820
  186. 1860  REM  DISK ERROR CHECK ROUTINE
  187. 1870 V1 =  PEEK(16406)
  188. 1880  IF V1 < >16  AND V1 < >64  AND V1 < >128  THEN  RETURN 
  189. 1890  POKE 16406,0
  190. 1900  TEXT : HOME 
  191. 1910  VTAB 11
  192. 1920  IF V1 = 16  THEN  PRINT "DISKETTE IS WRITE PROTECTED, REMOVE": PRINT "WRITE PROTECT TAB"
  193. 1930  IF V1 = 64  THEN  PRINT "DRIVE ERROR"
  194. 1940  IF V1 = 128  THEN  PRINT "READ ERROR"
  195. 1950  PRINT  CHR$(7); CHR$(7)
  196. 1970  POP : VTAB 22: PRINT "PRESS <RETURN> TO CONTINUE": POKE  -16368,0: GET A$: PRINT A$: POKE  -16368,0: GOTO 300
  197. 1980  IF  PEEK(20676) < >127  AND  PEEK(20677) < >127  AND ( PEEK(20678) <127  OR  PEEK(20678) >141)  THEN  RETURN 
  198. 1990  TEXT 
  199. 2000  HOME 
  200. 2010  VTAB 9
  201. 2020  IF  PEEK(20676) = 127  AND DOS = 1  THEN  PRINT "DOS HAS ALREADY BEEN REMOVED FROM THIS  DISK": PRINT 
  202. 2030  IF ( PEEK(20676) = 127  OR  PEEK(20677) = 127)  AND FR = 1  THEN  PRINT "THE ELEVEN SECTORS ON TRACK TWO HAVE": PRINT "ALREADY BEEN RELEASED ON THIS DISK.": PRINT 
  203. 2040  IF  PEEK(20677) = 127  AND DOS = 1  THEN  PRINT "REMOVING DOS FROM THIS DISK WOULD": PRINT "INTERFERE WITH SECTORS PREVIOUSLY       RELEASED.": REM  7 SPACES
  204. 2050 V1 =  PEEK(20678) -127
  205. 2060  IF V1 >0  AND V1 <15  AND DIR = 1  THEN  PRINT V1;" SECTORS HAVE ALREADY BEEN RELEASED": PRINT "FROM THE DISK CATALOG.": PRINT 
  206. 2070  POP 
  207. 2080  VTAB 22: PRINT "PRESS <RETURN> TO CONTINUE": POKE  -16368,0: GET A$: PRINT A$: POKE  -16368,0: GOTO 300
  208. 2090  REM 
  209. 2100  REM  DATA
  210. 2110  DATA  169,64,160,9,32,217,3,96,0,1,96,1,0,17,0,27,64,0,80,0,0,1,0,0,96,1,0,1,239,216
  211. 2120  DATA  1,32,47,251,32,88,252,32,228,251,32,228,251,162,28,189,72,8,157,173,4,202,208,247,162,39,189,100,8,157,168,5,202,208,247,162,6,189,139,8,157,184,6,202,208,247,162
  212. 2130  DATA  40,189,145,8,157,127,4,202,208,247,142,16,192,142,232,192,174,0,192,224,128,48,249,76,0,198