#9% , TAB(20%); \ & PRINT #9% , DATE$(0%);" ";TIME$(0%);" ON DISK ";DISK$ \ & PRINT #9% , STRING$(79%,42%) \ & PRINT #9% , FOR CLR% = 1% TO 3% & ! Print the Header at the Top of the page. & 2080 N% = -1% & ! Initialize the account counter. & 2100 ! & ! Get the next account. & ! & 2110 N% = N% + 1% & ! N% is the counter that increments the accounts. & ! The PPN wildcard takes the accounts in order. & 2120 Z$ = SYS( CHR$(6%) + CHR$(25%) + CHR$(N%) + CHR$(SWAP%(N%)) & + CHR$(255%) + CHR$(255%) + STRING$(16%,0%) & + "DR" + CHR$(DEV%) ) & ! This is the PPN wildcard lookup sys function. & 2130 PROJ% = ASCII(MID(Z$,6%,1%)) \ & PROG% = ASCII(MID(Z$,5%,1%)) & 2140 IF PROJ% = 0% AND PROG% = 1% & THEN & GOTO 2100 & ! This will skip over [0,1]. & 2150 IF PROJ% = 1% AND PROG% = 1% & THEN & GOTO 2100 & ! This will skip over [1,1]. & 2160 PPN$ = DISK$+" "+"["+NUM1$(PROJ%)+","+NUM1$(PROG%)+"]" & ! Put together the PPN$ & 2400 ! & ! Open up and dimension the UFD and get the cluster size. & ! & 2410 OPEN PPN$ FOR INPUT AS FILE #1% & 2420 PRINT TAB(20%);"(Now cleaning out ";PPN$;")" & 2430 DIM #1%, U%(3583%,7%) & 2440 CLU% = U%(31%,0%) & 2500 ! & ! Go through this UFD & ! & 2510 POINTER% = FNLINK%(U%(0%,0%)) & ! First word of first blockette is a link to first NB & 2520 IF POINTER% = 0% & THEN & GOTO 2600 & ! A zero pointer is end of NB's & 2530 POINT% = POINTER% & ! Set POINT% = POINTER% so that after we GOSUB 3000 & ! we will still have the correct & ! values for the pointer. & 2540 POINTER% = FNLINK%(U%(POINTER%,0%)) & ! Get link to next NB before this file possibly gets killed. & 2550 GOSUB 3000 & ! Process this file. & 2560 GOTO 2520 & 2600 ! & ! Go back for next account. & ! \ & CLOSE #1% \ & GOTO 2100 & 3000 ! & ! SUBROUTINE: Find size of file and maybe kill. & ! & 3100 ! Data from Name Blockette & 3110 N$ = RAD$(U%(POINT%,1%)) + RAD$(U%(POINT%,2%)) + "." & + RAD$(U%(POINT%,3%)) \ & N$ = PPN$ + N$ & ! [P,PN] File name and extension. & 3200 ! & ! Find the size. & ! & 3210 AB% = FNLINK%(U%(POINT%,6%)) & ! Get location of Accounting Blockette. & 3220 SIZE = U%(AB%,2%) & ! Get the size. & 3300 ! & ! Kill if size is zero. & ! & 3310 IF SIZE <> 0% & THEN & RETURN & 3320 OP% = FNOPEN%(N$) & ! Find out if the file is open. & 3330 IF OP% = YES% & THEN & GOTO 4000 & ! If the file is open then save. & 3340 PRO.CODE% = SWAP%(U%(POINT%,4%)) AND 255% \ & IF (PRO.CODE% AND 2%) = 2% & THEN & GOTO 4000 & ! If the file is write protected against owner then save it. & 3350 KILL N$ \ & TOTAL = TOTAL + 1% & ! Keep a tally of how many files get killed. & 3360 PRINT TAB(20%); \ & PRINT N$; \ & PRINT " size <";NUM1$(SIZE);"> has been killed." & ! Tell the user the file has been killed. & 3370 PRINT #9% , TAB(20%); \ & PRINT #9% , N$; \ & PRINT #9% , " size <";NUM1$(SIZE);"> has been killed." & ! Tell the user the file has been killed. & 3990 RETURN & 4000 SAVED = SAVED + 1% & ! Keep a tally of how many files get saved. & 4020 PRINT TAB(20%); \ & PRINT N$; \ & PRINT " size <";NUM1$(SIZE);"> has been saved.";BELL$ & ! Tell the user the file has been saved. & 4040 PRINT #9% , TAB(20%); \ & PRINT #9% , N$; \ & PRINT #9% , " size <";NUM1$(SIZE);"> has been saved." & ! Tell the user the file has been saved.KILL0 BAS[.050020]KILL0 .BAS[.050020]    X14|H [4;Ik(&'( k ߫H&P` \RrPP2PPzPP{PPPPP2P~\$\\TD 0D \~ hi) +\ ^( n ^( np\^txY\^ˀ\!kVk<\F˰<˴ˬ\VVkˤ1`@lP ABCDEFGHIJKLMNOPQRSTUVWXYZ$.?0123456789<@<SЬTЬ UQS>?\\\\\\\\\`:#@'="\abcdefghi\\\\\\\jklmnopqr\\\\\\\~stuvwxyz\\\\\\\\\\\\\\\\\\\\\\{ABCDEFGHI\\\\\\}JKLMNOPQR\\\\\\\\STUVWXYZ\\\\\\0123456789\\\\\  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~@ggh<i|o<m<4p<p<k|Zn<l fr rwx<x<x<x޺<w@]@@fjnr]Ze@@|> | |v<H|  |  |xz|  |zt f r   < &^ @&@'*/V,"?Lh:hmBmz|z{x`y~|fN|@@|@͂|@ ݃ƃ<ns<|Ŏ |️|ep|u|-@率|<ᄇ2ֻr||ZRM | ntB|xyvZw|J=|R>|J? nnaa|bddf************ & 19100 ! ^C error \ & IF ERR = 28 AND LINE = 1030 & THEN & PRINT BELL$;"Aborted by ^C" \ & GOTO 32767 & ! Before the program flow die on the ^C error. & 19150 IF ERR = 28 AND LINE <> 1030 & THEN & CLOSE #1%, #3% \ & RESUME 5000 & ! Give the results of the run up to the ^C error. & 19175 IF ERR = 11 & THEN & PRINT BELL$;"Aborted by ^Z" \ & GOTO 32767 & ! This is the end of file error response. & 19200 ! & !Expected errors (by line number) & ! & 19210 IF ERL = 2120 & THEN & RESUME 5000 & ! Account wasn't there & 19230 IF ERL = 3350 & THEN & PRINT TAB(20%); \ & PRINT N$;BELL$; \ & PRINT " size <";NUM1$(SIZE);"> unable to kill." \ & PRINT #9% , TAB(20%); \ & PRINT #9% , N$; \ & PRINT #9% , " size <";NUM1$(SIZE);"> unable to kill." \ & CANT = CANT + 1% \ & RESUME 3990 & ! If the KILL fails for any reason. & ! (most likely the file will not exist) & ! Tell the user the file is already dead, and keep & ! a tally of how many files were dead already. & ! & ! Line 3990 is the Return for the subroutine. & 19900 ! & !Unexpected errors & ! & 19910 Z$ = SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)) \ & ERROR$ = RIGHT(Z$,3%) \ & PRINT BELL$;"You fool !!! You Caused a "; \ & PRINT ERROR$; " at line";ERL & 19990 GOTO 32767 & 20000 DEF FNOPEN%(FILE.N$) & 20030 ! & ! FUNCTION: TO FIND OUT IF A FILE IS OPEN. & ! & ! This function uses FIP -8% to tell if a file is open. & ! & 20050 ON ERROR GOTO 20400 & 20100 ! & ! Set some constants. & ! & 20110 YES% = -1% \ & NO% = 0% & 20140 DIM Z%(30%) & ! Dimension statement. & 20150 OPEN FILE.N$ FOR INPUT AS FILE #3% & ! Open the file on channel three. & 20180 ! & ! Use the FIP -8% & ! \ & Z$ = SYS(CHR$(6%)+CHR$(-8%)+CHR$(3%)+CHR$(1%)) & 20210 CHANGE Z$ TO Z% & 20230 ! & ! Select the correct data needed to see if the file is open. & ! & ! Get the number which tells how many jobs have this & ! file open, if the file is open by more than one job & ! then someone else also has the file open. & ! & 20240 OTHER% = Z%(3%) \ & REGARDLESS% = Z%(4%) \ & OPENCOUNT% = OTHER% + REGARDLESS% & 20260 CLOSE #3% & ! Finally close the file. & 20280 IF OPENCOUNT% > 1% & THEN & FNOPEN% = YES% & ELSE & FNOPEN% = NO% & 20300 ON ERROR GOTO 19000 \ & FNEND & 20400 IF ERL = 20150 & THEN & OPENCOUNT% = 0% \ & RESUME 20280 & ! This is in the case of the file not existing, & ! or any other error that may occur. & 20500 ! * * * * * * * & ! Unexpected errors & ! * * * * * * * & 20520 GOTO 19000 & ! If there is an unexpected error goto the main error routine. & 21000 ! & ! FUNCTION TO : Convert link word to Blockette number. & ! & ! Bits 9 to 11 are the cluster number. The first line gets & ! these bits and multiplies by cluster size & ! Bits 12 to 15 are block number. The next line gets these & ! and multiplies by 32 (number of blockettes per block) & ! Bits 4 to 8 are the blockette number. The last line adds & ! this. & ! The other bits of the link are not relevant here & ! & 21020 DEF FNLINK%(L%) = & ((( L% AND 3584%) / 512% ) * CLU% & + ( SWAP%( L% AND -4096% ) / 16% )) * 32% & + (( L% AND 496%) / 16%) & 21050 GOTO 32767 & 32767 END KILL0 BAS[.050020]KILL0 .BAS[.050020]   X14|H [4;Ik(&'( k ߫H&P` \RrPP2PPzPP{PPPPP2P~\$\\TD 0D \~ hi) +\ ^( n ^( np\^txY\^ˀ\!kVk<\F˰<˴ˬ\VVkˤ1`@lP ABCDEFGHIJKLMNOPQRSTUVWXYZ$.?0123456789<@<SЬTЬ UQS>