home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 89 / SGDS 89.2mg / SDGS.89 / SDC89 / C / FILEVIEW (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1989-01-21  |  15.4 KB  |  260 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 20  POKE 216,0: ONERR  GOTO 40000
  2. 21 VS = ( INT( PEEK( -15604)/16) = 8) *3: IF VS < >3  THEN  HOME : VTAB 12: PRINT "80 COLUMN CARD REQUIRED IN SLOT 3<CTRL-0x07>";: GET A$: PRINT  CHR$(4)"BYE"
  3. 22  GOTO 101
  4. 30 M$ = "INVERTING LIST - ONE MOMENT...": GOSUB 6070: FOR Y = 1 TO  INT(P/2):T$ = A$(Y):A$(Y) = A$(P +1 -Y):A$(P +1 -Y) = T$: NEXT : PRINT D$"FRE":J = 4:G = 1: GOSUB 5020: GOSUB 4521: GOSUB 4760: RETURN 
  5. 40 I = P
  6. 42 I =  INT(I/2): IF I <1  THEN 65
  7. 44  FOR T = 1 TO P -I: ON  RIGHT$(A$(T),24) < RIGHT$(A$(T +I),24) GOTO 60:T$ = A$(T +I):A$(T +I) = A$(T):A$(T) = T$:X = T
  8. 50  ON X -I <1 GOTO 60: ON  RIGHT$(A$(X -I),24) < RIGHT$(A$(X),24) GOTO 60:T$ = A$(X -I):A$(X -I) = A$(X):A$(X) = T$:X = X -I: GOTO 50
  9. 60  NEXT : GOTO 42
  10. 65 SF = 1: PRINT D$"FRE": PRINT : RETURN 
  11. 80 X = J -3 + INT(G/27) *17: VTAB J: POKE E,G -1: PRINT A$(X): IF D = 9  OR D = 77  OR D = 18  THEN J = 4:G = 1: RETURN 
  12. 81  IF D >48  AND D <58  THEN D = D -48:X = (D = 1) +(D = 9) *F +(D >1  AND D <9) * INT(D/9 *F):J = 3 +(X >34) *(X -34) +(X >17  AND X <35) *(X -17) +(X <18) *X:G = 1 +(X >17  AND X <35) *27 +(X >34) *54: GOTO 99
  13. 82  IF D = 21  THEN G = G +27: IF G >HM  THEN G = 1: GOTO 98
  14. 84  IF D = 21  AND G = HM  AND J >VM  THEN J = VM: GOTO 98
  15. 86  IF D = 8  THEN G = G -27: IF G <1  THEN G = HM
  16. 88  IF D = 8  AND G = HM  AND J >VM  THEN J = VM: GOTO 98
  17. 90  IF (D = 11  OR D = 65)  THEN J = J -1: IF G < = HM  AND J <4  AND G >1  THEN G = G -27:J = 20: GOTO 98
  18. 92  IF (D = 11  OR D = 65)  AND J <4  AND G = 1  THEN G = HM:J = VM: GOTO 98
  19. 94  IF D = 10  OR D = 32  OR D = 90  THEN J = J +1: IF G <HM  AND J >20  THEN G = G +27:J = 4: GOTO 98
  20. 96  IF (D = 10  OR D = 32  OR D = 90)  AND G = HM  AND J >VM  THEN G = 1:J = 4
  21. 98  IF R = 1  THEN 100
  22. 99 X = J -3 + INT(G/27) *17:O = X: INVERSE : VTAB J: POKE E,G: PRINT  RIGHT$(A$(X),24): NORMAL 
  23. 100  RETURN 
  24. 101  TEXT : HOME :D$ =  CHR$(4):E$ =  CHR$(27):R$ =  CHR$(13): PRINT D$"CLOSE": PRINT D$"PR#3":M = 1:WT =  -16384:TW = 128:KC =  -16368:BE$ =  CHR$(7):CD$ =  CHR$(21):OM$ =  CHR$(24) + CHR$(14):E = 36:MF = 130: DIM E$(MF): DIM A$(MF):SA = 48700:DA = 48701:LA = 19968:CH = 12032:GS = 1: IF  PEEK(64432) = 123  THEN SP =  PEEK(49206): POKE 49206,132:GS = 2.5
  25. 120 V$ = " FILE            TYP BLKS   FILE            TYP BLKS   FILE            TYP BLKS": FOR X = 1 TO 79:K$ = K$ +" ": NEXT : FOR X = 1 TO 79:U$ = U$ +"-": NEXT :B1$ =  LEFT$(K$,18):D$(0) = "VOLUME]":D$(1) = "DIRECTORY]": GOSUB 5000: GOSUB 5020: GOSUB 5030: GOSUB 5040: GOSUB 5050: FOR I = 8 TO 13  STEP 5: VTAB I: POKE E,27
  26. 121  PRINT "__________________________": NEXT : FOR I = 0 TO 4: VTAB 9 +I: POKE E,26: PRINT "|";: POKE E,53: PRINT "|": NEXT : VTAB 10: POKE E,36: PRINT "FileView"
  27. 122  VTAB 12: POKE E,29: PRINT "By Rick Pedley (C)1989":M$ = "**** CAPS LOCK DOWN PLEASE! ****": GOSUB 6070
  28. 125  VTAB 15: HTAB 27: PRINT "Copyright (c) 1988": VTAB 16: HTAB 27: PRINT "Published on Softdisk #89": VTAB 17: HTAB 27: PRINT "Subscriptions: 1-800-831-2694.": VTAB 18: HTAB 27: PRINT "Changing this notice is illegal."
  29. 126  GOSUB 43000: FOR I = 1 TO 1600 *GS: NEXT : IF D = 14  THEN  GOSUB 6100: RETURN 
  30. 150  GOSUB 4500: GOSUB 4700:J = 4:G = 1
  31. 170  IF CO  THEN  RETURN 
  32. 171  IF GS >1  THEN  POKE 49206,132
  33. 172  POKE KC,0: WAIT WT,TW:D =  PEEK(WT) -TW: POKE KC,0:D = D -(D >96  AND D <123) *32: IF ((D = 8  OR D = 21  OR D = 10  OR D = 65  OR D = 11  OR D = 90)  OR (D >48  AND D <58))  AND F >1  THEN  GOSUB 80: GOTO 170
  34. 190  IF D = 79  THEN M = 1: GOSUB 4500: GOSUB 4800: GOTO 170
  35. 195  IF (D = 9  AND TD = 1)  THEN  GOSUB 4500: GOSUB 4700: GOTO 170
  36. 200  IF D = 9  AND TD >1  THEN  GOSUB 4200: GOTO 170
  37. 201  IF D = 17  THEN 4604
  38. 203  IF D = 77  AND   NOT W  THEN  GOSUB 4100: GOTO 170
  39. 205  IF D = 13  AND   NOT R  THEN  GOSUB 4900: GOTO 170
  40. 210  IF D = 27  THEN  GOSUB 4600: GOTO 170
  41. 215  IF D = 42  AND   NOT R  AND   NOT W  THEN  GOSUB 4300: GOTO 170
  42. 220  IF D = 85  AND   NOT R  AND   NOT W  THEN  GOSUB 4350: GOTO 170
  43. 225  IF D = 86  AND M >1  THEN  GOSUB 4360: GOTO 170
  44. 230  IF (D = 82  AND   NOT R)  OR (D = 18)  AND   NOT W  THEN  GOSUB 4400: GOTO 170
  45. 235  IF D = 66  THEN  GOSUB 4000:J = 4:G = 1: GOSUB 98: GOTO 170
  46. 240  IF (D = 68  OR D = 127)  AND   NOT R  AND   NOT W  THEN  GOSUB 4150: GOTO 170
  47. 245  IF D = 80  AND H$ < >"S3,D2"  THEN  GOSUB 3900: GOTO 170
  48. 250  IF D = 76  AND   NOT R  AND   NOT W  THEN  GOSUB 3800: GOTO 170
  49. 255  IF D = 83  AND   NOT SF  AND F >1  THEN  GOSUB 3750: GOTO 170
  50. 260  IF D = 84  AND   NOT R  THEN  GOSUB 3500: GOTO 170
  51. 265  IF D = 32  AND F >1  THEN  GOSUB 30: GOTO 170
  52. 270  REM   IF D = 67 AND  NOT R AND  NOT CO AND  MID$ (A$(O),18,3) <  > "DIR" THEN GOSUB 3000: GOTO 170    
  53. 290  GOTO 170
  54. 3000  VTAB 2: POKE E,1: INVERSE : PRINT "COPYFILE": NORMAL :H = 7:SX = DP:Q$ = F$:Y$ = H$: GOSUB 4910:W$ = C$:D1 = M:BS =  VAL( MID$ (A$(O),21,5)):B1 = S
  55. 3020 CO = 1: ON SM = 1 GOTO 3030:M$ = "FIND & OPEN TARGET DIRECTORY, THEN PRESS 'C' ('X' CANCELS, TAB CHOOSES DRIVE)": GOSUB 6070: GOTO 3060
  56. 3030  VTAB 21: POKE E,1: PRINT ">[C] TO SAME DIR? ["O$"]";: POKE E,3: GET A$: GOSUB 6160: IF A$ = "N"  THEN O$ = "":SM = 0: GOSUB 5020: GOTO 3020
  57. 3040  ON A$ < >R$  AND A$ < >"Y"  AND A$ < >"C" GOTO 3190
  58. 3041 M$ = "ONE MOMENT...": GOSUB 6070:AE = 0: FOR O = 1 TO TT: FOR X = 2 TO 17: IF  MID$ (E$(O),X,1) = " "  THEN C$ =  MID$ (E$(O),2,X -2):G$ =  MID$ (E$(O),18,3):X = 17
  59. 3042  NEXT : IF W$ = C$  THEN AE = 1:TF$ = C$:SZ =  VAL( MID$ (E$(O),21,5)):O = TT
  60. 3044  NEXT : GOSUB 5020:D = 67: GOTO 3061
  61. 3060  GOSUB 171: ON D = 88 GOTO 3190: ON D < >88  AND D < >67 GOTO 3060: GOTO 3041
  62. 3061  IF   NOT SM  THEN TX = DP:TS$ = H$:O$ = F$:Z = (Y$ = TS$)
  63. 3062  IF W  AND F$ = O$  THEN  GOSUB 5020:M$ = "TARGET DISK IS WRITE-PROTECTED<CTRL-0x07>": GOSUB 6050: GOTO 3190
  64. 3067  IF O$ = Q$  THEN M$ = "SOURCE & TARGET PREFIXES ARE IDENTICAL<CTRL-0x07>": GOSUB 6050:M$ = "RENAME ONE OF THE VOLUMES FIRST WITH [CTRL-R]": GOSUB 6050: GOTO 3190
  65. 3070  IF M = 1  AND TT = 51  THEN M$ = "TARGET VOLUME DIRECTORY IS FULL<CTRL-0x07>": GOSUB 6050: GOTO 3190
  66. 3083  IF AE  AND G$ = "DIR"  THEN M$ = "FILE ALREADY EXISTS AND IS A 'DIR' FILE - CAN'T WRITE OVER IT<CTRL-0x07>": GOSUB 6050: GOTO 3190
  67. 3085  IF AE  THEN  VTAB 21: POKE E,10: PRINT " '"W$"' ALREADY EXISTS ON TARGET - COPY ANYWAY? [C]<CTRL-0x07> ";: GOSUB 6100: ON K < >217  AND K < >249  AND K < >195  AND K < >227  AND K < >141 GOTO 3190: GOSUB 5020
  68. 3090  IF (AE  AND (B2 +SZ +1) <BS)  OR (  NOT (AE)  AND (B2 +1 <BS))  THEN M$ = "NOT ENOUGH ROOM ON TARGET DISK<CTRL-0x07>": GOSUB 6050: GOTO 3190
  69. 3095  PRINT D$"FRE":RE = 0: IF   NOT Z  THEN  PRINT D$"PREFIX"Q$
  70. 3097  IF Z = 1  AND RE = 0  THEN M$ = "INSERT <--SOURCE--> DISK AND PRESS [RETURN]": GOSUB 6070: GOSUB 6100: ON K < >141 GOTO 3190: PRINT D$"PREFIX"Q$
  71. 3100 NM =  LEN(W$): POKE 773,NM: POKE 768,0: FOR X = 1 TO NM: POKE 773 +X, ASC( MID$ (W$,X,1)): NEXT : CALL 790:L =  PEEK(772) *65536 + PEEK(771) *256 + PEEK(770):FT =  PEEK(769): FOR B = 0 TO L  STEP CH:LO = CH *(L > = CH) +L *(L <CH): IF   NOT Z GOTO 3130
  72. 3124  GOSUB 5020: IF Z  AND RE = 0  THEN 3130
  73. 3125 H = 7:M$ = "INSERT <--SOURCE--> DISK AND PRESS [RETURN]": GOSUB 6070: IF Z  THEN  GOSUB 6100: PRINT D$"PREFIX"Q$
  74. 3126  ON K < >141  AND K < >248  AND K < >216 GOTO 3125: IF K < >141  THEN B = L: NEXT : GOTO 3190
  75. 3130 M$ = "READING <<SOURCE>>": GOSUB 6070: PRINT D$"BLOAD"Q$"/"W$",A"LA",B"B",L"LO",T"FT: GOSUB 5020: IF   NOT Z  THEN 3135
  76. 3133 H = 8:M$ = "INSERT -->TARGET<-- DISK AND PRESS [RETURN]": GOSUB 6070: IF Z  THEN  GOSUB 6100: PRINT D$"PREFIX"O$
  77. 3134  ON K < >141  AND K < >248  AND K < >216 GOTO 3133: IF K < >141  THEN B = L: NEXT : GOTO 3190
  78. 3135 H = 8:RE = RE +1
  79. 3136 M$ = "WRITING >>TARGET<<": GOSUB 6070: IF RE = 1  AND AE  THEN  PRINT D$"UNLOCK"O$"/"TF$: PRINT D$"DELETE"O$"/"TF$
  80. 3140  IF RE = 1  THEN  PRINT D$"CREATE"O$"/"W$",T"FT
  81. 3150  PRINT D$"BSAVE"O$"/"W$",A"LA",B"B",L"LO",T"FT:L = L -CH: NEXT : PRINT D$"PREFIX"O$: CALL 855:M$ = "COPY COMPLETED - PRESS ANY KEY": GOSUB 6050: GOTO 3199
  82. 3190 M$ = "COPY ABORTED - PRESS ANY KEY<CTRL-0x07>": GOSUB 6050:CO = 0:S = B1:M = D1: IF Z  THEN  GOSUB 6150
  83. 3192  PRINT D$"PREFIX"Q$","Y$:F$ = Q$: VTAB 2: POKE E,1: PRINT "FILE    ": GOSUB 5020:X = TX: GOSUB 4850: PRINT B$(X);:X = SX: GOSUB 4850: INVERSE : PRINT B$(X);: NORMAL :DP = X:S = B1:M = D1:H = 3: GOSUB 4518: GOSUB 4700: RETURN 
  84. 3199  IF Z  THEN  GOSUB 6080: GOSUB 6150
  85. 3200 CO = 0:S = B1:M = D1:TT = TT +(AE = 0):B2 = B2 +SZ *(AE = 1) -BS: VTAB 2: POKE E,1: PRINT "FILE    ": GOSUB 5020:X = TX: GOSUB 4850: PRINT B$(X);:X = SX: GOSUB 4850: INVERSE : PRINT B$(X);: NORMAL :DP = X:F$ = Q$:H$ = B$(X):M = D1:H = 3: GOSUB 4518: IF   NOT SM  THEN H = 1: GOSUB 4700
  86. 3202  IF SM  THEN  GOSUB 4760
  87. 3203 SM =   NOT Z: RETURN 
  88. 3500 H = 5:PR = 0: GOSUB 4910: GOSUB 6090:N$ =  CHR$(0): IF  PEEK(55) = 183  THEN N$ = ""
  89. 3508  GOSUB 6080: VTAB 7: PRINT "TYPE CONTENTS OF '"C$"' TO:": PRINT : PRINT " [1] SCREEN, OR": PRINT " [2] PRINTER?    [1]";: POKE E,18: GET A$: ON A$ = E$ GOTO 3553: IF A$ = R$  THEN A$ = "1"
  90. 3509 A =  VAL(A$): PRINT A: ON A <1  OR A >2 GOTO 3508: IF A = 2  THEN PR = 1: PRINT : VTAB 12: PRINT "TURN ON PRINTER, POSITION PAPER, THEN PRESS [RETURN]": GOSUB 6100: ON K < >141 GOTO 3508
  91. 3516  HOME :M$ = "PRESS [ESC] TO EXIT, [SPACEBAR] TO PAUSE/CONTINUE": GOSUB 6070: HOME : VTAB 6: IF PR = 1  THEN  PRINT D$"PR#" STR$(PR)
  92. 3520  PRINT D$"CLOSE": PRINT D$"OPEN"C$",T"G$: PRINT D$"READ"C$
  93. 3524  GET A$: PRINT N$;: IF A$ =  CHR$(12)  AND PR = 1  THEN A$ =  CHR$(13)
  94. 3528  ON A$ < >R$  AND A$ < CHR$(32) GOTO 3524: PRINT A$;: IF  PEEK(WT) <TW  THEN 3524
  95. 3536 X =  PEEK(WT) -TW: POKE KC,0: IF X = 27  THEN 3550
  96. 3540  GOSUB 6100: GOTO 3524
  97. 3550  PRINT D$"CLOSE": IF PR = 1  THEN  PRINT D$"PR#0"
  98. 3551  IF X < >27  THEN M$ = "FINISHED - PRESS ANY KEY": GOSUB 6050
  99. 3553  NORMAL : PRINT OM$: HOME : TEXT : GOSUB 5020: GOSUB 4521: GOSUB 4760: RETURN 
  100. 3750 M$ = "SORTING 'A' TO 'Z' - ONE MOMENT...": GOSUB 6070: GOSUB 40: GOSUB 4521: GOSUB 4760: RETURN 
  101. 3800  IF GS >1  THEN  POKE 49206,SP
  102. 3801  GOSUB 4910:M$ = "PRESS 'L' AGAIN TO LOAD '" +C$ +"'": GOSUB 6070: GOSUB 6100: ON K = 204  OR K = 236 GOTO 3803: GOSUB 5020: RETURN 
  103. 3803  TEXT : HOME : PRINT CD$: PRINT D$"CLOSE": VTAB 12: IF G$ = "BAS"  THEN  PRINT "LOADING "C$: PRINT D$"LOAD"C$
  104. 3805  IF G$ = "BIN"  THEN  PRINT "BLOADING "C$" AT DEFAULT ADDRESS": PRINT D$"BLOAD"C$: END 
  105. 3810  PRINT "BLOADING "C$",T"G$" AT A$2000": PRINT D$"CLOSE": PRINT D$"BLOAD"C$",T"G$",A$2000": NEW 
  106. 3900  GOSUB 6080: ON L$ >"0" GOTO 3919
  107. 3901  PRINT OM$: NORMAL : GOSUB 6080: VTAB 5: PRINT "PRINT CAT": PRINT "---------"
  108. 3904  PRINT : VTAB 7: PRINT "PRINTER IS IN WHICH SLOT/PORT? [1]";: POKE E,32: GET L$: ON (L$ <"1"  OR L$ >"7")  AND L$ < >R$  AND L$ < >E$ GOTO 3904: IF L$ = R$  THEN L$ = "1"
  109. 3905  IF L$ = E$  THEN  HOME : TEXT : PRINT OM$;: GOSUB 4521: GOSUB 4760: RETURN 
  110. 3906  IF D = 66  THEN  RETURN 
  111. 3910  POKE E,32: PRINT L$
  112. 3915  PRINT : VTAB 9: PRINT "[1] EPSON SERIES,": PRINT "[2] IMAGEWRITER, OR": PRINT "[3] IMAGEWRITER II? [1]";: POKE E,21: GET I$: ON (I$ <"1"  OR I$ >"3")  AND I$ < >E$  AND I$ < >R$ GOTO 3915: ON I$ = E$ GOTO 3901: IF I$ = R$  THEN I$ = "1"
  113. 3918  POKE E,21: PRINT I$
  114. 3919  ON F < = 1  OR SF GOTO 3921: VTAB 14: POKE E,0: PRINT "SORT FIRST? [Y]";: POKE E,13: GET A$: GOSUB 6160: PRINT A$: ON A$ < >"Y"  AND A$ < >R$  AND A$ < >E$ GOTO 3921: ON A$ = E$ GOTO 3901: VTAB 14: PRINT K$: VTAB 14: POKE E,0: PRINT "ONE MOMENT - SORTING A TO Z....":D = 19: GOSUB 40: VTAB 12: POKE E,0: PRINT K$
  115. 3921  VTAB 14: PRINT : VTAB 14: PRINT "PRINTING ON [P]APER OR [L]ABEL?  [P]";: POKE E,34: GET A$: GOSUB 6160: ON A$ = E$ GOTO 3901: IF A$ < >"L"  AND A$ < >"P"  AND A$ < >R$  THEN 3921
  116. 3922  IF A$ = R$  THEN A$ = "P"
  117. 3923  PRINT A$:PG$ = "PAPER":LS = 25: IF A$ = "L"  OR A$ = "l"  THEN PG$ = "LABEL":LS = 20:T1$ = X$:X$ =  LEFT$(X$, LEN(F$)) +"   [" + STR$(M) +"]":T2$ = V$:V$ = " FILE            TYP ":V$ = V$ +V$ +V$:H1$ = U$:U$ =  LEFT$(U$,62)
  118. 3925  VTAB 16: POKE E,0: PRINT "TURN ON PRINTER AND POSITION "PG$" - THEN PRESS [RETURN]": GOSUB 6100: ON K < >141 GOTO 3901: POKE 34,19: HOME : PRINT D$"PR#"L$: IF I$ = "1"  THEN  PRINT E$"3" CHR$(14)E$"S" CHR$(1) CHR$(15)
  119. 3931  IF I$ = "2"  THEN  PRINT E$"Q"E$"T09"
  120. 3932  IF I$ = "3"  THEN  PRINT E$"Q"E$"T09"E$ CHR$(121)
  121. 3936  NORMAL : PRINT  CHR$(24): PRINT X$: PRINT V$: PRINT U$:PS$ = "  ": IF LS = 20  THEN PS$ = " "
  122. 3937  IF R  THEN T$ = A$(1):A$(1) = "[NO FILES]" + LEFT$(K$,15)
  123. 3940  FOR X = P +1 TO P +3:A$(X) =  LEFT$(K$,25): NEXT :RW =  INT((P -.1)/3) +1: FOR X = 1 TO RW: PRINT  LEFT$(A$(X),LS) +PS$ + LEFT$(A$(X +RW),LS) +PS$ + LEFT$(A$(X +RW *2),LS): NEXT : PRINT U$: IF LS = 20  THEN BS$ = B$:B$ =  LEFT$(B$,18) + MID$ (B$,30,11) + MID$ (B$,45,18) +"  FILES/" + LEFT$(D$(M >1),3) +":" + LEFT$(K$,3 - LEN( STR$(P))) + STR$(P): GOTO 3945
  124. 3942 B$ =  LEFT$(B$,66) +"FILES/" + LEFT$(D$(M >1),3) +":" + LEFT$(K$,3 - LEN( STR$(P))) + STR$(P)
  125. 3945  PRINT B$: IF I$ = "1"  THEN  PRINT E$"@"
  126. 3946  IF I$ = "2"  OR I$ = "3"  THEN  PRINT E$ CHR$(99)
  127. 3950  PRINT D$"PR#0": NORMAL : PRINT OM$: IF LS = 20  THEN U$ = H1$:X$ = T1$:V$ = T2$:B$ = BS$
  128. 3951  IF R  THEN A$(1) = T$
  129. 3952  PRINT D$"FRE": GOSUB 6080: TEXT : GOSUB 4521: GOSUB 4760: RETURN 
  130. 4000  GOSUB 6080: VTAB 5: PRINT : VTAB 5: PRINT "[S]CREEN OR [P]RINTER? [S]";: POKE E,24: GET A$: GOSUB 6160: ON A$ = E$ GOTO 4050: IF A$ = R$  THEN A$ = "S"
  131. 4001  ON A$ = E$ GOTO 4050: PRINT A$: IF A$ = "S"  THEN 4020
  132. 4004  GOSUB 3904: IF L$ = E$  THEN  RETURN 
  133. 4006  PRINT : VTAB 9: PRINT "SWITCH ON PRINTER, POSITION PAPER & PRESS [RETURN]": GOSUB 6100: ON K < >141 GOTO 4000: POKE 34,19: HOME : VTAB 20: PRINT D$"PR#1": PRINT D$"CATALOG": PRINT D$"PR#0": PRINT OM$: GOTO 4050
  134. 4020  GOSUB 6080: VTAB 2: PRINT L$(2): GOSUB 4700: VTAB 4: FOR X = 1 TO P: PRINT A$(X): IF  PEEK(37) = 20  AND X < >P  THEN M$ = "PRESS ANY KEY FOR MORE - [ESC] TO CANCEL": GOSUB 6070: GOSUB 6100: GOSUB 6080: TEXT : VTAB 4: IF K = 155  THEN X = P: NEXT : GOTO 4050
  135. 4040  NEXT :M$ = "NO MORE - PRESS ANY KEY": GOSUB 6050
  136. 4050  GOSUB 5000:D = 1:H = 1: GOSUB 4700: IF CO  THEN  VTAB 2: POKE E,1: INVERSE : PRINT "COPYFILE": NORMAL 
  137. 4060  RETURN 
  138. 4100 FD = 0: IF F = 51  AND M = 1  THEN M$ = "VOLUME DIRECTORY IS FULL!<CTRL-0x07>": GOSUB 6050: RETURN 
  139. 4110  GOSUB 80: GOSUB 4406: IF FD  THEN  RETURN 
  140. 4115  IF  LEN(F$ +"/" +S$) >64  THEN M$ = "PREFIX CONTAINS MORE THAN 64 CHARACTERS - MAKE NAME SHORTER<CTRL-0x07>": GOSUB 6050: GOSUB 98: RETURN 
  141. 4120 M$ = "MAKING NEW DIRECTORY": GOSUB 6070: PRINT D$"CREATE"F$"/"S$",TDIR,"H$: GOSUB 5020:J = 4:G = 1:H = 1: GOSUB 4700: RETURN 
  142. 4150  GOSUB 4910:N =  VAL( MID$ (A$(O),21,5)): IF CO  AND F$ = Q$  AND Y$ = H$  AND W$ = C$  THEN M$ = "THIS FILE IS WAITING TO BE COPIED!<CTRL-0x07>": GOSUB 6050: RETURN 
  143. 4156  ON  LEFT$(A$(O),1) = " " GOTO 4162: VTAB 21: POKE E,20: PRINT " FILE LOCKED - DELETE ANYWAY? (Y/N):[N] ";: POKE E,57: GET A$: GOSUB 6160: GOSUB 5020: ON A$ = "Y" GOTO 4160: RETURN 
  144. 4160  GOSUB 4355: IF A$ = "Y" GOTO 4165
  145. 4162 M$ = " DELETE '" +C$ +"' ? (Y/N):[N] ": VTAB 21: POKE E,17 +15 - LEN(C$): PRINT M$;: POKE E,52: GET A$: GOSUB 6160: GOSUB 5020: IF A$ < >"Y"  THEN  RETURN 
  146. 4165 M$ = "DELETING '" +C$ +"'": GOSUB 6070: PRINT D$"CLOSE": PRINT D$"DELETE"C$: GOSUB 5020:U = U -N:S = BT -U: FOR Y = O TO P -1:A$(Y) = A$(Y +1): NEXT :P = P -1:F = F -(P <51): IF F = 0  THEN F = 1:A$(1) = "[NO FILES IN THIS " +D$(M >1):R = 1
  147. 4167  PRINT D$"FRE": GOSUB 6080: TEXT :J = 4:G = 1: GOSUB 4521: GOSUB 4760: RETURN 
  148. 4200 H = 3:M$ = "[TAB] TO SELECT DRIVE, [RETURN] TO OPEN VOLUME": GOSUB 6070: ON D = 9 GOSUB 80:X = DP: IF D = 79  THEN  GOSUB 6100: IF K = 141  THEN 4220
  149. 4210  GOSUB 4850: PRINT B$(X);: IF D = 79  THEN  VTAB 8 +X: PRINT : VTAB 8 +X: POKE E,0: PRINT B$(X)":  "C$(X)
  150. 4211 X = X +1: IF X >TD  THEN X = 1
  151. 4212  INVERSE : GOSUB 4850: PRINT B$(X);: IF D = 79  THEN  VTAB 8 +X: PRINT : VTAB 8 +X: POKE E,0: PRINT B$(X)":  "C$(X)
  152. 4213  NORMAL : GOSUB 6100: ON K = 137 GOTO 4210
  153. 4214  IF K = 155  AND D = 9  THEN  GOSUB 5020: GOSUB 4850: PRINT B$(X);:X = DP: INVERSE : GOSUB 4850: PRINT B$(X);: NORMAL : ON   NOT R GOSUB 98: RETURN 
  154. 4215  IF K = 141  AND D = 9  AND X = DP  AND M = 1  THEN K = 155: GOTO 4214
  155. 4220  IF K = 141  THEN M = 1:DP = X:F$ = C$(X):H$ = B$(X):H = 3:SM = (CO = 1) *SM: GOSUB 4518:H = 1: GOSUB 4700: RETURN 
  156. 4222  IF K = 207  THEN D = 79: POP : GOTO 190
  157. 4225  VTAB 21: PRINT : GOTO 4213
  158. 4300  IF  LEFT$(A$(O),1) = "*"  THEN  RETURN 
  159. 4310  GOSUB 4910: PRINT D$"LOCK"C$:A$(O) = "*" + RIGHT$(A$(O),24): VTAB J: POKE E,G -1: PRINT "*": RETURN 
  160. 4350  IF  LEFT$(A$(O),1) = " "  THEN  RETURN 
  161. 4355  GOSUB 4910: PRINT D$"UNLOCK"C$:A$(O) = " " + RIGHT$(A$(O),24): VTAB J: POKE E,G -1: PRINT " ": RETURN 
  162. 4360 F$ = C$(DP):M = 1:H = 2: GOSUB 4518:H = 1: GOSUB 4700: RETURN 
  163. 4400  IF D = 18  THEN Z$ = "--> VOL ": GOSUB 80: GOTO 4407
  164. 4405  IF  LEFT$(A$(O),1) = "*"  THEN M$ = "FILE LOCKED!<CTRL-0x07>": GOSUB 6050: RETURN 
  165. 4406 Z$ = "--> NEW ": IF D = 77  THEN Z$ = "--> DIR "
  166. 4407  GOSUB 4910: VTAB 21: PRINT Z$"NAME:[               ] (ENTER AN '*' TO CANCEL) ": POKE 33,30: VTAB 21: POKE E,14: CALL  -657: TEXT : GOSUB 5020: GOSUB 5030: GOSUB 4770: VTAB 21: PRINT :S$ = "": FOR X = 512 TO 767:C =  PEEK(X) -TW: IF C < >13  THEN S$ = S$ + CHR$(C -32 *(C >96  AND C <123)): IF C = 42  THEN X = 767: NEXT :FD = (D = 77): RETURN 
  167. 4415  IF C = 13  THEN X = 767
  168. 4420  NEXT :L =  LEN(S$): IF L >15  THEN M$ = "FILENAME TOO LONG!<CTRL-0x07>": GOSUB 6050:FD = (D = 77): RETURN 
  169. 4430  IF L = 0  THEN FD = (D = 77): RETURN 
  170. 4432 NG = 1: FOR NC = 1 TO L:NA =  ASC( MID$ (S$,NC,1)):NG = ((NA >64  AND NA <91)  OR (((NA = 46)  OR (NA >47  AND NA <58))  AND NC >1))  AND NG = 1: NEXT : IF NG = 0  THEN M$ = "A-Z, 0-9, AND PERIODS ONLY - START WITH A LETTER!<CTRL-0x07>": GOSUB 6050: GOTO 4407
  171. 4440  IF D = 18  THEN M$ = "RENAMING VOLUME": GOSUB 6070: PRINT D$"RENAME"C$(DP)","S$: GOSUB 5020: GOSUB 4500: GOSUB 4700: RETURN 
  172. 4450  IF D = 77  THEN  RETURN 
  173. 4460  PRINT D$"RENAME"C$","S$:A$(O) = " " +S$ + LEFT$(K$,16 -L) + RIGHT$(A$(O),8): GOSUB 98:SF = 0: RETURN 
  174. 4500  TEXT :M$ = "FINDING ON-LINE VOLUMES": GOSUB 6070:H = 1:J$ = "": GOSUB 6080:J = 4:G = 1: VTAB 4: PRINT D$"PREFIX,S" PEEK(SA)",D" PEEK(DA): PRINT D$"PREFIX": INPUT "";J$:J$ =  LEFT$(J$, LEN(J$) -1):CS =  PEEK(SA):CD =  PEEK(DA):H$ = "S" + STR$(CS) +",D" + STR$(CD)
  175. 4502 H = 2:X = 0: FOR Y = 22 TO 24: VTAB Y: POKE E,61: PRINT B1$;: NEXT : FOR SL = 2 TO 7: FOR DR = 1 TO 2: VTAB 5: PRINT D$"PREFIX,S"SL",D"DR:X = X +1: PRINT D$"PREFIX": IF X = 1  AND J$ = ""  THEN  INPUT "";J$:J$ =  LEFT$(J$, LEN(J$) -1):H$ = "S" + STR$( PEEK(SA)) +",D" + STR$( PEEK(DA)): PRINT D$"PREFIX"
  176. 4506  INPUT "";C$(X):C$(X) =  LEFT$(C$(X), LEN(C$(X)) -1):B$(X) = "S" + STR$(SL) +",D" + STR$(DR): GOSUB 4850: IF C$(X) = J$  AND B$(X) = H$  THEN  INVERSE :DP = X
  177. 4512  PRINT B$(X);: NORMAL 
  178. 4515  NEXT : NEXT : IF   NOT (X)  THEN M$ = "INSERT A DISK!<CTRL-0x07>": GOSUB 6050: GOTO 4500
  179. 4516 TD = X: POKE SA,CS: POKE DA,CD:F$ = J$
  180. 4518 DL$ =  STR$(M): IF M <10  THEN DL$ = "0" +DL$
  181. 4520 X$ = F$ + LEFT$(K$,66 - LEN(F$)) +" DIR LEVEL:" +DL$: VTAB 1: PRINT "": VTAB 1: PRINT X$: PRINT D$"PREFIX"F$","H$: GOSUB 5020
  182. 4521 J = 4:G = 1:X = J -3 + INT(G/27) *17:O = X: RETURN 
  183. 4600  POKE KC,0: IF M >1  THEN 4610
  184. 4602  IF M = 1  THEN  GOSUB 5020: PRINT BE$;: VTAB 21: POKE E,32: PRINT " QUIT (Y/N):[N] ";: POKE E,45: GET A$: GOSUB 6160: IF A$ < >"Y"  THEN  GOSUB 5020: RETURN 
  185. 4604  IF GS >1  THEN  POKE 49206,SP
  186. 4605  PRINT CD$: PRINT D$"BYE"
  187. 4610 LE =  LEN(F$): FOR X = (LE) TO 1  STEP  -1: IF  MID$ (F$,X,1) = "/"  THEN F$ =  LEFT$(F$,X -1):X = 1
  188. 4620  NEXT :M = M -1:H = 2: GOSUB 4518:H = 1: GOSUB 4700: RETURN 
  189. 4650 W = 0: POKE 216,0: ONERR  GOTO 41000
  190. 4652  VTAB 1: PRINT " ": PRINT D$"CREATEERASE.THIS.FILE,TBAS,"H$: PRINT D$"DELETEERASE.THIS.FILE,"H$: GOTO 4657
  191. 4654  VTAB 1: PRINT "*":W = 1
  192. 4657  POKE 216,0: ONERR  GOTO 40000
  193. 4658  RETURN 
  194. 4700  GOSUB 6080: TEXT :U = 0:S = 0:BT = 0:SF = 0: IF (CO  AND   NOT SM)  THEN KK = 1
  195. 4702 M$ = "READING FILENAMES": GOSUB 6070:R = 0:F = 1: VTAB 4: PRINT D$"FRE": PRINT D$"OPEN"F$",TDIR": PRINT D$"READ"F$: FOR X = 1 TO 3: INPUT L$(X): NEXT 
  196. 4710  INPUT A$(F): IF A$(F) = ""  AND F = 1  THEN R = 1:A$(1) = "[NO FILES IN THIS " +D$(M >1): ON KK = 0 GOTO 4750:TT = 0: GOTO 4750
  197. 4715  IF A$(F) = ""  THEN F = F -1: ON KK = 0 GOTO 4750:TT = F: GOTO 4750
  198. 4720  ON D = 66 GOTO 4722:A$(F) =  LEFT$(A$(F),20) + MID$ (A$(F),24,5): IF KK  THEN E$(F) = A$(F)
  199. 4722  IF H$ = "S3,D2"  THEN U = U + VAL( MID$ (A$(F),24,5))
  200. 4730 F = F +1: GOTO 4710
  201. 4750  ON H$ = "S3,D2" GOTO 4752: INPUT B$:S =  VAL( MID$ (B$,14,4)):U =  VAL( MID$ (B$,36,4)):BT = S +U: IF KK  THEN B2 = S
  202. 4752 P = F: IF F >51  THEN M$ = "THERE ARE MORE THAN 51 FILES - [SPACE BAR] TOGGLES LIST": GOSUB 6070:F = 51
  203. 4753  IF P >102  THEN M$ = "MORE THAN 102 FILES - CANNOT DISPLAY THEM ALL<CTRL-0x07>": GOSUB 6070
  204. 4755  PRINT D$"CLOSE": ON H$ < >"S3,D2" GOTO 4757:BT = 127:U = U +8:S = BT -U:B1 = S: IF KK  THEN B2 = S
  205. 4756  IF R  THEN  VTAB 4: POKE E,0: PRINT A$(1)
  206. 4757  GOSUB 4650: IF D = 66  OR D = 80  THEN B$ = "BLOCKS FREE:" + LEFT$(K$,5 - LEN( STR$(S))) + STR$(S) +"     BLOCKS USED:" + LEFT$(K$,5 - LEN( STR$(U))) + STR$(U) +"     TOTAL BLOCKS:  127": GOTO 4770
  207. 4759  IF D = 66  THEN 4770
  208. 4760  FOR X = 1 TO F: VTAB 3 +(X >34) *(X -34) +(X >17  AND X <35) *(X -17) +(X <18) *X: POKE E,0 +(X >17  AND X <35) *27 +(X >34) *54: IF X = F  THEN VM =  PEEK(37) +1:HM =  PEEK(36) +1
  209. 4765  PRINT A$(X): NEXT :O = 1
  210. 4770  FOR X = 22 TO 24: VTAB X: POKE E,10: PRINT "     ";: NEXT : VTAB 22: POKE E,14 - LEN( STR$(U)): PRINT U: POKE E,14 - LEN( STR$(S)): PRINT S: POKE E,14 - LEN( STR$(P)): PRINT P -(R = 1) +(P = 0);: IF D = 82  OR D = 66  THEN  GOSUB 5020:KK = 0: RETURN 
  211. 4772  GOSUB 5020: IF   NOT R  THEN  VTAB 4: PRINT : VTAB 4: POKE E,1: INVERSE : PRINT  RIGHT$(A$(1),24): NORMAL 
  212. 4775 KK = 0: RETURN 
  213. 4800  GOSUB 6080: TEXT : VTAB 7: PRINT "ON-LINE VOLUMES:": PRINT "---------------": FOR X = 1 TO TD: IF C$(X) = J$  AND B$(X) = H$  THEN  INVERSE 
  214. 4810  PRINT B$(X)":  "C$(X): NORMAL : NEXT : VTAB 1: GOSUB 4200: RETURN 
  215. 4850  VTAB 21 +(X = 1  OR X = 4  OR X = 7) +2 *(X = 2  OR X = 5  OR X = 8) +3 *(X = 3  OR X = 6  OR X = 9): POKE E,61 +(X >3) *6 +(X >6) *6: RETURN 
  216. 4900 H = 4: GOSUB 6090: IF (G$ = "DIR") +(G$ = "SYS") +(G$ = "BIN") +(G$ = "BAS") +(G$ = "TXT") = 0  THEN  PRINT BE$: RETURN 
  217. 4910  FOR X = 2 TO 17: IF  MID$ (A$(O),X,1) = " "  THEN C$ =  MID$ (A$(O),2,X -2): GOSUB 6090:X = 17
  218. 4920  NEXT : IF D < >13  THEN  RETURN 
  219. 4925  IF G$ = "DIR"  THEN F$ = F$ +"/" +C$:M = M +1:H = 2: GOSUB 4518:H = 1: GOSUB 4700: RETURN 
  220. 4927  IF GS >1  THEN  POKE 49206,SP
  221. 4930  IF G$ = "TXT"  THEN RN$ = "EXEC "
  222. 4940  IF G$ = "BIN"  OR G$ = "SYS"  THEN RN$ = "BRUN "
  223. 4950  IF G$ = "BAS"  THEN RN$ = "RUN "
  224. 4955 M$ = "PRESS [RETURN] AGAIN TO " +RN$ +"'" +C$ +"'": GOSUB 6070: GOSUB 6100: ON K = 141 GOTO 4960: GOSUB 5020: RETURN 
  225. 4960  TEXT : HOME : PRINT CD$: VTAB 10: HTAB 9: PRINT RN$;C$"...": PRINT D$"CLOSE": PRINT D$"-"C$: RETURN 
  226. 5000  PRINT : VTAB 2: PRINT V$: PRINT U$: RETURN 
  227. 5020  VTAB 21: PRINT : VTAB 21: PRINT U$: RETURN 
  228. 5030  VTAB 22: PRINT : VTAB 22: PRINT "BLKS USED:     ";: INVERSE : PRINT "ESC";: NORMAL : PRINT "OUT ONE LEVEL ";: INVERSE : PRINT "R";: NORMAL : PRINT "ENAME ";
  229. 5035  INVERSE : PRINT "*";: NORMAL : PRINT "LOK ";: INVERSE : PRINT "O";: NORMAL : PRINT "NLINE ";: INVERSE : PRINT "P";: NORMAL : PRINT "RINTCAT |": RETURN 
  230. 5040  VTAB 23: PRINT "BLKS FREE:     ";: INVERSE : PRINT "RET";: NORMAL : PRINT "RUN/OPEN DIR  ";: INVERSE : PRINT "U";: NORMAL : PRINT "NLOCK ";: INVERSE : PRINT "T";: NORMAL : PRINT "YPE ";: INVERSE : PRINT "V";: NORMAL : PRINT "OLUME ";: INVERSE : PRINT "M";: NORMAL : PRINT "AKE DIR |": RETURN 
  231. 5050  VTAB 24: PRINT "FILES/DIR:     ";: INVERSE : PRINT "TAB";: NORMAL : PRINT "SELECT DRIVE  ";: INVERSE : PRINT "D";: NORMAL : PRINT "ELETE ";
  232. 5055  INVERSE : PRINT "L";: NORMAL : PRINT "OAD ";: INVERSE : PRINT "B";: NORMAL : PRINT "IGCAT ";: INVERSE : PRINT "^Q";: NORMAL : PRINT "UIT!!";: RETURN 
  233. 6050  GOSUB 5020: VTAB 21: POKE E,39 - LEN(M$)/2: PRINT " ";M$;" ": GOSUB 6100: GOSUB 5020: RETURN 
  234. 6070  GOSUB 5020: VTAB 21: POKE E,39 - LEN(M$)/2: PRINT " "M$" ": RETURN 
  235. 6080  POKE 34,3: POKE 35,20: HOME : RETURN 
  236. 6090 G$ =  MID$ (A$(O),18,3): RETURN 
  237. 6100  POKE KC,0: WAIT WT,128:K =  PEEK(WT): POKE KC,0: RETURN 
  238. 6150 M$ = "PLEASE INSERT <<SOURCE>> DISK IN " +Y$: GOSUB 6050: VTAB 4: PRINT D$"PREFIX,"Y$: PRINT D$"PREFIX": INPUT P$: IF P$ < >Q$ +"/"  THEN  PRINT BE$;: GOTO 6150
  239. 6152  RETURN 
  240. 6160 A =  ASC(A$): IF A >96  AND A <123  THEN A$ =  CHR$(A -32)
  241. 6162  RETURN 
  242. 40000 Q =  PEEK(222): CALL  -3288: ON H = 1  AND (Q = 8  OR Q = 6) GOTO 4502: ON H = 2  AND (Q = 8  OR Q = 3) GOTO 4515: IF (H = 1  OR H = 2)  AND (Q = 5  OR Q = 20)  AND F = 1  THEN R = 1:A$(1) = "[NO FILES IN THIS " +D$(M >1): GOTO 4750
  243. 40021  IF (H = 1  OR H = 2)  AND (Q = 5  OR Q = 20)  THEN F = F -1: GOTO 4750
  244. 40030  IF H = 3  THEN  POP :H = 1: GOSUB 4500: GOSUB 4700: GOTO 170
  245. 40035  IF H = 8  AND Q = 4  THEN M$ = "TARGET IS WRITE-PROTECTED - PLEASE REMOVE STICKER<CTRL-0x07>": GOSUB 6050: GOTO 3136
  246. 40041  IF H = 7  THEN  PRINT BE$: GOTO 3125
  247. 40042  IF H = 8  THEN  PRINT BE$: GOTO 3133
  248. 40043  IF Q = 8  OR Q = 6  THEN H = 1: GOSUB 4500: GOSUB 4700: GOTO 170
  249. 40044  IF Q = 19  THEN  POP :M$ = "FILENAME ALREADY IN USE!<CTRL-0x07>": GOSUB 6050: GOTO 170
  250. 40045  IF Q = 10  THEN  POP :M$ = "DIRECTORY STILL CONTAINS FILES!<CTRL-0x07>": GOSUB 6050: GOTO 170
  251. 40046  IF Q = 107  THEN M$ = "THIS PROGRAM CANNOT HANDLE MORE THAN 130 FILES AT ONCE!<CTRL-0x07>": GOSUB 6050:M$ = "PLEASE INSERT ANOTHER DISK AND TRY AGAIN": GOSUB 6050: RUN 
  252. 40047  IF Q = 4  THEN  PRINT CD$: PRINT D$"BYE"
  253. 40050  IF H = 5  AND Q = 5  THEN 3550
  254. 40200  VTAB 21: HTAB 1: PRINT "UNDETERMINED ERROR. PRESS A KEY TO EXIT": POKE  -16368,0: WAIT  -16384,128: GET K$: PRINT  CHR$(4)"BYE"
  255. 41000 Q =  PEEK(222): CALL  -3288: ON Q = 4  OR Q = 13 GOTO 4654: IF Q = 9  THEN M$ = "DISK IS FULL - YOU MUST CHECK WRITE-PROTECT STATUS YOURSELF!<CTRL-0x07>": GOSUB 6050:W = 0: GOTO 4657
  256. 41010  IF Q = 17  THEN M$ = "VOLUME DIRECTORY IS FULL - YOU MUST CHECK WRITE-PROTECT STATUS YOURSELF!<CTRL-0x07>": GOSUB 6050:W = 0: GOTO 4657
  257. 41020  IF Q = 19  THEN M$ = "DUPLICATE VOLUMES ON LINE - CHECK WRITE-PROTECT STATUS YOURSELF!<CTRL-0x07>": GOSUB 6050:W = 0: GOTO 4657
  258. 41050  GOTO 40200
  259. 43000  FOR I = 790 TO 885: READ V: POKE I,V: NEXT I: RETURN : DATA 32,0,191,200,102,3,208,36,173,107,3,141,109,3,141,114,3,32,0,191,209,108,3,208,19,32,0,191,204,113,3,208,11,169,10,141,115,3,32,0,191,196,115,3,141,0,3,173,119,3
  260. 43001  DATA 141,1,3,160,2,185,110,3,153,2,3,136,16,247,96,169,7,141,115,3,32,0,191,195,115,3,141,0,3,96,3,5,3,0,112,0,2,0,0,0,0,1,0,10,5,3