›; CHECKSUM DATA›;[9F CA 03 3A 1A 80 5A 02 ›; 43 F0 3F 9D 21 E0 1F F6 ›; 95 99 75 78 70 06 4C 37 ›; 46 73 A7 3D 60 39 F1 BC ›; 99 AF 06 8C 79 5B B9 7D ›; D1 68 EC 7E EC E7 4C 9F ]›››BYTE btemp,spaces,len,checkflag,› maxfiles,devc,num,quit,› lmargin=82,shflok=702,ch=764,› atract=77,crsinh=752,errno=73,› brkkey=17››CARD idx,which,ctemp,sum,max,spare,› free,a,b,loss,leastloss,waste,› addlen,TmpErr,dl=560,sc=88››INT ii››BYTE ARRAY names(6000),name(20),› extender(5),hold(324),› string1(14),string2(14)››CARD ARRAY length(500),hlen(27),› programs(500),pr(500)››››CARD FUNC Min(CARD aa,bb)›› IF aa159 THEN› Print("Disk Error #")› PrintBE(errno)› PutE()› Print("Check the drive and ")› PrintE("press a key.")› ii=GetD(2)› ELSE› PrintE("Unexpected error.")› Print("Check things and press ")› PrintE("a key.")› ii=GetD(2)› FI›RETURN›››PROC Title()›› lmargin=0› Graphics(0)›› FOR btemp=1 to 10 DO› Put(127) Put(158)› OD› Print(" ")› Put(159) Put(125)›› Poke(dl+9,7)› Poke(dl+10,6)› Poke(710,194)› Poke(708,198)› Poke(712,192)› crsinh=1›› Print("")› Print("")› Print("| Written in ACTION! by ")› Print("Mike Stortz |")› Print("| G.R.A.S.P. of ")› Print("Richmond, Va. |")› Print("")› Print("")› lmargin=2› Print(" ")› PrintE("NO EMPTY SECTORS ")› Print(" This program reads in ")› PrintE("the contents")› Print("of your binary file disks, ")› PrintE("remembers")› Print("their lengths, and sorts ")› PrintE("them to")› Print("occupy the least number ")› PrintE("of diskettes.")› Print("ZEROFREE will hold about ")› PrintE("500 ")› PrintE("programs & their lengths.")› PutE()› Print(" A disk has 707 free ")› PrintE("sectors if you")› Print("use a boot menu like ")› PrintE("QuikLoad, or 668")› Print("sectors minus the length ")› PrintE("of your menu")› PrintE("if using DOS.")› PutE()› Print(" A '#' will appear ")› PrintE("before a filename")› Print("if it is a duplicate, ")› PrintE("or a '=' will")› Print("appear if it is of ")› PrintE("equal length.")› PutE()› Print("  ªª Ðìåáóå ðòåóó ")› PrintE("á ëåù ªª ")› ii=GetD(2)›› crsinh=0› › free=0› DO› ClearOut()› Print("How many free sectors ")› Print("available? ")› free=InputC()› UNTIL free>0 OD›› maxfiles=0› DO› ClearOut()› Print("Maximum files per disk? ")› maxfiles=InputB()› UNTIL maxfiles>0 OD›› devc=0› DO› ClearOut()› PrintE("Output to D:PRINTOUT,")› PrintE(" screen,")› PrintE("or printer")› Print(" (Ä/Ó/Ð)? ")› devc=GetD(2)› UNTIL devc='D OR› devc='P OR› devc='S OD›› Graphics(0)› Poke(710,194)› crsinh=1››RETURN›››PROC GetDir()›› Put(125)› ClearOut()› Print(" Now up to ")› PrintC(max)› PrintE(" programs.")›› num=0› Close(1)› Open(1,"D:*.*",6,0)› DO› InputMD(1,name,18)› MoveBlock(extender+1,name+11,3)› extender(0)=3› ii=SCompare(extender,"SYS")› IF name(0)>16 AND ii#0 THEN› num==+1› MoveBlock(hold+num*12+1,name+3,› 11)› hold(num*12)=11› hlen(num)=ValC(name+14)› IF num=26 THEN EXIT FI› FI› UNTIL EOF(1) OD› Close(1)››RETURN›››PROC PrintDir()› BYTE dup›› Put(125)›› IF num>0 THEN› Print(" ")› FOR btemp=1 TO num DO› IF max>0 THEN› FOR ctemp=1 TO max DO› MoveBlock(string1+1,› hold+12*btemp+1,11)› string1(0)=11› MoveBlock(string2+1,› names+12*ctemp+1,11)› string2(0)=11› ii=SCompare(string1,string2)› IF ii=0 AND› hlen(btemp)=length(ctemp)› THEN› ii=10› FI› IF› ii=0 OR ii=10 THEN EXIT› FI› OD› FI› › IF ii=0 THEN› dup='#› ELSEIF ii=10 THEN› dup='=› ELSE› dup=32› FI› PrintF("%C -%C%S%C ",192+btemp,› dup,hold+12*btemp,127)› OD› FI› PutE()››RETURN›››PROC CopyDir()›› MoveBlock(names+12+max*12,hold+12,› num*12)› MoveBlock(length+2+max*2,hlen+2,› num*2)› max==+num››RETURN›››PROC Add()›› ClearOut()› SetBlock(string1,14,32)› PrintE("Enter filename to add")› PrintE("(No '.', please)")› InputMD(0,string1,11)› IF string1(0)=0 THEN RETURN FI› string1(string1(0)+1)=32› string1(0)=11› ClearOut()› Print("Enter length of ")› PrintE(string1)› addlen=InputC()› IF addlen=0 OR addlen>400 THEN › RETURN› FI›› num==+1› MoveBlock(hold+num*12,string1,12)› hlen(num)=addlen ››RETURN›››PROC Delete()›› btemp==-64› IF btemp#num THEN› MoveBlock(hold+btemp*12,› hold+(btemp+1)*12,› (num-btemp)*12)› MoveBlock(hlen+btemp*2,› hlen+(btemp+1)*2,› (num-btemp)*2)› FI› IF num>0 THEN› num==-1› FI››RETURN›››PROC GetLibrary()›› DO› IF idx>480 THEN EXIT FI›› PrintDir()› ClearOut()› Print("Insert next disk to ")› PrintE("be cataloged")› PrintE("and press ÓÐÁÃÅ,")› PrintE(" LETTER to delete,")› PrintE("  +  to add, or")› PrintE("    to quit & print")›› btemp=GetD(2)›› IF btemp=32 THEN› CopyDir()› GetDir() › ELSEIF btemp>64 and btemp<65+num› THEN› Delete()› ELSEIF btemp='+ THEN› Add()› ELSEIF btemp=' THEN› CopyDir()› RETURN› FI› OD›RETURN›››PROC PrintName()›› PrintD(1,names+which*12)› PrintD(1," ")› spaces==+1› IF spaces=4 OR › (spaces=3 AND devc='S) THEN› spaces=0› PutDE(1)› FI››RETURN›››PROC KeyCheck()›› IF ch<255 THEN› ch=255› PutE()› FOR idx=1 TO max DO› PrintD(1,names+programs(idx)*12)› PrintD(1," ")› PrintCDE(1,› length(programs(idx)))› OD› PrintE("Press ÒÅÔÕÒÎ.")› ii=GetD(1)› quit=1 › FI››RETURN›››PROC PrintMess()›› Put(125)› PutE()› PrintF("%S%U%E",› "Programs left - ",max)› PrintF("%S%U%E",› "Sectors wasted - ",spare)› PrintF("%S%U%E",› "Allowable waste - ",waste)› PutE()› PrintE("Press any key to abort")› PutE()› Print("Thinking about ")› PrintE("combinations...")› PrintE("This many free sectors :")›RETURN›››PROC Switch()›› idx=Rand(max)+1› which=Rand(max)+1› ctemp=programs(idx)› programs(idx)=programs(which)› programs(which)=ctemp››RETURN›››PROC PrintOut()›› spaces=0› FOR idx=1 TO len DO› which=programs(idx)› PrintName()› OD›› IF spaces#0 THEN› PutDE(1)› FI›› PrintCD(1,free-sum)› PrintDE(1," FREE")› spare==+free-sum›› IF devc='S THEN› PutE()› Print("Press any key ")› PrintE("to continue")› btemp=GetD(2)› FI››RETURN›››PROC Remove()›› FOR idx=len+1 TO max DO› programs(idx-len)=programs(idx)› OD› max==-len› IF max=0 THEN› Close(1)› Close(2)› ClearOut()› PrintE("All done...")› Break()› FI››RETURN›››PROC Check()›› sum=0› b=Min(max,maxfiles)›› FOR idx=1 TO b DO› len=idx› ctemp=sum› which=programs(idx)› sum==+length(which)›› IF sum>free THEN› sum=ctemp› len==-1› EXIT› FI› loss=free-sum› OD›RETURN›››PROC PrintLibrary()›› FOR idx=1 to max DO› programs(idx)=idx› OD›› PrintMess()›› DO› atract=0 › leastloss=1000› FOR a=1 to 10000 DO› IF quit=1 THEN EXIT FI› Keycheck()› Switch()› Check()› IF loss