home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / DISKEXPL.ZIP / DM4.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-09-15  |  45.9 KB  |  909 lines

  1. 1  F=0:VR$="4.00":COMP$="I":REF=&H1700
  2. 2  DEF SEG=64:POKE 23,(PEEK(23)AND-65)+64:MEM=256*PEEK(&H14)+PEEK(&H13):DEF SEG=&HFE00:IF PEEK(&HE)<>73 THEN COMP$="C"
  3. 3  DEF SEG:I=0:J=0:S=0:X=0:I%=0:DIM SP(40):S=VARPTR(SP(0)):X=(S+16)MOD 16:S=S+16-X:FOR I=0 TO 13:READ J:POKE S+I,J:NEXT:CALL S(I%):SE%=I%+4098:IF COMP$="C" AND SE%<REF THEN MEM=MEM-64
  4. 4  SX%=1+INT(SE%/64):SY%=MEM-SX%:IF SY%>31 GOTO 52
  5. 5  IFF=1THENSE%=&H1800:GOTO10
  6. 6  X=65536-1024*(32-SY%):IFX<60000GOTO9
  7. 7  CLEAR,X:F=1:GOTO2
  8. 8  DATA&H55,&H8C,&HD8,&H89,&HE5,&H8B,&H7E,6,&H89,5,&H5D,&HCA,2,0
  9. 9  CLS:LOCATE12,23:PRINT"NOT ENOUGH MEMORY INSTALLED!!!!":BEEP:BEEP:SYSTEM
  10. 10  WIDTH 80:SIDE%=0:SCR%=&HDF:LFE%=&H300:LFT%=&H2D00:TRT%=&H2E00:RST%=&H4600:CHR%=&H100:TMS%=&H200:SFF%=0:UR%=&H6FB1:AVM%=SY%-32
  11. 30  DEF SEG=SE%:KEY OFF:CLS:LOCATE 12,23:PRINT"LOADING DISK MECHANIC. PLEASE WAIT!!":BLOAD"TRQ7",0:BLOAD"TRQ9",&H2D00:BLOAD"TRQ8",&H5E00:POKE &HFF,24:POKE &H20,&HDF:ASYN$="A":S0%=1:RA$="R":DEF USR=UR%:POKE 49,6:POKE 50,0:UU%=0:UU%=USR(UU%)
  12. 40  POKE &HE5,&H46:MDTR%=PEEK(&H3D):IF MDTR%=0 OR MDTR%=1 GOTO 60
  13. 50  LOCATE12,18:PRINT"INVALID LOAD OF DISK MECHANIC.  EXITING TO DOS":GOTO500
  14. 52  SF%=SE%+&H2E0:SA%=&H180:GOSUB58:IFS1%<>S2%GOTO56
  15. 53  SF%=SE%+&H460:GOSUB58:IFS1%<>S2%GOTO59
  16. 54  SF%=SE%+&H10:SA%=&H10:GOSUB58:IFS1%=S2%GOTO10
  17. 56  SE%=4096*S2%:SX%=1+INT(SE%/64):SY%=MEM-SX%:IFSY%>31GOTO10 ELSE5
  18. 57  SE%=SF%:SX%=1+INT(SE%/64):SY%=MEM-SX%:IFSY%>31GOTO10 ELSE5
  19. 58  S1%=INT(SF%/4096):S2%=INT((SF%+SA%)/4096):RETURN
  20. 59  SF%=4096*S2%-&H460:IFSF%>SE%GOTO57 ELSE56
  21. 60  FSEG=SE%+&H824:LSEG=64*MEM-1:VAIL=16*(LSEG-FSEG):FSH%=INT(FSEG/256):FSL%=FSEG-256*FSH%:LSH%=INT(LSEG/256):LSL%=LSEG-256*LSH%:POKE &H2D0E,9:POKE 49,16:POKE 50,0:POKE 58,0:POKE 54,0:POKE 53,39:UU%=USR(UU%)
  22. 80  DIMDA%(85):DIMTM(50),LT$(15),PC%(20),DR$(112),AT%(112),SC%(112),F1%(112),F2%(112),FA%(355),DT%(85,8,1),TD%(255),LF%(80),FC%(300),C%(9),C$(9),PAG(6):PAG(0)=0.5:PAG(1)=1:PAG(2)=2:PAG(3)=4:PAG(4)=8:PAG(5)=16:PAG(6)=0
  23. 100  LT$(0)="0":LT$(1)="1":LT$(2)="2":LT$(3)="3":LT$(4)="4":LT$(5)="5":LT$(6)="6":LT$(7)="7":LT$(8)="8":LT$(9)="9":LT$(10)="A":LT$(11)="B":LT$(12)="C":LT$(13)="D":LT$(14)="E":LT$(15)="F":RA$="R":SQ=65536:N89%=9:N98%=9:CLS
  24. 130  BEEP:LOCATE 12,15:PRINT"COLOR/GRAPHICS <C> OR MONOCHROME DISPLAY <M> ADAPTER";
  25. 140  CM$=INKEY$:IFCM$=""GOTO140
  26. 150  IFCM$="C"ORCM$="c"THENPOKESCR%,&HB8:GOTO180
  27. 160  IFCM$="m"ORCM$="M"THENPOKESCR%,&HB0:GOTO180
  28. 170  GOTO130
  29. 180  ST%=0:ET%=41:ETI%=41:HD%=0:DRI$="A":GOSUB 10970:KEY 9,"LPTOFF":KEY 10,"MENU  ":GOSUB 11650
  30. 200  KEYOFF:FORI%=1TO8:KEYI%,"":KEY(I%)OFF:NEXTI%:GOSUB11650:GOSUB220:GOTO270
  31. 220  POKE &H41,0:POKE &HF2,0:POKE &H19,1:KEY(11)OFF:SBR%=0:CLS:PRINT SPC(32);"DISK MECHANIC";SPC(33);COMP$:PRINT"":PRINT SPC(32);"Version  ";VR$:PRINT"     Copyright 1983, 1984 by Software Tailors, Inc. & MLI Microsystems, Inc.":RETURN
  32. 270  PRINT"":PRINT"":PRINT"":PRINTSPC(30);"Main Menu Options":PRINT"":PRINTSPC(5);"F1: Track and Sector Tools":PRINTSPC(5);"F2: File Tools":PRINTSPC(5);"F3: Backup, Copy, Analyze and Format Tools
  33. 320  PRINTSPC(5);"F4: Exit to DOS":PRINTSPC(5);"F5: Exit to BASIC
  34. 350  KEY1,"SECTOR":KEY2,"FILE  ":KEY3,"BACKUP":KEY4,"DOS  ":KEY5,"BASIC ":KEY6,"":ONKEY(1)GOSUB11580:ONKEY(2)GOSUB11590:ONKEY(3)GOSUB11600:ONKEY(4)GOSUB11610:ONKEY(5)GOSUB11620:ONKEY(10)GOSUB11640
  35. 355  IFCM$="C"ORCM$="c"THENKEY7,"COLOR ":ONKEY(7)GOSUB16000:KEY8,"B&W   ":ONKEY(8)GOSUB16100:KEY(7)ON:KEY(8)ON
  36. 360  KEY(1)ON:KEY(2)ON:KEY(3)ON:KEY(4)ON:KEY(5)ON:KEY(10)ON:ONKEY(9)GOSUB11660:KEY(9)ON:KEYON:GOSUB11650:PRINTSPC(15);"   To return to this menu, use the F10 key.
  37. 380  KY$=INKEY$:GOTO 380
  38. 390  IFJP%=4GOTO460
  39. 420  IFJP%=5GOTO470
  40. 430  IFJP%=2THENPZ%=1:GOTO3310
  41. 440  IFJP%=1THENPZ%=1:GOTO6680
  42. 450  IFJP%=3GOTO520
  43. 460  PRINT"Insert a disk containing DOS in drive A.
  44. 470  PRINT"Press the space bar to exit.":PRINT"Use the F10 key to return to DISK MECHANIC without exiting.
  45. 490  IFINKEY$=""GOTO490
  46. 500  POKE49,7:UU%=USR(UU%):IFJP%=5THENKEYOFF:END
  47. 510  SYSTEM
  48. 520  KEYOFF:FORTR%=0TO81:DA%(TR%)=0:NEXTTR%
  49. 540  CLS:ONERRORGOTO11560:POKE&HF1,0
  50. 550  GOSUB220:KEYOFF:FORI%=1TO8:KEYI%,"":KEY(I%)OFF:NEXTI%:KEY1,"AUTO  ":KEY2,"ANALYZ":KEY3,"POKE  ":KEY4,"FTABLE":KEY5,"INTTRK":KEY6,"FORMAT":KEY7,"BACKDM":KEY8,"COPYTK":ONKEY(10)GOSUB10670:ONKEY(1)GOSUB11700:ONKEY(2)GOSUB11710
  51. 570  ONKEY(8)GOSUB11770:ONKEY(11)GOSUB20000:KEY(11)ON:ONKEY(3)GOSUB11720:ONKEY(4)GOSUB11730:ONKEY(5)GOSUB11740:ONKEY(6)GOSUB11750:ONKEY(7)GOSUB11760:KEY(10)ON:FORI%=1TO8:KEY(I%)ON:NEXTI%:KEY(9)ON:GOSUB11650:KEYON
  52. 590  PRINT"":PRINT"":PRINT"":PRINTSPC(19);"3. Backup, Copy, Analyze and Format Tools":PRINT"":PRINTSPC(5);"F1: AUTOMATIC DISK BACKUP: Analyze, Format, Copy and Verify":PRINTSPC(5);"F2: Analyze Disk Format Structure
  53. 620  PRINTSPC(5);"F3: Peek/Poke @ Location ";:GOSUB13610:PRINTSPC(5);"F4: Examine or modify diskette Format Table":PRINTSPC(5);"F5: Examine Intertrack Sector Timing":PRINTSPC(5);"F6: Format Diskette using the Format Table
  54. 660  PRINTSPC(5);"F7: Backup Disk Mechanic":PRINTSPC(5);"F8: Copy Diskette Data by Tracks (after Analyze and Format)":PRINT"":BO%=0
  55. 700  KY$=INKEY$:GOTO 700
  56. 710  KEY(11)OFF:ONKEY(10)GOSUB11780:LOCATE9+N3%,1:PRINT"*";:LOCATE19,1:TIM%=0:IFN3%=7GOTO2490
  57. 760  IFN3%=8GOTO2220
  58. 770  IFN3%=4GOTO1400
  59. 780  IFN3%=3THEND%=8:C%=4:GOSUB2860:LOCATE12,1:PRINT" ";:LOCATE18,1,1:GOTO700
  60. 790  IFN3%=6GOTO2050
  61. 800  IFN3%=5GOTO2540
  62. 810  IFN3%=2THENTT$="Y":PRINT"Include sector timing & RPM <Y>es or <N>o? ";TT$;" ";:GOSUB12430:IFKB$="y"ORKB$="Y"ORKB$=""THENTIM%=1
  63. 820  GOSUB10680:GOSUB10750:GOSUB10810:GOSUB10870:GOSUB13370:SF%=0:ML%=5:IFTIM%=1THENML%=8:GOTO890
  64. 890  LP1%=PEEK(&HED):LP2%=PEEK(&HEE):POKE &HED,4:POKE &HEE,0:FS%=LFE%+256*ST%:ERM%=0:SIDE%=HD%:FOR TR%=ST%TO ET%:EE%=ET%:ES%=ST%:ST%=TR%:ET%=ST%:SS%=1:PRINT"":LOCATE 23,1:PRINT SPC(30);:LOCATE 23,1:PRINT"Analyzing track";TR%;", side";HD%
  65. 940  IFLPT%=1THENLPRINT"Analyzing track";TR%;", side";HD%
  66. 950  POKE49,1:POKE50,0:GOSUB10930:ST%=ES%:ET%=EE%:LA%=ET%:DA%(TR%)=1:OS%=3:GOSUB12530:IFTIM%=1THENGOSUB1890
  67. 1020  NS%=PEEK(FS%):SZ%=PEEK(FS%+1):IFNS%<>N89%ORSZ%<>2THENDA%(TR%)=2
  68. 1030  SF%=SF%+NS%:IFNS%=0ANDLPT%=1THENLPRINT"Track #";TR%;" is not formatted.
  69. 1040  IFPEEK(&HDD)<>0THENGAP%=PEEK(FS%+181):IFGAP%<>0THENPRINT"Format gap length is ";HEX$(GAP%);" (hex).":IFLPT%=1THENLPRINT"Format gap length is ";HEX$(GAP%);" (hex).
  70. 1050  IFNS%=0THENDA%(TR%)=DA%(TR%)+1:GOSUB18000:PRINT"Track # ";TR%;" is not formatted.":GOTO1310
  71. 1060  IFNS%>36ANDLPT%=1THENLPRINT"Track #";TR%;" has";NS%;" sectors. Data for the first 36 sectors are shown.
  72. 1070  IFNS%>36THENPRINT"Track # ";TR%;" has ";NS%;" sectors. Data for the first 36 sectors are shown.":NS%=48
  73. 1080  IFNS%<>N89%THENGOSUB18000:PRINT"Track # ";TR%;" has ";NS%;" sectors, not";N89%:DA%(TR%)=DA%(TR%)+1:IFLPT%=1THENLPRINT"Track #";TR%;" has";NS%;" sectors, not";N89%
  74. 1085  IFNS%<>N89%AND(NS%=8ORNS%=9)THENN89%=NS%
  75. 1090  IFSZ%<>2THENGOSUB18000:PRINT"Sector size on track ";TR%;" is ";SZ%;" not 2 (2 implies 512 bytes/sector).":DA%(TR%)=DA%(TR%)+1:IFLPT%=1THENLPRINT"Sector size on track";TR%;" is";SZ%;", not 2.
  76. 1100  WRG%=0:WRH%=0:ERK%=0:FORSC%=1TONS%:BE%=PEEK(FS%+OS%-1):BD%=INT(BE%/64):IFBD%=1ORBD%=3THENWRG%=1:GOSUB18000:PRINT"CRC Error in track ";TR%;", sector ";SC%:IFLPT%=1THENLPRINT"CRC Error in track ";TR%;", sector ";SC%
  77. 1140  IFBD%=2ORBD%=3THENGOSUB18000:PRINT"Deleted data address mark used in track ";TR%;", sector ";SC%:IFLPT%=1THENLPRINT"Deleted data address mark used in track";TR%;", sector";SC%
  78. 1150  C%=PEEK(FS%+OS%):IFC%<>TR%THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1
  79. 1160  H%=PEEK(FS%+OS%+1):IFH%<>HD%THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1
  80. 1170  R%=PEEK(FS%+OS%+2):IFR%<>SC%THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1
  81. 1180  N%=PEEK(FS%+OS%+3):IFN%<>2THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1
  82. 1190  IFN%<>SZ%THENWRH%=1
  83. 1200  OS%=OS%+5:NEXT SC%:IF (ERK%=0 AND NS%=N89%) GOTO 1290
  84. 1230  OS%=3:GOSUB18000:FORSC%=1TONS%:C%=PEEK(FS%+OS%):H%=PEEK(FS%+OS%+1):R%=PEEK(FS%+OS%+2):N%=PEEK(FS%+OS%+3):OS%=OS%+5
  85. 1260  PRINT"Non-standard format: track,head,sector,size are (IBM standard)  [as marked]":PRINT" (";TR%;",";HD%;",";SC%;",2)   [";C%;",";H%;",";R%;",";N%;"]
  86. 1270  IFLPT%=1THENLPRINT"Non-standard format:  (";TR%;",";HD%;",";SC%;",";"2)    [";C%;",";H%;",";R%;",";N%;"]
  87. 1280  NEXTSC%
  88. 1290  IFWRH%=1THENPRINT"WARNING: MORE THAN ONE SECTOR SIZE MEANS THAT FORMAT CODE N IS PROBABLY WRONG!":IFLPT%=1THENLPRINT"WARNING: MORE THAN ONE SECTOR SIZE MEANS THAT FORMAT CODE N IS PROBABLY WRONG!
  89. 1310  IFDA%(TR%)>1THENERM%=ERM%+1
  90. 1320  FS%=FS%+256:NEXTTR%:POKE&HED,LP1%:POKE&HEE,LP2%:IFERM%=0THENPRINT"All tracks analyzed have IBM standard format.":IFLPT%=1THENLPRINT"All tracks analyzed have IBM standard format.
  91. 1350  IFBO%>0THENST%=0:DR%=1:POKE49,2:PRINT"Formatting destination diskette, side";HD%:GOSUB10930:SD%=0:DR%=1:GOTO2330
  92. 1360  IFSBR%=1THENRETURN
  93. 1370  BEEP:PRINT"Press any key to continue.
  94. 1380  IFINKEY$=""GOTO1380
  95. 1390  GOTO540
  96. 1400  TR%=ST%-1
  97. 1410  TR%=TR%+1:PRINT"":PRINT"Modify format table for which track (type Q to quit)";TR%;" ";:GOSUB12430:TR$=KB$:IFTR$="Q"ORTR$="q"GOTO540
  98. 1430  IFLEN(TR$)<>0THENTR%=VAL(TR$)
  99. 1440  FS%=LFE%+256*TR%:GOSUB12530:NS%=PEEK(FS%):LN%=PEEK(FS%+1):IFNS%<>0THENPRINT"Track ";TR%;" contains ";NS%;" sectors of length code ";LN%:GOTO1470
  100. 1460  PRINT"Track ";TR%;" is not formatted.
  101. 1470  PRINT"What length code do you want for this track? NOTE: Code=1 means 256 bytes/sec,   Code=2 means 512 bytes/sec (IBM standard), etc. ";:PRINTLN%;" ";:GOSUB12430:LN$=KB$:IFLEN(LN$)<>0THENLN%=VAL(LN$)
  102. 1490  IFLN%>6GOTO1550
  103. 1500  PRINT"How many sectors do you want on this track ";:PRINTNS%;" ";:GOSUB12430:NS$=KB$:IFLEN(NS$)<>0THENNS%=VAL(NS$)
  104. 1520  IFNS%<37GOTO1560
  105. 1550  BEEP:PRINT"Too many bytes. Please retype.":GOTO1470
  106. 1560  POKEFS%,NS%:POKEFS%+1,LN%
  107. 1570  YN$="N":PRINT"Do you want to clear out any CRC errors on this track ";YN$;" ";:GOSUB12430:IFKB$=""ORKB$="N"ORKB$="n"GOTO1600
  108. 1580  IFKB$<>"y"ANDKB$<>"Y"THENBEEP:GOTO1570
  109. 1590  FORINS%=1TONS%:POKEFS%+5*INS%-3,0:NEXTINS%
  110. 1600  SN%=0
  111. 1610  KEY1,"":KEY2,"":KEY3,"":KEY4,"":KEY5,"":KEY6,"":KEY7,"":KEY8,"":SN%=SN%+1:IFSN%<=NS%THENPRINT"Which (physical) sector is to be modified (Type 0 if done) ";:PRINTSN%;" ";:GOSUB12430:SN$=KB$:GOTO1630
  112. 1620  GOTO1410
  113. 1630  IFLEN(SN$)<>0THENSN%=VAL(SN$)
  114. 1640  IFSN%=0GOTO1410
  115. 1650  IFSN%<1ORSN%>NS%GOTO1610
  116. 1660  K%=5*(SN%-1):MS%=PEEK(FS%+K%+2):MC%=PEEK(FS%+3+K%):MH%=PEEK(FS%+4+K%):MR%=PEEK(FS%+5+K%):MN%=PEEK(FS%+6+K%):MQ%=MS%AND&HF0:MHI%=(MQ%AND&HC0)/64:MLO%=(MQ%AND&H30)/16:IFMHI%=0ORMHI%=2THENMLO%=0
  117. 1665  MS%=4*MLO%+MHI%
  118. 1670  PRINT"F1: Display track format table          F2: Edit this sector":PRINT"F3: Insert a sector BEFORE this sector  F4: Remove this sector":PRINT"":PRINT"Current marks for sector";SN%;" are (D,C,H,R,N)  (";MS%;",";MC%;",";MH%;",";MR%;",";MN%;")
  119. 1672  KEY1,"Disply":KEY2,"Edit  ":KEY3,"Insert":KEY4,"Remove":ONKEY(1)GOSUB1676:ONKEY(2)GOSUB1677:ONKEY(3)GOSUB1678:ONKEY(4)GOSUB1679:KEY(1)ON:KEY(2)ON:KEY(3)ON:KEY(4)ON
  120. 1674  KY$=INKEY$:GOTO 1674
  121. 1676  FK%=1:RETURN1681
  122. 1677  FK%=2:RETURN1681
  123. 1678  FK%=3:RETURN1681
  124. 1679  FK%=4:RETURN1681
  125. 1681  FORI%=1TO4:KEY(I%)OFF:IFI%<>FK%THENKEYI%,"
  126. 1682  NEXT:ONFK%GOTO1684,1698,1690,1694
  127. 1684  PRINT"Format Table for Track ";TR%;" (containing ";NS%;" size N=";LN%;" sectors)":IFLPT%=1THENLPRINT"FORMAT TABLE FOR TRACK ";TR%;" (containing ";NS%;" size N=";LN%;" sectors)
  128. 1685  PRINT"":PRINT" #    D   C   H   R   N":IFLPT%=1THENLPRINT"":LPRINT"   D   C   H   R   N
  129. 1686  FORINS%=1TONS%:PRINTUSING"##";INS%;:PRINT" ";:FORJNS%=1TO5:KNS%=FS%+5*INS%+JNS%-4:LNS%=PEEK(KNS%):IFJNS%=1THENLNS%=LNS%AND&HF0:LHI%=(LNS%AND&HC0)/64:LLO%=(LNS%AND&H30)/16:LNS%=4*LLO%+LHI%:IFLHI%=0ORLHI%=2THENLNS%=LHI%
  130. 1687  PRINTUSING"####";LNS%;:IFLPT%=1THENLPRINTUSING"####";LNS%;
  131. 1688  NEXT:PRINT"":IFLPT%=1THENLPRINT"
  132. 1689  NEXT:PRINT"":SN%=SN%-1:GOTO1610
  133. 1690  FORINS%=NS%TOSN%STEP-1:FORJNS%=1TO5:KNS%=FS%+5*INS%+JNS%-4:LNS%=PEEK(KNS%):IFJNS%=1THENLNS%=LNS%AND&HF0:LNS%=LNS%OR(INS%+1)
  134. 1692  POKEKNS%+5,LNS%:NEXT:NEXT:NS%=NS%+1:POKEFS%,NS%:KNS%=FS%+5*SN%-4:FORJNS%=1TO5:POKEKNS%+JNS%,0:NEXT:MS%=0:MC%=0:MH%=0:MR%=0:MN%=0:GOTO1698
  135. 1694  FORINS%=SN%TONS%:FORJNS%=1TO5:KNS%=FS%+5*INS%+JNS%-4:LNS%=PEEK(KNS%+5):IFJNS%=1THENLNS%=LNS%AND&HF0:LNS%=LNS%ORINS%
  136. 1695  POKEKNS%,LNS%:NEXT:NEXT:NS%=NS%-1:POKEFS%,NS%:PRINT"Sector";SN%;" has been deleted":SN%=SN%-1:GOTO1610
  137. 1698  PRINT"Type the new marks in the same format (or press ENTER) ";:GOSUB12430:MS$=KB$:IFLEN(MS$)=0GOTO1610
  138. 1700  JC%=LEN(MS$):IC%=INSTR(MS$,","):IFIC%<2GOTO1860
  139. 1720  MC$=RIGHT$(MS$,JC%-IC%):MS$=LEFT$(MS$,IC%-1):MS%=VAL(MS$):JC%=LEN(MC$):IC%=INSTR(MC$,","):IFIC%<2GOTO1860
  140. 1740  MH$=RIGHT$(MC$,JC%-IC%):MC$=LEFT$(MC$,IC%-1):MC%=VAL(MC$):JC%=LEN(MH$):IC%=INSTR(MH$,","):IFIC%<2GOTO1860
  141. 1770  MR$=RIGHT$(MH$,JC%-IC%):MH$=LEFT$(MH$,IC%-1):MH%=VAL(MH$):JC%=LEN(MR$):IC%=INSTR(MR$,","):IFIC%<2GOTO1860
  142. 1790  MN$=RIGHT$(MR$,JC%-IC%):MR$=LEFT$(MR$,IC%-1):MR%=VAL(MR$):MN%=VAL(MN$):IFMS%>15ORMS%<0GOTO1860
  143. 1810  IFMC%<0ORMC%>255GOTO1860
  144. 1820  IFMH%<0ORMH%>255GOTO1860
  145. 1830  IFMR%<0ORMR%>255GOTO1860
  146. 1840  IFMN%<0ORMN%>255GOTO1860
  147. 1850  GOTO1865
  148. 1860  BEEP:PRINT"Bad entry! Please retry.":GOTO1660
  149. 1865  MLO%=16*INT(MS%/4):MHI%=64*(MS%AND3):MS%=(MHI%+MLO%)ORSN%:POKEFS%+K%+2,MS%:POKEFS%+3+K%,MC%:POKEFS%+4+K%,MH%:POKEFS%+K%+5,MR%:POKEFS%+K%+6,MN%:GOTO1610
  150. 1890  FG%=TMS%:FH%=CHR%:NS%=PEEK(FS%):IFNS%=0ORNS%>36GOTO1920
  151. 1910  GOTO1940
  152. 1920  PRINT"Timing data cannot be found. ";:RETURN
  153. 1940  ST=0:FORI%=1TONS%:T1%=PEEK(FG%+2*I%-2):T2%=PEEK(FG%+2*I%-1):T=256*T2%+T1%:ST=ST+T:TM(I%)=T:NEXTI%:FORI%=1TONS%
  154. 2000  IFLPT%=1THENLPRINT"Sector";:LPRINTUSING"###";I%;:LPRINT" uses ";:LPRINTUSING"###.#";100*TM(I%)/ST;:LPRINT" percent of the track.
  155. 2010  PRINT"Sector ";:PRINT USING"###";I%;:PRINT" uses ";:PRINT USING"###.#";100*TM(I%)/ST;:PRINT" percent of the track.":NEXT I%:PRINT"":PRINT"Diskette speed is ";:PRINT USING"###.#";0.02264*ST;:PRINT" RPM.":PRINT""
  156. 2020  IF LPT%=1 THEN LPRINT"":LPRINT"Diskette speed is ";:LPRINT USING"###.#";0.02264*ST;:LPRINT" RPM.":LPRINT""
  157. 2030  RETURN
  158. 2050  DRI$="B
  159. 2070  PRINT"<R>egular or <A>borted Formatting? ";RA$;" ";:GOSUB12430:IFKB$=""THENKB$=RA$
  160. 2090  IFKB$="A"ORKB$="a"GOTO13620
  161. 2100  IFKB$<>"R"ANDKB$<>"r"THENPRINT"Redo!":GOTO2070
  162. 2110  GOSUB10680:GOSUB10750:GOSUB10810:GOSUB10870:GOSUB13790:GOSUB12200
  163. 2170  IFFS$="S"THENGOSUB10970
  164. 2180  POKE49,2:GOSUB10930
  165. 2200  IF(PEEK(68)AND2)=2THENPRINT"Write Protected!!!":GOTO2640
  166. 2210  PRINT"":PRINT"DONE.":PRINT"":GOTO2640
  167. 2220  REM
  168. 2230  PRINT"":PRINT"SOURCE ";:GOSUB13420:IFKB$<>"N"ANDKB$<>"n"GOTO2260
  169. 2240  IFSPR%=0GOTO2260
  170. 2250  POKE49,13:POKE50,0:POKE51,0:POKE52,48:POKE53,0:POKE54,0:POKE55,0:POKE56,0:UU%=USR(UU%)
  171. 2260  SD%=DR%:GOSUB12200:PRINT"DESTINATION ";:GOSUB10680:IFSD%=DR%ANDPEEK(&HF2)=0GOTO2230
  172. 2270  GOSUB10750:GOSUB10810:GOSUB10870:GOSUB13370:GOSUB12200:BO%=0
  173. 2330  Z1%=ST%:Z2%=ET%:TR%=ST%:FS%=LFE%+256*ST%:GOSUB12530:SF%=0:FORI%=Z1%TOZ2%:ST%=I%:ET%=I%:NS%=PEEK(FS%):IFNS%=0GOTO2360
  174. 2350  PRINT"Copying track";I%;" side";HD%:POKE49,3:GOSUB10930
  175. 2360  ST%=Z1%:ET%=Z2%:IF(PEEK(68)AND2)=2GOTO2200
  176. 2380  TR%=I%:SF%=SF%+NS%:IFNS%=0THENPRINT"Track ";TR%;" not formatted!":GOTO2450
  177. 2400  FORSC%=1TONS%:Q%=5*(SC%-1)+2:BD%=PEEK(FS%+Q%):BD%=BD%/64:IFBD%=1ORBD%=3THENPRINT"CRC error in track ";TR%;", sector ";SC%
  178. 2440  NEXTSC%
  179. 2450  FS%=FS%+256:GOSUB12530:NEXTI%:IFBO%>0THENC%=2:V1%=0:V2%=HD%:V3%=0:V4%=1:DR%=1:ST%=0:S0%=1:GOTO8030
  180. 2480  GOTO2640
  181. 2490  IFMDTR%<>1THENPRINT"You cannot back up a sterile daughter diskette!!":GOTO1370
  182. 2492  PRINT"SOURCE ";:GOSUB 10680:SD%=DR%:GOSUB 12200:PRINT"DESTINATION ";:GOSUB 10680:GOSUB 12200:GOTO 2510
  183. 2500  PRINT"Insert the Disk Mechanic Master Disk (WRITE PROTECTED!) and press the S key.":PRINT"
  184. 2502  A$=INKEY$:IFA$<>"S"ANDA$<>"s"GOTO2502
  185. 2503  RETURN
  186. 2505  BEEP:PRINT"":PRINT"":PRINT"Insert the destination disk and press the D key when ready.
  187. 2506  A$=INKEY$:IFA$<>"d"ANDA$<>"D"GOTO2506
  188. 2507  RETURN
  189. 2510  BL%=SD%:DL%=DR%:ST%=0:ET%=39:SBR%=1:GH%=0:NS%=1:VF$="N":DMC%=1:SDX%=SD%:DRX%=DR%:GOSUB13045:SBR%=0:DMC%=0:POKE51,1:POKE53,SDX%:POKE57,DRX%:POKE55,0:POKE49,17:IFSDX%<>DRX%GOTO2515
  190. 2514  GOSUB2500:UU%=USR(UU%):GOSUB2505:POKE53,SDX%
  191. 2515  POKE 55,1:UU%=USR(UU%):PRINT"":PRINT"":GOTO 1370
  192. 2540  GOSUB 10680:GOSUB 10750:GOSUB 10810:GOSUB 11190:GOSUB 10870:POKE 49,14:POKE 50,0:POKE 53,S0%:POKE 54,S0%:POKE 55,ET%:POKE 56,ST%:POKE 57,DR%:POKE 58,HD%:POKE &HF2,0:POKE &H3D,0:DEF SEG=SE%:DEF USR=UR%:UU%=USR(UU%)
  193. 2550  IFPEEK(&H44)=1ANDPEEK(&H45)=0THENPRINT"Destination Track is Unformatted":GOTO2640
  194. 2580  PRINT"First sector seen on end track is marked (C,H,R,N): ";:PRINTPEEK(&H46);",";PEEK(&H47);",";PEEK(&H48);",";PEEK(&H49):FS%=LFE%+256*ST%+5*S0%-3:RE%=0:GOSUB12530
  195. 2600  GS%=PEEK(FS%):HS%=GS%/64:IFHS%=1ORHS%=3THENPRINT"CRC error in starting sector. ":RE%=1
  196. 2610  IFRE%=1GOTO2640
  197. 2620  RE=(256*PEEK(54)+PEEK(53))/131:PRINT"":PRINT"Gap between sectors is ";:PRINTUSING"###.#";RE;:PRINT" percent of the track.
  198. 2640  BEEP:PRINT"":PRINT"Press any key to continue.
  199. 2650  IFINKEY$=""GOTO2650
  200. 2660  POKE&HFB,0:POKE&HFC,0:POKE&HFD,0:GOTO540
  201. 2860  K%=31
  202. 2870  LOCATE8+C%,K%,1:C$(1)=INKEY$:IFC$(1)=""GOTO2870
  203. 2880  I%=1:GOSUB3170:IFER%<>0GOTO2870
  204. 2890  PRINTC$(1);
  205. 2900  LOCATE8+C%,K%+1,1:C$(2)=INKEY$:IFC$(2)=""GOTO2900
  206. 2910  I%=2:GOSUB3170:IFER%=1GOTO2900
  207. 2920  IFER%=2GOTO2870
  208. 2930  PRINTC$(2);
  209. 2940  LOCATE8+C%,K%+3,1:C$(3)=INKEY$:IFC$(3)=""GOTO2940
  210. 2950  I%=3:GOSUB3170:IFER%=1GOTO2940
  211. 2960  IFER%=2GOTO2900
  212. 2970  PRINTC$(3)
  213. 2980  LOCATE8+C%,K%+4,1:C$(4)=INKEY$:IFC$(4)=""GOTO2980
  214. 2990  I%=4:GOSUB3170:IFER%=1GOTO2980
  215. 3000  IFER%=2GOTO2940
  216. 3010  PRINTC$(4);
  217. 3020  C$(5)=INKEY$:IFC$(5)=""GOTO3020
  218. 3030  IFASC(C$(5))=8GOTO2980
  219. 3040  ADR=C%(4)+16*(C%(3)+16*(C%(2)+16*C%(1))):C1%=PEEK(ADR):C8%=INT(C1%/16):C9%=C1%-16*C8%:LOCATE8+C%,61:PRINTLT$(C8%);LT$(C9%):GOTO3060
  220. 3060  K%=61:LOCATE8+C%,K%,1:C$(1)=INKEY$:IFC$(1)=""GOTO3060
  221. 3070  I%=1:GOSUB3170:IFER%<>0GOTO3060
  222. 3080  PRINTC$(1);:IFC%<2GOTO3130
  223. 3090  LOCATE8+C%,K%+1,1:C$(2)=INKEY$:IFC$(2)=""GOTO3090
  224. 3100  I%=2:GOSUB3170:IFER%=1GOTO3090
  225. 3110  IFER%=2GOTO3060
  226. 3120  PRINTC$(2);
  227. 3130  ER%=0:C$(5)=INKEY$:IFC$(5)=""GOTO3130
  228. 3140  IFASC(C$(5))=8ANDC%<2GOTO3060
  229. 3150  IFASC(C$(5))=8GOTO3090
  230. 3160  POKEADR,16*C%(1)+C%(2):RETURN
  231. 3170  ER%=0:FORJ%=0TO15:IFLT$(J%)=C$(I%)THENC%(I%)=J%:RETURN
  232. 3190  NEXTJ%:ER%=1:IFASC(C$(I%))=8THENER%=2
  233. 3210  RETURN
  234. 3310  KEYOFF:FORKY%=1TO8:KEYKY%,"":KEY(KY%)OFF:NEXTKY%:GOSUB11650:KEYON:ONERRORGOTO12100
  235. 3330  CLS:KEYOFF:GOSUB220:KEY1,"DSKDIR":KEY2,"ALLOCT":KEY3,"COMFAT":KEY4,"DISPLY":KEY5,"ZERO  ":KEY6,"UNKILL":KEY7,"HIDDEN":KEY8,"SEARCH":GOSUB11650
  236. 3350  ONKEY(1)GOSUB11960:ONKEY(2)GOSUB11970:ONKEY(3)GOSUB11980:ONKEY(4)GOSUB11990:ONKEY(5)GOSUB12000:ONKEY(6)GOSUB12010:ONKEY(7)GOSUB12020:ONKEY(8)GOSUB12030:ONKEY(10)GOSUB10670:FORI%=1TO8:KEY(I%)OFF:NEXTI%
  237. 3370  PRINT"":PRINT"":PRINTSPC(32);"2. File Tools":PRINT"":PRINTSPC(5);"F1: Disk directory ":PRINTSPC(5);"F2: Disk or file allocation":PRINTSPC(5);"F3: Compare file allocation tables":PRINTSPC(5);"F4: Display or alter files
  238. 3420  PRINTSPC(5);"F5: Zero unallocated sectors":PRINTSPC(5);"F6: Kill or resuscitate (unkill) file":PRINTSPC(5);"F7: Change `hidden` status":PRINTSPC(5);"F8: Search for file data
  239. 3460  LOCATE18,1:IFPZ%=1THENGOSUB10680:PRINT"Reading directory on drive ";LT$(DR%+10);". Please wait one minute!":GOSUB3870:PZ%=0:BEEP
  240. 3470  FORI%=18TO22:LOCATEI%,1:PRINTSPACE$(80);:NEXTI%:LOCATE23,1:PRINTSPACE$(60);:LOCATE18,1:FORI%=1TO8:KEY(I%)ON:NEXTI%:KEYON
  241. 3490  KY$=INKEY$:GOTO 3490
  242. 3500  LOCATE8+C%,1:PRINT"*";:LOCATE18,1:ONKEY(10)GOSUB12040:GOSUB12090:DRI$="A":IFC%=1GOTO3700
  243. 3560  IFC%=3GOTO4420
  244. 3570  IFC%=4GOTO8920
  245. 3580  IFC%=5GOTO4540
  246. 3590  IFC%=7GOTO9540
  247. 3600  IFC%=8GOTO9380
  248. 3610  IFC%=2THENKEY1,"FILE":KEY2,"DISK":ONKEY(1)GOSUB12050:ONKEY(2)GOSUB12060
  249. 3620  IFC%=6THENKEY1,"KILL":KEY2,"UNKILL":ONKEY(1)GOSUB12070:ONKEY(2)GOSUB12080
  250. 3630  GOSUB11650:KEY(1)ON:KEY(2)ON
  251. 3640  KY$=INKEY$:GOTO 3640
  252. 3650  IFCC%=1THENJZ%=0:GOTO4740
  253. 3670  IFCC%=2THENPRINT"Constructing disk allocation map. Please be patient.":GOTO5060
  254. 3680  IFCC%=3GOTO9650
  255. 3690  IFCC%=4GOTO9880
  256. 3700  IC%=0:CLS:FORI%=0TOZ2%:N5%=ASC(LEFT$(DR$(I%),1)):IFN5%<33ORN5%>90GOTO3820
  257. 3730  PRINTLEFT$(DR$(I%),8);".";RIGHT$(DR$(I%),3);:IFLPT%=1THENLPRINTLEFT$(DR$(I%),8);".";RIGHT$(DR$(I%),3);
  258. 3740  PRINTUSING"#####";AT%(I%);:PRINT" ";:IFLPT%=1THENLPRINTUSING"#####";AT%(I%);:LPRINT" ";
  259. 3750  K=F1%(I%):IFK<0THENK=K+SQ
  260. 3760  L=F2%(I%):IFL<0THENL=L+SQ
  261. 3770  L%=INT(K/512):L=128*L+L%:IFK>512*L%THENL=L+1
  262. 3780  K%=L:L%=2*INT(K%/2):IFL%<>K%ANDDS%=0THENK%=K%+1
  263. 3790  PRINTUSING"###";K%;:PRINT"  ";:IFLPT%=1THENLPRINTUSING"###";K%;:LPRINT"  ";
  264. 3800  IC%=IC%+1:IFIC%=3THENIC%=0
  265. 3810  IFIC%=0ORPC%(17)=40THENPRINT"":IFLPT%=1THENLPRINT"
  266. 3820  NEXTI%
  267. 3830  PRINT"":IFLPT%=1THENLPRINT"
  268. 3840  BEEP:PRINT"Press any key to continue.
  269. 3850  IFINKEY$=""GOTO3850
  270. 3860  GOTO3330
  271. 3870  POKE&H2D0E,N89%:SD%=0:POKE50,0:ST%=0:ET%=39:HD%=0:SS%=1:ES%=N89%:GOSUB10970:POKE49,4:ET%=0:GOSUB10930:POKE&HFE,0:POKE&HFF,2*N89%:FS%=RST%:I%=0:TL$="           ":D2%=PEEK(FS%+512):DS%=1:IFD2%=255ORD2%=253THENDS%=2
  272. 3930  N98%=8:IFD2%=253ORD2%=252THENN98%=9
  273. 3940  IFN98%<>N89%THENN89%=N98%:GOTO3870
  274. 3950  PRINT"Diskette has";N89%;" sectors per track.":GOSUB4370:FS%=FS%+FAT2%:Z1%=0:Z2%=N64%-1
  275. 3970  FORI%=Z1%TOZ2%:J%=PEEK(FS%):IFJ%=229ORJ%=0THENDR$(I%)=CHR$(13):GOTO4160
  276. 3990  FORJ%=0TO10:K%=PEEK(FS%+J%):MID$(TL$,J%+1,1)=CHR$(K%):IFK%>127THENMID$(TL$,J%+1,1)=" 
  277. 4020  NEXTJ%:DR$(I%)=TL$:AT%(I%)=PEEK(FS%+11):S1%=PEEK(FS%+26):S2%=PEEK(FS%+27):S=256*S2%+S1%:IFS<=32767THENS%=S:GOTO4080
  278. 4070  S%=S-SQ
  279. 4080  SC%(I%)=S%:S1%=PEEK(FS%+28):S2%=PEEK(FS%+29):S3%=PEEK(FS%+30):S4%=PEEK(FS%+31):S=256*S2%+S1%:IFS<=32767THENS%=S:GOTO4120
  280. 4110  S%=S-SQ
  281. 4120  F1%(I%)=S%:S=256*S4%+S3%:IFS<=32767THENS%=S:GOTO4150
  282. 4140  S%=SQ-S
  283. 4150  F2%(I%)=S%
  284. 4160  FS%=FS%+32:NEXTI%:IFDS%<=1GOTO4220
  285. 4190  PRINT"Diskette is two-sided. Directory will be checked on both sides.":DS%=0:ET%=0:ST%=0:HD%=1:GOSUB10970:POKE49,4:GOSUB10930:Z1%=N64%:Z2%=111:FS%=RST%:GOTO3970
  286. 4220  IFDS%<>0GOTO4240
  287. 4230  ET%=0:ST%=0:HD%=0:GOSUB10970:POKE49,4:GOSUB10930
  288. 4240  FS%=RST%+512:G%=1:H%=0:FORI%=2TOCM%:G%=G%+1:IFH%=0THENG%=G%+1
  289. 4270  K1%=PEEK(FS%+G%):K2%=PEEK(FS%+G%+1):IFH%=1THENFA%=INT(K1%/16):FA=16*K2%+FA%
  290. 4290  IFH%=0THENFA%=INT(K2%/16):FA%=K2%-16*FA%:FA=256*FA%+K1%
  291. 4300  IFH%=0THENHH%=1:GOTO4320
  292. 4310  HH%=0
  293. 4320  H%=HH%:FA%=FA:FA%(I%)=FA%:NEXTI%:RETURN
  294. 4370  FAT1%=512:FAT2%=1536:IFN89%=9THENFAT1%=1024:FAT2%=2560
  295. 4380  N64%=64:IFN89%=8AND(DS%=2ORDS%=0)THENN64%=80
  296. 4390  CM%=314:IFN89%=8AND(DS%=2ORDS%=0)THENCM%=316
  297. 4400  IFN89%=9THENCM%=352:IFDS%=2ORDS%=0THENCM%=355
  298. 4410  RETURN
  299. 4420  TR%=0:HD%=0:GOSUB6660:FS%=RST%+512:GS%=FS%+FAT1%:MS%=0:CFE%=FAT1%-1:FORCF%=0TOCFE%:IFPEEK(FS%)=PEEK(GS%)GOTO4500
  300. 4470  MS%=MS%+1:CX=CF%:MH$=HEX$(CX):PRINT"Discrepancy at byte ";MH$;:IFLPT%=1THENLPRINT"Discrepancy at byte ";MH$;
  301. 4480  CX=PEEK(FS%):MH$=HEX$(CX):PRINT",sector 2 byte=";MH$;:IFLPT%=1THENLPRINT",sector 2 byte=";MH$;
  302. 4490  CX=PEEK(GS%):MH$=HEX$(CX):PRINT",sector";N89%-5;" byte=";MH$:IFLPT%=1THENLPRINT",sector";N89%-5;" byte=";MH$
  303. 4500  FS%=FS%+1:GS%=GS%+1:NEXTCF%:IFMS%=0THENPRINT"Sector 2 and sector";N89%-5;" file allocation tables are identical.
  304. 4530  GOTO3830
  305. 4540  PRINT"ARE YOU SURE <Y/N>? This routine zeros out all unallocated sectors! ";:GOSUB12430:YN$=KB$:IFYN$="Y"ORYN$="y"GOTO4570
  306. 4560  GOTO3330
  307. 4570  NS%=1:IFDS%=0THENNS%=2
  308. 4580  NNS%=NS%:FORCF%=2TOCM%:IFFA%(CF%)<>0GOTO4710
  309. 4610  CU%=CF%:GOSUB10980
  310. 4620  ST%=TR%:ET%=TR%:S0%=SC%:GOSUB10970:TR%=ST%:SC%=S0%:GOSUB6660:ES%=4*(SC%-1):SS%=ES%+4*NS%:POKE49,8:POKE50,0:GOSUB10930:NBS4%=SC%+NS%-1:IFNBS4%=10THENNBS4%=9
  311. 4660  PRINT"Zeroing out sectors";SC%;" to";NBS4%;" on track";TR%;",side";HD%:POKE49,5:POKE51,SC%:POKE52,NBS4%:POKE55,TR%:POKE56,TR%:POKE57,DR%:POKE58,HD%:DEFSEG=SE%:DEFUSR=UR%:UU%=USR(UU%):IFDS%=0ANDSC%=9THENNS%=1:SC%=1:HD%=1:GOTO4620
  312. 4700  NS%=NNS%
  313. 4710  NEXTCF%:ST%=0:ET%=0:SS%=1:ES%=250:HD%=0:GOSUB10970:TR%=0:POKE49,4:GOSUB10930:GOTO3830
  314. 4740  LOCATE21,1:PRINT"Please type the file name in CAPS! ";:GOSUB12430:FI$=KB$
  315. 4750  DP%=INSTR(FI$,"."):IFDP%=0THENFI$=FI$+".   ":GOTO4750
  316. 4760  IFDP%<2GOTO4740
  317. 4770  TL$="           ":MID$(TL$,1,DP%-1)=FI$:MID$(TL$,9,3)=RIGHT$(FI$,3):FORI%=0TOZ2%:IFTL$=DR$(I%)GOTO4840
  318. 4820  NEXTI%:BEEP:PRINT"Can't find this file. Please retype.":GOTO4740
  319. 4840  CU%=SC%(I%):GOSUB10980:SL%=1:TL%=1:AD%=1:IFDS%=0THENAD%=2:TL%=AD%:SL%=AD%
  320. 4850  SG%=1:PRINT"File starts at track";TR%;", side";HD%;", sector";SC%:IFLPT%=1THENLPRINT"File starts at track";TR%;", side";HD%;", sector";SC%
  321. 4860  NC%=FA%(CU%):IFJZ%=1THENRETURN
  322. 4880  IFNC%=0ANDLPT%=1THENGOSUB10980:LPRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" not allocated.
  323. 4890  IFNC%=0THENGOSUB10980:PRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" not allocated.":GOTO5030
  324. 4900  IF(NC%>4079ANDNC%<4088ANDLPT%=1)THENGOSUB10980:LPRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" is reserved or bad.
  325. 4910  IFNC%>4079ANDNC%<4088THENGOSUB10980:PRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" is reserved or bad.":GOTO5030
  326. 4920  XA%=0:IFDS%=0ANDNC%>4087THENXA%=1
  327. 4930  IFNC%<4088GOTO4980
  328. 4940  GOSUB10980:IFXA%=1ANDN89%=9ANDSC%=9THENHD%=1:SC%=0
  329. 4960  IFLPT%=1THENLPRINT"End of file at track";TR%;",side";HD%;",sector";SC%+XA%;". File is";TL%;" sectors long.
  330. 4970  PRINT"End of file at track";TR%;",side";HD%;",sector";SC%+XA%;". File is";TL%;" sectors long.":GOTO5030
  331. 4980  IFNC%=CU%+1THENSL%=SL%+AD%:TL%=TL%+AD%:CU%=NC%:GOTO4860
  332. 4990  TL%=TL%+AD%:PRINT"Length of segment #";SG%;" is";SL%;" sectors.":IFLPT%=1THENLPRINT"Length of segment #";SG%;" is";SL%;" sectors.
  333. 5010  IFLPT%=1THENCU%=NC%:GOSUB10980:LPRINT"Next segment begins at track";TR%;", side";HD%;", sector";SC%
  334. 5020  CU%=NC%:GOSUB10980:PRINT"Next segment begins at track";TR%;",side";HD%;",sector";SC%:SG%=SG%+1:SL%=AD%:GOTO4860
  335. 5030  BEEP:PRINT"":PRINT"Press any key to continue.
  336. 5040  IFINKEY$=""GOTO5040
  337. 5050  GOTO3330
  338. 5060  FORI%=0TO85:FORJ%=0TO8:FORK%=0TO1:DT%(I%,J%,K%)=0:NEXTK%,J%,I%:LOCATE21,1:FORI%=0TOZ2%:IFASC(DR$(I%))=13GOTO5160
  339. 5100  CU%=SC%(I%):GOSUB10980
  340. 5110  DT%(TR%,SC%-1,HD%)=I%+1:NC%=FA%(CU%):IFNC%=0GOTO5160
  341. 5130  IFNC%>4087GOTO5160
  342. 5140  IFNC%>4079ANDNC%<4088THENDT%(TR%,SC%-1,HD%)=NC%:GOTO5160
  343. 5150  CU%=NC%:GOSUB10980:GOTO5110
  344. 5160  NEXTI%:BEEP:TP%=1:LL%=0:MM%=0:IFDS%=0THENMM%=1:TP%=2
  345. 5190  FORI%=0TO39:FORK%=0TOMM%:NBS6%=N89%-1:FORJ%=0TONBS6%STEPTP%:JQJ%=J%:IFK%=1ANDN89%=9THENJQJ%=JQJ%+1:IFJQJ%=9GOTO5340
  346. 5240  L%=DT%(I%,JQJ%,K%):IFL%=LL%GOTO5340
  347. 5260  PRINT"Track";I%;",side";K%;",sector";JQJ%+1;:IFLPT%=1THENLPRINT"Track";I%;",side";K%;",sector";JQJ%+1;
  348. 5270  IFDS%=0THENPRINT" to";JQJ%+2;:IFLPT%=1THENLPRINT" to";JQJ%+2;
  349. 5280  IFL%=0ANDLPT%=1THENLPRINT" is unallocated.
  350. 5290  IFL%=0THENPRINT" is unallocated.":GOTO5330
  351. 5300  IFL%>4079ANDL%<4088ANDLPT%=1THENLPRINT" is defective.
  352. 5310  IFL%>4079ANDL%<4088THENPRINT" is defective.":L%=2000:GOTO5330
  353. 5320  PRINT" belongs to ";DR$(L%-1):IFLPT%=1THENLPRINT" belongs to ";DR$(L%-1)
  354. 5330  LL%=L%
  355. 5340  NEXTJ%:NEXTK%:NEXTI%:GOTO5030
  356. 5380  GOSUB6670:SC%=1:GOSUB6590:GOSUB6190:GOSUB5920
  357. 5410  II%=3:JJ%=5:LOCATEII%,JJ%,1:LT%=3:LB%=18:LL%=5:LR%=74:IFPC%(17)=40THENLR%=38:IFLR%=38ANDHX%=1THENLR%=37
  358. 5430  FORTT%=1TO10:KEY(TT%)ON:NEXTTT%:KEY(6)OFF:KEY(8)OFF:KEYON
  359. 5440  A$=INKEY$:IFA$=""GOTO5440
  360. 5450  DEFSEG:POKE106,0:DEFSEG=SE%:A%=ASC(A$):AAA%=LEN(A$):IFAAA%=2THENA%=ASC(RIGHT$(A$,1))
  361. 5470  IFAAA%=2AND(A%<72ORA%>80)GOTO5440
  362. 5480  IFAAA%=1GOTO5640
  363. 5490  IFA%<>72GOTO5520
  364. 5500  II%=II%-1:IFII%<LT%THENII%=LT%
  365. 5510  LOCATEII%,JJ%,1:GOTO5430
  366. 5520  IFA%<>80GOTO5550
  367. 5530  II%=II%+1:IFII%>LB%THENII%=LB%
  368. 5540  GOTO5510
  369. 5550  IFA%<>75GOTO5580
  370. 5560  JJ%=JJ%-1:IFJJ%<LL%THENJJ%=LR%:GOTO5500
  371. 5570  GOTO5620
  372. 5580  IFA%<>77GOTO5640
  373. 5590  JJ%=JJ%+1:IFJJ%>LR%THENJJ%=LL%:GOTO5530
  374. 5600  IFLF%(JJ%)=0GOTO5590
  375. 5610  GOTO5510
  376. 5620  IFLF%(JJ%)=0GOTO5560
  377. 5630  GOTO5510
  378. 5640  LF%=LF%(JJ%):KK%=A%:FW%=0:IFLF%>16GOTO5730
  379. 5660  PRINTA$;:A%=77:TD%(16*(II%-3)+LF%-1)=KK%:M1%=INT(KK%/16):M2%=KK%-16*M1%:A1$=LT$(M1%):A2$=LT$(M2%):FORLK%=5TO52:IF(LF%(LK%)-16)=LF%GOTO5720
  380. 5700  NEXTLK%:GOTO5590
  381. 5720  LOCATEII%,LK%:PRINTA1$;A2$;:GOTO5590
  382. 5730  IFKK%<48GOTO5440
  383. 5740  IFKK%>57ANDKK%<65GOTO5440
  384. 5750  IFKK%>70THENKK%=KK%-32:GOTO5730
  385. 5760  KK%=KK%-48:IFKK%>9THENKK%=KK%-7
  386. 5770  IFKK%<0ORKK%>15GOTO5440
  387. 5780  PRINTLT$(KK%);:DG%=LF%-16:IFDG%>16THENDG%=DG%-16
  388. 5790  M1%=16*(II%-3)+DG%-1:IFTD%(M1%)=256THENTD%(M1%)=PEEK(RST%+512*(SC%-1)+256*HS%+M1%-SPR%*&H1800)
  389. 5800  TD%=TD%(M1%):M2%=INT(TD%/16):M3%=TD%-16*M2%:IFLF%<33THENM2%=KK%:GOTO5840
  390. 5830  M3%=KK%
  391. 5840  TD%=16*M2%+M3%:TD%(M1%)=TD%:FORLK%=57TO74:IFLF%(LK%)=DG%GOTO5890
  392. 5870  NEXTLK%:GOTO5910
  393. 5890  LOCATEII%,LK%,1:IFTD%<32ORTD%>126THENPRINTB$;:GOTO5910
  394. 5900  PRINTCHR$(TD%);
  395. 5910  A%=77:GOTO5590
  396. 5920  CLS:B$=".":GOSUB12360:LOCATE1,1:PRINT" Drive=";LT$(DR%+10);", track=";TR%;", side=";HD%;", sector=";SC1%;", section=";POR:IFLPT%=1THENLPRINT"Drive=";LT$(DR%+10);", track=";TR%;", sector=";SC1%;", section=";POR
  397. 5940  IFFW%=1GOTO5960
  398. 5950  CN%=256:FORCMC%=0TO255:TD%(CMC%)=CN%:NEXTCMC%
  399. 5960  FW%=1:POKE49,15:POKE50,0:POKE53,SPR%:POKE54,4*SC%+2*HS%-4:DEFSEG=SE%:DEFUSR=UR%:UU%=USR(UU%):LOCATE3,5:IFLPT%=0THENRETURN
  400. 5980  FS%=RST%+512*(SC%-1)+256*HS%-SPR%*&H1800:IC%=0:LPRINT"":FORI%=0TO15:LPRINT"   ";LT$(I%);":";:FORJ%=0TO15:K%=PEEK(FS%+J%):TD%(IC%+J%)=K%:M1%=INT(K%/16):M2%=K%-16*M1%:LPRINTLT$(M1%);LT$(M2%);:LPRINT" ";:IFJ%=7THENLPRINT"  ";
  401. 6060  NEXTJ%:LPRINT"   ";:FORJ%=0TO15:A$=B$:K%=PEEK(FS%+J%):IFK%<32ORK%>126GOTO6120
  402. 6110  A$=CHR$(K%)
  403. 6120  LPRINTA$;:IFJ%=7THENLPRINT"  ";
  404. 6140  NEXTJ%:LPRINT"":FS%=FS%+16:IC%=IC%+16:NEXTI%:RETURN
  405. 6190  FORLF%=1TO4:LF%(LF%)=0:NEXTLF%:FORLF%=1TO8:M1%=LF%+LF%+LF%+2:M2%=M1%+1:M3%=M2%+1:M4%=M1%+26:M5%=M2%+26:M6%=M3%+26:M7%=LF%+56:M8%=LF%+66
  406. 6220  LF%(M1%)=16+LF%:LF%(M2%)=32+LF%:LF%(M3%)=0:LF%(M4%)=24+LF%:LF%(M5%)=40+LF%:LF%(M6%)=0:LF%(M7%)=LF%:LF%(M8%)=LF%+8:NEXTLF%:LF%(29)=0:LF%(30)=0:LF%(55)=0:LF%(56)=0:LF%(65)=0:LF%(66)=0:RETURN
  407. 6250  SPR%=0:TR%=TR%+1:GOSUB6670:SC%=1:HS%=0
  408. 6270  GOSUB6660:GOSUB5920:RETURN5410
  409. 6290  SPR%=0:TR%=TR%-1:IFTR%<0THENTR%=0
  410. 6300  GOSUB6670:SC%=1:HS%=0:GOTO6270
  411. 6320  HS%=HS%+1:IFHS%=2THENHS%=0:SC%=SC%+1
  412. 6330  GOSUB6670:GOSUB12360:IFSC1%>PEEK(FS%)GOTO6250
  413. 6350  GOSUB5920:RETURN5410
  414. 6360  HS%=HS%+1:IFHS%=2THENHS%=0:GOTO6380
  415. 6370  SC%=SC%-1
  416. 6380  GOSUB6670:IFSC%>0THENGOSUB5920:RETURN5410
  417. 6390  SPR%=0:TR%=TR%-1:IFTR%<0THENTR%=0:SC%=1:HS%=0:RETURN5410
  418. 6400  FS%=LFE%+256*TR%:GOSUB12530:NS%=PEEK(FS%):IFNS%=0GOTO6290
  419. 6410  PD=0:FORDP%=1TONS%:PE%=PEEK(FS%+1+5*DP%):IFPE%>5THENPE%=6
  420. 6420  PD=PD+PAG(PE%):NEXTDP%:SC%=INT(PD/2):HS%=1:IF(2*SC%+0.1)<PDTHENSC%=SC%+1:HS%=0
  421. 6440  GOTO6270
  422. 6460  BEEP:KEY7,"WAIT":GOSUB11650:FS%=RST%+512*(SC%-1)+256*HS%-SPR%*&H1800:CN%=256:FORCMC%=0TO255:IFTD%(CMC%)=CN%GOTO6490
  423. 6480  POKEFS%,TD%(CMC%):TD%(CMC%)=CN%
  424. 6490  FS%=FS%+1:NEXT CMC%:FW%=1:BEEP:IF SPR%=1 THEN POKE &H19,0:POKE 49,13:POKE 53,0:POKE 54,0:POKE 55,0:POKE 56,0:POKE 51,0:POKE 52,48:UU%=USR(UU%):POKE &H19,1
  425. 6510  ET%=TR%:ST%=TR%:SS%=1:ES%=250:POKE 50,0:POKE 49,5:GOSUB 10930:IF(PEEK(68)AND 2)=2 THEN KEY 7,"WP!":BEEP:BEEP:BEEP:GOTO 6540
  426. 6530  BEEP:KEY7,"SAVE
  427. 6540  GOSUB11650:RETURN5410
  428. 6550  SPR%=0:HD%=HD%+1:IFHD%=2THENHD%=0
  429. 6560  GOSUB6670:ST%=0:ET%=39:ZT%=TR%:ZS%=SC%:GOSUB10970:TR%=ZT%:SC%=ZS%:GOTO6270
  430. 6590  KEY10,"MENU":KEY2,"T+1":KEY1,"T-1":KEY4,"S+1":KEY3,"S-1":KEY7,"SAVE":KEY5,"SIDE":KEY6,"":KEY8,"":GOSUB11650:ONKEY(2)GOSUB6250:ONKEY(1)GOSUB6290:ONKEY(4)GOSUB6320:ONKEY(3)GOSUB6360:ONKEY(7)GOSUB6460:ONKEY(5)GOSUB6550:RETURN
  431. 6660  ET%=TR%:ST%=TR%:SS%=1:ES%=250:POKE50,0:GOSUB11170:POKE49,4:GOSUB10930:RETURN
  432. 6670  FORTT%=1TO8:KEY(TT%)STOP:NEXTTT%:RETURN
  433. 6680  KEYOFF
  434. 6690  CLS:KEYOFF:ONERRORGOTO11940:FCN%=0
  435. 6700  FORKY%=1TO8:KEY(KY%)OFF:KEYKY%,"":NEXTKY%:KEY1,"DISPLY":KEY2,"COMP   ":KEY3,"COPY  ":KEY4,"ZERO  ":KEY5,"SEARCH":ONKEY(10)GOSUB11640:ONKEY(9)GOSUB11660:ONKEY(1)GOSUB11870:ONKEY(2)GOSUB11880:ONKEY(3)GOSUB11890
  436. 6710  ONKEY(4)GOSUB11900:ONKEY(5)GOSUB11910:KEY6,"COMPTS":ONKEY(6)GOSUB11920:FORKY%=1TO6:KEY(KY%)ON:NEXTKY%:GOSUB11650:KEYON:GOSUB220:PRINT"":PRINT"":PRINTSPC(25);"1. Track and Sector Tools
  437. 6740  PRINT"":PRINTSPC(5);"F1: Display or modify sector data":PRINTSPC(5);"F2: Compare sector data":PRINTSPC(5);"F3: Copy sector data":PRINTSPC(5);"F4: Zero sector data":PRINTSPC(5);"F5: Search for data by sector
  438. 6790  PRINTSPC(5);"F6: Compare track (read) data to sector (read) data
  439. 6800  KY$=INKEY$:GOTO 6800
  440. 6810  ONKEY(10)GOSUB11930:LOCATE8+C%,1:PRINT"*";:LOCATE16,1:GOSUB13370:LOCATE18,1:IFC%=2ORC%=6GOTO7880
  441. 6850  IFC%=3THENDRI$="A":GOTO7400
  442. 6860  IFC%=4THENDRI$="B":GOTO6960
  443. 6870  IFC%=5GOTO8390
  444. 6880  IFC%<>1GOTO6680
  445. 6890  LOCATE18,1:GOSUB10680:GOSUB10810:POKE49,11:POKE50,0:POKE57,DR%:POKE58,HD%:POKE56,ST%:DEFUSR=UR%:DEFSEG=SE%:UU%=USR(UU%):SPR%=1:TR%=ST%:HX%=0:HS%=0:SC%=1:GOTO5380
  446. 6960  GOSUB10680:GOSUB10750:GOSUB10810:GOSUB12200:TR%=ST%:GOSUB11190:GOSUB11240:S4%=S0%:S7%=SF%:S5%=ST%:TR%=ST%
  447. 7030  FS%=LFE%+256*TR%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):S3%=PEEK(S1%+1):IFS2%>=S4%GOTO7070
  448. 7060  S4%=S4%-S2%:TR%=TR%+1:GOTO7030
  449. 7070  GOSUB6660:S9%=S2%-S4%+1:IFS9%>=S7%THENS9%=S7%
  450. 7100  S8%=4:IFS3%<6THENS8%=2^S3%
  451. 7110  AH%=S8%*(S4%-1):AL%=S8%*(S9%+S4%-1):SS%=AL%:ES%=AH%:POKE49,8:POKE50,0:GOSUB10930:SS%=S4%:ES%=SS%+S9%-1:POKE49,5:GOSUB10930:S4%=1:S7%=S7%-S9%:IFS7%>0THENTR%=TR%+1:GOTO7030
  452. 7170  WR$="Probable CRC":BO%=0
  453. 7190  FS%=LFE%+256*S5%:PRINT"Please wait a moment. Checking for CRC errors.":ERM%=0:PRINT"":FORT4%=S5%TOTR%:LOCATE23,1:PRINT"Checking track ";T4%;:GOSUB12530:Q1%=PEEK(FS%):Q%=2:IFQ1%=0GOTO7300
  454. 7250  FORS4%=1TOQ1%:Q3%=PEEK(FS%+Q%):Q2%=INT(Q3%/64):IFQ2%=1ORQ2%=3THENPRINT"":ERM%=ERM%+1:PRINTWR$;" error in track";T4%;", sector";S4%:PRINT"":POKEFS%+Q%,Q3%-64*Q2%
  455. 7280  Q%=Q%+5:NEXTS4%
  456. 7300  FS%=FS%+256:NEXTT4%:IFERM%>0GOTO7340
  457. 7330  PRINT"OK. No CRC errors found.":PRINT"
  458. 7340  ERM%=0:IFBO%=1GOTO12880
  459. 7350  IFBO%=2GOTO2510
  460. 7360  IFSBR%=1THENRETURN
  461. 7370  BEEP:PRINT"":PRINT"Press any key to continue.
  462. 7380  IFINKEY$=""GOTO7380
  463. 7390  GOTO6690
  464. 7400  PRINTSPC(10);"DATA SOURCE:":GOSUB13420:IFKB$<>"N"ANDKB$<>"n"GOTO7430
  465. 7410  IFSPR%=0GOTO7480
  466. 7420  POKE49,13:POKE50,0:POKE51,0:POKE52,48:POKE53,0:POKE54,0:POKE55,0:POKE56,0:UU%=USR(UU%):GOTO7480
  467. 7430  GOSUB10750:GOSUB10810:GOSUB11190:GOSUB11240:V1%=DR%:V2%=HD%:V3%=ST%:V4%=S0%
  468. 7480  PRINTSPC(10);"DATA DESTINATION:":GOSUB12200:GOSUB10680:GOSUB10750:GOSUB10810:GOSUB11190:GOSUB12200:IFPEEK(&HF2)=1THENV1%=DR%:V2%=HD%:V3%=ST%:V4%=SO%:GOSUB11240:GOTO7560
  469. 7560  U1%=DR%:U2%=HD%:U3%=ST%:U4%=S0%:S0%=V4%:S4%=S0%:S7%=SF%:S5%=V3%:R4%=U4%:R7%=SF%:R0%=U4%:R8%=U3%
  470. 7580  FS%=LFE%+256*V3%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):IFS2%>=S4%GOTO7620
  471. 7610  S4%=S4%-S2%:V3%=V3%+1:GOTO7580
  472. 7620  GOSUB12260:IFU1%<>V1%ORPEEK(&HF2)=1GOTO7660
  473. 7640  PRINT"Insert the SOURCE disk in drive ";LT$(U1%+10);" and press the S key when ready.
  474. 7650  GOSUB12430:IFKB$<>"S"ANDKB$<>"s"GOTO7650
  475. 7660  HD%=V2%:POKE25,0:GOSUB12230:POKE25,1:S9%=S2%-S4%+1:IFS9%>S7%THENS9%=S7%
  476. 7690  IFU1%<>V1%ORPEEK(&HF2)=1GOTO7720
  477. 7700  PRINT"Insert the DESTINATION disk in drive ";LT$(U1%+10);" and press the D key when ready.
  478. 7710  GOSUB12430:IFKB$<>"D"ANDKB$<>"d"GOTO7710
  479. 7720  FS%=LFE%+256*U3%:GOSUB12530:R1%=FS%:R2%=PEEK(R1%):IFR2%>=R4%GOTO7760
  480. 7750  R4%=R4%-R2%:U3%=U3%+1:GOTO7720
  481. 7760  GOSUB12310:R9%=R2%-R4%+1:T9%=R9%:IFR9%>S9%THENT9%=S9%
  482. 7790  PRINT"Copying sectors from track";V3%;" to track";U3%:POKE25,0:GOSUB11350:POKE25,1:HD%=U2%:GOSUB11170:GOSUB11310:IF(PEEK(68)AND2)=2THENPRINT"Write Protected!!!":GOTO7370
  483. 7840  IFS9%>R9%THENR4%=1:U3%=U3%+1:S4%=S4%+R9%:GOSUB12260:S7%=S7%-R9%:S9%=S9%-R9%:GOTO7720
  484. 7850  R4%=R4%+S9%:S4%=1:S7%=S7%-R9%:IFS7%>0THENV3%=V3%+1:GOTO7580
  485. 7870  TR%=U3%:S5%=R8%:GOTO7170
  486. 7880  PRINTSPC(10);"DATA SOURCE:":GOSUB10680:GOSUB10750:GOSUB10810:GOSUB11190:GOSUB11240:V1%=DR%:V2%=HD%:V3%=ST%:V4%=S0%:PRINTSPC(10);"DATA FOR COMPARISON:":GOSUB12200:GOSUB10680:GOSUB10750:GOSUB10810:BO%=0:GOSUB11190:GOSUB12200
  487. 8030  U1%=DR%:U2%=HD%:U3%=ST%:U4%=S0%:NC=0:R4%=U4%:R5%=U3%:S0%=V4%:S4%=S0%:S7%=SF%:S5%=V3%
  488. 8050  FS%=LFE%+256*V3%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):IFS2%>=S4%GOTO8090
  489. 8080  S4%=S4%-S2%:V3%=V3%+1:GOTO8050
  490. 8090  GOSUB12260:IFU1%=V1%THENPRINT"Insert the SOURCE disk in drive ";LT$(U1%+10);" and press the S key when ready.";
  491. 8110  IFU1%<>V1%GOTO8140
  492. 8120  KB$=INKEY$:IFKB$=""GOTO8120
  493. 8130  IFKB$<>"S"ANDKB$<>"s"GOTO8120
  494. 8140  IFC%=6THENGOSUB11270:GOTO8160
  495. 8150  HD%=V2%:GOSUB12230
  496. 8160  S9%=S2%-S4%+1:IFU1%=V1%THENPRINT"Insert the DESTINATION disk in drive ";LT$(U1%+10);" and press the D key when ready.";
  497. 8180  IFU1%<>V1%GOTO8210
  498. 8190  KB$=INKEY$:IFKB$=""GOTO8190
  499. 8200  IFKB$<>"D"ANDKB$<>"d"GOTO8190
  500. 8210  IFS9%>S7%THENS9%=S7%
  501. 8220  FS%=LFE%+256*U3%:GOSUB12530:R1%=FS%:R2%=PEEK(R1%):IFR2%>=R4%GOTO8260
  502. 8250  R4%=R4%-R2%:U3%=U3%+1:GOTO8220
  503. 8260  GOSUB12310:R9%=R2%-R4%+1:C9%=S9%:IFR9%<S9%THENC9%=R9%
  504. 8290  TR%=U3%:DR%=U1%:HD%=U2%:GOSUB6660:AX%=PTW%:BX%=PTR%:GOSUB12560:SX%=CX%:PRINT"Comparing source track";V3%;", side";V2%;" with destination track";U3%;", side";U2%
  505. 8320  GOSUB11400:IFCX%<>0THENGOSUB12620:NC=NC+1:AX%=PTW%+SX%-CX%:BX%=PTR%+SX%-CX%:PRINT"Source=";HEX$(PEEK(TRT%+BX%));",destination =";HEX$(PEEK(RST%+AX%)):AX%=AX%+1:BX%=BX%+1:CX%=CX%-1:IFCX%>0GOTO8320
  506. 8340  IFS9%>R9%THENR4%=1:S4%=S4%+R9%:GOSUB12260:S7%=S7%-R9%:U3%=U3%+1:S9%=S9%-R9%:GOTO8220
  507. 8350  R4%=R4%+S9%:S4%=1:S7%=S7%-R9%:IFS7%>0THENV3%=V3%+1:GOTO8050
  508. 8370  IFNC=0THENPRINT"":PRINT"All bytes compare ok.
  509. 8380  WR$="Probable CRC":S5%=R5%:TR%=U3%:GOTO7190
  510. 8390  PRINTSPC(10);"SECTORS TO BE SEARCHED:":JZ%=0:GOSUB10680:GOSUB10750:GOSUB10810:TR%=ST%:GOSUB11190:GOSUB11240:SC%=S0%:S7%=S0%+SF%-1:S5%=TR%
  511. 8470  PRINT"":PRINT"<H>ex or <A>scii character search ";:GOSUB12430:HA$=LEFT$(KB$,1):IFHA$<>"H"ANDHA$<>"h"ANDHA$<>"A"ANDHA$<>"a"THENBEEP:GOTO8470
  512. 8480  IFHA$="A"ORHA$="a"GOTO8850
  513. 8490  PRINT"":PRINT"Type the string to be searched for as a series of HEX characters (0-F)":PRINT"":LOCATE23,1,1:NC%=1:SG$="
  514. 8510  A$=INKEY$:IFA$=""GOTO8510
  515. 8520  DEFSEG:POKE106,0:DEFSEG=SE%:A%=ASC(A$):IF(A%>47ANDA%<58)OR(A%>64ANDA%<71)GOTO8580
  516. 8540  IFA%=13GOTO8590
  517. 8550  IFA%<>8GOTO8510
  518. 8560  NC%=NC%-1:IFNC%=0THENNC%=1:LOCATE23,1,1:SG$="":PRINTSG$:LOCATE23,1,1:GOTO8510
  519. 8570  SG$=LEFT$(SG$,NC%-1):LOCATE23,1:PRINTSG$;:LOCATE23,NC%,1:GOTO8510
  520. 8580  PRINTA$;:SG$=SG$+A$:NC%=NC%+1:LOCATE23,NC%,1:GOTO8510
  521. 8590  MC%=INT((NC%-1)/2):IFMC%=0THENBEEP:PRINT"String too short. Retype.":GOTO8490
  522. 8600  FS%=TRT%:NC%=2*MC%-1:FORI%=1TONC%STEP2:J%=ASC(MID$(SG$,I%,1)):K%=ASC(MID$(SG$,I%+1,1)):J%=J%-48:IFJ%>9THENJ%=J%-7
  523. 8650  K%=K%-48:IFK%>9THENK%=K%-7
  524. 8660  K%=16*J%+K%:POKEFS%,K%:FS%=FS%+1:NEXTI%
  525. 8690  IFJZ%=1THENRETURN
  526. 8700  NC=0:PRINT"
  527. 8710  FS%=LFE%+256*TR%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):IFS2%>SC%GOTO8750
  528. 8740  SC%=SC%-S2%:TR%=TR%+1:GOTO8710
  529. 8750  S9%=S2%-SC%+1:IFS9%>S7%THENS9%=S7%
  530. 8770  GOSUB6660:GOSUB12830:R4%=SC%:U3%=TR%:C9%=S9%:GOSUB12560:BX%=AX%+CX%:CX=0:GOSUB11440:GOSUB11500:S7%=S7%-S9%:IFS7%>0THENSC%=1:TR%=TR%+1:GOTO8710
  531. 8820  IFNC=0THENPRINT"":PRINT"String not found.
  532. 8830  WR$="Reading":GOTO7190
  533. 8850  PRINT"":PRINT"Type the string to be searched for (normal Ascii characters).":GOSUB12430:SG$=KB$:IFLEN(SG$)=0THENBEEP:PRINT"String too short. Retype.":GOTO8850
  534. 8870  FS%=TRT%:NC%=LEN(SG$):FORI%=1TONC%:J%=ASC(MID$(SG$,I%,1)):POKEFS%,J%:FS%=FS%+1:NEXTI%:MC%=NC%:GOTO8690
  535. 8920  JZ%=1:GOSUB4740:FC%(0)=CU%:FC%(1)=NC%:I%=1
  536. 8950  IFNC%<1ORNC%>CM%GOTO8970
  537. 8960  I%=I%+1:NC%=FA%(NC%):FC%(I%)=NC%:GOTO8950
  538. 8970  J%=I%:IFDS%=0THENJ%=J%+J%
  539. 8980  PRINT"File is";J%;" sectors long. Which sector do you want to examine ";:GOSUB12430:K%=VAL(KB$):IFK%<1ORK%>J%GOTO8980
  540. 9000  CL%=0:CJ%=J%-1:CK%=K%-1:CMM%=1:IFDS%=0THENCK%=INT((K%-1)/2):CJ%=INT((J%-1)/2):CL%=K%-2*CK%-1:CMM%=3
  541. 9020  CU%=FC%(CK%):GOSUB10980:HS%=0:CH%=0:IFCL%=1THENSC%=SC%+1:CH%=2:IFSC%=10THENSC%=1:HD%=1
  542. 9030  GOSUB9050:GOSUB6670:GOSUB6660:GOSUB6190:GOSUB5920:GOSUB9320:GOTO5410
  543. 9050  KEYOFF:KEY1,"":KEY2,"":KEY4,"S+1":KEY3,"S-1":KEY6,"":KEY7,"SAVE":KEY8,"":KEY5,"":FORKY%=1TO8:KEY(KY%)OFF:NEXTKY%:KEY(3)ON:KEY(4)ON:KEY(7)ON:ONKEY(4)GOSUB9100:ONKEY(3)GOSUB9200:ONKEY(10)GOSUB9310:ONKEY(7)GOSUB6460
  544. 9080  GOSUB11650:KEYON:RETURN
  545. 9100  GOSUB6670:CH%=CH%+1:HS%=HS%+1:IFHS%=2THENHS%=0
  546. 9110  IFDS%=0ANDCH%=4THENCH%=0:GOTO9160
  547. 9120  IFN89%=9ANDDS%=0ANDSC%=9ANDCH%=2THENHD%=1:SC%=1:GOTO9190
  548. 9130  IFDS%=1ANDCH%=2THENCH%=0:GOTO9160
  549. 9140  IFHS%=0THENSC%=SC%+1
  550. 9150  GOSUB5920:GOSUB9320:RETURN5410
  551. 9160  LS%=0:CK%=CK%+1:IFCK%>CJ%THENCK%=CJ%:CH%=CMM%:HS%=1:LS%=1
  552. 9170  CU%=FC%(CK%):GOSUB10980:IFLS%=1ANDDS%=0THENSC%=SC%+1:IFSC%=10THENSC%=1:HD%=1:CH%=3
  553. 9190  GOSUB6660:GOTO9150
  554. 9200  GOSUB6670:CH%=CH%-1:HS%=HS%+1:IFHS%=2THENHS%=0
  555. 9210  IFCH%<0GOTO9250
  556. 9220  IFHS%=1THENSC%=SC%-1
  557. 9230  IFSC%=0THENSC%=N89%:HD%=0:GOTO9300
  558. 9240  GOSUB5920:GOSUB9320:RETURN5410
  559. 9250  IFDS%=0THENCH%=3
  560. 9260  IFDS%=1THENCH%=1
  561. 9270  XF%=1:CK%=CK%-1:IFCK%<0THENCK%=0:CH%=0:HS%=0:XF%=0
  562. 9280  CU%=FC%(CK%):GOSUB10980:IFDS%=0THENSC%=SC%+XF%
  563. 9290  IFSC%=10THENSC%=1:HD%=1:CH%=3:HS%=1
  564. 9300  GOSUB6660:GOTO9240
  565. 9310  RETURN3330
  566. 9320  FORTL%=1TO11:LOCATETL%+3,1:PRINTMID$(TL$,TL%,1);:NEXTTL%:CQ%=CK%+INT(CH%/2)+1:IFDS%=0THENCQ%=CQ%+CK%
  567. 9330  TL%=15:CK$=STR$(CQ%):CH$=STR$(HS%+1):FORKY%=1TOLEN(CK$):LOCATETL%,1:PRINTMID$(CK$,KY%,1);:TL%=TL%+1:NEXTKY%:LOCATETL%,1:PRINT".";:TL%=TL%+1:FORKY%=1TOLEN(CH$):LOCATETL%,1:PRINTMID$(CH$,KY%,1);:TL%=TL%+1:NEXTKY%
  568. 9360  IFLPT%=1THENLPRINTTL$;" ";CQ%;".";HS%+1
  569. 9370  RETURN
  570. 9380  JZ%=1:GOSUB4740:CUF%=CU%:RT%=250:DH%=RT%:NC=0:GOSUB8470:FCN%=1:FCX%=0:PRINT"
  571. 9430  GOSUB10980:IFDH%=HD%ANDTR%=RT%GOTO9460
  572. 9450  GOSUB6660:DH%=HD%:RT%=TR%
  573. 9460  S9%=1:IFDS%=0ANDSC%<>9THENS9%=2
  574. 9480  FS%=LFE%+256*TR%:GOSUB12530:GOSUB12830:R4%=SC%:U3%=TR%:C9%=S9%:GOSUB12560:BX%=AX%+CX%:CX=0:GOSUB11440:GOSUB11500:FCX%=0:IFDS%=0ANDSC%=9THENFCX%=1:HD%=1:SC%=1:GOSUB6660:DH%=HD%:S9%=1:GOTO9480
  575. 9500  FCN%=FCN%+2-DS%:CU%=FA%(CU%):IFCU%>0ANDCU%<(CM%+1)GOTO9430
  576. 9520  IFNC=0THENPRINT"":PRINT"String not found.
  577. 9530  GOTO3830
  578. 9540  JZ%=1:GOSUB4740:TR%=0:HD%=0:SC%=4:T9%=5:IFN89%=9THENSC%=6:T9%=4
  579. 9560  IFI%<N64%GOTO9580
  580. 9570  HD%=1:SC%=1:I%=I%-N64%:T9%=2:IFN89%=9THENT9%=3
  581. 9580  GOSUB6660:AT%=PEEK(RST%+512*(SC%-1)+32*I%+11)
  582. 9600  PRINT"File allocation byte is ";AT%;". Please type the new byte (0-255) ";:GOSUB12430:AT%=VAL(KB$):IFAT%<0ORAT%>255GOTO9600
  583. 9610  POKERST%+512*(SC%-1)+32*I%+11,AT%:AT%(I%)=AT%:R4%=SC%:U3%=0:U1%=DR%:U2%=HD%:GOSUB11310:GOTO3830
  584. 9650  JZ%=1:GOSUB4740:PRINT"It takes a while to kill a file. Please be patient.":MID$(DR$(I%),1,1)=CHR$(13):TR%=0:HD%=0:SC%=2*N89%-12:IFI%<N64%GOTO9700
  585. 9690  HD%=1:SC%=1:I%=I%-N64%
  586. 9700  GOSUB6660:POKERST%+512*(SC%-1)+32*I%,229:IFHD%=1THENR4%=1:U3%=0:U1%=DR%:U2%=HD%:GOSUB11310
  587. 9730  IFHD%=1THENHD%=0:GOSUB6660
  588. 9740  NC%=FA%(CU%):IFNC%>CM%ORNC%=0GOTO9760
  589. 9750  FA%(CU%)=0:CU%=NC%:GOTO9740
  590. 9760  FS%=RST%+512:GS%=FS%+FAT1%:G%=1:H%=0:FA%(CU%)=0
  591. 9770  CME%=CM%-1:FORI%=2TOCME%:G%=G%+1:IFH%=0THENG%=G%+1
  592. 9800  IFH%=1THENK3%=INT(FA%(I%-1)/256):K1%=FA%(I%)-16*INT(FA%(I%)/16):K1%=16*K1%+K3%:K2%=INT(FA%(I%)/16):GOTO9820
  593. 9810  K3%=FA%(I%+1)-16*INT(FA%(I%+1)/16):K1%=FA%(I%)-256*INT(FA%(I%)/256):K2%=INT(FA%(I%)/256)+16*K3%:HH%=1:GOTO9830
  594. 9820  HH%=0
  595. 9830  H%=HH%:POKEFS%+G%,K1%:POKEFS%+G%+1,K2%:POKEGS%+G%,K1%:POKEGS%+G%+1,K2%:NEXTI%:R4%=1:T9%=8:U3%=0:U1%=DR%:U2%=0:GOSUB11310:GOTO3830
  596. 9880  PRINT"":PRINT"Type the name of the file to be resuscitated in CAPS! ";:GOSUB12430:FI$=KB$:DP%=INSTR(FI$,"."):IFDP%<2GOTO9880
  597. 9900  FCH$=LEFT$(FI$,1):TL$="           ":MID$(TL$,1,DP%-1)=FI$:MID$(TL$,9,3)=RIGHT$(FI$,3):MID$(TL$,1,1)=CHR$(229):SD%=0:POKE50,0:ST%=0:ET%=0:HD%=0:SS%=1:ES%=8:GOSUB10970:POKE49,4:GOSUB10930
  598. 9940  FS%=RST%:I%=0:UP%=255:UF%=0:UA%=0:UB%=0:UN%=0:Z1%=0:Z2%=0:Z2%=N64%-1:NF%=0:D2%=PEEK(FS%+512):IFD2%=255ORD2%=253THENDS%=2:GOTO9970
  599. 9960  DS%=1
  600. 9970  FS%=FS%+FAT2%
  601. 9980  FORI%=Z1%TOZ2%:J%=PEEK(FS%):IFJ%<>229THENUB%=I%:UN%=UN%+1:GOTO10070
  602. 10030  FORJ%=0TO10:K%=PEEK(FS%+J%):IFCHR$(K%)<>MID$(TL$,J%+1,1)GOTO10070
  603. 10050  NEXTJ%:UF%=UF%+1:IFUF%=1THENUP%=I%:S1%=PEEK(FS%+26):S2%=PEEK(FS%+27):S3%=PEEK(FS%+28):S4%=PEEK(FS%+29):S5%=PEEK(FS%+30):S6%=PEEK(FS%+31):AT%=PEEK(FS%+11)
  604. 10070  FS%=FS%+32:NEXTI%:IFDS%<2GOTO10120
  605. 10100  DS%=0:ET%=0:ST%=0:HD%=1:GOSUB10970:POKE49,4:GOSUB10930:Z1%=N64%:Z2%=111:FS%=RST%:GOTO9980
  606. 10120  IFDS%<>0GOTO10140
  607. 10130  ET%=0:ST%=0:HD%=0:GOSUB10970:POKE49,4:GOSUB10930
  608. 10140  FS%=RST%+512:IFUF%<>0GOTO10180
  609. 10160  BEEP:PRINT"Can't find this file.":GOTO3830
  610. 10180  IFUF%>1THENBEEP:PRINT"Found this file more than once. Patch directory entries on track 0 before tryingto resuscitate file.":GOTO3830
  611. 10190  UD%=0:IFUN%<>UB%THENUD%=1
  612. 10200  IFUD%=0GOTO10220
  613. 10210  PRINT"Directory contains more than one killed file. Explicit directions may be         required for resuscitation.
  614. 10220  PRINT"Do you want <A>utomatic or <M>anual resuscitation ";:GOSUB12430:AM$=LEFT$(KB$,1):IFAM$="A"ORAM$="a"THENUD%=0:GOTO10260
  615. 10240  IFAM$<>"m"ANDAM$<>"M"GOTO10220
  616. 10250  UD%=1
  617. 10260  S=256*S2%+S1%:IFS>CM%THENBEEP:PRINT"Can't resuscitate file. Directory pointer to first cluster is bad.":GOTO3830
  618. 10270  CU%=S:GOSUB10980:PRINT"File starts at track";TR%;", side";HD%;", sector";SC%;:S=128*S5%+(256*S4%+S3%)/(2*256):S%=INT(S):IFS%<>STHENS%=S%+1
  619. 10300  IF2*INT(S%/2)<>S%ANDDS%=0THENS%=S%+1
  620. 10310  PRINT" and is";S%;" sectors long.":IFS6%<>0GOTO10350
  621. 10330  S6%=S%:AT%(UP%)=AT%:S=256*S4%+S3%:IFS<=32767THENS%=S ELSES%=S-SQ
  622. 10335  F1%(UP%)=S%:F2%(UP%)=S5%:S=256*S2%+S1%:IFS<=32767THENS%=S ELSES%=S-SQ
  623. 10336  SC%(UP%)=S%:IFDS%=0THENS6%=INT(S6%/2)
  624. 10340  IFS6%<(CM%-2)GOTO10360
  625. 10350  BEEP:PRINT"File is too long. Can't resuscitate.":GOTO3830
  626. 10360  NCC%=CU%+1:LCC%=CU%
  627. 10370  IFFA%(NCC%)<>0THENNCC%=NCC%+1:GOTO10370
  628. 10380  FA%(CU%)=NCC%:CU%=NCC%:S6%=S6%-1:IFS6%=0GOTO10490
  629. 10390  GOSUB10980:PRINT"Next section of the file will start at track";TR%;", side";HD%;", sector";SC%:IFUD%=0GOTO10360
  630. 10420  PRINT"Is this ok <Y/N> ";:GOSUB12430:YN$=LEFT$(KB$,1):IFYN$="Y"ORYN$="y"GOTO10360
  631. 10430  IFYN$<>"N"ANDYN$<>"n"GOTO10420
  632. 10440  PRINT"Track  ";:INPUTTR%:IFTR%<0ORTR%>39GOTO10440
  633. 10450  PRINT"Side   ";:INPUTHD%:IFHD%<0ORHD%>1GOTO10450
  634. 10460  PRINT"Sector ";:INPUTSC%:IFSC%<1ORSC%>N89%GOTO10460
  635. 10470  GOSUB10590:FA%(LCC%)=TU%:CU%=TU%:GOTO10360
  636. 10490  CU%=LCC%:FA%(CU%)=4088:PRINT"Updating directory and file allocation tables.":HD%=0:IFUP%<N64%GOTO10570
  637. 10530  SD%=0:ST%=0:ET%=0:HD%=1:SS%=1:ES%=N89%:GOSUB10970:POKE49,4:GOSUB10930:FS%=RST%:K%=ASC(FI$):FS%=FS%+32*(UP%-N64%):POKEFS%,K%:POKE49,5:GOSUB10930:HD%=0:GOSUB10970:POKE49,4:GOSUB10930:GOTO10580
  638. 10570  FS%=RST%+FAT2%+32*UP%:K%=ASC(FI$):POKEFS%,K%
  639. 10580  DR$(UP%)=TL$:MID$(DR$(UP%),1,1)=FCH$:FS%=RST%+512:GS%=FS%+FAT1%:G%=1:H%=0:GOTO9770
  640. 10590  IFDS%=0GOTO10630
  641. 10600  IFN89%=9GOTO10620
  642. 10610  TU%=8*TR%+SC%-6:RETURN
  643. 10620  TU%=9*TR%+SC%-8:RETURN
  644. 10630  IFN89%=9GOTO10650
  645. 10640  TU%=8*TR%+4*HD%-3+INT((SC%-1)/2):RETURN
  646. 10650  TU%=INT((18*TR%+9*HD%+SC%-9)/2):RETURN
  647. 10670  RETURN200
  648. 10680  PRINT"Which drive (A,B,C,D) ";:PRINTDRI$;" ";:GOSUB12430:DR$=KB$:IFLEN(DRI$)=0ANDLEN(DR$)=0THENPRINT"Redo!":GOTO10680
  649. 10700  IFLEN(DR$)=0THENDR$=DRI$
  650. 10710  DR%=ASC(DR$):IFDR%>96THENDR%=DR%-32
  651. 10720  IFDR%<65ORDR%>68THENBEEP:PRINT"Redo! ":GOTO10680
  652. 10730  DRI$=DR$:DR%=DR%-65:RETURN
  653. 10750  HD%=HDI%:PRINT"Which side (0 or 1) ";:PRINTHD%;" ";:GOSUB12430:HDI$=KB$:IFLEN(HDI$)=0THENRETURN
  654. 10770  HD%=VAL(HDI$):IFHD%<>0ANDHD%<>1THENBEEP:PRINT"Redo! ":GOTO10750
  655. 10790  HDI%=HD%:RETURN
  656. 10810  ST%=STI%:PRINT"Starting track            ";:PRINTST%;" ";:GOSUB12430:STI$=KB$:IFLEN(STI$)=0THENRETURN
  657. 10830  ST%=VAL(STI$):IFST%<0THENBEEP:PRINT"Redo!":GOTO10810
  658. 10850  STI%=ST%:RETURN
  659. 10870  ET%=ETI%:PRINT"Ending track (";ST%;"-";ST%+41;")  ";:PRINT ET%;" ";:GOSUB 12430:ETI$=KB$:IF LEN(ETI$)=0 THEN RETURN
  660. 10890  ET%=VAL(ETI$):IFET%<0ORET%<ST%OR(ET%-ST%)>41THENBEEP:PRINT"Redo!":GOTO10870
  661. 10910  ETI%=ET%:RETURN
  662. 10930  DEFSEG=SE%:DEFUSR=UR%:POKE55,ET%:POKE56,ST%:POKE57,DR%:POKE58,HD%:POKE51,SS%:POKE52,ES%:POKE53,SD%:UU%=USR(UU%):RETURN
  663. 10970  DEFSEG=SE%:DEFUSR=UR%:PK9%=PEEK(49):POKE49,16:POKE50,0:POKE55,ET%:POKE56,ST%:POKE58,HD%:UU%=USR(UU%):SIDE%=HD%:POKE49,PK9%:RETURN
  664. 10980  IFDS%=0GOTO11080
  665. 10990  HD%=0:IFN89%=9GOTO11050
  666. 11010  TR%=INT((CU%+5)/8):SC%=CU%-8*TR%+6
  667. 11030  IFCU%=0THENSC%=1
  668. 11040  RETURN
  669. 11050  TR%=INT((CU%+7)/9):SC%=CU%-9*TR%+8:GOTO11030
  670. 11080  IFN89%=9GOTO11130
  671. 11090  TR%=INT((CU%+3)/8):HD%=INT((CU%-8*TR%+3)/4):SC%=2*(CU%-8*TR%-4*HD%+3)+1:GOTO11030
  672. 11130  TR%=INT((2*CU%+9)/18):HD%=INT((2*CU%-18*TR%+8)/9):SC%=2*CU%-18*TR%-9*HD%+9:GOTO11030
  673. 11170  IFSIDE%=HD%THENRETURN
  674. 11180  DEFSEG=SE%:DEFUSR=UR%:PK9%=PEEK(49):POKE49,16:POKE50,0:POKE55,39:POKE56,0:POKE58,HD%:UU%=USR(UU%):SIDE%=HD%:POKE49,PK9%:RETURN
  675. 11190  PRINT"Starting sector ";:PRINTS0%;" ";:GOSUB12430:S0$=KB$:IFLEN(S0$)=0THENRETURN
  676. 11210  S0%=VAL(S0$):IFS0%<1ORS0%>40THENBEEP:GOTO11190
  677. 11230  RETURN
  678. 11240  PRINT"Number of sectors ";:GOSUB12430:SF%=VAL(KB$):IFSF%<1THENBEEP:GOTO11240
  679. 11260  RETURN
  680. 11270  POKE49,11:POKE50,0:POKE55,V3%:POKE56,V3%:POKE57,V1%:POKE58,V2%
  681. 11290  DEFUSR=UR%:UU%=USR(UU%):POKE&HFB,0:POKE&HFC,0:POKE&HFD,0:RETURN
  682. 11310  POKE49,5:POKE50,0:POKE52,R4%+T9%-1:POKE51,R4%:IFT9%=1AND(PEEK(S1%+5*S4%-3)AND&H40)=&H40THENCRC%=PEEK(S1%+5*S4%+1):CRC%=PAG(CRC%):POKE&HFB,&HD1:POKE&HFD,CRC%
  683. 11330  POKE55,U3%:POKE56,U3%:POKE57,U1%:POKE58,U2%:GOTO11290
  684. 11350  POKE49,13:POKE50,0:POKE51,0:BX=PTW%:BH%=INT(BX/256):BL%=BX-256*BH%:POKE53,BL%:POKE54,BH%:CX=PTR%:CH%=INT(CX/256):CL%=CX-256*CH%:POKE55,CL%:POKE56,CH%:LDA%=48-INT(BX/128):POKE52,LDA%:GOTO11290
  685. 11400  POKE49,9:POKE50,0:AH%=INT(AX%/256):AL%=AX%-256*AH%:POKE51,AL%:POKE52,AH%:BH%=INT(BX%/256):BL%=BX%-256*BH%:POKE53,BL%:POKE54,BH%:CH%=INT(CX%/256):CL%=CX%-256*CH%:POKE55,CL%:POKE56,CH%:GOSUB11290:CL%=PEEK(53):CH%=PEEK(54):CX%=256*CH%+CL%
  686. 11430  RETURN
  687. 11440  CX%=MC%:POKE49,10:POKE50,0:AH%=INT(AX%/256):AL%=AX%-256*AH%:BH%=INT(BX%/256):BL%=BX%-256*BH%:CH%=INT(CX%/256):CL%=CX%-256*CH%:POKE51,AL%:POKE52,AH%:POKE53,BL%:POKE54,BH%:POKE56,CH%:POKE55,CL%:POKE57,255:POKE58,255
  688. 11480  IFAX%>(BX%-CX%+1)THENRETURN
  689. 11490  GOTO11290
  690. 11500  IFPEEK(58)=255ANDPEEK(57)=255THENRETURN
  691. 11510  CX=256*PEEK(58)+PEEK(57):NC=NC+1:XC=CX:GOSUB12740:IFCX>10000THENRETURN
  692. 11540  AX%=XC+1:GOSUB11440:GOTO11500
  693. 11560  IFERR=27ORERR=24THENBEEP:GOSUB11660:RESUMENEXT
  694. 11570  RESUME550
  695. 11580  JP%=1:RETURN390
  696. 11590  JP%=2:RETURN390
  697. 11600  JP%=3:RETURN390
  698. 11610  JP%=4:RETURN390
  699. 11620  JP%=5:RETURN390
  700. 11640  RETURN200
  701. 11650  DEFSEG:POKE106,0:DEFSEG=SE%:RETURN
  702. 11660  IFLPT%=1THENLPT%=0:KEY9,"LPTOFF":GOSUB11650:RETURN
  703. 11670  LPT%=1:KEY9,"LPT-ON":GOSUB11650:LPRINT" ":RETURN
  704. 11700  KEYOFF:GOSUB12090:ONKEY(10)GOSUB11780:RETURN12940
  705. 11710  BO%=0:N3%=2:RETURN710
  706. 11720  N3%=3:RETURN710
  707. 11730  N3%=4:RETURN710
  708. 11740  N3%=5:RETURN710
  709. 11750  N3%=6:RETURN710
  710. 11760  N3%=7:RETURN710
  711. 11770  N3%=8:RETURN710
  712. 11780  RETURN540
  713. 11830  IFINKEY$=""GOTO11830
  714. 11840  RETURN
  715. 11870  C%=1:RETURN6810
  716. 11880  C%=2:RETURN6810
  717. 11890  C%=3:RETURN6810
  718. 11900  C%=4:RETURN6810
  719. 11910  C%=5:RETURN6810
  720. 11920  C%=6:RETURN6810
  721. 11930  RETURN6690
  722. 11940  IFERR=27ORERR=24THENBEEP:GOSUB11660:RESUMENEXT
  723. 11950  RESUME6690
  724. 11960  C%=1:RETURN3500
  725. 11970  C%=2:RETURN3500
  726. 11980  C%=3:RETURN3500
  727. 11990  C%=4:RETURN3500
  728. 12000  C%=5:RETURN3500
  729. 12010  C%=6:RETURN3500
  730. 12020  C%=7:RETURN3500
  731. 12030  C%=8:RETURN3500
  732. 12040  RETURN3330
  733. 12050  CC%=1:RETURN3650
  734. 12060  CC%=2:RETURN3650
  735. 12070  CC%=3:RETURN3650
  736. 12080  CC%=4:RETURN3650
  737. 12090  FORI%=1TO8:KEYI%,"":KEY(I%)OFF:NEXTI%:GOSUB11650:RETURN
  738. 12100  IFERR=27ORERR=24THENBEEP:GOSUB11660:RESUMENEXT
  739. 12110  RESUME3310
  740. 12200  IFDRI$="A"ORDRI$="a"THENDRI$="B":RETURN
  741. 12210  IFDRI$="B"ORDRI$="b"THENDRI$="A":RETURN
  742. 12220  RETURN
  743. 12230  POKE50,0:GOSUB11170:ES%=S4%+S7%-1:IFES%>255THENES%=255
  744. 12240  POKE 49,4:SS%=S4%:ST%=V3%:ET%=V3%:DR%=V1%:HD%=V2%:GOSUB 10930:POKE 50,0:POKE 49,13:POKE 51,1:POKE 52,48:POKE 53,0:POKE 54,0:POKE 55,0:POKE 56,0:DEF USR=UR%:UU%=USR(UU%):RETURN
  745. 12260  PTR=0:PTR%=0:IFS4%<2THENRETURN
  746. 12270  FORJC%=1TOS4%-1:LC%=PEEK(S1%+5*JC%+1):IFLC%>5GOTO12290
  747. 12280  PTR=PTR+PAG(LC%)
  748. 12290  NEXTJC%:PTR%=256*PTR:RETURN
  749. 12310  PTW=0:PTW%=0:IFR4%<2THENRETURN
  750. 12320  FORJC%=1TOR4%-1:LC%=PEEK(R1%+5*JC%+1):IFLC%>5GOTO12340
  751. 12330  PTW=PTW+PAG(LC%)
  752. 12340  NEXTJC%:PTW%=256*PTW:RETURN
  753. 12360  PAG=2*(SC%-1)+HS%+1:FS%=LFE%+256*TR%:GOSUB12530:PK%=6:SC1%=1
  754. 12390  N%=PEEK(FS%+PK%):IFN%>5THENN%=6
  755. 12395  EW%=PEEK(FS%+PK%-4):IF (EW% AND &H30) <>0 THEN N%=6
  756. 12400  PAG=PAG-PAG(N%):IFPAG>0THENPK%=PK%+5:SC1%=SC1%+1:GOTO12390
  757. 12410  POR=PAG(N%)+PAG:RETURN
  758. 12430  CO%=POS(X):RO%=CSRLIN:IFCO%>77THENPRINT"     ";:CO%=1:RO%=RO%+1:IFRO%>24THENRO%=24
  759. 12440  KB$="":PRINT"? ";:CO%=CO%+2:LOCATERO%,CO%,1
  760. 12450  BK$=INKEY$:IFBK$=""GOTO12450
  761. 12460  GOSUB11650:IFLEN(BK$)>1GOTO12450
  762. 12480  BK%=ASC(BK$):IFBK%<>8ANDBK%<>13THENPRINTBK$;:KB$=KB$+BK$:GOTO12450
  763. 12490  IFBK%=13THENPRINT"":RETURN
  764. 12500  KB%=LEN(KB$):IFKB%=0GOTO12450
  765. 12510  KB$=LEFT$(KB$,KB%-1):RO%=CSRLIN:CO%=POS(X)-1:IFCO%=0THENCO%=80:RO%=RO%-1
  766. 12520  LOCATERO%,CO%:PRINT" ";:LOCATERO%,CO%,1:GOTO12450
  767. 12530  REM
  768. 12540  IFFS%>=LFT%THENFS%=FS%-LFT%+LFE%:GOTO12540
  769. 12550  RETURN
  770. 12560  FS%=LFE%+256*U3%:GOSUB12530:PK%=1+5*R4%:CX%=0:CT9%=C9%
  771. 12580  N%=PEEK(FS%+PK%):IFN%>5THENN%=6
  772. 12590  CX%=CX%+2*PAG(N%):CT9%=CT9%-1:IFCT9%>0THENPK%=PK%+5:GOTO12580
  773. 12610  CX%=128*CX%:RETURN
  774. 12620  CX=SX%-CX%:PAG=INT(CX/256):FS%=LFE%+256*V3%:GOSUB12530:PK%=1+5*S4%:SC1%=S4%
  775. 12660  N%=PEEK(FS%+PK%):IFN%>5THENN%=6
  776. 12670  PAG=PAG-PAG(N%):IFPAG>=0THENPK%=PK%+5:SC1%=SC1%+1:CX=CX-256*PAG(N%):GOTO12660
  777. 12690  GOSUB12720:PRINT"Non-compare at source track";V3%;",head";V2%;",sector";SC1%;",section";POR;",hex offset ";MH$:RETURN
  778. 12720  POR=PAG(N%)+PAG+1:MH$=RIGHT$(HEX$(CX),2):RETURN
  779. 12740  PAG=INT(CX/256):FS%=LFE%+256*TR%:GOSUB12530:PK%=6:SC1%=1
  780. 12770  N%=PEEK(FS%+PK%):IFN%>5THENN%=6
  781. 12780  PAG=PAG-PAG(N%):IFPAG>=0THENPK%=PK%+5:SC1%=SC1%+1:CX=CX-256*PAG(N%):GOTO12770
  782. 12800  GOSUB12720:PRINT"Match found at track";TR%;",head";HD%;",sector";SC1%;",section";POR;",hex offset ";MH$:IFLPT%=1THENLPRINT"Match found at track";TR%;",head";HD%;",sector";SC1%;",section";POR;",hex offset ";MH$
  783. 12803  IFFCN%=0GOTO12810
  784. 12805  FCM%=FCN%+FCX%:IFSC1%<>SC%THENFCM%=FCM%+1
  785. 12807  PRINT"(Match was in sector";FCM%;" of the file.)":IFLPT%=1THENLPRINT"(Match was in sector";FCM%;" of the file.)
  786. 12810  RETURN
  787. 12830  PK%=6:AX%=0:NSC%=1:IFSC%=1THENRETURN
  788. 12840  N%=PEEK(FS%+PK%):IFN%>5THENN%=6
  789. 12850  AX%=AX%+2*PAG(N%):NSC%=NSC%+1:IFNSC%<SC%GOTO12840
  790. 12870  AX%=128*AX%:RETURN
  791. 12880  BEEP:PRINT"Do you want to make another copy <Y/N> ";:GOSUB12430:IFKB$="Y"ORKB$="y"GOTO12910
  792. 12890  IFKB$="N"ORKB$="n"GOTO1370
  793. 12900  BEEP:GOTO12880
  794. 12910  PRINT"Put the source diskette in drive ";LT$(BL%+10);". Press any key to continue.
  795. 12920  IFINKEY$=""GOTO12920
  796. 12930  GOTO1350
  797. 12940  LOCATE 10,1:PRINT"*";:LOCATE 19,1:DRI$="A":PRINT"SOURCE ":GOSUB 10680:BL%=DR%:GOSUB 12200:PRINT"DESTINATION ":GOSUB 10680:DL%=DR%:STI%=0:ETI%=41:GOSUB 10810:GOSUB 10870
  798. 12980  PRINT"Side <0>, <1>, <B>oth or <A>utomatic   A ";:GOSUB12430:GH%=0:IFKB$="B"ORKB$="b"THENGH%=2:GOTO13070
  799. 13000  IFKB$="A"ORKB$="a"GOTO13040
  800. 13010  IFLEN(KB$)=0THENGH%=0:GOTO13040
  801. 13020  GH%=VAL(KB$):IFGH%=1ORGH%=0GOTO13070
  802. 13030  GOTO12980
  803. 13040  GOSUB13370:GOSUB13480:PRINT:PRINTSPC(15)"NOTE: Use the Esc key to terminate this routine":PRINT"
  804. 13045  POKE&H309,0:POKE49,4:POKE51,1:POKE52,3:POKE50,0:POKE55,0:POKE56,0:POKE57,BL%:POKE58,0:UU%=USR(UU%):GH%=0:GHT%=PEEK(RST%+512):IFGHT%=255ORGHT%=253THENGH%=2
  805. 13060  POKE58,0:UU%=USR(UU%):GOTO13080
  806. 13070  GOSUB13370:GOSUB13480:PRINT"":GOTO13080
  807. 13080  NS%=1:IFGH%=2THENNS%=2
  808. 13090  POKE&HED,4:POKE&HEE,0:IFVAIL>16000GOTO14000
  809. 13094  IF BL%=DL%THEN PRINT"":PRINT"NOT ENOUGH MEMORY INSTALLED FOR A SINGLE DRIVE COPY!!":IF SBR%=1 THEN GOSUB 12200:GOTO 1370
  810. 13096  IFBL%=DL%GOTO13330
  811. 13100  FORTR%=ST%TOET%:FORSD%=1TONS%:IFGH%<2THENHS%=GH% ELSEHS%=SD%-1
  812. 13130  POKE49,18:POKE50,0:POKE51,0:POKE52,0:POKE53,BL%:POKE54,0:POKE55,0:POKE56,TR%:POKE57,DL%:POKE58,HS%:LOCATE23,1:PRINT"ANALYZING, COPYING & VERIFYING TRACK ";:PRINTUSING"###";TR%;:PRINT", SIDE ";:PRINTUSING"###";HS%;
  813. 13150  DEFUSR=UR%:UU%=USR(UU%):IF(PEEK(62)AND2)=2GOTO13340
  814. 13170  IFPEEK(53)=0ANDPEEK(54)=0GOTO13190
  815. 13180  PRINT"":PRINT"BAD COMPARE ON TRACK ";:PRINTUSING"###";TR%;:PRINT", SIDE ";:PRINTUSING"##";HS%:PRINT"
  816. 13190  IFVF$="N"GOTO13220
  817. 13195  GOSUB13200:GOTO13220
  818. 13200  GOSUB13530:ZC%=CZ%:GOSUB13580:GOSUB13530:IFZC%=CZ%GOTO13220
  819. 13210  BEEP:PRINT"":PRINT"CRC VERIFY ERROR ON TRACK";:PRINTUSING"###";TR%;:PRINT", SIDE";:PRINTUSING"##";HS%:PRINT"":RETURN
  820. 13220  NEXTSD%:NEXTTR%:BEEP:IFSBR%=1THENRETURN
  821. 13260  GOSUB 17000:PRINT"":BEEP:PRINT TAB(16)"Copy complete. Do you wish to make another <Y/N>  ";:GOSUB 12430:IF KB$="Y"OR KB$="y"GOTO 13290 ELSE POKE &HD2,0
  822. 13270  IFKB$="N"ORKB$="n"GOTO13330
  823. 13280  GOTO13260
  824. 13290  PRINT"":PRINT TAB(20)"Press any key when ready to begin copying.
  825. 13300  IFINKEY$=""GOTO13300
  826. 13310  PRINT"":GOTO13090
  827. 13330  POKE&H2D00,&HA:POKE&H2D01,32:POKE&H2D02,&H2A:POKE&H2D03,&H80:POKE&H2D04,&HC8:POKE40,&HF6:GOTO540
  828. 13340  BEEP:PRINT"":PRINT"Destination diskette is write-protected! Remove tab, press any key to continue.":POKE62,0:GOTO13300
  829. 13370  GOSUB 17500:PRINT"<S>ynchronous (slower) or <A>synchronous (faster) disk operation  ";ASYN$"  ";:GOSUB 12430
  830. 13380  IF KB$="S"OR KB$="s"THEN POKE &H3D,1:POKE &H18,1:ASYN$="S":RETURN
  831. 13390  IFKB$="A"ORKB$="a"ORKB$="F"ORKB$="f"THENPOKE&H3D,0:POKE&H18,0:ASYN$="A":RETURN
  832. 13400  IFKB$=""THENKB$=ASYN$:GOTO13380
  833. 13410  PRINT"RETYPE, PLEASE!":GOTO13370
  834. 13420  PRINT"Which drive (A,B,C,D or <N>one) ";DRI$;:GOSUB12430:IFKB$="N"ORKB$="n"THENPOKE&HF2,1:RETURN
  835. 13430  DR$=KB$:IFLEN(DRI$)=0ANDLEN(DR$)=0THENPRINT"Redo!":GOTO13420
  836. 13440  IFLEN(DR$)=0THENDR$=DRI$
  837. 13450  DR%=ASC(DR$):IFDR%>96THENDR%=DR%-32
  838. 13460  IFDR%<65ORDR%>68THENBEEP:PRINT"Redo!":GOTO13420
  839. 13470  DRI$=DR$:DR%=DR%-65:RETURN
  840. 13480  VF$="N":PRINT"Verify CRC errors <Y/N>  ";VF$;"  ";:GOSUB12430:IFKB$="Y"ORKB$="y"THENVF$="Y":RETURN
  841. 13500  IFKB$="n"ORKB$="N"THENVF$="N":RETURN
  842. 13510  IFKB$=""THENRETURN
  843. 13520  PRINT"RETYPE PLEASE!!":GOTO13480
  844. 13530  CZ%=0:FS%=LFE%+256*TR%:GOSUB12530:NNS%=PEEK(FS%):IFNNS%=0THENRETURN
  845. 13540  FS%=FS%+2:FORVF%=1TONNS%:IF(PEEK(FS%)AND&H40)<>0THENCZ%=CZ%+1
  846. 13560  FS%=FS%+5:NEXTVF%:RETURN
  847. 13580  PRINT"Verifying CRCs on track";TR%:POKE49,1:POKE50,0:POKE55,TR%:POKE56,TR%:POKE57,DL%:POKE58,HS%:UU%=USR(UU%):RETURN
  848. 13610  C1%=PEEK(ADR):C2%=INT(ADR/256):C3%=INT(C2%/16):C4%=C2%-16*C3%:C5%=ADR-256*C2%:C6%=INT(C5%/16):C7%=C5%-16*C6%:C8%=INT(C1%/16):C9%=C1%-16*C8%:PRINTLT$(C3%);LT$(C4%);" ";LT$(C6%);LT$(C7%);SPC(15);"Contents: ";LT$(C8%);LT$(C9%):RETURN
  849. 13620  GOSUB10680:GOSUB10750:ST%=STI%:PRINT"Which track ";:PRINTST%;" ";:GOSUB12430:STI$=KB$:IFLEN(STI$)=0GOTO13670
  850. 13650  ST%=VAL(STI$):IFST%<0THENBEEP:PRINT"Redo!":GOTO10810
  851. 13660  STI%=ST%
  852. 13670  FS%=LFE%+256*ST%:GOSUB12540:NF%=PEEK(FS%+1):NS%=PEEK(FS%)
  853. 13680  PRINT"What Format-N value ";NF%;" ";:GOSUB12430:IFKB$=""GOTO13710
  854. 13690  NF%=VAL(KB$):IFNF%<0ORNF%>255GOTO13680
  855. 13700  POKEFS%+1,NF%
  856. 13710  PRINT"How many sectors ";NS%;" ";:GOSUB12430:IFKB$=""GOTO13740
  857. 13720  NS%=VAL(KB$):IFNS%<0ORNS%>255GOTO13710
  858. 13730  POKEFS%,NS%
  859. 13740  FGL%=PEEK(&H2D07+NF%)
  860. 13750  PRINT"Format Gap Length (HEX!) ";HEX$(FGL%);" ";:GOSUB12430:IFKB$=""GOTO13780
  861. 13760  FGL%=VAL("&H"+KB$):IFFGL%<0ORFGL%>255GOTO13750
  862. 13770  POKE&H2D07+NF%,FGL%
  863. 13780  GOSUB13790:GOTO13840
  864. 13790  FGL%=PEEK(40)
  865. 13800  PRINT"Format Fill Character (HEX!) ";HEX$(FGL%);" ";:GOSUB12430:IFKB$=""GOTO13830
  866. 13810  FGL%=VAL("&H"+KB$):IFFGL%<0ORFGL%>255GOTO13800
  867. 13820  POKE40,FGL%
  868. 13830  FGL=PEEK(&HED)+256*PEEK(&HEE):RETURN
  869. 13840  PRINT"ABTIME Value (HEX!) ";HEX$(FGL);" ";:GOSUB12430:IFKB$=""GOTO13870
  870. 13850  FGL=VAL("&H"+KB$):EE%=INT(FGL/256):ED%=FGL-256*EE%:POKE&HED,ED%:POKE&HEE,EE%
  871. 13870  POKE&HFB,&H81:POKE&HFC,4*NS%:ET%=ST%:GOTO2170
  872. 14000  POKE&HE2,LSL%:POKE&HE3,LSH%:PRINT"":FORSD%=1TONS%:IFGH%<2THENHS%=GH% ELSEHS%=SD%-1
  873. 14015  POKE&HE0,FSL%:POKE&HE1,FSH%:T1%=ST%:T2%=ET%
  874. 14020  IFBL%<>DL%GOTO14100
  875. 14030  IFDMC%=1THENGOSUB2500:GOTO14100
  876. 14040  BEEP:PRINT"Insert the source disk and press the S key when ready.
  877. 14050  A$=INKEY$:IFA$<>"S"ANDA$<>"s"GOTO14050
  878. 14060  PRINT"":PRINT"
  879. 14100  POKE49,18:POKE50,0:POKE55,T2%:POKE56,T1%:POKE54,0:POKE53,BL%:POKE58,HS%:POKE57,BL%:LOCATE23,40:PRINT"Analyzing and reading side";HS%;", track";:UU%=USR(UU%):IFPEEK(52)=255GOTO14160
  880. 14102  IF PEEK(&H2D06)<>&HC8 THEN GOSUB 30000
  881. 14105  IFBL%=DL%THENGOSUB2505
  882. 14107  PRINT"":PRINT"
  883. 14110  POKE&HE0,FSL%:POKE&HE1,FSH%:T3%=PEEK(52)
  884. 14112  POKE55,T3%:POKE56,T1%:POKE54,1:POKE53,DL%:POKE58,HS%:POKE57,DL%:LOCATE23,28:PRINT"Formatting, writing and verifying side";HS%;", track";:UU%=USR(UU%):T5%=PEEK(&H44):IF(T5%AND2)=0GOTO14120
  885. 14116  BEEP:PRINT"":PRINT"":PRINT"Destination disk is write protected. Remove tab, press any key to continue.":PRINT"":PRINT"":PRINT"
  886. 14117  IFINKEY$=""GOTO14117
  887. 14118  GOTO14110
  888. 14120  T4%=PEEK(51):T9%=PEEK(52):IFT4%=255ANDT9%=255GOTO14160
  889. 14121  IFT9%<>255THENPRINT"":PRINT"":GOTO14124
  890. 14122  BEEP:PRINT"":PRINT"Possible verify failure in track";T4%:PRINT"":IFT4%<T3%THENT1%=T4%+1:GOTO14112
  891. 14124  IFVF$="N"GOTO14130
  892. 14125  FORTR%=T1%TOT3%:GOSUB13530:ZC%=CZ%:GOSUB13580:GOSUB13530:IFZC%<>CZ%THENGOSUB13210
  893. 14127  NEXT
  894. 14130  IFT3%=T2%GOTO14150
  895. 14140  T1%=T3%+1:POKE&HE0,FSL%:POKE&HE1,FSH%:GOTO14020
  896. 14150  T1%=ST%:NEXTSD%
  897. 14160  IFSBR%=1THENPRINT"":RETURN
  898. 14170  GOTO13260
  899. 16000  COLOR 15,1,1:GOSUB 11640:RETURN
  900. 16100  COLOR7,0,0:GOSUB11640:RETURN
  901. 17000  IF PEEK(&HD2)>1 THEN GOSUB 19000
  902. 17100  RETURN
  903. 17500  IF PEEK(&HD2)>0 THEN ASYN$="S" ELSE ASYN$="A"
  904. 17600  RETURN
  905. 18000  FORI=1TO2:SOUND2550,1:SOUND50,1:NEXTI:RETURN
  906. 19000  CLS:LOCATE 8,30:PRINT"DISKETTE HAS POSSIBLE":LOCATE 10,35:PRINT"LASER HOLE":LOCATE 12,34:PRINT"ON TRACK  ";INT(((PEEK(&HD2)-2)/2)):LOCATE 14,32:PRINT"RUN NOLOK PROGRAM":LOCATE 16,30:PRINT"BEFORE RUNNING COPY"
  907. 20000  RETURN
  908. 30000  STOP:RETURN
  909.