! 10110 OFFSET% = FNLINK%(LINK.JB%) \ & !the function GETs the right cluster and finds the offset \ & BYTE.OFFSET% = OFFSET% \ & WORD.OFFSET% = OFFSET%/2% 10200 ! & !data from job blockette & ! 10210 FOR I% = 1% TO 7% \ & JB%(I%) = FNWORD%(WORD.OFFSET% + I%) \ & IF JB%(I%) <> 0% & THEN PRINT "Job number for job"; I%; "is"; JB%(I%) 10220 NEXT I% 10230 NEXT.LINK% = FNWORD%(WORD.OFFSET%) 10240 IF NEXT.LINK% = 0% THEN GOTO 10400 10250 OFFSET% = FNLINK%(NEXT.LINK%) 10260 GOTO 10100 10300 ! & !get correct cluster, block and offset for job link & ! 10310 OFFSET% = FNLINK%(LINK.JB%) \ & !the function GETs the right cluster and finds the offset \ & BYTE.OFFSET% = OFFSET% \ & WORD.OFFSET% = OFFSET%/2% 10400 ! & !data from cluster blockette & ! & !word meaning & ! & ! 0 reserved & ! 1 -1 & ! 2 number of blocks in a cluster & ! 3 number of blockettes in a block & ! 4 number of words in a blockette & ! 5 number of bytes in a word & ! 6 number of bits in a byte & ! 7 RAD50 for "BFD" & ! 10410 IF FNWORD%(7%) <> 3444% & THEN PRINT BELL$; "?Corrupt BFD." \ & GOTO 32767 10420 PRINT "Number of blocks in a cluster:"; FNWORD%(2%) 10430 PRINT "Number of blockettes in a block:"; FNWORD%(3%) 10440 PRINT "Number of words in a blockette:"; FNWORD%(4%) 10450 PRINT "Number of bytes in a word:"; FNWORD%(5%) 10450 PRINT "Number of bits in a byte:"; FNWORD%(6%) 10700 ! & !print a couple of blank lines & ! 10710 PRINT \ PRINT 10900 ! & !return & ! 10990 RETURN 18000 ! & ! & ! FUNCTIONS & ! & ! 18100 ! & !pull a word from the buffer & !for convenience, the words are numbered as words even though & !the buffer is character (and hence byte) oriented. Words are & !normally numbered starting at zero, but the characters in the & !buffer must be numbered starting at one, so another adjustment & !is needed. & ! 18110 DEF* FNWORD%(W%) 18120 FIRSTBYTE% = W% * 2% + 1% 18180 FNWORD% = ASCII( MID(BUFF$,FIRSTBYTE% ,1%) ) & + SWAP%( ASCII( MID(BUFF$,FIRSTBYTE%+1%,1%) ) ) 18190 FNEND 18200 ! & !pull a byte from the buffer & !Since the bytes are generally numbered starting at zero but & !the characters are numbered begining at one, an adjustment is & !needed. & ! 18210 DEF* FNBYTE%(B%) 18280 FNBYTE% = ASCII(MID(BUFF$,B%+1%,1%)) 18290 FNEND 18300 ! & !convert a link & !If the link indicates another cluster, the correct cluster is & !GETed by the function. & ! & !In a link word the bits have the following meaning: & ! & ! 0 - 8 byte within the block & ! 9 - 11 cluster (16 blocks) number & ! 12 - 15 block within the cluster & ! 18310 DEF* FNLINK%(LINK%) 18320 CLUSTER.NUMBER% = ( LINK% AND 3584% ) / 512% \ & BLOCK.NUMBER% = SWAP%( LINK% AND -4096% ) / 16% \ & BYTE.NUMBER% = LINK% AND 511% 18330 IF CLUSTER.NUMBER% <> CURRENT.CLUSTER% & THEN GET #1%, BLOCK CLUSTER.MAP%(CLUSTER.NUMBER%) \ & CURRENT.CLUSTER% = CLUSTER.NUMBER% 18380 FNLINK% = BLOCK.NUMBER% * 512% + BYTE.NUMBER% 18390 FNEND 18400 ! & !convert a number to time & ! 18410 DEF* FNTIME$(T%) 18420 IF T% = 0% & THEN T$ = "none" \ & GOTO 18480 18430 HOURS% = T% / 60% \ & MINUTES% = T% - HOURS% * 60% 18440 T$ = NUM1$(MINUTES%) \ & IF LEN(T$) = 1% & THEN T$ = "0" + T$ 18450 IF HOURS% > 0% & THEN T$ = NUM1$(HOURS%) + ":" + T$ 18480 FNTIME$ = T$ 18490 FNEND 32767 END BFD BAS[.050020]BFD .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