!characters such as . or ? (or any other radix50 characters). & ! & !See UFD.BAS or UFD.DOC for details on how the program works & ! 100 ! & !Get the account number & ! 110 PRINT "Account number"; \ & INPUTLINE PPN$ \ & PPN$ = CVT$$(PPN$,-1%) 120 IF PPN$ = "" THEN GOTO 900 130 BRACKET% = INSTR(1%,PPN$,"[") \ & IF BRACKET% = 0% & THEN PPN$ = "[" + PPN$ + "]" 200 ! & !starting disk & ! 210 DISK$ = "DR0:" 300 ! & !get name of file & ! 310 INPUT "File name"; FILE$ 320 IF FILE$ = "" THEN GOTO 100 330 FILE$ = CVT$$(FILE$,32%) 400 ! & !open up and dimension the UFD; get cluster size & ! 410 OPEN DISK$ + PPN$ FOR INPUT AS FILE #1%, MODE 16384% 420 DIM #1%, U%(3583%,7%) & !up to 3584 blockettes of 8 words each 430 CLU% = U%(31%,0%) 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 200 560 PTR% = FNLINK%(U%(PTR%,0%)) !get link to next NB 570 GOTO 520 600 ! & !couldn't find the file on DR0: & ! 610 IF DISK$ = "DR0:" & THEN DISK$ = "DR6:" \ & GOTO 400 900 ! & !done & ! 910 CLOSE #1% 920 GOTO 32767 2000 ! & ! & ! SUBROUTINE: Print data for current file & ! & ! 2200 ! & !ask new file name & ! 2210 PRINT "New name"; \ & INPUTLINE NEWNAME$ \ & NEWNAME$ = CVT$$(NEWNAME$,4%+32%) 2220 NEWNAME$ = LEFT(NEWNAME$ + " ",6%) 2230 PRINT "New extension"; \ & INPUTLINE NEWEXT$ \ & NEWEXT$ = CVT$$(NEWEXT$,4%+32%) 2240 NEWEXT$ = LEFT(NEWEXT$ + " ",3%) 2300 ! & !change it & ! 2310 U%(PTR%,1%) = FNRAD50%(LEFT(NEWNAME$,3%)) 2320 U%(PTR%,2%) = FNRAD50%(RIGHT(NEWNAME$,4%)) 2330 U%(PTR%,3%) = FNRAD50%(NEWEXT$) 2900 RETURN 8000 ! & ! & ! FUNCTIONS & ! & ! 8010 ! & !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 & ! 8020 DEF FNLINK%(L%) = & ((( L% AND 3584%) / 512% ) * CLU% & + ( SWAP%( L% AND -4096% ) / 16% )) * 32% & + (( L% AND 496%) / 16%) 8100 ! & !convert three character string to RAD50 & !illegal characters are changed to blanks and a flag is set & ! 8110 DEF FNRAD50%(S$) 8115 T% = 0% 8120 FOR I% = 1% TO 3% 8125 S% = ASCII(LEFT(S$,1%)) \ & S$ = RIGHT(S$,2%) 8130 IF 65% <= S% AND S% <= 90% & THEN S% = S% - 64% \ & GOTO 8175 8135 IF 48% <= S% AND S% <= 57% & THEN S% = S% - 18% \ & GOTO 8175 8140 IF S% = 32% & THEN S% = 0% \ & GOTO 8175 8145 IF S% = 36% & THEN S% = 27% \ & GOTO 8175 8150 IF S% = 46% & THEN S% = 28% \ & GOTO 8175 8155 IF S% = 63% & THEN S% = 29% \ & GOTO 8175 8170 ILLEGALCHARACTER% = -1% \ & FNRAD50% = 0% \ & GOTO 8190 8175 T% = T% * 40% + S% 8180 NEXT I% 8185 FNRAD50% = T% 8190 FNEND 32767 END ODDNAMBAS[.050021]ODDNAM.BAS[.050021]   X1혀4¿|HÞï þÿÿ[ú«4ÿ;ßïöëÿÿÝûÿIßkûÿ(Ÿ«ûÿ&ûÿ'( «á«ôÑk ß«Hûÿ&ú«PïŠú«`ï‚ßï®ëÿÿŸ« ûÿüÐ\žËàïR™rP P2PPzPP{PPP÷PP2P~ûÿ®ñÿÿÿÿ\ÐÿŸ«ûÿªŸ«$ûÿ ûÿÐ\Ã\T‘D«á 0D«áó \ìÎ~ûÿŠŸ« ûÿhûÿi) «ô«á+Ô\ ^( «án ^( ïëÿÿn°«pÀ\Ð^«tú«xÿYÀ\^úË€ÿÐ\ßïÎêÿÿÝûÿ!ßkûÿŸ«ûÿþûÿÿÐVÕk<Ý\ÝûÿñžFË×ï˰<Ë´ßˬûÿÇûÿÌÖ\ÀVÑVkÆ”úˤÿ—1`þ@ÐïlüÿÿP ABCDEFGHIJKLMNOPQRSTUVWXYZ$.?0123456789<@<¼SЬTЬ UÔQÕS><„PÑPÿùÐå¹P×S'{@PRPB¯ …×S{(PRPB¯’…×S@¯‰…¾@@Œ˜ ("@$$Ø#0$è#$8$%˜$%(%è$! @"FORRTLLIBRTL