!*! Updated on 13-Dec-95 at 8:46 AM by Jim Randazzo; edit time: 0:03:20 !*************************** AMUS Program Label ****************************** ! Filename: FOLDER.BAS Date: 11/25/95 ! Category: UTIL Hash Code: 000-000-000-000 Version: 1.0(100) ! Initials: /AM Name: Mike L. Sessi ! Company: Birmingham Data Systems Inc. Telephone #: 707-795-1595 ! Related Files: accept.sbr, noecho.sbr, ! ! Min. Op. Sys.: AMOSL 1.0 Expertise Level: none !***************************************************************************** !*! Updated on 25-Nov-95 at 0:00 AM by Mike L. Sessi IV; edit time: 0:00:00 !*************************** AMUS Program Label ****************************** ! 100 PROGRAM folder,1.0(101) ! THIS PROGRAM USES ! XCALL ACCEPT.SBR ! to get single chr input ! XCALL NOECHO.SBR 110 MAP1 LABEL ! block 0, disk label information 120 MAP2 FIL,B,4 130 MAP2 VOL'NAM,S,40 140 MAP2 VOL'ID,S,10 150 MAP2 CREATOR,S,30 160 MAP2 INSTALL,S,30 170 MAP2 SYSTEM,S,30 MAP2 LAB1,B,1 ! last access MAP2 LAB2,B,1 MAP2 LAB3,B,1 MAP2 LAB4,B,1 MAP2 LAB5,B,1 ! created on MAP2 LAB6,B,1 MAP2 LAB7,B,1 MAP2 LAB8,B,1 180 MAP2 LAB9,S,260 MAP2 LAB0,S,100 MAP1 FLD'IN,S,100 MAP1 FOLDER(23) ! DISK SPEC MAP2 FLD,S,30 ! DSK02:FOLDER.FLD[001,002] ! or/ DSK2:FOLDER.FLD[1,2] MAP1 FLD'RD,X,512 MAP1 FLD'ROW,F,6,1 MAP1 FLD'ROW'S,F,6,0 MAP1 FLD'CT,F,6 ! MAP1 DIR'FILE MAP2 DIR'PTR,B,2 MAP2 D'SEQ,X,510 ! MAP1 D'RAN,X,512,@DIR'FILE ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! 200 210 MAP1 MFDX ! master file directory 220 MAP2 MFD0(64) ! 64 p'pn in 1 disk block 230 MAP3 PPNX,B,2 ! p'pn number 240 MAP3 LNK2,B,2 ! Points to the UFD block, also ! the next MFD block number (#64) 250 MAP3 MFD3,B,2 ! PASS WORD ? 260 MAP3 MFD4,B,2 ! ??? ! MAP1 PPN0,S,3 ! Hold p,pn number [123,123] 270 MAP1 PPN1,S,3 ! P,PN 1st 3 numbers 280 MAP1 PPN2,S,3 ! 2nd 3 numbers ! 290 MAP1 UFD ! USER FILE DIRECTORY (42 ENTRYS/BLK) 300 MAP2 PTR,B,2 ! Next UFD block number 310 MAP2 UFDENT(42) 320 MAP3 UFDNAM1,B,2 ! 1ST 3 CHR'S 330 MAP3 UFDNAM2,B,2 ! 2ND 3 CHR'S 340 MAP3 UFDNAMX,B,2 ! 3RD 3 CHR'S (EXT) 350 MAP3 UFDBLKX,B,2 ! FILE SIZE 360 MAP3 UFDACTX,B,2 ! FILE TYP. IF 65503 THEN CONTIG 370 MAP3 UFDFPTX,B,2 ! LINK TO 1ST BLOCK of file 380 MAP2 FIL3,X,6 ! 390 MAP1 RAD5O 400 MAP2 RAD5,S,1 410 MAP2 RADX,S,50,"ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 " 450 RAD5=CHR(0) ! 420 MAP1 UNP,S,3 ! unpacked UFD file chars (3) 430 MAP1 SP,S,20," " 440 MAP1 NAME,S,10 ! the unpacked file name ! 460 MAP1 SCR'ROW(128) ! store the MFD screen 470 MAP2 SCR,S,80 ! MFD's ([123,123]) MAP2 LNK,S,80 ! the link to the UFD ! MAP1 DIR'ROW(24) ! screen of the UFD block MAP2 DIR'COL(5) MAP3 DIR'NAM,S,10 ! file name.ext blocks MAP3 DIR'SIZ,B,2 ! file size MAP3 DIR'TYP,B,2 ! file type, or seq., ran. MAP3 DIR'LNK,B,2 ! link to 1st block ! MAP1 HEAD'IN MAP2 ENTRY,S,70 MAP2 H'FIL,S,442 ! MAP1 VARIABLE'LIST MAP2 AM0S,S,50 MAP2 SCR1$,S,100 490 SIGNIFICANCE 11 500 STRSIZ 80 MLS: input "Instruction ? ",q$ if ucs(q$) = "Y" then call INSTR : GOTO MLS LOOKUP "FOLDER.FIL",FOUND IF FOUND=0 THEN GOTO FLD'DIR ! file not found, output err message OPEN #14,"FOLDER.FIL",INPUT FLD: INPUT LINE #14,FLD'IN IF EOF(14) THEN GOTO FLD1 FLD'CT=FLD'CT+1 FLD(FLD'CT)=FLD'IN GOTO FLD FLD1: CALL FLD'FILES ! display folder files ? TAB(-1,29); ! turn off cursor XCALL NOECHO FLD'ROW=1 FLD'COM: CALL FLD'MRK'ON XCALL ACCEPT,A ! ! <- \/ ^ -> ! H J K L CR ! 8 9 10 11 12 13 CALL FLD'MRK'OFF ! up & down arrows only IF A=27 THEN GOTO EXIT ON A-7 CALL NULL,NULL,FLD'LF,FLD'VT,NULL,FLD'CR GOTO FLD'COM ! FLD'VT: ! UP ARROW FLD'ROW=FLD'ROW-1 IF FLD'ROW=0 THEN FLD'ROW=FLD'CT RETURN FLD'LF: ! DOWN ARROW FLD'ROW=FLD'ROW+1 IF FLD'ROW > FLD'CT THEN FLD'ROW=1 RETURN FLD'CR: CALL FLD'OPEN ! open folder file CALL MFD'SEC ! process the MFD section CALL FLD'CLOSE ! close folder file FLD'ROW'S=FLD'ROW ! save folder file pointer CALL FLD'FILES ! display all folder files FLD'ROW=FLD'ROW'S RETURN FLD'MRK'ON: PRINT TAB(FLD'ROW+1,2); TAB(-1,32); FLD(FLD'ROW); TAB(-1,33); RETURN FLD'MRK'OFF: PRINT TAB(FLD'ROW+1,2); TAB(-1,33); FLD(FLD'ROW); TAB(-1,33); RETURN FLD'OPEN: ! open folder file & read OPEN #1,FLD(FLD'ROW),RANDOM,512,F1 READ #1,FLD'RD RETURN FLD'CLOSE: CLOSE #1 RETURN FLD'FILES: F1=0 PRINT TAB(-1,0); "FOLDER FILE SPEC FILE LABEL INFO" PRINT TAB(23,1); "COMMANDS: ESC: Exit program, ARROWS: move selection"; print ", CR: opens folder File"; FOR FLD'ROW=1 TO FLD'CT CALL FLD'OPEN ! open folder file and do a read CALL FLD'CLOSE ! close file for f=1 to 40 !lenth of vol'nam if FLD'RD[f,f] >= " " and FLD'RD[f,f] < "}" then & LABEL[f,f]=FLD'RD[f,f] next f LABEL=FLD'RD ! move into LABEL PRINT TAB(FLD'ROW+1,28); VOL'NAM ! print label info CALL FLD'MRK'OFF ! print file name NEXT FLD'ROW RETURN ! MFD'SEC: print tab(2,1); tab(-1,10); CALL INIT ! clears mfd save area, reads ,loads & prints mfd MFD'ROW=2 ! start printing on this row SCH'STR=1 ! instr search starting point CALL FF ! get 1st mfd entry MFD'COM: CALL MFD'MRK'ON ! re-print mfd entry PRINT TAB(23,1); "Commands: ESC: file selection, ARROWS to move"; print ", CR: to make a selection"; XCALL ACCEPT,A ! ! <- \/ ^ -> ! H J K L CR ! 8 9 10 11 12 13 CALL MFD'MRK'OFF IF A=27 THEN RETURN ! return to FLD'CR ON A-7 CALL BS,NULL,LF,VT,FF,CR COM$=UCS(CHR(A)) ! convert to upercase ! CALL HEADER ! print header (A.A) GOTO MFD'COM ! get keyboard input ! NULL: RETURN BS: ! BACK SPACE IF B-1 < 2 THEN MFD'ROW=MFD'ROW-1 : B=100 IF MFD'ROW=1 THEN MFD'ROW=PPN'CT : B=100 FOR BS=B-1 TO 1 STEP -1 IF SCR'ROW(MFD'ROW)[BS,BS] = "[" THEN B=BS : BS=1 NEXT BS SCH'STR=B+1 RETURN FF: ! RIGHT ARROW FF1: B=INSTR (SCH'STR,SCR'ROW(MFD'ROW),"[") IF B=0 AND MFD'ROW > PPN'CT THEN MFD'ROW=2 : SCH'STR=1 : GOTO FF IF B=0 THEN MFD'ROW=MFD'ROW+1 : SCH'STR=1 : GOTO FF: SCH'STR=B+1 RETURN VT: ! UP ARROW MFD'ROW=MFD'ROW-1 IF MFD'ROW=1 THEN MFD'ROW=PPN'CT SCH'STR=1 CALL FF1 RETURN LF: ! DOWN ARROW MFD'ROW=MFD'ROW+1 IF MFD'ROW > PPN'CT THEN MFD'ROW=2 : SCH'STR=1 : CALL FF1 SCH'STR=1 CALL FF1 RETURN CR: MFD'TEMP=MFD'ROW : MFD'COL=B CALL DIR CALL INIT MFD'ROW=MFD'TEMP : B=MFD'COL CALL FF RETURN INIT: print tab(-1,0); FLD(FLD'ROW); TAB(1,28); VOL'NAM ! print label info FOR A=1 TO 64 LNK(A)=SPACE(100) SCR(A)=CHR(0) NEXT A CALL MFD ! read and load and print the mfd RETURN ! MFD'MRK'ON: ! display and print p,pn 13 MRK=INSTR(B,SCR'ROW(MFD'ROW),"]") ? TAB(MFD'ROW,B-1); TAB(-1,32); SCR'ROW(MFD'ROW)[B,MRK]; TAB(-1,33); RETURN ! MFD'MRK'OFF: 14 ? TAB(MFD'ROW,B-1); TAB(-1,33); SCR'ROW(MFD'ROW)[B,MRK]; TAB(-1,33); RETURN ! ! ***************************************** ! 700 MFD: ! read, load and print the mfd ! F1=1 ! point to mfd in a folder file READ #1,MFDX ! get folder's mfd 630 MD1=0 720 FOR MD=1 TO 64 ! 64 ppn's per block 730 IF PPNX(MD)=0 THEN MD=64 : GOTO OUT 740 CALL PPN'UNPACK 750 IF MD1=0 AND MD=1 THEN PPN0=PPN1 : MFD'ROW=2 : : COL=2 760 IF PPN1 # PPN0 THEN PPN0=PPN1 : ? : MFD'ROW=MFD'ROW+1 : & : COL=2 IF LEN(SCR(MFD'ROW)) > 70 THEN MFD'ROW=MFD'ROW+1 : COL=2 : & PRINT SCR1$= " ["+PPN1+","+PPN2+"] " 765 SCR(MFD'ROW)=SCR(MFD'ROW) +SCR1$ LNK(MFD'ROW)[COL;5] = LNK2(MD) USING "#ZZZZ" LEN'SCR=LEN(SCR1$) COL=COL+LEN'SCR 775 PRINT TAB(-1,33); "["+PPN1+","+PPN2+"]";TAB(-1,33); 800 OUT: NEXT MD IF PPNX(64)=0 AND LNK2(64) # 0 THEN print "%too many P,PNs" ! IF PPNX(64)=0 AND LNK2(64) # 0 THEN F1=LNK2(64) : CALL RD'DISK : & ! MFDX=BUFFER : MD1=1 : GOTO 720 PPN'CT=MFD'ROW ! NO MORE ENTRY'S 810 RETURN ! !********************* DIR ************* ! 820 DIR: IF LNK(MFD'ROW)=0 THEN PRINT "NO FILES, CR TO CONTINUE" : INPUT "",A$ : RETURN F1=LNK(MFD'ROW)[B;5] ! get the next block (record) link READ #1,UFD ! read ufd block (record) 830 BLOCKS=0 : T'BLOCKS=0 : FILES=0 CALL DIR'CLR 840 CALL DIR2 860 RETURN ! RTN TO CALLER 870 DIR2: 880 FOR A0=1 TO 42 NAME=CHR(0) 900 UNP=CHR(0) 910 IF UFDBLKX(A0)=0 THEN A0=42 : GOTO DIR1 920 IF UFDNAM1(A0)=65535 THEN GOTO DIR1 ROW1=ROW1+1 ! IF COL>64 AND ROW1 > 23 THEN CALL PRT'BLKS : CALL DIR'INP : & IF A=27 THEN RETURN ! rtn to mfd early IF ROW1>23 THEN ROW1=2 : COL=COL+16 : C'CT=C'CT+1 : CALL PRT'BLKS ! 930 CALL RAD50 ! UNPACK THE FILE NAME ! DIR'NAM(ROW1,C'CT)=NAME+SP[1,7-LEN(NAME)]+UNP+SP[1;3-LEN(UNP)] DIR'SIZ(ROW1,C'CT)=UFDBLKX(A0) ! file size DIR'TYP(ROW1,C'CT)=UFDACTX(A0) ! file type DIR'LNK(ROW1,C'CT)=UFDFPTX(A0) ! link to file ! 940 FILES=FILES+1 950 PRINT TAB(ROW1,COL-1); TAB(-1,33); NAME;SP[1,7-LEN(NAME)]; & UNP ; SP[1;3-LEN(UNP)]; TAB(-1,33); 960 BLOCKS=UFDBLKX(A0) 970 PRINT STR(BLOCKS); ! SP[1,4-LEN(STR(BLOCKS))+1]; 980 T'BLOCKS = T'BLOCKS + BLOCKS 1010 DIR1: NEXT A0 1020 IF PTR = 0 THEN CALL PRT'BLKS : CALL DIR'INP : RETURN ! 1030 F1=PTR ! get another ufd block (record) READ #1,UFD ! read it 1060 GOTO DIR2 ! print files on screen ! ! DIR'INP: ROW1=2 : C'CT=1 SCR1$=DIR'NAM(ROW1,C'CT) CALL DIR'MRK'ON PRINT TAB(-1,29); ! CURSOR OFF COM'DIR: ON ERROR GOTO EXIT print tab(-1,29); print tab(24,1); "^T: next screen, Arrows: move around"; print ", CR: read, SP: un/mark file, C: to copy"; tab(1,79); XCALL ACCEPT,A CALL DIR'MRK'OFF CALL SAVE'CT ! <- \/ ^ -> ! H J K L CR ! 8 9 10 11 12 13 IF A=27 THEN PRINT TAB(-1,0); : RETURN ! return to CR'MFD ON A-7 CALL DIR'BS,NULL,DIR'LF,DIR'VT,DIR'FF,DIR'CR IF A=20 THEN CALL DIR'CLR : ROW1=2 : RETURN ! ^T IF A=32 THEN CALL DIR'FILE'MARK ! un/mark file IF A=67 OR A=99 THEN CALL DIR'COPY'FILES : print tab(-1,29); CALL CK'DIR'NAM CALL DIR'MRK'ON GOTO COM'DIR ! ! 27=esc, 20=^t, 32=sp, 67;99= c ! DIR'BS: ! BACK SPACE (LEFT ARROW) C'CT=C'CT-1 IF C'CT=0 THEN C'CT=5 : ROW1=ROW1-1 IF ROW1=1 AND C'CT=5 THEN ROW1=23 : C'CT=5 RETURN DIR'FF: ! RIGHT ARROW C'CT=C'CT+1 IF C'CT=6 AND ROW1 = 23 THEN ROW1=2 : C'CT=1 IF C'CT=6 THEN ROW1=ROW1+1 : C'CT=1 RETURN DIR'VT: ! UP ARROW ROW1=ROW1-1 IF ROW1=1 AND C'CT=1 THEN ROW1=23 : C'CT=5 IF ROW1=1 THEN C'CT=C'CT-1 : ROW1=23 RETURN DIR'LF: ! DOWN ARROW ROW1=ROW1+1 IF ROW1 > 23 THEN ROW1=2 : C'CT=C'CT+1 IF C'CT=6 THEN ROW1=2 : C'CT=1 RETURN DIR'CR: CALL PRT'FILE'SCR CALL DIR'PRT CALL PRT'BLKS CALL PRT'HD RETURN DIR'1: ON ERROR GOTO EXIT CALL DIR'PRT PRINT TAB(-1,29); CALL PRT'HD CALL DIR'LF RETURN ! SAVE'CT: C'CT'S=C'CT : ROW1'S=ROW1 RETURN RESTORE'CT: C'CT=C'CT'S : ROW1=ROW1'S RETURN CK'DIR'NAM: IF DIR'NAM(ROW1,C'CT) = "" THEN CALL RESTORE'CT RETURN ! DIR'PRT: PRINT TAB(-1,0); FOR C=1 TO 5 CCT=C * 16 - 15 FOR R=1 TO 23 IF DIR'NAM(R,C)="" THEN GOTO NXR PRINT TAB(R,CCT); TAB(-1,33);DIR'NAM(R,C); & TAB(-1,33); STR(DIR'SIZ(R,C)); NXR: NEXT R NEXT C RETURN ! DIR'MRK'ON: ! Need to re-print file name again. This will allow it to work on all crts CCT=C'CT * 16 - 15 IF CCT <= 0 THEN CCT=1 SCR1$=DIR'NAM(ROW1,C'CT) PRINT TAB(ROW1,CCT); TAB(-1,32); SCR1$; TAB(-1,33); RETURN DIR'MRK'OFF: CCT=C'CT * 16 - 15 IF CCT <= 0 THEN CCT=1 PRINT TAB(ROW1,CCT); TAB(-1,33);SCR1$; TAB(-1,33); RETURN ! PRT'BLKS: PRINT TAB(1,21); STR(FILES); " Files "; STR(T'BLOCKS);" Blocks"; RETURN ! PRT'HD: E=INSTR(B,SCR(MFD'ROW),"]") PRINT TAB(1,1);"Directory Utility";TAB(1,45); & FLD(FLD'ROW);" ";SCR(MFD'ROW)[B,E]; RETURN ! DIR'CLR: 831 PRINT TAB(-1,0); 832 ROW1=1 : COL=2 : C'CT=1 CALL PRT'HD FOR A=1 TO 24 DIR'ROW(A)=SPACE(50) NEXT A RETURN DIR'FILE'MARK: MRK$="*" ! seq. file IF DIR'TYP(ROW1,C'CT)= 65535 THEN MRK$="#" ! is it a random file? IF DIR'NAM(ROW1,C'CT)[7,7] = " " THEN DIR'NAM(ROW1,C'CT)[7,7] = MRK$ & ELSE DIR'NAM(ROW1,C'CT)[7,7] = " " RETURN DIR'COPY'FILES: COPY$=CHR(0) print tab(-1,28); ! cursor on PRINT TAB(24,1); TAB(-1,9); TAB(-1,32); "Copy File(s) To:"; print " Exp: DSK0:[7,6]"; PRINT TAB(24,39); "|_______________"; TAB(24,40); DCF: XCALL ACCEPT,F ! 27= esc, 8=bs, 127=del, 13=cr, IF F=27 THEN RETURN ! rtn COM'DIR IF F=8 OR F=127 THEN CALL RUB'OUT IF F=13 THEN CALL CHECK'FILE : RETURN ! rtn COM'DIR IF F < 43 OR F > 126 THEN GOTO DCF COPY$=COPY$+CHR(F) CALL PRT'NAME GOTO DCF RUB'OUT: RO=LEN(COPY$) IF RO-1 = 0 THEN COPY$=CHR(0) : CALL PRT'NAME : RETURN COPY1$=CHR(0) COPY1$=COPY$[1,RO-1] COPY$=COPY1$ CALL PRT'NAME RETURN PRT'NAME: PRINT TAB(24,40); TAB(-1,9); COPY$; RETURN CHECK'FILE: ON ERROR GOTO NO'FILE ! LOOKUP A FILE, OK, CONTINUE LOOKUP COPY$+"A.MLS",FOUND IF FOUND # 0 THEN GOTO FOR ALLOCATE COPY$+"A.MLS",1 FOR: FOR C=1 TO 5 FOR R=1 TO 23 IF DIR'NAM(R,C)[7,7]="*" OR DIR'NAM(R,C)[7,7]="#" & THEN CALL COPY'FILE NEXT R NEXT C RETURN NO'FILE: PRINT TAB(24,2); TAB(-1,9); IF ERR(0)=16 THEN PRINT "?File spec error"; IF ERR(0)=22 THEN PRINT "?PPN not found "; IF ERR(0)=26 THEN PRINT "?Device does not exist"; IF ERR(0)=23 THEN PRINT "?Protection violation"; PRINT " %Error ";ERR(0); " "; COPY$; " "; XCALL ACCEPT,D RESUME FILE'RTN FILE'RTN: RETURN ! rtn to DCF (DIR'COPY'FILES) ! COPY'FILE: A$=DIR'NAM(R,C) ! get file name A$[7,7]=" " CS=INSTR(1,A$," ") ! find a space in file name F$=A$[1,CS-1]+"."+ A$[8,10] ! put dot in PRINT TAB(24,2); TAB(-1,9); FLD(FLD'ROW);" to "; COPY$;F$; R1=510 F1=DIR'LNK(R,C) ! get first block link IF DIR'TYP(R,C) = 65535 THEN CALL COPY'RANDOM ELSE & CALL COPY'SEQ RETURN COPY'SEQ: CT=0 OPEN #20,COPY$+F$,OUTPUT ! open file COPY'S: READ #1,D'RAN F1=DIR'PTR ! get next link IF F1 = 0 THEN R1=DIR'TYP(ROW1,C'CT) ! bytes of last block PRINT #20,D'SEQ[1,R1]; CT=CT+1 PRINT TAB(24,50); CT; IF F1=0 THEN CLOSE #20 : RETURN GOTO COPY'S COPY'RANDOM: F14=0 LOOKUP COPY$+F$,FOUND IF FOUND < 0 THEN KILL COPY$+F$ ! erase old file 1335 ALLOCATE COPY$+F$,DIR'SIZ(R,C) ! create new file OPEN #20,COPY$+F$,RANDOM,512,F14 ! open file GOTO COPY'RAN PRINT "By Mike L. Sessi. 415/258-0102 .. 707/795-1596 11/24/95" print "Questions, call me" COPY'RAN: READ #1,D'RAN WRITE #20,D'RAN F14=F14+1 IF F14 => DIR'SIZ(R,C) THEN CLOSE #20 : RETURN F1=F1+1 PRINT TAB(24,50); F14 GOTO COPY'RAN ! ! FILE NAMES UNPACK ! 1330 RAD50: D=40 1340 X=UFDNAM1(A0) : CALL UNPACK : CALL RAD51 : NAME=UNP 1350 X=UFDNAM2(A0) : CALL UNPACK : CALL RAD51 : NAME=NAME+UNP 1360 X=UFDNAMX(A0) : CALL UNPACK : CALL RAD51 : NAME=NAME ! +"."+UNP 1370 RETURN 1380 RAD51: 1390 UNP=RAD5O[R1+1,R1+1]+RAD5O[R2+1,R2+1]+RAD5O[R3+1,R3+1] 1400 RETURN 1070 PPN'UNPACK: 1080 PPN1=CHR(0) : PPN2=CHR(0) : X=PPNX(MD) 1090 D=256 : CALL UNPACK ! CONVERT TO OCTAL 1100 D=8 : X=R2 : X3=R3 : CALL UNPACK 1110 IF R1 > 0 THEN PPN1=STR(R1)+STR(R2)+STR(R3) : GOTO PPN2 1120 IF R2 > 0 THEN PPN1=STR(R2)+STR(R3) : GOTO PPN2 1130 PPN1=STR(R3) 1140 PPN2: 1150 D=8 : X=X3 : CALL UNPACK 1160 IF R1 > 0 THEN PPN2=STR(R1)+STR(R2)+STR(R3) : GOTO PPN9 1170 IF R2 > 0 THEN PPN2=STR(R2)+STR(R3) : GOTO PPN9 1180 PPN2=STR(R3) 1190 PPN9: RETURN ! 1200 UNPACK: 1210 Q=INT(X/D) : R=X-Q*D : X=Q : R3=R 1220 Q=INT(X/D) : R=X-Q*D : X=Q : R2=R 1230 Q=INT(X/D) : R=X-Q*D : X=Q : R1=R ! ? D,R1;"-";R2;"/";R3 1240 RETURN ! DIR'SIZ(ROW1,C'CT)=UFDBLKX(A0) ! file size ! DIR'TYP(ROW1,C'CT)=UFDACTX(A0) ! file type ! DIR'LNK(ROW1,C'CT)=UFDFPTX(A0) ! link to file ! check file type PRT'FILE'SCR: PRINT TAB(-1,0); F1=DIR'LNK(ROW1,C'CT) ! get first block link IF DIR'TYP(ROW1,C'CT) = 65535 THEN GOTO RANDOM'PRT R1 = 510 !look SEQ'PRT: R=1 1234 READ #1,D'RAN IF DIR'PTR = 0 THEN R1=DIR'TYP(ROW1,C'CT) ! bytes of last block S1: SEQ=ASC(D'SEQ[R,R]) IF SEQ > 31 AND SEQ < 126 THEN PRINT CHR(SEQ); : C=C+1 IF SEQ = 13 THEN PRINT CHR(13); CHR(10); : R=R+1 : C=0 : L=L+1 IF SEQ = 9 THEN PRINT CHR(9); : C=C+9 IF C > 79 THEN C=0 : L=L+1 IF L > 22 THEN CALL PRT'COM : IF B=27 THEN RETURN R=R+1 : IF R < R1 THEN GOTO S1 F1=DIR'PTR IF F1=0 THEN CALL PRT'COM : RETURN ! end of file GOTO SEQ'PRT PRT'COM: PRINT TAB(24,1); TAB(-1,9); C=0 : L=0 PRINT TAB(24,1); TAB(-1,32); "CR to continue listing, ESC to return >"; print tab(24,77); tab(-1,33); XCALL ACCEPT,B PRINT TAB(24,1); TAB(-1,9); RETURN RANDOM'PRT: R=1 READ #1,D'RAN R1: SEQ=ASC(D'SEQ[R,R]) IF SEQ > 31 AND SEQ < 126 THEN PRINT CHR(SEQ); : C=C+1 IF SEQ = 13 THEN PRINT CHR(13); CHR(10); : R=R+1 : C=0 : L=L+1 IF SEQ = 9 THEN PRINT CHR(9); : C=C+9 IF C > 79 THEN C=0 : L=L+1 IF L > 22 THEN CALL PRT'COM : IF B=27 THEN RETURN R=R+1 : IF R < R1 THEN GOTO R1 F1=F1+1 IF F1+1 > DIR'SIZ(ROW1,C'CT) THEN CALL PRT'COM : RETURN ! size of file GOTO RANDOM'PRT ! INSTR: PRINT "This program will extract files from a FOLDER file." print "It will overwrite any file that already exsist in" print "that account." print print "Do not try to look at an empty PPN," print "the program will bounce you out to the dot." print print "Questions: call mike sessi @ 707/795-1595" print "As always, if this program as value to you," print "you can always send me $." RETURN FLD'DIR: PRINT "Need a file called FOLDER.FIL. Please create by the" print "following: ? DIR/D FOLDER.FIL=*.FLD whereas .FLD is" print "the name(s) of the folder files" EXIT: ? TAB(-1,28); TAB(23,1); END