0 ' Chipmunk Disk Peeker/Poker ver 3.0 1 ' (C) 1985 Tim Ekdom 72575,1473 2 ' Chipmunk and CDOS (C) Holmes/PCSG 3 GOTO1500 5 IFPEEK(63034)>35ANDOP=ZTHEN?#I, 6 ?#I,USINGPU;CS;:RETURN 10 TY=PEEK(VARPTR(DS(Z))+DX):GOSUB120:CS=PEEK(VARPTR(DS(Z))+DX+11):RM=PEEK(VARPTR(DS(Z))+DX+10):RETURN 15 FORN=ITO12:DX=N*18:GOSUB10:?#I,USINGHF;N+FL;TY;PN;CS;RM:IFINKEY$=CHR$(27)THENN=13 16 NEXT:RETURN 17 NA$=NA$+LEFT$(" ",9-LEN(NA$)):RETURN 20 ONCHGOTO21,22,23,24,25,26 21 ?@41,PA;:RETURN 22 ?@81,PA;:RETURN 23 ?@121,PA;:RETURN 24 ?@161,PA;:RETURN 25 ?@201,PA;:RETURN 26 ?@241,PA;:RETURN 30 PI=INKEY$:IFPI=PTHEN30ELSERETURN 35 ?@280,E$;" Main or"PL;PD"? (M/F)";:FD=Z 36 GOSUB30:IFPI=CHR$(13)THENFM=I:RETURN 37 IFPI="M"ORPI="m"THENFD=I:RETURN 38 IFPI="F"ORPI="f"THENFD=2:RETURN 39 GOTO36 40 CLS:? 41 PI=P:?PC;:INPUTPI:IFLEN(PI)=ZTHENFM=I:RETURN 42 CS=VAL(PI):IFCS<0ORCS>239THEN41ELSERETURN 45 Q0=DSKI$(Z,TR,SE,Z):Q1=DSKI$(0,TR,SE,I):RETURN 46 DSKO$Z,TR,SE,Z,Q0:DSKO$Z,TR,SE,I,Q1:RETURN 50 FORJ=ITO1000:NEXT 51 FORJ=ITO500:NEXT 52 FORJ=ITO200:NEXT:RETURN 55 PI=P:?PT;:INPUTPI:IFLEN(PI)=ZTHENFM=I:RETURN 56 TR=VAL(PI):IFTR<0ORTR>79THEN55 57 PI=P:?PS;:INPUTPI:IFLEN(PI)=ZTHENFM=I:RETURN 58 SE=VAL(PI):IFSE<1ORSE>18THEN57ELSERETURN 60 ?@280,E$;" Output to screen or printer? (S/P)";:CLOSE:OP=Z 61 GOSUB30:IFPI=CHR$(13)THENFM=I:RETURN 62 IFPI="S"ORPI="s"THENOPEN"LCD:"FOROUTPUTAS1:RETURN 63 IFPI<>"P"ANDPI<>"p"THEN61 64 IF((INP(187)AND6)=2)ANDFP=ZTHENOPEN"LPT:"FOROUTPUTAS1:OP=I:RETURN 65 IF((INP(187)AND6)=2)ANDFPTHENFP=Z:RETURN 66 CLS:?:BEEP:?" Printer isn't ready. When ready," 67 ?P8;". ";P1;".":GOSUB75:IFFMTHENRETURNELSEGOTO64 70 ?@280,E$;" Copy 1 or copy 2?"; 72 GOSUB30:IFPI=CHR$(13)THENFM=I:RETURN 73 IFPI<"1"ORPI>"2"THEN72ELSERETURN 75 GOSUB30:IFPI=CHR$(13)THENFM=I:RETURN 76 IFPI<>" "THEN75ELSERETURN 80 ?@280,E$;" Pause=stop scroll ESC=exit scroll";:CALL16949:RETURN 85 TR=CS\3%:SE=((CSMOD3%)*6%)+1%:RETURN 90 ONERRORGOTO94:TR=Z:SE=5 91 GOSUB102:IFPEEK(VARPTR(DS(Z))+CS)=240THENRETURN 92 BEEP:?:?" The allocation table byte for that":?" cluster indicates it is not" 93 ?" a"PL;PD:FM=I:GOSUB50:GOSUB52:RETURN 94 SE=6:IFFT=ZTHENONERRORGOTO1000:RESUME91ELSEONERRORGOTO1010:RESUME91 95 ?" To proceed,";P8:?P1:GOSUB75:RETURN 100 ONERRORGOTO1000:GOTO102 101 ONERRORGOTO1010 102 DA(Z)=VARPTR(DS(Z)):DA(I)=VARPTR(ML(Z)):DA(2)=SE+256*TR 103 CALLDA(I),2%,VARPTR(DA(Z)):ONERRORGOTO0:RETURN 110 ONERRORGOTO1010:DA(Z)=VARPTR(DS(Z)):DA(I)=VARPTR(ML(Z)):DA(2)=SE+256*TR 111 CALLDA(I),4%,VARPTR(DA(Z)):ONERRORGOTO0:RETURN 120 PN=P:FORJ=ZTO8:PN=PN+CHR$(PEEK(VARPTR(DS(Z))+DX+J+1)):NEXT 122 IFASC(PN)=ZTHENPN="(blank)" 124 RETURN 130 BEEP:CALL16954:?@280,E$;P5;STR$(ERR);","PT":";STR$(TR);","PS":";STR$(SE);:GOSUB50:GOSUB52:RETURN 150 ONERRORGOTO0:FM=Z:FT=Z:CALL16954:CLS:?:?" 1)"PP;PD:?" 2)"PP" Allocation Table" 152 ?" 3) Trace"PF" Chain":?" 4)"PP;PC"s":?" 5) Read Text"PF 153 ?" 6) Recover"PF"s":?@315,"Exit"; 154 GOSUB30:CH=VAL(PI):IFCH<1ORCH>6THEN154 156 GOSUB20:ONCHGOTO200,400,250,500,300,600 200 GOSUB35:IFFMTHEN150 201 IFFD=ITHENCS=Z 202 GOSUB70:CP$=PI:IFFMTHEN150 203 GOSUB60:IFFMTHEN150 204 IFFD=2THENCLS:?:?PD;:GOSUB41:GOSUB90:IFFMTHEN150 206 CLS:GOSUB85:GOSUB80:?@0,:IFOPTHEN?#I, 207 IFCS=ZTHEN?#I," Main";ELSE?#I,PL; 208 ?#I,PD", copy ";CP$ 209 IFCS=ZTHEN?#I," Disk";ELSE?#I,PL; 210 ?#I," name: ";:GOSUB100:DX=Z:GOSUB120:?#I,PN 211 ?#I,:?#I,HD:?#I, 212 FL=Z:GOSUB15:IFN=14THEN220 215 FL=12:SE=SE+2:GOSUB100:GOSUB15 220 CALL16954:?@280,E$;P0"entry? (Y/N)"; 222 GOSUB30:IFPI="N"ORPI="n"THEN150 224 IFPI<>"Y"ANDPI<>"y"THEN222 226 ?:?P1 227 PI=P:?PF;" number";:INPUT" ";PI:IFLEN(PI)=ZTHEN150 228 FN=VAL(PI):IFFN<1ORFN>24THEN227 230 IFFN<13ANDFL=12THENSE=SE-2:FL=Z:GOSUB100 231 IFFN>12ANDFL=ZTHENSE=SE+2:FL=12:GOSUB100 232 ?:?HD:IFFN>12THENDX=(FN-12)*18ELSEDX=FN*18 233 GOSUB10:?USINGHF;FN;TY;PN;CS;RM:?:GOTO227 250 ?@280,E$;" Trace forward or backward? (F/B)"; 251 GOSUB30:IFPI=CHR$(13)THEN150 252 IFPI="F"ORPI="f"THENFD=Z:GOTO254 253 IFPI="B"ORPI="b"THENFD=IELSEGOTO251 254 GOSUB60:IFFMTHEN150 255 TR=Z:SE=5:ONERRORGOTO290 256 GOSUB102:GOSUB40:IF(FMORCS=Z)THEN150 257 IFOPTHEN?#I,:?#I,PF" Chain:"; 258 CLS:?#I,:GOSUB6:IFFDTHEN267 260 CS=PEEK(VARPTR(DS(Z))+CS):IFCS>240THEN265 261 IFCS=ZTHEN?#I,:?#I," Chain disrupted":GOTO270 262 IFCS=240THEN?#I,PL;PD:GOTO270 264 GOSUB5:GOTO260 265 IFPEEK(63034)>28ANDOP=ZTHEN?#I, 266 ?#I," (";RIGHT$(STR$(CS-240),I);" sectors)":GOTO270 267 FL=Z:FORN=ZTO239:IFCS=PEEK(VARPTR(DS(Z))+N)THENCS=N:FL=I:GOSUB5:N=240 268 NEXT:IFFLTHEN267 270 ?#I,:CLOSE:?@280,E$;" End of chain";:?@306,P1;:GOSUB30:GOTO150 290 SE=6:ONERRORGOTO1000:RESUME256 300 FT=Z:GOSUB35:IFFMTHEN150 302 IFFD=ITHENCS=Z:GOTO306 304 FM=Z:CLS:?:?PD;:GOSUB41:IFFMTHEN150 305 GOSUB90:IFFMTHEN304 306 POKEHIMEM+260,CS:CLS:?:ONERRORGOTO345:LFILES:?:ONERRORGOTO0 308 PN=P:?PF;"name w/ext: 0:";:LINEINPUTPN:IFLEN(PN)=ZTHEN150 310 ONERRORGOTO340:CLOSE:OPEN"0:"+PNFORINPUTAS1 311 PN=P:?" Output Device/Filename";:INPUTPN:IFLEN(PN)=ZTHENPN="LCD:" 312 IFINSTR(1,PN,"LPT")ORINSTR(1,PN,"lpt")THENFP=I:GOSUB65:PN="LPT:":IFFMTHEN150 313 OPENPNFOROUTPUTAS2:ONERRORGOTO345:CLS:GOSUB80:?@Z, 314 IFEOF(I)THEN320 316 PI=INPUT$(I,I):?#2,PI;:IFINKEY$=CHR$(27)THEN320 318 GOTO314 320 ?#2,:CLOSE:CALL16954:?@280,E$;P1;:GOSUB30:GOTO150 340 BEEP:?PE;ERR;"opening 0:"PN:GOSUB50 341 IFERL=310THENRESUME308 342 IFERL=312THENRESUME311ELSERESUME150 345 BEEP:?PE;ERR:GOSUB50:RESUME150 400 GOSUB70:CP$=PI:IFFMTHEN150 402 TR=Z:SE=5:IFCP$="2"THENSE=6 404 GOSUB100:GOSUB60:IFFMTHEN150 405 CLS:GOSUB80:?@Z,:IFOPTHEN?#I, 406 ?#I," Allocation Table, copy "CP$":":?#I,:IFOPTHEN420 408 GOSUB51:?#I,HA 410 FORN=ZTO239:?#I,USINGHB;N;PEEK(VARPTR(DS(Z))+N) 414 IFINKEY$=CHR$(27)THENN=240 416 NEXT:GOTO430 420 ?#I,HA" "HA" "HA" "HA 424 FORN=ZTO59:DX=VARPTR(DS(Z)) 426 ?#I,USINGHP;N;PEEK(DX+N);N+60;PEEK(DX+N+60);N+120;PEEK(DX+N+120);N+180;PEEK(DX+N+180) 427 IFINKEY$=CHR$(27)THENN=60 428 NEXT 430 CALL16954:?@280,E$;P0"byte? (Y/N)"; 432 GOSUB30:IFPI="N"ORPI="n"THENGOTO150 434 IFPI<>"Y"ANDPI<>"y"THEN432 436 ?:?P1 438 R=PEEK(63033):PI=P:?" Byte number";:INPUTPI:IFLEN(PI)=ZTHEN150 439 BN=VAL(PI):IFBN<0ORBN>239THEN438 440 IFR=8THENR=7 441 R=(R-1)*40+20:?@R,PEEK(VARPTR(DS(Z))+BN):GOTO438 500 GOSUB40:IFFMTHEN150 504 GOSUB85 506 GOSUB80:CLS:?@0,:CALL17001:?" Cluster:";CS:CALL17006:N=Z 508 ONERRORGOTO550:IFN=6THEN518 510 CALL17001:?PT":";TR;PS":";SE:CALL17006:GOSUB102 512 FORJ=ZTO255:?CHR$(PEEK(VARPTR(DS(Z))+J));:IFINKEY$=CHR$(27)THENJ=256 514 NEXT:?:IFJ=257THEN518 516 SE=SE+1:N=N+1:IFINKEY$=CHR$(27)THEN518ELSEGOTO508 518 CALL16954:ONERRORGOTO0:?@280,E$;" Space bar=next cluster ";P1; 520 GOSUB75:IFFMTHEN150 522 CS=CS+1:IFCS<240THENGOTO504ELSEGOTO150 550 BEEP:?:?P5;ERR;PT;TR;PS;SE:?:IFINKEY$=CHR$(27)THENRESUME518ELSERESUME516 600 CLS:BEEP:?:?" Caution: operations in this menu":?" will write data to the disk!!":GOSUB50 604 CLS:?:FM=Z:FT=Z:ONERRORGOTO0:?" 1) Modify"PD:?" 2) Modify Allocation Table" 608 ? " 3) Copy"PS" or"PC:? " 4) Fix CRC"PE:?" 5) Rename"PD:?" 6) Exit to top menu" 610 GOSUB30:CH=VAL(PI):IFCH<1ORCH>6THEN610 612 GOSUB20:ONCHGOTO700,800,850,1400,950,150 700 GOSUB35:IFFMTHEN604 701 CLS:ONFDGOTO702,750 702 CS=Z:GOSUB1200:GOTO604 750 CLS:?:?PD;:GOSUB41:IFFMTHEN604 752 FT=I:GOSUB90:IFFMTHEN604 756 GOSUB1200:GOTO604 800 CLS:?:TR=Z:SE=5:GOSUB101 802 PI=P:INPUT" Byte to change";PI:IFLEN(PI)=ZTHEN604 804 BC=VAL(PI):IFBC<0ORBC>239THEN802 808 ?" Byte number";BC;"value =";PEEK(VARPTR(DS(Z))+BC) 810 PI=P:INPUT" New value";PI:IFLEN(PI)=ZTHEN604 812 BV=VAL(PI):IFBV<0ORBV>255THEN810 814 POKE(VARPTR(DS(Z))+BC),BV:TR=Z:SE=5 818 GOSUB110:SE=6:GOSUB110:?:?P9;:GOSUB50:GOTO604 850 ?@280,E$;PS" or"PC"? (S/C)"; 851 GOSUB30:IFPI=CHR$(13)THEN604 852 IFPI="S"ORPI="s"THEN900 853 IFPI<>"C"ANDPI<>"c"THEN851 854 CLS:?:?P6:?P8 855 GOSUB75:IFFMTHEN604 856 ONERRORGOTO1010:?:GOSUB41:GOSUB85:IFFMTHEN604 858 GOSUB45:QA=Q0:QB=Q1:SE=SE+I:GOSUB45:QC=Q0:QD=Q1 860 SE=SE+I:GOSUB45:QE=Q0:QF=Q1:SE=SE+I:GOSUB45:QG=Q0:QH=Q1 862 SE=SE+I:GOSUB45:QI=Q0:QJ=Q1:SE=SE+I:GOSUB45:QK=Q0:QL=Q1 870 CLS:?:?P7:?P8 872 GOSUB75:IFFMTHEN604 876 ?:GOSUB41:GOSUB85:IFFMTHEN604 878 Q0=QA:Q1=QB:GOSUB46:SE=SE+I:Q0=QC:Q1=QD:GOSUB46 880 SE=SE+I:Q0=QE:Q1=QF:GOSUB46:SE=SE+I:Q0=QG:Q1=QH:GOSUB46 882 SE=SE+I:Q0=QI:Q1=QJ:GOSUB46:SE=SE+I:Q0=QK:Q1=QL:GOSUB46 890 ?:?P9;:GOSUB50:GOTO604 900 CLS:?:?P6:?P8 902 GOSUB75:IFFMTHEN604 903 ?:GOSUB55:IFFMTHEN604 904 ONERRORGOTO1010:GOSUB45:QA=Q0:QB=Q1 908 CLS:?:?P7:?P8 909 GOSUB75:IFFMTHEN604 910 ?:GOSUB55:IFFMTHEN604 912 GOSUB46:?:?P9;:GOSUB50:GOTO604 950 GOSUB35:IFFMTHEN604 952 CLS:ONFDGOTO958,954 954 DI$="folder":?:?PD;:GOSUB41:IFFMTHEN604 955 FT=I:GOSUB90:IFFMTHEN604 956 GOSUB85:GOTO960 958 DI$="disk":TR=Z:SE=I 960 ONERRORGOTO1010:GOSUB45:QA=Q0:SE=SE+2:GOSUB45:QB=Q0:ONERRORGOTO0 962 NA$=MID$(QA,2,9):CLS:?:?" Current ";DI$;" name = ";NA$ 964 NA$=P:?" Enter new name in lower case:":INPUT" ";NA$:IFLEN(NA$)=ZTHEN604 966 IFASC(NA$)<97THEN964 968 NA$=LEFT$(NA$,9):IFLEN(NA$)<9THENNA$=NA$+LEFT$(" ",9-LEN(NA$)) 970 GOSUB95:IFFMTHEN604 972 MID$(QA,2,9)=NA$:MID$(QB,2,9)=NA$:ONERRORGOTO1010 974 SE=SE-2:DSKO$Z,TR,SE,Z,QA:SE=SE+1:DSKO$Z,TR,SE,Z,QA:SE=SE+1:DSKO$Z,TR,SE,Z,QB:SE=SE+1:DSKO$Z,TR,SE,Z,QB 976 ?:?P9;:GOSUB50:GOTO604 1000 GOSUB130:RESUME150 1010 GOSUB130:RESUME604 1200 CLS::GOSUB85 1201 PI=P:?:?P2;:INPUT" to modify";PI:IFLEN(PI)=ZTHENRETURN 1202 FN=VAL(PI):IF FN<1ORFN>24THEN1201 1203 IFFN>12THENSE=SE+2:FN=FN-12 1204 GOSUB101:DX=FN*18:GOSUB120:?" "PN"? (Y/N) "; 1206 GOSUB30:IFPI="N"ORPI="n"THEN1201 1208 IFPI<>"Y"ANDPI<>"y"THEN1206 1210 ?:?" = No change" 1212 ?PF;" type:" 1214 R=PEEK(63033):?" 1-DO 2-BA 3-CO 4-folder 5-deleted":IFR=8THENR=7 1216 GOSUB30:R=(R-2)*40+14:?@R,PI:? 1218 TY$=PI:IFPI=CHR$(13)THENTY=PEEK(VARPTR(DS(Z))+DX):GOTO1230 1220 IFVAL(TY$)<1ORVAL(TY$)>5THEN1212 1222 ONVAL(TY$)GOTO1224,1225,1226,1227,1228 1224 TY=192:GOTO1229 1225 TY=128:GOTO1229 1226 TY=160:GOTO1229 1227 TY=240:GOTO1229 1228 TY=Z 1229 POKE(VARPTR(DS(Z))+DX),TY 1230 ?PF;"name.ext or"PL" name":DT=Z 1232 ?" (File = Caps /"PL" = lower case)":INPUT" ";NM$:IFLEN(NM$)=ZTHEN1256 1234 IFTY<>240THEN1242 1236 IFASC(NM$)<97THEN1232 1238 NA$=LEFT$(NM$,9):IFLEN(NA$)<9THENGOSUB17:GOTO1254ELSEGOTO1254 1242 IFASC(NM$)>90THEN1232 1244 FORN=ITO7:IFMID$(NM$,N,1)="."THENDT=N:N=8 1246 NEXT:IFDT=ZTHENNA$=LEFT$(NM$,6):GOSUB17:GOTO1254 1250 NA$=LEFT$(NM$,DT-1):IFDT<7THENNA$=NA$+LEFT$(" ",7-DT) 1252 IFDT>ZTHENNA$=NA$+MID$(NM$,DT+1,2)+" " 1254 FORN=ZTO8:POKE(VARPTR(DS(Z))+DX+N+1),ASC(MID$(NA$,N+I,I)):NEXT 1256 ?" Start";:GOSUB41:IFFMTHENFM=Z:GOTO1260 1258 POKE(VARPTR(DS(Z))+DX+11),CS 1260 RM$=P:INPUT" Bytes last sector: ";RM$:IFLEN(RM$)=ZTHEN1266 1262 RM=VAL(RM$):IFRM<0ORRM>255THEN1260 1264 POKE(VARPTR(DS(Z))+DX+10),RM 1266 ?:GOSUB95:IFFMTHENRETURN 1268 GOSUB110:SE=SE+1:GOSUB110:?:?P9;:GOSUB50:RETURN 1400 CLS:?:GOSUB55:IFFMTHEN604 1402 ONERRORGOTO1450:GOSUB102:?:?" No CRC error in"; 1404 ?PT;TR;PS;SE:? P3"aborted":GOSUB50:GOSUB51:GOTO604 1420 CALL17001:? PT;TR;PS;SE:CALL17006 1422 FORN=ZTO255:?CHR$(PEEK(VARPTR(DS(Z))+N));:NEXT 1424 ?:?:GOSUB95:IFFMTHENRESUME604 1426 GOSUB110:?:?P9:GOSUB50:GOTO604 1450 ?:IFERR<>67THEN?" Not a CRC"PE:?PE;ERR;"in";:RESUME1404 1452 RESUME1420 1500 MAXFILES=2:CLEAR2500:DEFINTA-Z:DEFSTRH,Q,P:DIMML(13),DS(127),DA(2):Z=0:I=1 1502 P="":PB=" ":SCREENZ,Z:CLS:KEYOFF:KEY(8)ON:ONKEYGOSUB,,,,,,,1600 1503 ?@93,"** CHIPMUNK **":?@132,"Disk Peeker/Poker":?@209,"V3.0 (C) 1985 Tim Ekdom" 1504 CALL17001:FORN=ZTO37:?@N+I,PB;:?@N+281,PB;:NEXT:CALL17006 1509 FORN=ZTO13:READML(N):NEXT 1510 PT=" Track":PS=" Sector":PD=" Directory":PP=" Display":PF=" File":PU=" ### ":PE=" Error" 1511 P0=PP+" a single ":P1=" =Exit":PA=CHR$(154):E$=CHR$(27)+"l":P2=PF+" number" 1512 P5=" Disk"+PE:P6=" Insert source disk,":P7=" Insert destination disk," 1514 P3=" Operation ":P8=" press Space bar":P9=P3+"complete":PC=" Cluster":PL=" Folder" 1516 HA=" Byte Contents":HB=" ### ###":HP=HB+" "+HB+" "+HB+" "+HB 1518 HD=" Nbr Type Name Start BLS":HF=" ### ### \ \ ### ###" 1520 GOSUB50:GOTO150 1600 POKEHIMEM+260,0:MAXFILES=1:MENU 1700 DATA9054,-10922,24099,22051,9173,9054,-7850,5633,2304,-7817,17151,-9728,1117,201 32767 ' 10/13/85 #2