10
20
30
40
50
60
70
80 :
90 VDU26:CLS:ON ERROR REPORT:PROCClose:PRINT:END
100 A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
110 d$=".":s$="/":IF(os%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\"
120 DIM ctrl% 31,name% 255:X%=ctrl%:Y%=X%DIV256:PROCgo:END
130 :
140 DEFPROCClose:chn%=chn%:IFchn%:A%=chn%:chn%=0:CLOSE#A%
150 ENDPROC
160 :
170 DEFPROCWait:ON ERROR OFF:PRINT"Press SPACE to continue...";:Z%=GET:ENDPROC
180 :
190 DEFPROCdump:FORd%=name% TO name%+40 STEP 4
200 PRINTFNh0(!d%,8);" ";:NEXT:PRINT'"""";
210 FORd%=name% TO name%+40:PROCv(?d%):NEXT:PRINT'
220 ENDPROC
230 :
240 DEFPROCpr(ad%):LOCAL l%
250 PRINT"Len=";?ad%;SPC(3-LENSTR$?ad%);"""";
260 IF ?ad%>0 FOR l%=ad%+1 TO ad%+?ad%:PROCv(?l%):NEXT
270 PRINT"""";:ENDPROC
280 :
290 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
300 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
310 DEFFNdrv(A%)=CHR$(48+A%-7*(A%>9))
320 DEFPROCv(A%):IF A%<31 OR A%>126 PRINT"""(";~A%;")"""; ELSE VDUA%
330 ENDPROC
340 :
350 DEFPROCdir
360 PRINT"Drive: ";:PROCpr(name%)
370 PRINT'SPC6"Dir: ";:PROCpr(name%+1+?name%)
380 o%=?(name%+2+?name%+?(name%+1+?name%))
390 PRINT'SPC6"Owner: ";~o%;" ";:IFo%=0:PRINT"Owner" ELSE PRINT"Public"
400 ENDPROC
410 :
420 DEFPROCinfo
430 PRINT"&05: ";fn$;SPC(11-LENfn$);:A%=FNfile(fn$,5)
440 PRINT"A%="FNh0(A%,2)" "FNh0(X%!2,8)" "FNh0(X%!6,8)" "FNh0(X%!10,8)" ";
450 PRINTFNh0(X%!14,8)" "FNf_access(X%?14,A%)" "FNf_prdate(X%!15)
460 FOR A%=2 TO 17:X%?A%=&AA:NEXT
470 PRINT"&FD: ";fn$;SPC(11-LENfn$);:A%=FNfile(fn$,&FD)
480 PRINT"A%="FNh0(A%,2)" "FNh0(X%!2,8)" "FNh0(X%!6,8)" "FNh0(X%!10,8)" ";
490 PRINTFNh0(X%!14,8)" "FNf_prtime(X%!6);" ";FNf_prdate(X%!9)
500
510 OSCLI"Info "+fn$:PRINT
520 ENDPROC
530 :
540 DEFFNf_prdate(A%):A%=A%AND&FFFF
550 =FNd0(A%AND31,2)+"/"+FNd0((A%DIV256)AND15,2)+"/"+STR$(1981+(A%DIV&1000)+(A%AND&E0)/2)
560 DEFFNf_prtime(A%):A%=A%AND&FFFFFF
570 =FNd0(A%AND255,2)+":"+FNd0((A%DIV256)AND255,2)+":"+FNd0((A%DIV65536)AND255,2)
580 :
590 DEFFNf_access(A%,B%):LOCAL A$
600 IF B%=2:A$="D" ELSE A$="-"
610 IF(A%AND128):A$=A$+"P" ELSE A$=A$+"-"
620 IF(A%AND8):A$=A$+"L" ELSE A$=A$+"-"
630 IF(A%AND4):A$=A$+"E" ELSE A$=A$+"-"
640 IF(A%AND2):A$=A$+"W" ELSE A$=A$+"-"
650 IF(A%AND1):A$=A$+"R" ELSE A$=A$+"-"
660 A$=A$+"/"
670 IF(A%AND64):A$=A$+"e" ELSE A$=A$+"-"
680 IF(A%AND32):A$=A$+"w" ELSE A$=A$+"-"
690 IF(A%AND16):A$=A$+"r" ELSE A$=A$+"-"
700 =LEFT$(A$+" ",10)
710 :
720 DEFFNargs0(A%,Y%,ptr%):IF?(TOP-3)=0:E%=Y%:Y%=0
730 IF PAGE<&8000:X%=&70:!X%=ptr%:=(USR&FFDA)AND&FF
740 SYS"OS_Args",A%,Y%,ptr% TO A%,Y%,ptr%:!X%=ptr%:=A%
750 :
760 DEFFNargs(A%,Y%,ptr%):LOCALX%,E%:IF?(TOP-3)=0:E%=Y%:Y%=0
770 IFPAGE<&8000:LOCAL!&70:X%=&70:!X%=ptr%:CALL&FFDA:=!X%
780 SYS"OS_Args",A%,Y%,ptr%TO,,ptr%:=ptr%
790 :
800 DEFFNgbpbA(A%,ch%,addr%,num%,ptr%)
810 !X%=ch%:X%!1=addr%:X%!5=num%:X%!9=ptr%:=(USR&FFD1)AND&FF
820 :
830 DEFFNgbpb8(ptr%):X%!1=name%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1:IFX%!5=1:=""
840 A%=name%:A%?(1+?A%)=13:=$(A%+1)
850 :
860 DEFFNfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%DIV256:=(USR&FFDD)AND&FF
870 :
880 DEFFNopen:LOCALA%:A%=OPENUP"*":IFA%:=A% ELSE =OPENUPFNgbpb8(0)
890 :
900 :
910 :
920 DEFPROCgo
930
940
950 X%=ctrl%:Y%=X%DIV256:CLS:PRINT"OSARGS"'"======";
960 test$=FNgbpb8(0):RESTORE 960:IF test$="":test$="FSTEST"
970 DIM A$(11,1):FORB%=0TO1:FORA%=0TO9:READA$(A%,B%):NEXT:NEXT
980 A%=-3:B%=0:chn%=0:ext%=0
990 ON ERROR PRINTTAB(51,VPOS);CHR$19;CHR$0;CHR$0;CHR$0;:REPORT:PRINT:A%=A%+1:IFA%>6:A%=-3:B%=B%+1
1000 REPEAT:IFA%=-3:PRINT:IFB%:chn%=OPENUPtest$
1010 IFA%=-3:IFB%:ext%=FNargs0(&FE,chn%,ext%):ext%=!X%
1020 IFA%>-3:IFB%:ext%=EXT#chn%
1030 PRINT"A%=";FNh0(A%,2);", Y%=";FNh0(chn%,2);", !X%=";FNh0(ext%,8);": ";A$(A%+3,B%AND1);
1040 retA%=FNargs0(A%,chn%,ext%):ret%=!X%
1050 PRINTSPC(51-POS);"A%=";FNh0(retA%,2);" !X%=";FNh0(ret%,8)
1060 A%=A%+1:IFA%>6:A%=-3:B%=B%+1:PROCWait:PRINTCHR$11'SPC30;
1070 UNTILB%>1:PROCClose
1080 DATA FD,Last drive,Ensure all files,Current FS,Command line
1090 DATA Version type,libfs number,Disk space used,Disk free space,06
1100 DATA Write context,Read context,Ensure file,Read PTR,Write PTR,Read EXT,Write EXT
1110 DATA Read allocated,Read EOF,Ensure size
1120
1130 :
1140 RESTORE 1140:PRINT:FOR Y%=25 TO 29:READ A$
1150 PRINT"A%=FE, Y%=";FNh0(Y%,2);","SPC(15)"Read HADFS ";A$;
1160 retA%=FNargs0(&FE,Y%,0):ret%=!X%
1170 PRINTSPC(51-POS);"A%=";FNh0(retA%,2);" !X%=";FNh0(ret%,8)
1180 NEXT:PRINT
1190 DATA CSD,LIB,URD,OPT/USER,CURR
1200 :
1210 ON ERROR OFF:PROCWait
1220 :
1230 :
1240
1250
1260 X%=ctrl%:Y%=X%DIV256:CLS:PRINT"OSGBPB"'"======"
1270 PRINT"A%=5, Read disk title:"
1280 !name%=0:A%=FNgbpbA(5,0,name%,0,0)
1290 PRINT"A%=";A%;" ";:PROCpr(name%)
1300 PRINT'TAB(6)"Opt: ";?(name%+1+?name%);" Drive: ";FNdrv(?(name%+2+?name%))
1310 :
1320 PRINT'"A%=6, Read directory name:"
1330 !name%=0:A%=FNgbpbA(6,0,name%,0,0)
1340 PRINT"A%=";A%;" ";:PROCdir
1350 :
1360 PRINT'"A%=7, Read library name:"
1370 !name%=0:A%=FNgbpbA(7,0,name%,0,0)
1380 PRINT"A%=";A%;" ";:PROCdir
1390 :
1400 PRINT'"A%=8, Read directory entries:"
1410 PRINTSPC11"Num: 3 Index: 0"
1420 !name%=0:A%=FNgbpbA(8,0,name%,3,0)
1430 PRINT"A%=";A%;TAB(11);"Num: ";X%!5;" Index: ";X%!9
1440 d%=name%:FORz%=X%!5 TO 2:PRINTSPC6;:PROCpr(d%):PRINT:d%=d%+1+?d%:NEXT
1450 :
1460 PRINT'"Checking OSGBPB extensions"
1470 chn%=OPENIN"%":IFchn%=0:chn%=OPENIN"@":IFchn%=0:PRINT"Can't open '%' or '@'."
1480 B%=9*2-1:ON ERROR PRINT"A%=";B%DIV2;SPC(6-POS);" XY%?0=";chn%AND((B%AND1)<>0);SPC(18-POS);CHR$19;CHR$0;CHR$0;CHR$0;:REPORT:PRINT
1490 REPEAT:B%=B%+1
1500 IF B%<32:IF(B%AND1)=0 OR chn%<>0:!name%=0:name%!8=0:A%=FNgbpbA(B%DIV2,chn%AND((B%AND1)<>0),name%,3,0)
1510 IF B%<32:IF(B%AND1)=0 OR chn%<>0:IF!name% OR name%!8:PRINT'"A%=";B%DIV2;"/";chn%AND((B%AND1)<>0);TAB(11)"Num: 3 Index: 0"'"A%=";A%;TAB(11)"Num: ";X%!5;" Index: ";X%!9:PROCdump
1520 UNTILB%>30:ON ERROR OFF:PRINT:PROCClose:PROCWait
1530 :
1540 :
1550
1560
1570 X%=ctrl%:Y%=X%DIV256:CLS:PRINT"OSFILE"'"======":RESTORE 1550
1580 FOR A%=1 TO 7:READ A$(A%,0):NEXT:A$(0,0)=FNgbpb8(0)
1590 IFs$=".":FOR A%=1 TO 6:READ A$(A%,0):NEXT
1600 IFd$="\":FOR A%=1 TO 6:READ A$(A%,0):NEXT
1610 B%=-1:ON ERROR VDU11:REPORT:PRINT" with *INFO"':IF ERR=17:END
1620 REPEAT:B%=B%+1
1630 IF B%<7:fn$=A$(B%,0):PROCinfo
1640 UNTILB%>6
1650 DATA FSTEST,NOFILE,$,%,&,@,^
1660 DATA FSTEST,NOFILE,/,/,/,.,..
1670 DATA FSTEST,NOFILE,\,\,\,.,..
1680 :
1690 :
1700 PROCWait
1710 PRINT:END