N$(12%) 150 DATA JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC 160 MAT READ MON$ 200 ! & !Get the account number & ! 210 PRINT "Account number"; \ & INPUTLINE PPN$ \ & PPN$ = CVT$$(PPN$,-1%) 220 IF PPN$ = "" THEN GOTO 900 230 DEVICE$ = "" 240 COLON% = INSTR(1%,PPN$,":") \ & IF COLON% <> 0% & THEN DEVICE$ = LEFT(PPN$,COLON%) \ & PPN$ = RIGHT(PPN$,COLON%+1%) 250 BRACKET% = INSTR(1%,PPN$,"(") \ & IF BRACKET% = 0% & THEN PPN$ = "(" + PPN$ + ")" 300 ! & !open up and dimension the UFD; get cluster size & ! 310 OPEN DEVICE$ + PPN$ FOR INPUT AS FILE #1%, MODE 16384% 320 DIM #1%, U%(3583%,7%) & !up to 3584 blockettes of 8 words each 330 CLU% = U%(31%,0%) 400 ! & !get name of file & ! 410 INPUT "File name"; FILE$ \ & FILE$ = CVT$$(FILE$,-1%) 420 IF FILE$ = "" THEN GOTO 200 500 ! & !look through name blockettes for it and process & ! 510 PTR% = FNLINK%(U%(0%,0%)) & !first word of first blockette is a link to first NB 520 IF PTR% = 0% THEN GOTO 600 !a zero pointer is end of NB's 530 TFILE$ = RAD$(U%(PTR%,1%)) + RAD$(U%(PTR%,2%)) + "." & + RAD$(U%(PTR%,3%)) 540 TFILE$ = CVT$$(TFILE$,2%) 550 IF TFILE$ = FILE$ & THEN GOSUB 2000 \ & GOTO 400 560 PTR% = FNLINK%(U%(PTR%,0%)) !get link to next NB 570 GOTO 520 600 ! & !couldn't find the file & ! 610 PRINT "Can't find a file by that name." 620 GOTO 400 900 ! & !done & ! 910 CLOSE #1% 920 GOTO 32767 2000 ! & ! & ! SUBROUTINE: Do a single file & ! & ! 2100 ! & !Get data & ! 2110 AB% = FNLINK%(U%(PTR%,6%)) & !get location of Accounting Blockette 2120 PRINT ' '; DATE$(U%(AB%,1%)); !date of last access 2130 PRINT ' '; DATE$(U%(AB%,3%)); !date of creation 2140 PRINT ' '; TIME$(U%(AB%,4%)); !time of creation 2200 ! & !do they want to change it & ! 2210 INPUT " Any changes"; ANSWER$ \ & ANSWER$ = CVT$$(ANSWER$,-1%) \ & ANSWER$ = LEFT(ANSWER$,1%) 2220 IF ANSWER$ <> "Y" THEN RETURN 2300 ! & !make the changes & ! 2310 INPUT "Date of last access"; D$ 2320 U%(AB%,1%) = FNINVDATE%(D$) 2330 INPUT "Date of creation"; D$ 2340 U%(AB%,3%) = FNINVDATE%(D$) 2350 INPUT "Time of creation"; T$ 2360 U%(AB%,4%) = FNINVTIME%(T$) 2990 RETURN 8000 ! & ! & ! FUNCTIONS & ! & ! 8100 ! & !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 & ! 8110 DEF FNLINK%(L%) = & ((( L% AND 3584%) / 512% ) * CLU% & + ( SWAP%( L% AND -4096% ) / 16% )) * 32% & + (( L% AND 496%) / 16%) 8200 ! & !convert date to number & ! 8210 DEF FNINVDATE%(D$) 8220 D$ = CVT$$(D$,-1%) \ & DAY% = VAL(LEFT(D$,2%)) \ & MON$ = MID(D$,4%,3%) \ & YEAR% = VAL(RIGHT(D$,8%)) 8230 FOR M% = 1% TO 12% 8240 IF MON$(M%) = MON$ & THEN MON% = MON%(M%) \ & M1% = M% 8250 NEXT M% 8260 IF YEAR%/4%*4% = YEAR% & AND M1% > 2% & THEN MON% = MON% + 1% 8270 FNINVDATE% = ( YEAR% - 70 ) * 1000 + MON% + DAY% 8290 FNEND 8300 ! & !convert time to number & ! 8310 DEF FNINVTIME%(T$) 8320 T$ = CVT$$(T$,-1%) \ & T$ = "0" + T$ IF LEN(T$) = 6% \ & HOUR = VAL(LEFT(T$,2%)) \ & MIN = VAL(MID(T$,4%,2%)) \ & AP$ = MID(T$,6%,1%) 8330 T = HOUR * 60 + MIN \ & IF AP$ = "P" THEN T = T + 12 * 60 8380 FNINVTIME% = 24 * 60 - T 8390 FNEND 32767 END DATE BAS[.050021]DATE .BAS[.050021]   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\\\\\