8-Bit Software Online Conversion

Run Archiver Program v3.0 - Listing

10REM"   xm0 20REM"    ¶j5 30REM"    "' 40REM 50REM" By Andrew Black 60REM" (c) Andrew Soft 1991 70REM 80REM" This program has been rel eased 90REM" into Public Domain 100REM" 110ON ERROR PROCerror(0) 120: 130max%=30 140*DISC 150: 160DIM osfile &20, filename &10 170DIM file$(max%), length%(max%) 180DIM saddress%(max%), eaddress%(max% ) 190DIM mark%(max%), note$(max%) 200: 210MODE 7 220VDU15 230VDU23;8202;0;0;0; 240: 250PROCtitle 260PROCmenu 270: 280END 290: 300DEF PROCdrive 310CLS 320INPUT" Which drive (0-3)"drv% 330IF drv%<0 OR drv%>3 THEN PROCdrive 340: 350PROCoscli("DR."+STR$drv%) 360: 370PRINT 380PROCoscli(".") 390: 400PRINT'" Correct drive?":G$=GET$ 410IF G$="N" THEN PROCdrive 420PROCmenu 430ENDPROC 440: 450DEF PROCcompress 460PROCunmark 470version$="3.0" 480CLS 490PRINT" Compressing Mode " 500PRINT' 510: 520INPUT" How many files to compress:" fnum% 530IF fnum%>max% OR fnum%<1 THEN PROCc ompress 540: 550INPUT" Destination file:"dfile$ 560PRINT 570INPUT" Archived by : "archive$ 580INPUT" Date of archive: "date$ 590PRINT 600: 610INPUT" How many note lines: "nlines % 620IF nlines%>10 OR nlines%<1 THEN GOT O 610 630: 640PRINT 650FOR F%=1 TO nlines% 660INPUT" Notes: "note$(F%) 670NEXT 680: 690PRINT 700: 710CLS 720FOR G%=1 TO fnum% 730PRINT" Enter file ";G%;" to compres s" 740INPUT" : "file$(G%) 750NEXT 760: 770PROCcheck`files 780: 790output%=OPENOUT(dfile$) 800time%=((((total%+&515)/1024)*9)*1.5 )DIV1 810: 820CLS 830PRINT'" Writing file information... " 840: 850PRINT# output%,0,0,0,version$,fnum% ,total%,archive$,date$,nlines% 860: 870FOR Q%=1 TO nlines% 880PRINT# output%,note$(Q%) 890NEXT 900: 910FOR Z%=1 TO fnum% 920PRINT# output%,file$(Z%),saddress%( Z%),eaddress%(Z%),length%(Z%),0 930NEXT 940: 950PRINT'" Compressing files" 960PRINT" Compression time: ";(time% D IV60)" min(s) ";(time% MOD60)" sec(s)" 970: 980PRINT 990FOR W%=1 TO fnum% 1000: 1010PRINT# output%,W%:REM Keeps track o f file number 1020: 1030input%=OPENIN(file$(W%)) 1040: 1050PRINT" Compressing "file$(W%) 1060PRINT 1070: 1080FOR R%=1 TO length%(W%) 1090BPUT# output%,BGET# input% 1100NEXT 1110: 1120CLOSE#input% 1130NEXT 1140: 1150CLOSE#output% 1160: 1170PRINT'" Transfer successful" 1180G$=INKEY$(200) 1190ENDPROC 1200: 1210DEFPROCwrite`block 1220$filename=file$(L%) 1230!osfile=filename 1240!(osfile+2)=saddress%(L%) 1250!(osfile+6)=eaddress%(L%) 1260X%=osfileMOD256 1270Y%=osfileDIV256 1280A%=2 1290CALL&FFDD 1300X%=osfileMOD256 1310Y%=osfileDIV256 1320A%=3 1330CALL&FFDD 1340ENDPROC 1350: 1360DEFPROCread`block 1370$filename=file$(G%) 1380!osfile=filename 1390X%=osfileMOD256 1400Y%=osfileDIV256 1410A%=5 1420CALL&FFDD 1430saddress%(G%)=!(osfile+2) 1440eaddress%(G%)=!(osfile+6) 1450ENDPROC 1460: 1470DEF PROCoscli(s$) 1480$&900=s$:X%=&00:Y%=&09:CALL&FFF7:EN DPROC 1490: 1500DEF PROCerror(num%) 1510CLOSE#0 1520: 1530IF ERR=6 PRINT'" Not Archive file": I$=INKEY$(200):PROCmenu:ENDPROC 1540IF ERR=17 THEN PROCmenu 1550IF num%=1 THEN PRINT'" File not fou nd":I$=INKEY$(200):PROCmenu:ENDPROC 1560IF ERR=204 THEN PROCmenu 1570: 1580PRINT:REPORT:PRINT:END 1590ENDPROC 1600: 1610DEF PROCcheck`files 1620fils%=FNfiles 1630total%=0 1640IF fils%>max% THEN CLS:PRINT'" Aban doning Mode":PRINT'" Catalouge full":I$= INKEY$(400):PROCmenu:ENDPROC 1650: 1660PRINT 1670FOR G%=1 TO fnum% 1680: 1690input%=OPENIN(file$(G%)) 1700IF input%=0 THEN PROCmark(G%):GOTO 1790 1710: 1720length%(G%)=EXT# input% 1730total%=length%(G%)+total% 1740: 1750: 1760CLOSE#input% 1770PROCread`block 1780: 1790NEXT 1800: 1810PROCcheck2 1820PROCcheck3 1830ENDPROC 1840: 1850DEF PROCmark(rec%) 1860mark%(rec%)=1 1870ENDPROC 1880: 1890DEF PROCcheck2 1900set=0 1910: 1920FOR K%=1 TO fnum% 1930IF mark%(K%)=1 THEN PRINT" Unable t o find file ";file$(K%):set=1 1940NEXT 1950: 1960IF set=1 THEN I$=INKEY$(300):CLS:PR INT" Abandoning mode":PRINT'" Unable to find file(s)":I$=INKEY$(400):PROCmenu:EN DPROC 1970ENDPROC 1980: 1990: 2000DEF PROCcheck3 2010ON ERROR GOTO 2080 2020: 2030PROCoscli("SAVE "+dfile$+" 0000 "+S TR$÷(total%+&512+(&22*fnum%))) 2040: 2050ON ERROR PROCerror(0) 2060ENDPROC 2070: 2080IF ERR=198 CLS:PRINT" Abandoning mo de":PRINT'" Not enough disk space":I$=IN KEY$(400):PROCmenu:ENDPROC 2090: 2100PROCerror(0) 2110ENDPROC 2120: 2130DEF PROCexit 2140CLS 2150PRINT" Exit (Y/N)":G$=GET$ 2160IF G$="Y" THEN END 2170PROCmenu 2180ENDPROC 2190: 2200: 2210DEF PROCexamine 2220CLS 2230PRINT" Examine Archive " 2240PRINT 2250INPUT" Enter file to examine: "bfil e$ 2260PRINT 2270INPUT" Send data to printer",G$ 2280IF G$="Y" THEN set3=1 ELSE set3=0 2290: 2300input%=OPENIN(bfile$) 2310PROCex`dec(0) 2320I$=INKEY$(200) 2330ENDPROC 2340: 2350: 2360DEF PROCex`dec(choice%) 2370: 2380IF input%=0 THEN CLS:PRINT" Abandon ing mode":PRINT'" Unable to find file "; bfile$:I$=INKEY$(300):PROCmenu:ENDPROC 2390: 2400INPUT# input%,spare%,spare%,spare%, version$,fnum%,total%,archive$,date$,nli nes% 2410: 2420FOR E%=1 TO nlines% 2430INPUT# input%,note$(E%) 2440NEXT 2450: 2460: 2470FOR H%=1 TO fnum% 2480INPUT# input%,file$(H%),saddress%(H %),eaddress%(H%),length%(H%),spare% 2490NEXT 2500: 2510IF choice%=0 THEN CLOSE#input% 2520CLS 2530IF set3=0 THEN PRINT" Archive file: ";bfile$ 2540IF set3=1 THEN PRINT" Archive file: ";bfile$:VDU2 2550: 2560PRINT'" Archived with version: ";ve rsion$ 2570PRINT 2580PRINT" Archived files: ";fnum% 2590PRINT" Files total size: ";total% D IV 1024".";(total% MOD 1024)DIV 10"K" 2600PRINT" Archived by: ";archive$ 2610PRINT" Archive date: ";date$ 2620PRINT 2630PRINT 2640: 2650FOR O%=1 TO nlines% 2660PRINT" Notes: ";note$(O%) 2670NEXT 2680PRINT 2690: 2700FOR U%=1 TO fnum% 2710neat$=STRING$(9-LEN(file$(U%))," ") 2720PRINT" Filename ";U%;": ";file$(U%) ;neat$" length: ";length%(U%) DIV 1024;" .";(length%(U%) MOD 1024)DIV 10;"K" 2730IF set3=0 THEN I$=INKEY$(60) 2740NEXT 2750IF set3=1 THEN VDU3 2760: 2770PROCspace 2780ENDPROC 2790: 2800DEF PROCdecompress(switch%) 2810CLS 2820PRINT" Decompressing Mode " 2830PRINT 2840INPUT" Enter file to decompress: "b file$ 2850: 2860input%=OPENIN(bfile$) 2870: 2880set3=0 2890PROCex`dec(1) 2900IF switch%=1 THEN PROClocate:ENDPRO C 2910PROCd`check(switch%) 2920: 2930IF set2=1 THEN PROCre`cal 2940: 2950time%=(((total%/1024)*9)*1.5)DIV1 2960: 2970CLS 2980PRINT'" Decompressing time: ";(time % DIV60)" min(s) ";(time% MOD60)" sec(s) " 2990: 3000PROCdec`sec2 3010: 3020PRINT'" Transfer successful" 3030G$=INKEY$(200) 3040ENDPROC 3050: 3060DEFPROCtitle 3070REM You may alter this section 3080REM as you want. 3090PRINT"  ppppppppppp"; 3100VDU134,157,141 3110PRINT" ARCer Vers 3.0 by Andrew Bla ck" 3120VDU134,157,141 3130PRINT" ARCer Vers 3.0 by Andrew Bla ck" 3140PRINT"  £££££££££££" 3150VDU28,0,24,39,4 3160ENDPROC 3170: 3180DEF PROCd`check(switch2%) 3190set2=0 3200fils%=FNfiles 3210: 3220IF switch2%=1 THEN fnum%=nofile% 3230IF fnum%>max% GOTO 3270 3240IF fnum%>(max%+1)-fils% THEN PRINT' " Unable to decompress all files.":PRINT '" Lack of catalouge file space":set2=1: PRINT':INPUT" Carry on with decompressin g",G$:IF G$="Y" THEN 3280 3250: 3260IF set2=0 ENDPROC 3270CLS:PRINT" Abandoning Mode":PRINT'" Lack of catalouge file space":I$=INKEY$ (200):CLOSE#0:PROCmenu 3280: 3290IF set2=1 THEN fnum%=(max%+1)-fils% 3300ENDPROC 3310: 3320DEF PROCre`cal 3330total%=0 3340FOR G%=1 TO fnum% 3350total%=length%(G%)+total% 3360NEXT 3370ENDPROC 3380: 3390DEF PROCmenu 3400CLS 3410drv%=FNd 3420PRINT 3430PRINT" 1. Decompress archive" 3440PRINT'" 2. Compress archive" 3450PRINT'" 3. Examine archive" 3460PRINT'" 4. Change drive (Current: " ;drv%")" 3470PRINT'" 5. Exit" 3480PRINT'" * Operating system command" 3490G$=GET$ 3500: 3510IF G$="1" THEN PROCdecompress(0) 3520IF G$="2" THEN PROCcompress 3530IF G$="3" THEN PROCexamine 3540IF G$="4" THEN PROCdrive 3550IF G$="5" THEN PROCexit 3560IF G$="*" THEN PROCstar 3570: 3580IF G$="" THEN PROCmenu ELSE PROCmen u 3590ENDPROC 3600: 3610: 3620DEF PROCdec`sec 3630output%=OPENOUT(filec$) 3640: 3650PRINT'" Decompressing "filec$ 3660: 3670FOR N%=1 TO lengthc% 3680BPUT# output%,BGET# input% 3690NEXT 3700: 3710CLOSE#output% 3720PROCwrite`block 3730ENDPROC 3740: 3750DEF PROCdec`sec2 3760FOR L%=1 TO fnum% 3770INPUT# input%,spare%:REM Number of file 3780filec$=file$(L%) 3790lengthc%=length%(L%) 3800PROCdec`sec 3810: 3820NEXT 3830: 3840CLOSE#input% 3850ENDPROC 3860: 3870DEF PROCstar 3880CLS 3890INPUT" *"star$ 3900PROCoscli(star$) 3910PROCspace 3920ENDPROC 3930: 3940DEF PROCunmark 3950FOR R%=1 TO max% 3960mark%(R%)=0 3970NEXT 3980ENDPROC 3990: 4000REM" The machine code routines 4010REM" have been substuted for the 4020REM" following FuNctions in 4030REM" semi-BASIC. 4040: 4050DEFFNfiles 4060LOCAL A%,X%,Y%,blk% 4070DIM blk% 255 4080IF FNls(0,1,1,blk%) THEN =&FF 4090=blk%?5 DIV 8 4100: 4110DEFFNd 4120LOCAL A%,X%,Y%,b% 4130DIM b% 12,drv% 20 4140b%?0=0:b%!1=drv%:b%!5=0:b%!9=0 4150A%=5:X%=b%MOD256:Y%=b%DIV256:CALL&F FD1 4160=?(drv%+2+?drv%) 4170: 4180DEFFNls(trk%,sec%,unit%,addr%) 4190LOCAL A%,X%,Y%,blk% 4200DIM blk% 10 4210blk%?0=drv%:blk%!1=addr%:blk%?5=3:b lk%?6=&53:blk%?7=trk%:blk%?8=sec%:blk%?9 =&20+unit% 4220A%=&7F:X%=blk%MOD256:Y%=blk%DIV256: CALL&FFF1 4230=blk%?10 4240: 4250DEF PROCspace 4260PRINT'" Press space to conti nue" 4270REPEATUNTILGET=32 4280ENDPROC