IMD 1.16: 1/06/2007 9:52:07 FOGCPM.160 --FOGCPM160RUNPCD COMu READ ME EXPAND PCDLDIR PCD"LSETDATEPCDLTYPE PCDPCDHELP PCD% !"#$PATCH DOC%CREATE COM &'LBRDISK2DOC!()*+,LBRDISK2NOT -.LBRDISK2SET /0LBRDSK22COM;12345678LBRDSK22NOT9LBRDISK3COM;:;<=>?@ALBRDISK3DOC!BCDEFLBRDISK3SET GHLLF11 COM$IJKLMLLF11 DOCNONOPIPES MACPSETRSX COMQSLUDIR11ZQ0RSTLDIR COM~UVWXYZ[\]^_`abcdLDIR PQSCefghijklmDRTODATEINC noLOADDIR INCpqrSKIPBLKSINCsSKIPTO INCtSKPRDRKTINCuSORTDIR INCvwxLDIRBBS COM}yz{|}~LDIRQ PASLSETDATECOMhLSETDATEPQS;DRDATE INC SETNAME INCLTYPE PQS(-03-00 87 -CPM160 DOC"This is the disk name. Ð?ÉÐot77Å77@9!}>͒y>?o*o>gʵ0¾33} Real arith. error, ABORT $:z>͒>O 33:z02z:y5>͒7?7J>Ë:!>2z02y2z0>Ë>͒5> ͉> ͉O!"y:o"{*. !";"Q;";";"O;"T;!;}o"n;͐6*n;V#^+*^! !!h!> ~$$$ SUBABORTEDCP/M installation v3.1 !\#~ q,җ6 #!e6P#6C#6D!]~ O!8!";\2|2hͺ-%1*%F#N+x%>OGyxG99%1*!H5\B@͍5>:͍5U7** No PCDHELP i`";k *T;|:V;w!"T;*Q;|ʑ:S;w!"Q;|ʯ*Q;|²"Q;~2S;6*T;|¯"T;~2V;íʜ >?͍55>#͍5*;4, ͔ `i";8*;DM586*;} 5 >.͍5PY*;945*t;Z8/=N5D 5>ͦ*j;9*l;45! 99*l;45>ͦ*l;45*p;45*;45>G~4#¨5@line #5*t;|!5*t; 5! ;_^#V5BC`ibDEbHLb5 5շ>>@͍5U! !>.͍5!͍5U5{͍5z͍5>=͍54o:;>2;ʶ:;ʶ}!–!5:};G5ž5;U5ENTER EXIT ͽK:|;=2|;K:;87DM!9 w#!͘! w! wͺ-%!9͘! 9`i7m! ~#fo))}!9=mw<N#FB*`i"O;! 9`i`i1*7/OG #•ˆPY ~#œPCDS LBR*;o$>͹)l>g";~<7#+ ?"];1*7"_; 1*;!~2a;!~*;!~#ng*W;}o*;Gxͳ*O;DM!~Ow+~Gw*];*_;B*!*_;~#~#~#7?5gͳF#N+!*_;r#s!~#ng;*_;*_;!9}|B*"_;+}Ÿ##p*;#~/(͍5{4>)͍5; P ã ![;~w#~w *Y;"_; "Y;"W;"Y;*;!~#ng;"[;w# `i)))))))V#^+;DM x. ##~++ͳ!r#sW:;c 5z4zͳ!~@7ʫ ~w!~#ng;DM*[; "[;!V#^ *Y;{zҨ  Ö "Y;G O~?wxOtڢ  ښ o&  ) V#^  ں g o       `i"; l:;gz   ŁO  _ W _ k"t; }rmz fz *p;͌6f*n;͌6 >t| >`i"; `i";w }COxʕ =/wxxGyx<=#6þY=w {o&9{_7`i";!9~+^0  0  Zw# $T!9Z/w# ;TZw# K0 `i";!9BK g o W _`iF#N#";`i";9BKb{o9æ`i";9BKy w# «« `i"; x +w }o }o }o|g }o     DM6  )))) )) ) 9 z9 `i";{͌6n`i";{͙6x_! ( `i";{ͧ6n{Z +® ˜! 3n>Ҵ/ã`i";͙6͙6 >y! ";r͙6r͙6 9 ͽ6 6 `i";>y`i";"7 z>y`i";7 y`i";6 `i";BKT*l;y i ͐ç͐ð͐ú `i";ŷʢC_X{i^#V i^ {i{+F+N= is#r is {i {q#p#=`i";s#r `i";s `i";{29^#V _yo `i";O@>Gi>O*j;ʀ^#V=w ? R ?ÙR{ڰڰڧú zW|W_. z`i";BKl`i";h͡$|*;DMg`i";hb}7$.$%> y> y`i";hxGB`i";hb|%ͪ&jz\>tv&S S&`i";hS&TU `iF#N#V#^#";}`i";{hb%nͮ3333.$%T\$%> y> yùù́ù| z ù> y|z> y͒%;ù_p//e).23(S01&V'&*'0"() 00C)07'w'&' ' %15 t:2/2U2n2,) !x0w!@@ Z3:&+tkNNH!;r _ _<*j;z*l;o!9"j;!};4{z #>y*;9 *;*t;<*j;*l;:;#*vr*j;*p;͌6>t!"t; u*j;`i";"j;"t;:;{79!};5*;  `i";! *;W_~++}o%V#^>! ";Ì͋7͛7>^#Vs+r}qn&}H;y3;o&>'))\xGq#p#s#rU>'>$>$>$>$OGWq#6#p#6#r#6V##^##~#fo>'|/'>'!9s#r&yo!9s#r{&͒o~#fo"b;x/'*b;N#F#N#F#^#V#|}*t;Ao>29,8}O|GP{_zWkpe5+5>'k# pɷ4#47:;怴g";*;*;Үʮ@w#6:# w# ±6.#6.# w# 6 #{||g}o{ |g}o{)>$0/R>$R >$R :>$R>$0 o& ]ydxF8|d0|}a;~#–>2;}F#N8p#q|L9¿+ú}}*Wxz >x/Gy/Oz# + IDG# 66G+ IID>*h;}7}q|##^#Ve|! ~#fo!h;zs#r*f;}|"f;*d;|`i"d;##w#wL|1yx1##^#V}| !|!e;Ibkp+q+++z]DM`izN#F ###DM*p;|}"p;z‚b; DM~#~#~#~r+s+q+p*d;|~#~#^#Vø*p;q#p#w#w# !9}|!"p;*r;}|"r;++++~͉##N#Fz'b;q#p|##w#wY!i;~+Q*f;##s#r"f;ͱ{l{_Ws#r+z=|>wDM _>"f;|©!f;##w#w`i##^#Vx¯"n;"p;"r;!"h;"f;"d;BKͱ|B*p;z7>|}s#rzS_`LQXxCYJW}MD> <> ^#Vͫ7 _?7r+sPYI&BKlI&$.>pҘ8.͡$;i&{*}W~v8|ҾÔ<%I.x%Ô>pBKl͡$há$y}"[II.x%i>>p".͡$BKl&a.%-,%z.>%J,G%J,x%BKl͡$h͡$Ôx4%ڊN&ڊ.|%h͡$ix%b7Ô|zBK5!|%&|%h$BKl͡$h͡$BKlzց/&|%.%{8!.͒ԡ$Ôr1. &Z$h|%5=6>͡$ÔzMWM<%&BKlv&xI&x%{BKlԡ$xx7xygÔz| s1PYe͒hPYe͒h$i}³&x|&PYe͒h͡$i;|7ʾz7&!o)9#~#N#Fo^#VN#F#~#~#^#Vg~#fo~#foL<~#foq#s#rLyWW_! zg))))))DM{ozW{_yOS]zgo!@Ғx!@ x x`¸!T]7xWc.7yOzW{_zWx怲WyOxGyxo>g eo3333! ^4#w&jc.!9~ >w!9~#^#V!9DMg"!9~++G~xe K >G!9N>.#k k T k !9G!9^#Vh'!9Nx#G'!9~o'!9^#V! 9 W _](U(! &jc!9DM!.~"|g..ͭ Dx W_6#w#s#rgз>$%> > ..ͭ Dx#!W_6#w#s#rg!4!# g oV#}|z+8! o g&jc!9DM"|LE6#w#s#rPY9s#r@|!Ҵ!|Ҵ!{?ڭ!xG͍$r$Ú!|!!xG͗$܀$ô!z怰GzW|֐g!29$!!`W_`"O|@"GF8""#!i|> &">-6|@gQ"6>066z7">E6j&86Z8_zp"/E6>-H"z"66_6>06~"86¹"Z8op_|@"<Һ""/<@6>͍!!͊""ú"6 "+"ͨ8!@I#.#-7o"zW6ͨ8.#o76ͨ8 #.e#6ͨ8e#͔8#m8o|g#!#͔8 #m8o|gW#!6ͨ8@#.#El#e7? $oz#>|G|@OI&|#zWڰ#y## ڪ#O͍$ڰ#r$Ғ#7i#O͗$ڰ#܀$ Ò#i6ͨ8#7S_6ͨ8#z+#-$#/7#"$W|_|%$/g7ɳgѷz9$){_zW1$WSzWxGDehBK g _ W|{z .͡$i .$|$$t.y$$t.Ç$|}«$ezI$ͫ7+$怲Wxg$?$&$|7&\zW7}|zI$39.}g79>))%}|% <%{g+$怲W}/gozW{_|gj%ɷgW&9c&gW_7&gX&v&?&z9zr&&zo&)%c&WW|&W_{&ց{&•&zր77?gzW29$&9hz&A|%v&&|$b|$ͽ...-'}'ͽ...!.~'ͽ...> O!&>/w '*&'!2q0yͽ...ͽ...> '> '!&~wͽ...~C'> 'TRUE FALSE!m'څ'!r'Ð'ͽ...|¹''9 Eڴ'MG'>h' ~#''> -''ͽ...z' 9Z8Gy(o'>-'F8|(0'U(!.~w6(..!&~](!&>/wÎ/!&~!&~7}) f(!&>/w!.w’(!&~w>ã( £(6 !&~w> .>)U(!.~ (](Ҷ(> )+(-(]((ͨ8)o&]((ͨ8)͔8 )m8o|g )(>)9>7ͥ(s#rͥ(s#r!@)+U(..!&~Ž/~<(](O)U(..~!{)#Ҍ)ͧ*Ò)!2q0>6>!&~)!,~!0W)͗)) ¹))͗)w#) µ)+6{!(w!/6!/~4!0o|g~> -+>>!&> w7!&~>/w-+>>-+!!q#p#6>>!7!&~p*>/w*!*^#Vͫ7}|O{G}?*Җ*͝+>(W*|!/w!&~w!/~4*6!01*7!0o|g~!&~ w!/~w!0o|gq!/4y!0*y*!/~4+6.*+!&~w.+~!0 w!*y#x*ɯ!*N#F!0 o$!*~#!&~w!/~w.+!0 ~w!/4+w*>!&~̪+!&>/w!*y#xL+-+>6#=¢+>$>!ĝ+!&~w!$~Gw! 6 #6 #6 !N#G w # ~(+,# ~),++# ~ ,,) x1!";";!>[N #&, #~ -,ͨ8o& ͨ8X,m8o|g@,]g,  X,";}2;!ͯ8G!,͛,x7?.,*:@[]<>()=;_?~#<,!&~+!/6/,{-,!&>@w7!2q0!&~w*l;^#V!&~-!2q0-~ -!&>/w!&~*->-><7!&~*><7!/~O!&~d-!0 6# Y-s-y.+6/w! ~ —-#6 #6 ! 6! 6!&~ʺ-_.><7><->><7!~  !.!8!*z;#"z;F8w+|-TEMP0000$$$F7#~.).> ..< !.#~q,7*l;^#V,!$wH~x1ͤ,>H>}7~q,!x1~!> N#F#=‚.>< +p+q”.ѷ7><7! ~#².ѷ!&~/7.!&~@w>.!&~@w>!&~!&~U(..>!/#(/7! ~# e/2 e/=/#>/#?/#~:f/ f/7y>7!&~!.ʇ/!0U(͙/@w> !&~w!&~+C',0!&~w/wͥ/>/w|/x1! w!$wͤ,/͙/!!F0ͥ/>%0ͥ/>/w|:0x1! w!$wͤ,F0͙/0!&~V0..~Ž/ʙ//*!2l/o|g~#fo!&~0/0^*0..~ʽ0~./A+!2q0ͥ/͙/w|0x1! w!$wͤ,>!2q0!&~@!!&~!> o.!0BK>}|=-1> ! wDM!&q#pDM!,q#pDM!*q#pDM!$q#p|ů#~+:•1~##:9@ҕ1ͬ1~.¢1#ͬ1~q,ڽ1:9#¬1> 1+#~q,1!"z;#2 >1 > 2!D2!8.> 2&2>*2,>*l;^#V w*l; DM/2>"p;{zCON: !&~..0_.!..ͥ/d.!>CMDAUXLSTPUNRDRKBDCONNUL33}54334335533333333333333333330Y3s3301330>7!&!!!&~!!&~!!.!&~!>H3>o>V3>o0}!&~ .0} .!&~ʦ3!,~!0 4!(w!/6!/~4!0o|g~> :<G*#44xG̈́5 4S4!ͯ5ͯ5514m4\ͯ5ͯ564+64‹464ͯ5 ͯ5ͯ5+s4 ʶ4¤464 ͯ5>ö4±464 64w#6456z#~Oį5!5 4!5ڪ5))))o!545|4}55Í5ͯ8G?A5Ɛ'@'̈́5:9ê5!5 +5ê5>=͍5>-͍5G:|G5O5:|l5Ox/ ͍5> ͍5> ͍5F8|60>. F8|60666=W> 6D66 O6O6!ͨ8f6v8~66l6ͨ8f6v86~6ͨ8{6z”6{>/z6͌6µ6# x§6>һ6/96|>7|7?z>7z6x69ͫ7%979x69ͫ7|z 7>7ɣ<>7"7| >7|+7x>7zX7%9xO7~7p79b79w7D7g7w7p79~7b7>77z79z?ͫ7z7>7>{7|7W_ҿ7}g7bj7 )77{z77_7_79zS )8 8# 8733<78# 7~# x$8 +w x88 )S8#K8F8|_8xT]))͔8ڈ8m8o$?m8o?$7G}֚|?x> D9:?0ͨ8A[?a{?#|7{z!$~/w/w8D$~/w/w8K~888?թW_WOzGzO y/Ox/G{/_z/W99|ɷzW{_a?{T9=D9>D9*#~~~=[9ɇo$m9~#founclassified errorinteger overflowfeature not implementedstack overflowheap overflowdivide by zerounable to load code segmentinvalid pointercase index out of rangereal arith. underflowreal arith. overflowsquare root of -velog of -ve or zeroread past eofillegal char. or valuemodulo -ve valuefile is read-onlyrange errorfile system errorstring field or size > 255file not open}9999999::):?:T:g:z::::::::&.lgy!9N;&6;`79z?ͫ7z7>7>{7|7W_ҿ7}g7bj7 )77{z77_7_79zS )8 8# 8733<78# 7~# x$8 +w x88 )S8#K8F8|_8xT]))͔8ڈ8m8o$?m8o?$7G}֚|?x> D9:?0ͨ8A[?a{?#|7{z!$~/w/w8D$~/w/w8K~888?թW_The main purpose of this group is to add DATE-STAMPING to LU style libraries. LSETDATE sets them, LDIR shows them. These were the first programs to do this, and they set the date-stamp standard (now in heavy use under MSDOS), and have been maintained. LDIR, LSETDATE, LTYPE give help when run without parameters. LDIR is also interactive in this case. LDIRBBS is especially linked for BBS use, eliminating i/o redirection, thus preventing a remote user from writing to disk. For help in running .PCD programs enter: A>runpcd << with no parameters. pcdhelp.pcd on line >> RUNPCD executes all .PCD programs. It will find them either on line or in PCDS.LBR, on either the default or A: drives. "RUNPCD [1]" displays version no. (with PCDHELP.PCD on line). .PCD programs execute identically to .COM versions, but are much smaller, and run more slowly. For instructions on connecting your system timers, see PROFILER.LBR. This will allow automatic date setting. Applies to both .COM programs and RUNPCD.COM. If a read from port 0ffh bothers your system patch location 017dh to a safe port number. This applies to all programs, but the read is only executed (at present) by RUNPCD, when it tries to find a front panel sense switch. The port is never written to. >y linked for BBS use, eliminating i/o redirection, thus preventing a remote user from writing to disk. For help in running .PCD programs enter: A>runpcd << with no parameters. pcdhelp.pcd on line >> RUNPCD executes all .PCD programs. It will find them either on line or in PCDS.LBR, on either the default or A: drives. "RUNPCD [1]" displays version no. (with PCDHELP.PCD on line). .PCD programs execute identically to .COM versions, but are much smaller, and run more slowly. For instructions on connecting your system timers, see PROFILER.LBR. This will allow automatic date setting. Applies to both .COM prog'z mz Xfz y=z fz z ,y y z fz yz z z $ i   i    i<>  ~ ~b|nd|c|~b|ndcndcnd cnd c^^c^۠^ڞ^c^|^^m~k~|c~ ndcndc ^m~c c knd kk knd kkc kc&(jbj~~ ia~ ~ ~ i i>c~ i i>c~ i i>c~ i i>c~ ~ ~-~?~|~ ~iZ~~|~憊 i i>z  i i>cb i  i i>z^ z iK a a|j~~z~x|~~j~|~x| ~ |?~| )~| ~|;~|)~|~|  j b% j j j   j   bw~ ~b~~jb~j~~P~b~b~j~~j~~-~ ~b~j~~ j ~j~\LDIR (cmd, input, output); z "\ Ver. 1.9 z "\ (c) 1983, 1986 by C.B. Falconer z "z \+ Execute with "ldir {[options] [libfname]}"++z "z \3 where {} shows a field that may be repeated and []33z "z \5 enclose optional fields. "options" is the character55z "z \ "-" followed by one or more of: z "z \4 n sort by name u unsorted(default)44z "z \0 g sort by "typ" m date modified00z "z \3 s sectors of storage k kilobytes (size)33z "z \EXAMPLE: B>ldir -m commandz "z \6Commands may be placed on the command line or executed66z "z \4 interactively on ">" prompt. "fname>" shows an open44z "z \1 library, and -options will display its directory11z "z \,File redirection using "<", ">" is available,,z "z \)To list command.lbr on the lister, enter:))z "z \ B>ldir command >lstz "z z \ ** ERROR ** z " \Bad directory CRCz "\Not a library: z "oz "t\ Cannot find: z "oz "P\ Bad option z ":\No library specifiedz "#Snz  i-Ċ  e i i+~~~~}~w~q~kuGGq m~e H )~ i}64~|oߋ~⧊|~~ i}6o\LIBRARY~~~~|~oߋ~ a~~|~ .o]) o]~~oߋ~\.LBR oo0Too1oooo"ۏݻ o  0z  z  nzn|n~ z z]d/z |/z ~ ~~i~k̋7( \z "z z  z  \ | z "~z ".z ~ z "m ~kz m~kz m$~k \unknown z "~k !~i] ~i  j  jo/oz "\Library z "oz "z ~(~nnFn an~ nnnFn\NamenFn \Typn n mnFn\Sectorsnn mnFn\Kbytesnn mnFn\Modifiedn nPnः~nnnFn(z "~~~$p z nFn(z "p~ pz ~n~r-z r~ r~~~Ap z ~n~r-z r~ rꆋp~ pÆzxtv| mo me mo me mo me z zz \ entries, z "xz \ inactive, z "tz \ free entries z "z z @]\ o&oo a 6oo o]z "?z >z z    i- no o  i}6ooooo z Jooo z  oonoo '6] \CMD fF& ]~,.;>[]]]_u6fF0#fFfF fF z  z  fF $sJnW#Y?H_b`orsnn mnFn\Kbytesnn mnFn\Modifiedn nPnः~nnnFn(z "~~~$p z nFn(z "p~ pz ~n~r-z r~ r~~~Ap z ~n~r-z r~ rꆋp~ pÆzxtv| mo me mo me mo me z zz \ entries, z "xz \ inactive, z "tz \ free entries z "z z @]\ o&oo a 6oo o]z "?z >z z    i- no o  i}6ooooo z Jooo z  oono i   i    i<>  ~ ~^bnhbcb~^bnhcnhcnhcnh cnh c n i0n i0` n i0n i0b n i0n i0d`B`]d``Nۋbdn`L``f``d^۠^fd`ˋbddd^m`d~b~^fdnhfkdf~^f憋d~ i $~ | ~⧊|~~ Ӌ~~~|~ ~ a~~|~z \;LSETDATE Ver. 1.2 Copyright (c) 1983, 1986 by C.B. Falconer;;z "z \0To set module modified dates in LU libraries for00z "z \all modules not already dated:z "z \! B>lsetdate libraryname YY/MM/DD!!z "z \1To unconditionally redate individual modules use:11z "z \( B>lsetdate lbrname YY/MM/DD modulename((z "z \.Wildcards accepted. *.* equivalent to no entry..z "z \1YY/MM/DD is the date to be set. Mandatory if the11z "z \2system does not supply the current date, otherwise22z "z \overrides system date.z "z \*** ERROR *** z " \"CRC directory error, bad library: ""z "f'z "z z \^C aborts, continuesz "z z \Not a library: z "f'z "j\ Can't find z "f'z "I\%No system date or invalid date format%%z "#wz ~~|7~ n~ azn~⧊z~~|~͆ni ni}ni}, ni0ni0~~Ë~ ~ \00/00/00 0:00 ]c/  /   no  i i>c i i] k k^  i i>  i i>c a aB(j @~?~|~~inZ~~|~* +a* +a* iM~ ~|=~* ~ io(~io(~i?~~|~dž * i* i* i f \*.*    @ ~?~|~ ~inZ~~|~憊j i]a]z i a i ||| | |~ \ |ӊ |i *. ~⧊ |ia||~~̊ |i**~~~z~ ~?a~~z~놋|| |i .|| |i.l|| ~~ ӊ |i * ~⧊ |ia||~~ϊ |i*%~~ ~z~ ~?a~~z~f nin~B(~|| @zn nvnx@~?~gt|tinzZt~gt~ ~gt t~gtz{{|b~j| ~@ z~ @~?~gt~tinzZt~gt憊9| ~@znvnx@ xa vaf7f7f/09uf \*.* '@]\ fC&] \CMD f7&f7 f7 f7f'f7.f']f' f']\.LBR fCf'0fCf'1fCff mf7 f7 3f7 i} f7ff7f7 f7 f7f f\00/00/00fCf{ fC f7 $Rq G Sm?}X4o  k?秉 a k? k?c  c  k?ia k?  c k?c k  i   n n~~> | |~~z~ |~~~z~~~z~ | ~~~z~冊|  c| c| c| c~ ~z~ |~~~z~nnnn .nN\ nK\ ,Z]aAV^,n^n`ni 1n^ l.,9, pcnc rcZnZi .;nNZnZianNZi]a]znNZnNZiVaZZnZi.\ZZ\\nZi AnK\nZianK\i]a]znK\nK\iVaZZ\\nXZZX=ZZ,n^n`'. pcnc rc,9,l,$~ ~`|nb|c|~`|nbcnbcnb cnb c^^c^۠^ڞ^c^~^^mzkz~cz nbcnbc ^mzc c knb kk knb kkc k c i    i<> \LTYPE (cmd, input, output);z "\ Ver. 1.1 z "z \0 equivalent to "type", but extracts from library00z "z \ Run with: z "z \- B>runpcd ltype [-libfname] {componentname}--z "z \* where the "-" signals the presence of the**z "z \/ optional libfname entry. libfname defaults to//z "z \. "LIBRARY.LBR". [] encloses optional entries,..z "z \* {} encloses entries that may be repeated.**z "z z \*** ERROR *** z " \No component selectedz "\Not a library: z "fz "\EOF - library faulty: z "fz "%^\ Can't find: z "f6z "<\ No library: z "fz "#~W0z   ~fF i "~ ~fF~~fFԋ~~~|~ ~ a~~|~+ Ko(~fR @fR  fRo(~@fR @fR  fR+ #  o(~a ]o(~i  ||]o~|io~|]|]z o~|]|]~~ ]|~z~zz~o~|~]z "|~||]z ||]| b 0z  z  nzn|n~ z z]d/z |/z ~~z  z \ records in ( z "f f]z "\) z "f6z "{\ Installed z "{z z '@]\ fR&] \CMD fF&fFfF fF fF  ~~ sf{ a{~ sf6ffF i- fFffF fi f\ LIBRARY.LBR .f]f f]\.LBR fRf0vfRf1fRf6fffQfF fF  :f6fRf6fff { fF fF fF   fR fF $q O*|za)c  fRo(~@fR @fR  fR+ #  o(~a ]o(~i  ||]z \-To run a PCD (usually Pascal) program, enter:--z "z z \0RUNPCD progfile(fname1, fname2,...fnamen);[parm]00z "z \2 where all entries after "progfile" are optional.22z "z \3 and the extension for "progfile" is .PCD (forced)33z "z z \0 "fnames" attach real filenames to pascal names00z "z \2 as listed in the PROGRAM heading. The default22z "z \ name is the Pascal namez "z z \4 "[parm]" allows a run time parameter to be passed.44z "z \- in the range 0..32767. The default is 0.--z "z \4 *** ODD VALUES CAUSE A TRAP at the first executable44z "z \3 statement, and allows further traps to be set.33z "z \3 Use of this feature requires a P-code listing.33z "z \*RUNPCD with no parameters is equivalent to**z "z \ RUNPCD PCDHELP(CON,CON);[0] z "z z \0Files "INPUT" and "OUTPUT" cannot be re-assigned00z "z \3 by this mechanism and attach to "CON:" by default33z "z z \$Standard device files available are:$$z "z \ NUL a null filez "z \ CON the consolez "z \* KBD console, no echo, no buffering**z "z \( RDR installation "READER" device((z "z \' PUN installation "PUNCH" device''z "z \( LST installation "LISTER" device((z "z \* AUX as RDR, without line buffering**z "z \' CMD holds run-time command line''z "z \1Further files may be available on an installation11z "z \"All the above files are text files""z "z \6All filenames must consist of alpha-numeric chars only66z "z \+ and begin with an alphabetical character.++z "z z \1File RDR and CON (on input) are buffered by line,11z "z \+ with carriage return the eoln signal++z "z \" linefeeds are generally ignored.""z "z z \/Files "INPUT" and "OUTPUT" may be reassigned to//z "z \. either devicefiles or diskfiles by including..z "z z \) ">outputfilename" (for OUTPUT) and/or))z "z \ "pager (inputfilename, outputfilename);[80],,z "z \Type "RETURN" to continuez "z z z z '$p----------- -- ABSOLUTE --;;z "z \: S ic line instr. local -- stack -- glob heap ic::z "z \; # locn num stream data ptr data base top base;;z "z \;== ==== ==== ========== ==== ==== ========== ==== ==== ====;;z "z \2Pascal programs compiled to native code and stored22z "z \5 as "COM" files are executed with a similar syntax,55zTo patch RUNPCD ver. 2.4.4, CPM installation 3.1 to 3.1a, do: Loc. Was Is 174 0 2a 175 0 94 176 0 3b 177 0 eb 178 0 c9 389 76 33 38a 33 2e 38b 2e 31 38c 31 61 528 50 cd 529 59 74 52a d5 01 52c 94 92 52e eb e5 16dc fb 05 16dd 01 00 This allows system calls to return a 16 bit value. Needed to operate various RSXs. Uses some of the patch space, so care needed if installing timers etc. &1  7CREATE requires CP/M 2.0 or higherCREATE Library/Archive Ver 2.0 Copyright (c) 1984 Jim Lopushinsky 03/05/84 :¸Use: CREATE [du:]filename.LBR/ARC!\#}ʒ!]~ ʒ!eʦ!e’Allow how many entries: >   !~ʑG#0 ґT])))7,>7|g}oN""!<!>pEL!>E:GLÅInvalid entryoe!<!>ELoCREATE complete~#_#:[<=_ \\<No Directory spaceDžo$~# <w# E\Out of Disk space\<Can't close fileLBRARCDIR ->-,- - -;-!̤ -w+e l-Ow+e ʸ- -+6#?^  Í: ]0 AGyO+~#<I+q#45 w   *w#6?#!k045#%a{<_ɯw# WW W p# W ^ ^ .,:;[]=<>|  03/05/84 :¸Use: CREATE [du:]filename.LBR/ARC!\#}ʒ!]~ ʒ!eʦ!e’Allow how many entries: >   !~ʑG#0 ґT])))7,>7|g}oN""!<!>pEL!>E:GLÅInvalid entryoe!<!>ELoCREATE complete~#_#:[<=_ \\<No Directory spaceDžo$~# <w# E\Out of Disk space\<Can't close fileLBRARCDIR ->-,- - -;-!̤ -w+e l-Ow+e ʸ- -+6#?^  Í: ]0 AGyO+~#<I+q#45 w    Preliminary documentation for LBRDISK (CP/M 2.2 version) Jim Lopushinsky March 5, 1984 What is LBRDISK? ---------------- LBRDISK is an extension of the CP/M 2.2 BDOS (RSX) that allows you to treat libraries and archives as a logical drive. For example, to squeeze and collect into a library a collection of text files you might do the following: B>CREATE TEXT.LBR <--- creates an empty library Allow how many entries: 12 <--- 12 files. B>LBRDISK C:=TEXT <--- allocate drive C to TEXT.LBR B>NSQ C:=*.TXT <--- squeeze all text files into TEXT.LBR It doesn't matter if the assigned drive actually exists or not. All transient programs (including the CCP) have access to the newly created drive. Are there any restrictions? --------------------------- Yes. LBRDISK allows modifications to the library drive only if one library or archive is allocated. If more than one is allocated, the library drive becomes Read-only, and will return appropriate CP/M errors if an attempt is made to write, erase or rename a file on the library drive. There must not be more than one open output file on the library drive. Programs must close any output file before opening another. There are no restrictions on the number of open input files. Libraries and archives are sequential files. It is strongly recomended to erase a file and re-make it before writing to it. Writing to an existing file is allowed. However, the records replace existing records in the old file, and if writing occurs past the end of the file, the next member will be clobbered. Making a new file causes output records to be appended to the end of the library. Random write is allowed, but the program must not leave any "holes" in the file. As far as I can tell, all the common utilities operate as expected. Editors should not be used, unless you are positive that the editor maintains only one output file at a time. What are the programs? ---------------------- There are two utilities associated with LBRDISK: 1. CREATE - to create an empty library or archive. This utility will run under CP/M 2.2 as well as CP/M 3. 2. SETRSX - loads the RSX manager just below the CCP. This utility must be executed prior to using LBRDISK. It is loaded once only, and remains active through warm boots. How do I use LBRDISK? --------------------- Here is the syntax: A>LBRDISK Entering LBRDISK with no command tail will remove the last active Lbrdisk RSX from memory. If there is more than one active Lbrdisk, only the last one loaded is removed. A>LBRDISK C1:=B5:CASM,C:TEXT Drive C user 1 will be allocated to CASM on B5 and TEXT on C0. B>LBRDISK C:=*,1:=A1:JRT*,2:=2:CASM,LASM Drive C will be assigned to the following: C0 = all libraries and archives on B0 C1 = all libraries and archives on A1 beginning with JRT C2 = CASM on B2 and LASM on B0 In the above two examples, drive C becomes read-only. B>LBRDISK D:=TEST D0 will be assigned to TEST on B0. Since only one library was specified, drive D becomes read-write. If we now execute the following: B>LBRDISK C:=1:TESTA A second library drive is created. C0 is now all the members from TESTA on B1. There is nothing stopping you from using NSWP to copy members back and forth between the 2 libraries and/or archives! B>CREATE TEST.LBR Allow how many entries: 6 This creates an empty TEST.LBR file with room for a maximum of 6 members. B>CREATE TEST.ARC This creates an empty TEST.ARC and TEST.DIR file. B>SETRSX This command must be executed before using LBRDISK. If executed a second time, it removes the RSX manager, and any LBR RSXs below it. Please make any bug reports and/or comments to the SYSOP at Meadowlark RCP/M (403) 484-5981 @ 300/1200 baud. xamples, drive C becomes read-only. B>LBRDISK D:=TEST D0 will be assigned to TEST on B0. Since only one library was specified, drive D becomes read-write. If we now execute the following: B>LBRDISK C:=1:TESTA A second library drive is created. C0 is now all the members from TESTA on B1. There is nothing stopping you from using NSWP to copy members back and forth between the 2 libraries and/or archives! B>CREATE TEST.LBR Allow how many entries: 6 This creates an empty TEST.LBR file with room for a maximum of 6 members. B>CREATE TEST.ARC This creates an empty TEST.ARC and TEST.DIR file. B>SETRSX This command must be executed before using LBRDISK. If executed a second time, it removes the RSX manager, and any LBR RSXs below it. Please make any bug reports and/or comments to the SYSOP at   Implementing LBRDISK with ZCPR2 ZCPR2 checks the drive code when attempting to log into a new disk. Since LBRDISK is often used to create psuedo drives higher than the installed drive, it is necessary to change the MAXDISK equate in ZCPRHDR.LIB. Besides, it is the responsibility of the BIOS to check for (and gracefully recover from) an invalid physical disk selection. I suggest setting MAXDISK to 15 and re-installing ZCPR2. Oh, and it is a good idea to set MAXUSER to 15 for compatibility with CP/M+ and other CP/M systems. If you have the source code for your BIOS the beginning of the SELDSK routine should be something like the following: SELDSK: MOV A,C ;Get new disk LXI H,0 ;Flag possible invalid disk CPI MAXDSK ;or whatever the variable name for ;maximum physical drive is. JC DSKOK ;Jump if ok XRA A  STA 4 ;So that the CCP is not caught in ;a loop RET DSKOK: STA SEKDSK ;or whatever the variable name is . . (Remainder of SELDSK routine) . . If there is room in your BIOS, you should install code to print an error message on select error, and jump to WBOOTE. Note: it must jump to WBOOTE, not to WBOOT so that the RSX manager can intercept. Jim Lopushinsky March 7/84 403-484-5981 @ 300/1200 baud. BIOS the beginning of the SELDSK routine should be something like the following: SELDSK: MOV A,C ;Get new disk LXI H,0 ;Flag possible invalid disk CPI MAXDSK ;or whatever the variable name for ;maximum physical drive is. JC DSKOK ;Jump if ok XRA A Lbrdisk options can be selected by using SID, DDT or EDFILE and modifying bytes beginning at 103H as follows: 103H: Read-only flag. 0=R/W, non-zero = Read only. Lbrdisk sets the library drive to read-only if more than 1 library is specified regardless of this setting. 104H: Number of pages for directory RSX. In addition to the library RSX being loaded, a second RSX is built to hold the library FCBs and member names. Each library FCB is 41 bytes, each archive FCB is 82 bytes, each member entry is 23 bytes, plus a 27 byte RSX header. Currently set to 8 pages (2k). 105H: Multi-RSX flag. 0 = allow more than 1 lbrdisk RSX, non- zero = allow only 1 lbrdisk RSX. 106H: Minimum library drive (1=A:,2=B:,etc). 107H: Maximum Library drive. 108H: Maximum library user number. 109H: Secure mode (for RCPM use). 0 = non-secure, non-zero = rename .COM to .OBJ.  10AH: Address of the BDOS entry point. Use SYSTAT or BDLOC to determine this address, the patch it at 10AH, 10BH (Low order first). NOTE: This address must be patched before executing LBRDISK.  library is specified regardless of this setting. 104H: Number of pages for directory RSX. In addition to the library RSX being loaded, a second RSX is built to hold the library FCBs and member names. Each library FCB is 41 bytes, each archive FCB is 82 bytes, each member entry is 23 bytes, plus a 27 byte RSX header. Currently set to 8 pages (2k). 105H: Multi-RSX flag. 0 = allow more than 1 lbrdisk RSX, non- zero = allow only 1 lbrdisk RSX. 106H: Minimum library drive (1=A:,2=B:,etc). 107H: Maximum Library drive. 108H: Maximum library user number. 109H: Secure mode (for RCPM use). 0 = non-secure, non-zero = rename .COM to .OBJ. 2:  >RSX LBRFILE LBR ARCDIR~<=Q+:e8<2e8:e8:e8=2e8<#~=+:e8=+:o8=+7"X8:Z8=2Z8e &°+*R6~ ʮ+ ʮ+ ͼ+"R6®+>&2\8,&°+:\8µ+>&32\8*g8~+6+O++ +x+~++:p8*q8~,612  oͷ This version of LBRDISK requires CP/M 2.x|Aͷ LBRDISK version 2.2 Copyright (c) 1984 Jim Lopushinsky 03/10/84 : ͷ BDOS address at 10AH not patched.:Ͳ!ͷ RSX manager not loaded. Use SETRSX to load. 22$22:BͲ€ͷ No Library RSX to remove. Use LBRDISK ? for help..6. f.6.š+~ͷ Library RSX removed*: .~. =. fõ!%:ͷ Invalid Library user number^_:cBͲcͷ Library RSX already active. Use LBRDISK with no command tail to remove.r *"4*&"*!!\7 #}fͷ Syntax error. Enter LBRDISK ? for help.^ͷ Examples: B>LBRDISK C:=* <--- Build C0: = Libraries/Archives fro m B0: B>LBRDISK C1:=LIB1,FOOBAR <--- C1: = LIB1 and FOOBAR B>LBRDISK <--- Remove the last LBR RSX B>LBRDISK C:=*,1:=1:*,2:=3:*,2:* <--- C0: = All libraries from B0:, C1: = All libraries from B1:, C2: = All libraries from B3: and B2: B>LBRDISK B:=A6:*,B4:FUM <--- B0: = All libraries from A6:, and FUM from B4: *.6:]?ʱ+|ʂ"(!]~ ‚+~=:2+~<–:$<=2%!:=ͷ Invalid Library drive. Must be between :@ͷ : and :@ͷ :^:=ڨ*(~ #!\7 #}ʂ+"(!]~ m+~[:<[ͷ Only one Library drive is allowed^+~2*."*:ʐ*0*2d **d "*"BK*0͕ :ʷ*,*.d **d "*"BK*,͕ :W*d *.6#6 #t#6.w#w.!BU ;."**d +  Too many Libraries/Archives specified@d ; 1 `i":2:%2: 2!*4! U :G:2*&}} $.͸ =Ÿ ͷ Not on page boundaryͷ Insufficient memory~#_÷  O~# ![4:$ 5~wp #~ :#N#F:= ( ++ ( W$, Zcx { ~#o}o  ! b.& ;;>x~# , +6#͎ ͭ o  o ] N : o ʬ 0& Ґ GyO& +~#<& f ʘ +q#& & 45&  w o % % b *g w#6?#g !  45#t a{ҋ _ɯw# ͦ ͦ  ͦ  p# ¦  ʭ ʭ .,:;[]=<>| o % % b *g w#6?#g !  45#t E1LBR : y y)  !R͊~#foq ??c      L    L o$ 2 22!"Y:­=22ͭ*("[!"*:$ʆ2]*"t!t!K7t^#V"g!*g+"g|tt!~d"e*[~ẃ+V+^##s#r# "[**#"**.*eʄ~ ͊~_ _5ʮy O_!_>͊y O_COMOBJ|}}o|g=!y 2 :"k"!9"^:!2u1EoD]%$]"e:A2A> CP/M Error on : :fav̋ ̝1>Read-only Disk>Read-only File>File Exists>? in Filename ?´>& **"]*("[*]|=+"]*[?:uG~# 7+>͊"[*qs#r#:sw###{'2s8{<2s{z_>W"q~#_ >"T!_  "e:! _ :>{2ʆ:_{2  ͱʜ&"i*ks#r#> ͊ _++V+^*k> ͊~#6#6#>> ͊~w*k*i#Sg[ 8 ~6g??%: >?| _:|?92h I: ͈ *]}\h >&}T*]#"]:ʙ?*]+"]*["[2tL!tځw4*Y*[~ ڴ># _>͊>##~!>w ww} g?:t!tʠڠÁ!tځà !~>&*k'& @*k'͖ g[ !~! >&! F!~>&hͭ R*e} ҈*cMe."e*k! ~wրw! 4~!¯##~!w*e} [ ! nͭ M*e} +*k! ~wրw! 4!w*e} ͱ>& &"i:'G:u*k# hx*"3 *%>͊s#r++w+w+!%N#Fp+q>͊w#w#w͖ *iÜ  ͳ!w ͳ>&*kʏ & *k  s͖ g: :o  ͳ &*k#S͖ g[ ͓ R*k!!N#Fyyx! w!> ##~!w! w*e}շ% *k~#fo|G }G *ee."e*e} [ !!^#VM*q*k ~#fo+ͱʎ & N#F!!q#p#wg :&:- :,!u>&*(**"]*]| +"]@3 ! **#"[*.5 5 "**[ɯ=:-*k!~!~#fo"c!N#F*c DM!~#fo>%͊q#p! !~#fo#S>͊ _*(~^#V"o *oi !"w#w?!!^#V"g))+*] >&!>8  ? *g+"g|a *]|(  >8 Z *[~@< >͊"[ #_8 >͊"[*]+"] )!"w#wJ *]|‘ >8 *[~@ʥ >͊"[ # _+F+N##^#V#"e +s#r#>*e͊"[*]+"] ? *]|z !  *("[!"]**"g*g|@) *]#"]*g+"g!  8 " )?  ! ~<> &>2*("[**"]2t![__!_[_!N#F!!^#V`i>&&)))))))! ~͊"c!^#V###N#F! "m!" q#p*mɷ *cy͊*k ~#fo*k N#F *k N#F`i" s#r*k>͊s#r~w_  UUUUUU@DHH$I $ $@@@ "$ HH$$D "@$ @ @"H!$D I$B@B$$DH@ DHI$ BB"H@DH D@@@$$ DH BI$ $"  $H$ "A$BHDI @B IBI"@!"@@"B!  !$DHBBH $D$!$$HH $!$  D@  __!_[_!N#F!!^#V`i>&&)))))))! ~͊"c!^#V###N#F! "m!" q#p*mɷ *cy͊*k ~#fo*k N#F *k N#F`i" s#r*k>͊s#r~w_  UUUUUU@DHH$I $ $@@@ "$ HH$$D "@$ @ @"H!$D I$B@B$$DH@ DHI$ BBThere is a bug in LBRDISK2 vers 2.1 which prevents the library user number from being an odd number. The version number has been changed to 2.2 to prevent confusion. Just replace LBRDISK2.COM with LBRDSK22.COM. All the other modules are the same. March 10, 1984 Jim Lopushinsky LBRDISK2SET /0LBRDSK22COM;12345678LBRDSK22$$$  KLBR +:  > LBRFILE LBR ARCDIR ~<=Q+:e8<2e8:e8:e8=2e8<#~=+:e8=+:o8=+7"X8:Z8=2Z8e &°+*R6~ ʮ+ ʮ+ ͼ+"R6®+>&2\8,&°+:\8µ+>&32\8*g8~+6+O++ +x+~++:p8*q8~,1+ 0fd This version of LBRDISK requires CP/M 3.xd LBRDISK version 2.1 for CP/M Plus Copyright (c) 1984 Jim Lopushinsky 02/18/84 "1".~2$."~2 :¼*.6;*]*d No Library RSX to remove. Use LBRDISK ? for help..6. f.6*.Ewd Library RSX removed*.~2&:&.~†.;s †=. fh!%:d Invalid Library user number_:*]d Library RSX already active. Use LBRDISK with no command tail to remove.*"5*'"+!!\f #}d Syntax error. Enter LBRDISK ? for help.d Examples: B>LBRDISK C:=* <--- Build C0: = Libraries/Archives from B0: B>LBRDISK C1:=LIB1,FOOBAR <--- C1: = LIB1 and FOOBAR B>LBRDISK <--- Remove the last LBR RSX B>LBRDISK C:=*,1:=1:*,2:=3:*,2:* <--- C0: = All libraries from B0:, C1: = All libraries from B1:, C2: = All libraries from B3: and B2: B>LBRDISK B:=A6:*,B4:FUM <--- B0: = All libraries from A6:, and FUM from B4: *.6:]?f+|7")!]~ 7+~=>: 2 +~2*."+:E*1*3 *+ "+"BK*1C :l*-*/ *+ "+"BK*-C :W* *.  >k s#rr+6."*.s#r6#6 #t#6.w#w.!; ."*+ d Too many Libraries/Archives specified   `i":2:%2: 2!*5!   : A: S G>1x 0>:/_~#_d ʇ O~#v ![4:$ʖ 5~w #~§ :  w? ͞ T T ‘ *ʖ w#6?# ! ʮ 45#£ a{Һ _ɯw#    p#  .,:;[]=<>| ͞ 3LBR : y :*":Zj:w>g:bwj2yh c҈/  !~#foc!-X  J    V  y ' J       b p o$ 2N**"a!",:&2c*$k°|͝°!Sͳ°^#V"m!Z*m+"m|ʰ͚°!~ "k*a~w+V+^##s#r#ʹ"a*,#",*0_*k~<ʰ ZA:c=2c!) :)l2c*')kZ|͝Z!~J"k~w*a+V+^##^#Ve#s#r#!s#r#ʹ"a*,#",*0_*k͚:c=2cl!R% Too many Library/Archive members Specify fewer Libraries/Archives Aborting.p2=2**.w* .6.::w "!9"1K1* |.!,!.!.!.!.~!|^#V# ^# * .w.w.w :_ * .6.6I! 6 ɯ!"w#w#w!'*as#r+w+wͥ! !"4#4#4?O~#ʶ~# ~# G~# :2> ~ Sͱ3Vͱ;y O!Y@!\>y OCOMPRLOBJOBP|}}o|g=!ʍy 2 :x"q"!9"* .~2{1KoD%$"k* .~<:A2 CP/M Error on : :l  5 G<*k}D1Read-only DiskRead-only FileFile Exists? in Filename ?k^>& *,"c**"a*c|‰=+"c*a?:{G~©# ͳ+>"a*ws#r#:yw###{2y{<2y{z_>W"w~#_ "!* .~w "kw:>2 :_ l[r<&"o*qs#r#>  ++V+^*q> ~#6#6#>> ~w*q*o#gla, ~ڧ6g?l?: l>? :?2n: ͍͎*c}n>&*c#"c:9ڍ?ʍ*c+"c*a"a2z!z!w4* .^#V*a~ X># >>x##~!>w ww̓g?¢:z!z@@!!z!@l !~>&*qr& @*qr͊ gla!~! >&! F!~>&hͳ*k}, *ieMe."k*q! ~wS րw! 4~!S ##~!w*k}l a ! nͳ*k}5*q! ~w րw! 4!w*k}l [r>& &"o:)G:{*q# x*$ *'>s#r++w+w+!%N#Fp+q>w#w#w͊ *o<l  ]!w ]r>&*qr3 & *q  ͊ g: :ol  ]rj &*q#͊ gla͙*q!!N#Fyyx! w!>® ##~!w! w*k}շL * .N*q~#foe| } *ke."k*k}l a!!^#V*w*q ~#fo_5| l[r6 & N#F!!q#p#wg :&q#p͊ gl>&: goG! ~>&:/ :.!{>&***,"c*c| +"c@' ! *,#"a*0_) ) ",*aɯ=:/*q!~!~#fo"i!N#F*i DM!~#fo>%q#p!ʹ!~#fo#> **~^#V"u N*u` !"w#wI͝!^#V"m))+*c_ %>&!>> E*m+"m|X *c|  >>Q *a~@3 >"a #>>"a*c+"c %)!"w#wP*c|ˆ >> *a~@ʜ >"av # +F+N##^#V#"k +s#r#>*k"a*c+"cv E*c|q ! %!~w ~w**"a!"c*,"m*m|@/*c#"c*m+"m! >" åI  ! ~<> &>2**"a*,"c2z!ae!ea!N#F!!^#V`i_>&&)))))))! ~"i!^#V###N#F! "s!" q#p*sɷL* .N*iy*q ~#fo_*q N#F *q N#F`i" s#r*q>s#r~w* .w A"HDAB UUUUUUUUUTI$DHHID"I  H!$ $@BDH"$B@B@"@@ @@ @$@!! $ @B@!  $B $D$ BB"H@DH D@HH@I H@ $@@BI!H@@$I ABHDI @$ @ "D $$$ HI!  DB!!A BH HHB "D @$$$@2z!ae!ea!N#F!!^#V`i_>&&)))))))! ~"i!^#V###N#F! "s!" q#p*sɷL* .N*iy*q ~#fo_*q N#F *q N#F`i" s#r*q>s#r~w* .w A"HDAB UUUUUUUUUTI$DHHID"I  H!$ $@BDH"$B@B@"@@ @@ @$@!! $ @B@!  $B  Preliminary documentation for LBRDISK (CP/M Plus version) Jim Lopushinsky March 5, 1984 What is LBRDISK? ---------------- LBRDISK is an extension of the CP/M Plus BDOS (RSX) that allows you to treat libraries and archives as a logical drive. For example, to squeeze and collect into a library a collection of text files you might do the following: B>CREATE TEXT.LBR <--- creates an empty library Allow how many entries: 12 <--- 12 files. B>LBRDISK C:=TEXT <--- allocate drive C to TEXT.LBR B>NSQ C:=*.TXT <--- squeeze all text files into TEXT.LBR It doesn't matter if the assigned drive actually exists or not. All transient programs (including the CCP) have access to the newly created drive. Are there any restrictions? --------------------------- Yes. LBRDISK allows modifications to the library drive only if one library or archive is allocated. If more than one is allocated, the library drive becomes Read-only, and will return appropriate CP/M errors if an attempt is made to write, erase or rename a file on the library drive. There must not be more than one open output file on the library drive. Programs must close any output file before opening another. There are no restrictions on the number of open input files. Libraries and archives are sequential files. It is strongly recomended to erase a file and re-make it before writing to it. Writing to an existing file is allowed. However, the records replace existing records in the old file, and if writing occurs past the end of the file, the next member will be clobbered. Making a new file causes output records to be appended to the end of the library. Random write is allowed, but the program must not leave any "holes" in the file. As far as I can tell, all the common utilities operate as expected, with a few exceptions: CP/M+ DIR command withoptions does not report the correct sizes of members. CP/M+ ERASE transient with wildcards only erases some of the requested files. CP/M+ RENAME transient with wildcards only renames some of the files. Editors should not be used, unless you are positive that the editor maintains only one output file at a time. XFCBs, Directory Labels, and Time stamps are not supported. What are the programs? ---------------------- There is one utility associated with LBRDISK: 1. CREATE - to create an empty library or archive. This utility will run under CP/M 2.2 as well as CP/M 3. How do I use LBRDISK? --------------------- Here is the syntax: A>LBRDISK Entering LBRDISK with no command tail will remove the last active Lbrdisk RSX from memory. If there is more than one active Lbrdisk, only the last one loaded is removed. A>LBRDISK C1:=B5:CASM,C:TEXT Drive C user 1 will be allocated to CASM on B5 and TEXT on C0. B>LBRDISK C:=*,1:=A1:JRT*,2:=2:CASM,LASM Drive C will be assigned to the following: C0 = all libraries and archives on B0 C1 = all libraries and archives on A1 beginning with JRT C2 = CASM on B2 and LASM on B0 In the above two examples, drive C becomes read-only. B>LBRDISK D:=TEST D0 will be assigned to TEST on B0. Since only one library was specified, drive D becomes read-write. If we now execute the following: B>LBRDISK C:=1:TESTA A second library drive is created. C0 is now all the members from TESTA on B1. There is nothing stopping you from using NSWP to copy members back and forth between the 2 libraries and/or archives! B>CREATE TEST.LBR Allow how many entries: 6 This creates an empty TEST.LBR file with room for a maximum of 6 members. B>CREATE TEST.ARC This creates an empty TEST.ARC and TEST.DIR file. Please make any bug reports and/or comments to the SYSOP at Meadowlark RCP/M (403) 484-5981 @ 300/1200 baud.  all libraries and archives on B0 C1 = all libraries and archives on A1 beginning with JRT C2 = CASM on B2 and LASM on B0 In the above two examples, drive C becomes read-only. B>LBRDISK D:=TEST D0 will be assigned to TEST on B0. Since only one library was specified, drive D becomes read-write. If we now execute the following: B>LBRDISK C:=1:TESTA A second library drive is created. C0 is now all the members from TESTA on B1. There is nothing stopping you from using NSWP to copy members back and forth between the 2 libraries and/or archives! B>CREATE TEST.LBR Allow how many entries: 6 This creates an empty TEST.LBR file with room for a maximum of 6 members. B>CREATE TEST.ARC This creates an empty TEST.ARC and TEST.DIR file. Please make any bug reports and/or comments to the SYSOP at MeadowlarLbrdisk options can be selected by using SID or EDFILE and modifying bytes beginning at 203H as follows: 203H: Read-only flag. 0=R/W, non-zero = Read only. Lbrdisk sets the library drive to read-only if more than 1 library is specified regardless of this setting. 204H: Number of pages for directory RSX. In addition to the library RSX being loaded, a second RSX is built to hold the library FCBs and member names. Each library FCB is 41 bytes, each archive FCB is 82 bytes, each member entry is 23 bytes, plus a 27 byte RSX header. Currently set to 8 pages (2k). 205H: Multi-RSX flag. 0 = allow more than 1 lbrdisk RSX, non- zero = allow only 1 lbrdisk RSX. 206H: Minimum library drive (1=A:,2=B:,etc). 207H: Maximum Library drive. 208H: Maximum library user number. 209H: Secure mode (for RCPM use). 0 = non-secure, non-zero = rename .COM to .OBJ, .PRL to .OBP. ad-only flag. 0=R/W, non-zero = Read only. Lbrdisk sets the library drive to read-only if more than 1 library is specified regardless of this setting. 204H: Number of pages for directory RSX. In addition to the library RSX being loaded, a second RSX is built to hold the library FCBs and member names. Each library FCB is 41 bytes, each archive FCB is 82 bytes, each member entry is 23 bytes, plus a 27 byte RSX header. Currently set to 8 pages (2k). 205H: Multi-RSX flag. 0 = allow more than 1 lbrdisk RSX, non- zero = allow only 1 lbrdisk RSX. 206H: Minimum library drive (1=A:,2=B:,etc). 207H: Maximum Library drive. 208H: Maximum library user number. 209H: Secure mode (for RCPM use). 0 = non-secure, non-zero = rename .COM to .OBJ,  Z3ENV* ͭ >2!"s"w>2}2y2|!6>:7( *8~/NLLF (List Library Files), Version 1.1 Syntax: LLF dir:library -or- LLF dir:library afn1,afn2,... o... -or- LLF dir:library /o... Options: C - Print CRCs G - Group by File Type and Name I - Print Indices P - Printer OutputO>~ͳ !3X>((: Library File P3 Not Found or Structure Error:7(q*:~#/( :78_*<~͚  /CGIP>2y#:|/2|#>2}#>2# Invalid Option: wN*:y(!/\>~!]>Kw͋`i*s~("w~#,(C*w  TPA Overflow*s"F *w6ʹ*z|2~*s"u:~l*u"wN ##~G*u~( ~(2~"u>2~i&\#[wA~(~(6 :~ʝ More Files to Follow - Strike Any Key (^C to Quit) lXÝ͟ ͅ ͅX X Filename.Typ Recs Size :}( Index:y CRC ------------ ----- ------:}( -----:y ----U! ^#V#^#V#> ͛4 }(#> ͛4 >K͛:}(> ͛4 ^#V:y(> ͛ yX yX͟ *z4 Files Selected in Library !P~ (͛#:X!"z*sT]~(! ((*z#"z ~(  #:|  ' ' '#*.*LBR: 2%"!`i"#!N#F!̀ ( # x *#6!~ 3#[! ?( #*#:%8S#  !6# !ͨ ͽ $ #: !  w#w>>>2 e ѯ2I :H *J ~ͪ ʵ#çp*F ! : 2 e>2I ! \ ! :H 2 ! *  :E 2 "J ~ͪ #"F ͆ \͆ l2E 2L 2H Fy2M ͹~2 :{2E #: RbC b: b:L  ѯ2H ͹~2 :  .‘#͹ :M :I ʴ~!ڴͪ ʴ#=¢:H ͏ *>?#?¹͏ #!H 4d w #r G~A @@ 2L #~ ~ - ? # ~ ? ̀ O ͱ @ 2M =K ͎ w #w i #^ z  S =2M 2L ~# ʆ +~!گ =_.:,<>ȷ;ɯ~͏ # Wy   Oµ y70 ?7ɯ  > Fy ~# COM* /F##x_* .~* ,~* -~* ^#V#~ѷ* (~" *4 ,  *. "8 DMxf yډ :6 ʈ *, *4 xʈ s#r#*0 t *8 ": *: |g}o ": "@ *@ #"@ *8 }|ڎ *@ "< *: *< }o|g"< ڢ |ʢ *: "> ڢ *< *> ͎ ú :6 ʉ *. "< *4 "B *, "D *< DM*B *D  ?  y w SORT Pointer Error*B ~#~*0 DM*D *B ~#foNq# xZ *0 *D "D *B ##"B *< +"< | :6 ͯ *0 DMNwy# xŸ " * *0 DM!z *, *4 DM+) +) Nq#Nq:6  ͯ  *4 DM+) +) N#F^#V`i*2 |͈ }͈ : '] ] d]  ] }0͛}o|gl _ }o|gy€ ʀ > Ûy0Û͗ ͗  ڣ 7Û0Ûw w] > ] ] ]~#T > ̈́ + 004 y yG>GO> ͛J:jw> 2> 2}~# ʻ ͳ ʨ ʭʭʱ Âyʂ ÂyG>GO> Â~#/      y yG>GO> %I>.IIk>.͛k͛k> > O:GyxyijO:Gy2xy   >^@ 2222 2 2>^2@2*. O*. -O*.A OG~tuw#gH̀W͡H͖W͡r# x¡H  H|}~# x ~+ x|g}o 7կ2t!"rV;*r}o|g"r:>2td*r:tS7|g}oSP}o|gSPa{_! s#r#6!F#"##ʵ###¤*ö#~#foOF##s#r#yx~#w   */}-$.164#:&*:( )*%F(͈/~(E )"$**&F \&$F$I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A" y yG>GO> %I>.IIk>.͛k͛k> > O:GyxyijO:Gy2xy   >^@ 2222 2 2>^2@2*. O*. -O*.A OG~tuw#gH̀W͡H͖W͡r# x¡H  H|}~# x ~+ x| LLF Version 1.1 11/27/86 LLF Version 1.1 corrects a bug in Version 1.0 that caused sporadic and unpredictable bomb-outs. The bug manifested itself with a 'TPA Overflow' error-message, for which nobody had a sensible explanation. Bruce Morgen finally tracked the bug down during his recent exhaustive work with library files. The bug results from an error in the LUDIR module of SYSLIB Version 3.6. The source of the bug was traced to the file SLUDIR.Z80. The line in SLUDIR.Z80,'ld a,(bdose+7)', should be 'ld a,(bdose+2)'. The LUDIR module of SYSLIB, used in LLF, derives the top of TPA from the most significant byte (msb) of the bdos entry address, which is contained at memory address 7. Since 'bdose' is equated to 5, the most significant byte of the bdos entry address is at 'bdose+2', not 'bdose+7'. By loading 'bdose+7' into the A register, the LUDIR module introduces a random number into the top-of-TPA calculation. Neither CP/M nor ZCPR3 documentation sets forth a value for 'bdose+7' and at any particular time this address may contain any of 255 different values. The source code for LLF has not been released. Nevertheless, examination of the program with a debugger reveals the erroneous code at 069DH. That byte should be changed from 0C to 07. That's all there is to it. For those unaccustomed to in-memory modification of COM files, we have included a patched version of LLF in this library, LLF Version 1.1. In addition, we have included the modified source code for the LUDIR module, SLUDIR11.Z80. Bug Fix: Bruce Morgen Director, NAOG/ZSIG Documentation: Richard Jacobson Sysop, Lillipute Z-Node 312-649-1730 System 1 312-664-1730 System 2 ry address is at 'bdose+2', not 'bdose+7'. By loading 'bdose+7' into the A register, the LUDIR module introduces a random; Prevent any "piping" commands executing. ; This is used to avoid anomalous disk writes on secure systems. ; .pipes:: stc ret end PATCH DOC%CREATE COM &'LBRDISK2DOC!()*+,LBRDISK2NOT -.LBRDISK2SET /0LBRDSK22COM;12345678LBRDSK22NOT9LBRDISK3COM;:;<=>?@ALBRDISK3DOC!BCDEFLBRDISK3SET GHLLF11 COM$IJKLMLLF11 DOCNONOPIPES $$$1)  ?This version of SETRSX requires CP/M 2.x|ͨ*}R$.>)ʏ=wNot on page boundaryInsufficient memory*.^#V#*#N#Fr+sq#p*.45¸. fë.RSX removed2;~#_# ɨRSX ++ +x+~++:p8*q8~_0}>#N#F:= ڙ++ ڙW$͝Zcx {r~#o}o{aʒb.;;>x~# Ý_0}>#N#F:= ڙ++ ڙW$͝Zcx {r~#o}o{aRSX y; zozc*|<*G >k xTs#r+#r+6.""**#s#r*D`.45. F.~s. ^#Vx>`. s#rzs.""s1*"o* .:OAD@ @I vDSLUDIR11.Z80V  !"#$%&'()*+,-./0123456789:;<o=>?@ABCDEFGHIJKLMNOPQRSTUٌ4 ]=v6x0[7 x1:qP f9ܝ5o9ܝ!1^qᑳٌ4 ]=v6174 fTYDHeٌbxxL,ٌY|Ӹٌ4 7klfg3ak4b{ao< ЊWǘVHZB7f?m[m]0Œ)G#+GFaFƱυ743Œ)M@ (C5o͸==|w0QGDQL?yWg)3}B 8Fh(×sFoFQ[bIJDabEeiYJ9K)4ʲ?2|9gF` /*+LC,R 49 veh ɉTB1́%2 ONƴOaqcFhEhQY9K-v4&g)1;K)И# pgTVh{JѾI_;K]Ip DRb%8KwBjfʨ-1Tb@`gHc"WxgH~#Mԕw%eDTԖ,nDR4,e{+okO^{t't5 Qūc!%gŎDE[N%8K;:Nh&"qܘZ8K)P'pTs՜T{g)Ӽ7 SF-E[ie 8Y9K)ޘ# oTW,, LqUtUaF;AjYQY;K*tTHA#^{: aoT,S`gמ,P!lPSxgI8ۮD\\Ĉeal*^TVsf#74 ޲q6gqYߕvR1fj(Vg)߈2~G#=zM]۵yoLD'TδsG#+gI Qѳ{gN(^;+8KGbGc" "(W[} Ĉeag)(cŴ2]_;K)Pel #QR',~r(c)qRpfߕ7}N(Bp4rSJLv,ј2z|k; ,xE+1R=&ʸaQӍx(8YᦙR 4yoje٧ VD5ZYYJʼg1SF7r UzR8K]Ot';+E(1&q(×sFoY?ertYjDQԖ,,-Du"^h+hd߮YJMC,s`AUA[NkOSGaNh;!ߕkNiq`g}W"[*DffF\( XDY6_^{QFo` 8oYJϿ^eF8K%Y QG DgN(^;+q,Q#Qg`gI8lv6'C,lm<]eڢaQ>=͒y>?o*o>gʵ0¾33} Real arith. error, ABORT $:z>͒>O( 33!:z52z:y:>͒7?7O>Ë:!>2z52y2z5>Ë>͒:> ͎> ͎O!"y:o"{!à+!T0! 9^#V3! 9^#V2{_{_! 9^#V34^ {>W_{_! 9^#V4ïà0!T0! 9^#V34^!9^{>W_! 9^#V3!9^#V2{_{_{_e! 9^#V4à0!T0! 9^#V>ͩ! 9^#V34^<*1>*101 ! 9^#V>! 9^#V>ͩ~à0!T0 !9s#r=@!9s#r!9!9^#V)s#r!9^#V!9^#V=00@!9s#r33!9)s#r!9)s#r!9 )s#r!9 )s#r!.9^#V=ʯ!,9^#Vs#r!.9^#V0!.9s#r!.9^#Vͺ0!.9s#r+++^#Vs#r!.9^#VKB0!9s#r!.9^#VKBK<܂-!.9s#r+^#V0mKB0!9s#r!,9^#V+^#V^#V! 9^#Vͺ0! 9^#V0ͺ0s#r!9^#V{_z>W_¼!9)s#r!.9^#V0!.9s#r!9)s#r!(9^#V!09^#Vm!"9^#V00ͺ0s#r!*9^#Vs#r!(9^#V^#V!9!.9^#V^#V)^#V=W¥!(9^#V+^#V^#V!9!09^#V^#V)^#V0s#r!*9^#V+^#V^#Vs#r(à0!T0!9^#V! ^#V&,!9^#V! ^#V^#Vs#r!9^#V! ^#V^#V!!9s#r+^#V!9^#V^s!9^#V!9^#V~#3!9^#V! !9^#V ~#W!9^#V!;;!9^#V ^!9^#V ^/s#r!9^#V!;;!9^#V^!9^#V^/s#r!9^#V!;;!9^#V^!9^#V^/s#r!9^#V! ;;!9^#V^!9^#V^/s#rà0!T0!9^#V!^#V{_p!9s#rz !9s#r!9^#V!^#V34!9^#Vͫ!9^#V!^#V{_{_P ?!9s#r=< !9s#r!9^#V!^#V34!9^#V^!9^#V! ^#VV/!9^#V+++^#V=, , < !9s#r33!9^#V!^#VT4à0!T0;;!9^#V34^!9^#V34^/!9s#r!9^#V;;###^#V34^!9^#V34^/s#r!9s++++^#Vs#r!9^#V34^ {?>W_;;!9^#V34 ^!9^#V34 ^/{_z>W_{_!9^#V =^ ^ {_!9^#V=y {_!9^#V34^{>W_{_Œ !9^#V34s!9^#V34s!9s#r!9^#VկE!9^#V^#V!9s#r!9^#V0!9s#r=# ‚ !9s#r!9^#VկE!9^#V^#V!9s#r+++^#V!9^#V=r r ‚ !9s#r/ 33!9sà0!T0!9^#V!9s#r!9^#V!!9s#r!9^#V! ^#V{_z>W_‰ !9^#V!!9^#V! 4=   !9sÆ !9^#V!!9^#V! 4=; J !9sÆ !9^#V!!9^#V4=o o ~ !9sÆ !9s. !9^#V!!9^#V4=ʮ ½ !9s. !9^#V!!9^#V4=  !9s. !9^#V!!9^#V! 4=  & !9s. !9sà0!T0! 9^#V^#V{_z>W_n ! 9^#V#^#Vs#r ;;!9^#V+++^#V^#V>͒ ҧ ! 9^#V+++^#V^#V>4 ! 9^#V+++^#V^#V>4 à0!T0;;!9^#V+++^#V>͒ ! 9^#V^#V! 9s#r ! 9^#V+++^#Vկ4 à0!T0! 9^#V###^#Vs#r!9^#V{_z>W_!9^#V!9s#r!9^#V{_z>W_!9^#Vs#r!9^#V+^#V^#Vs#r!9^#V^#V!9s#r+^#V{_z>W_{!9^#Vs#r!9^#Vs#r!9^#V^#V!9s#r+^#V{_z>W_!9^#V^#V!9s#r!9^#V{_z>W_;;!9^#V!9^#Vկ͒ ҫ!9^#V!9^#Vs#r!9^#V!9s#r+^#V^#V!9s#r!9^#V!9^#V^#Vկ !9^#V^#V!9s#r=à0!T0LDIR (cmd, input, output); *? ^#Vx3%Ver. 1.9  *? ^#Vx3[ (c) 1983, 1986 by C.B. Falconer *? ^#Vx3*? ^#V3ͪ Execute with "ldir {[options] [libfname]}"+*? ^#Vx3*? ^#V3 where {} shows a field that may be repeated and []3*? ^#Vx3*? ^#V3Z enclose optional fields. "options" is the character5*? ^#Vx3*? ^#V3͞ "-" followed by one or more of: *? ^#Vx3*? ^#V3 n sort by name u unsorted(default)4*? ^#Vx3*? ^#V3J g sort by "typ" m date modified0*? ^#Vx3*? ^#V3͡ s sectors of storage k kilobytes (size)3*? ^#Vx3*? ^#V3EXAMPLE: B>ldir -m command*? ^#Vx3*? ^#V3:Commands may be placed on the command line or executed6*? ^#Vx3*? ^#V3͒ interactively on ">" prompt. "fname>" shows an open4*? ^#Vx3*? ^#V3 library, and -options will display its directory1*? ^#Vx3*? ^#V37File redirection using "<", ">" is available,*? ^#Vx3*? ^#V3̈́To list command.lbr on the lister, enter:)*? ^#Vx3*? ^#V3ͽ B>ldir command >lst*? ^#Vx3*? ^#V3*? ^#V3à0!T0** ERROR **  *? ^#Vx3! 9^#V28Bad directory CRC*? ^#Vx3c`Not a library: *? ^#Vx3!9^#V!*? ^#Vx3cͥCannot find:  *? ^#Vx3!9^#V!*? ^#Vx3cBad option *? ^#Vx3cNo library specified*? ^#Vx3c>͂-c!|A!I*!Y^#V$N*? ^#V3à0!T0! 9^#V34^-{>W_3! 9^#V4!9^#V41!9^#Vs#r#! 9^#V34^ {>W_3! 9^#V34^]!9s#r!9s#r!9s#r!9s#r!9s#r!9s#r!9s#r!|l!tPG0!^#V6PPPP)PPPPPCPPPPPPPPPPPPPPPPP6PPPP)PPPPPC!9^#V+^#V +V+^ !9^#V*10!9^#Vs#r#! 9^#V4à0!T0!9^#V! +V+^ S1!9^#V! +V+^ t1{_{_!9^#V! +V+^ œ*10!9^#V!s#r#»!9^#V!^#V{_z>W_ !9^#V!^#VͿ,!9^#V!s#r!9s#r!9^#V! ^#V34^*?6  +V+^ :1!9^#V=cc­!9^#V! ^#V!9s#r!9^#V!!9^#V!9^#V͸3!9^#V+s#rÿ!9^#V! ^#V4!9^#V! ^#V34^*?6  +V+^ 1{_J,!9^#V!LIBRARY~#!9s#r!9^#V+++s#r=K !9s#r!9^#V!!9^#V s!9^#V+++^#V=ʐ !9s#rW33 !9^#V! ^#V>;;.!9^#V!0{_z>W_e;; !9^#V!0!9s#r+^#V0=66e!9^#V!!9^#VY.LBR ~#];;!9^#V! )2j!9^#V! g/!9^#V!s#r;;  ####>V O!9^#V!^#V{_z>W_!9^#V!^#V#^#V{_z>W_{_>!9^#V! +V+^ $*10!9^#V!s#r#Cg>!9^#V!ʹ2s>à0!T0! 9^#V =ʘ²0*? ^#VJ3! 9^#V*? ^#V3à0!T0!9^#V!9####> *? ^#VJ3!9^#VdKBK<܂-y/*? ^#VJ3!9^#Vկy/*? ^#VJ3!9^#Vկyà0!T0! 9^#V!!9s#r+^#V^{>W_!9^#V^#V{_z>W_{_b !9^#V!^#V{_z>W_‘!9^#V^#V! ^!9^#V!^#V{_z>W_{_m(*? ^#Vx3*? ^#V2!9^#V!s#r*? ^#V3Î*? ^#V3!9^#V!^#V+s#rê͗ | *? ^#Vx3!9^#V*? ^#Vx3.*? ^#VJ3!9^#V! *? ^#Vx3!9^#V! ^#V +V+^ 1E!9^#V^#V*? ^#V3!9^#V! ^#V +V+^ ]1¡!9^#V^#Vͺ0KB0*? ^#V3!9^#V! ^#V +V+^ ¹1" !9^#V ^#V= unknown *? ^#Vx3" !9^#V ^#V>!9^#V!^#V+s#r ^#V ^#VKBK<܂-!9^#V!s#r !9^#V^{>W_• !9^#V!^#V+s#r !9^#V^{>W_ !9^#V!^#V+s#rà0!T0! 9^#V{_z>W_!! 9^#V##^#V> ! 9^#V>i! 9^#V^#V> à0!T0!9Ͷ/!9*? ^#Vx3V!Library *? ^#Vx3!P9^#V!*? ^#Vx3*? ^#V3(! 9s#r=!"!@9s#r!9!@9^#V s!>9^#V!9^#V=!!"!>9s#rþ!33!>9s#r!9!@9^#V$"Name~#("!9!@9^#V ͺ0+N"Typ~#R"!>9^#V ͺ0!>9s#r!\9^#V +V+^ ‚"1"!9!@9^#Vͬ"Sectors~#°"!>9^#Vͺ0!>9s#r!\9^#V +V+^ "1,#!9!@9^#V #Kbytes~# #!>9^#Vͺ0!>9s#r!\9^#V +V+^ =#1‹#!9!@9^#Vh#Modified~#l#!>9^#V ͺ0!>9s#rPͺ0!@9^#VKB0!N9s#r!>9^#V0!>9s#r!9!@9^#V(*? ^#Vx3!R9^#V! 9s#r=$q$!B9s#r *? ^#VJ3!9!@9^#V(*? ^#Vx3!@9^#V!9^#V=a$a$q$!@9s#r$33*? ^#V3!B9^#V! 9s#r=$$!D9s#r-*? ^#VJ3!B9^#V!9^#V=$$$!B9s#rí$33!R9^#V! 9s#r=%%!B9s#r *? ^#VJ3!B9^#V!9s#r=U%¥%!D9s#r-*? ^#VJ3!B9^#V!9^#V=ʕ%%¥%!B9s#ra%33!@9^#V!9^#V=%%%!@9s#r%33!J9s#r+++s#r!D9s#r#s#r!L9s#r!\9^#V +V+^ &1€&!P9^#V!^#V! 9>!Z9^#V+^#V +V+^ U&410!9^#Vs#r#v&!\9^#V +V+^ ‘&1&!P9^#V!^#V! 9>!Z9^#V+^#V +V+^ &410!9^#Vs#r#&!\9^#V +V+^ '1p'!P9^#V!^#V! 9>!Z9^#V+^#V +V+^ J'*10!9^#Vs#r#f'!9^#Vկ *? ^#V3!J9^#V*? ^#V3ͱ' entries,  *? ^#Vx3!H9^#V*? ^#V3' inactive,  *? ^#Vx3!D9^#V*? ^#V3)( free entries *? ^#Vx3*? ^#V3*? ^#V3à0!T0@( !+V+^†(!39ͮ:!9s#r*1!'9s#r#­(!9 s!29^T)!#9%4{_z>W_)!9;; 0*? ^#Vx30)?*? ^#VJ3>*? ^#VJ3*? ^#V2!49^#V>k!49^#V3!69^#V2{_!'9s^{_‡+!49^#V34^-{>W_)!9!69^#Vկw)41!'9s#r#)!49^#V>k!49^#V34^*?6  +V+^ *1=*!9 +V+^ **10!'9s#r#4*!9 +V+^ J*1³*կ!9 +V+^ k**10!'9s#r#ƒ*!29^¨**? ^#V3ð*!'9sÇ+!9 +V+^ *1*9*!#9%4{_z>W_*կ!#9%4{_z>W_!'9s!29^3+*? ^#V3!'9^~+!29^Q+!'9s!9 +V+^ Z+*10!'9s#r#r+Ç+!9%!!'9^(!#9ʹ2à09-!6T0 +CMD !+V+^+*?F ͮ: ~41,*1.*10;>410[*10]*10_*100*?6 s#r#.,;;)2Җ,*?F >k*?F 3{_z,*?F >^(Ó,>*? ^#V>^(ï,>*? ^#V>^(*?F ʹ2,/v|>ʂ-"?*?'="?"?!->ڂ-,s#r--*?,s#r*??'-!9'=?"?"?"?>Â-2?*."? "?! @*-!"?!>2?h6ͥ1ͯ4>͂-͂-!.=<=!/_^#V=*?|ʯ-!".=*?>w>-7>-!?57!.=,/ !-.=շ--@> .! !>.>!> .aborting in line # FILE=???o'flownot imp.stk o'flowheap o'flowdiv 0can't loadbad ptrcase indexreal u'flowreal o'flowsqrt -velog -ve/0eofbad ch/valuemod -vefile R/Orangefile sys.string fld/sz > 255file not open4.8.?.H.S._.e.p.x............. 4 4:?J/>$$$ SUB}F#N͓?p#q҂/ʂ/@w#6:# ʚ/w# …/6.#ã/6.# ž/w# ¥/6 #®/>$0//>$/ >$/ :>$/>$0 o& /yͤ>xa}0@0/0-0-0# 00-0+ /0/0*0Wxz >x/Gy/Oz!!*?y0o0*?y0^#V=p0!9"?*?̓?>҂-!"?*?"?!!"?9 =Â-<Â-Y<Â-͒<Â-!9/w#0!9!9w#0!9!9^g1!9̀1g1w}̀1COx/1g1=/wxxGyx<=^1#6T1Yg1=w{o&9{_7z1!9! w#1>p#=š1!"?1 >ͻ1 > 1!2]?.> 1&1>*1,>*?^#V w*? DM2->ڂ-"?{zCON: ͷ2>/w|N2U:! w!$w6^2;!!ç2ͷ2>Æ2ͷ2>/w|ʛ2U:! w!$w6ҧ2;u4!&~W4!&~+̘55u4!&~w/w!&~5 ;ʢ4>!2#;¢4ڍ4;¢4ڍ4Ø5;š4څ4z13 ̓?ͷ>GyA3o5>-5ë5;š4څ4-5}5!3p3!3{3;š4څ4|¤3ʫ3{? Eڟ3MGÿ5>Â-TRUE FALSE5!.~w45 ;ʢ4~!3#5 ;ʢ4!&~z4~ 463 ;ʢ4!&~6!&>/wz4 ;!7!&~!.J4!05z4 ;ʢ4~z4;7ڼ;!a87>Â-;@w> Â-Ì4!&~@w>Â-á4!&~@w>Â-ͻ4> 4< !4#~<;7*?^#V5!$wH~U:6>v-F7#~4*?^#V!&~5!87"5~ ,5!&>/w!&~E5Y5><7!&~<><7!/~O!&~5!0 6# t5Î5y8<6<57<<>ڂ-> 5> 5!&~w>|ī505h5 ~#55> -55O!&>/w5͑;5!q87y!&~!&~7N6 6!&>/w!.w;6!&~w>L6 L66 !&~w> ]6o;c6!a87>!"?"?!>[N #x6 #~ 6?o& ?ڪ6>o|gÒ6]ʹ6  ê6"?}2?!&~́7!/67676!&>@w7!87!&~w?7!&>/w! ~ 7#6 #6 ! 6! 6!&~!;|7><7!~  !p7]?!*?#"?>w+|a7TEMP0000$$$>!$~Gw! 6 #6 #6 !N#G w # ~(¥77# ~),ʮ7ò7# ~ 7,) U:;:!878o|g~#fo87! ~# B8G8 B88#8#8#~:C8 C87yCMDAUXLSTPUNRDRKBDCONNUL89D>888::8K>K>8888888888988888888;:9p98;:88;:!&~!!&~!!.!&~!>8>o>8>o>79!&~S9!,~!0W29i9F9 "9F9i9w#C9 9+6{!(w!/6!/~4!0o|g~> ͢>>;:} .;:}!&~ .:<  :>!&~!/~):4!0o|g~> !&~@!!&~!> o|ů#~+:r:~##?@r:͉:~.:#͉:~<;ښ:?#‰:> :+#~<;ҥ:BK>}|=¶:> ! wDM!&q#pDM!,q#pDM!*q#pDM!$q#p!&~w!&~!&~/7><1;>><7!ͳ?G!U;f;x7?.,*:@[]<>()=;_?~#/w7< <>>7<>>!&> w7ɯ!*N#F!0 o$͒<| >7zp7ɣ<>7|<x>7z7>z>̓?z?̓? =|>7|7?z>7z"='=z/={>/B=# x4=>H=/G*#==xG > =}=!K>K>7>[=—=\K>K>`=+`=µ=`=K> K>K>+Ý= ==`= K>>==`= `=w#`=7>6z#~OK>7>~# >>=D> 7>O<!->:|G:{=7>K> 7?> >> >!|V> y< h>+#~5!s>u>~>|>0͚>̘>>. >|Ĥ>0>|¼>x )>#>T]))ɷ{z>?_?_7{?zS )!??# ??33<?&?# ?{H?|H?W_>?}gF?bjS? )Q?S?x~# xc?̈́?͋? y/Ox/G{/_z/W+}/o|/gթW_WOzGzO?A[?a{?:?0a?{А/w7< <>>7<>>!&> w7ɯ!*N#F!0 o$͒<| >7zp7ɣ<>7|<x>7z7>z>̓?z?̓?vHLDIR.PASi o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghb{ۤlX31z&̨$ǔ4ԒЎd1A%r<6*qRNjk\+:i#ǻ:JrEh##ܗZpoF%9Z(T$AZ)6[\ţب$G#JϔF%9 jG:B-b@m(ɏg#Jrѓ@P1 " `ggci1 nIb@AC{F%9PX6 m~dC)!a F%9A%=j+gI(ب$G+#"v B[*"Jr0 KDol9 ` ylT5;gylQI;{=@'-"T iPb<ب${I~ Z=B"e,cUJAS[QI[*[< )G,#tܛ<6*^ ,Hl rM Jrv/p~ |E^-I<6*^Q- XqJR#,ylTýy 5zAjlVCvp<6*^ElnHjKY )(HrDT*[l`3]-,ܛ w k[Fmxذ8%7w{\MW_o6Z[leF-Z?$AKf2hѱF؄HւAE)o(ECKp&xtu_ӫ7ݮӭt ([nL(A<ܸf+(3 nCKpWכn=6[AQpcz*Nޜv'8 ʌ 7FFK[> (q+#"Eւd3ƾ^Nޜvӽ[leFf!%-ylQpm-,xor0ӏ3r0ӏL(bd8N[ܫZ(qO-iaQpYeHrDlL?FeK+$3YgF|(OAOE%Qʶ :BʚFHrYRj/ylܢ Xǃ Hr4KZc3<6ʨ$ȕ&}w*J\\ c]VylT?mdc#W2 v*J\2Dc#W^Zݱ.<6 x4=/V<ϵԙQF-΋a$繖ylbiYPRݭS$eL3g(p-8\ %F-%n6>Ό[,- JuR!)cx2lqw>d83 n,(I)3AXY?nd-Xj7-YgF-:%bڰņ` (Bnn83 n,(Ie*=Aւ):4;Kퟁ=ĀP [řQpeAN*<;{N\RRE+-Av}gF-:h^Z:ffK+(J",qgF-:xi6[<ܟ@wLQgF-:xJ!aNps*7[AWqfbiYPW=p:E)6訊3K˂RTeya NCIJٶAGHY=r&((ҲT'X -ƳP[bg-~?K!kUXZBv#ZKNSD4l#bKv[řQpZGq((ҲT'՞S-̳ٻg#<{ N&*Ό/- JuR$Rl۠]b@H #d*Ό/- JuRӈ-JٶAGxzQfeܢ{P`iYPꫜy !9EZH!6 n\=(p^\?ct9a[TwkO"CѬ2$G6S0 #:z~IXoOPʌ\ TF(83[ eНIFt{sӭck.1 nvF- ) YjQ'ܘOˠ;i noN#t(p;tp_8\QIџ1N7q_'vwSTf7AO 8:8\ ΋acToCKIʛSm$"(؈_zA-:i ǙQpҖיQp Q6IyqJ#X)Җ#\F1Er{$Җx1miK{Җ(hyClBT2ΌS,G?KqT֤o3(uqyq9lS:"MTzJRtR!Q[zHZ b_a8߷'P)UA:`xf7x1l kR{.1 n=n|q'e t>@? g(UfxGa@ւ8\ ΋acz /nOPwLQa'{YeF%G6dSք~ėV{~Ix{1VOL|gF|~A: 2$9VP pB:!& 1B2F%=|gF)p8&&XZT=|gF:3 n?N'VG,- J*ΌS0 pDM6eMXq^\K˂ z<3OpA:`uҲ: Eʌ'9:^@D=`A-"Ib@XZjQpcz&Opo*E'ZY"\gFYPNY 33~{Qps+g5 d-XjE༸6F"bX)Y=BľNJ)(KO kR{fnAFK+n3*3 n4)(EѬ2$9"Yʶ :c3<6(༸6Hr[Q@A7~VI*[(ezjQyl &ը_ծU#TY5Bz]PT#Tmf0܃>)(hp^\1ז"T :)(Ό[ hLuRQE l۠#m4BROQpAr76 n\=(p^\?ct9a[TwkO"CѬ2$G6S0 (p/$M)x8\QpjiYP=jKQˠ;i nGt%qlܺ{P`iYPR*Ό[VHUhVQpckK[*K]7,O@2I8NAK.ΌhS8\ ΋aczG}YEѠ4Md-Xj??:+b݃,G?M*k#hQpkkK[*K]Qv0lrh kR{Zoqʚmfz&D6`=Er4)(EѬ2$9"Yʶ :c3<6( PROCEDURE drtodate(thedate : integer; VAR yr, mo, day : integer); (* 1 Jan 1978 corresponds to Digital Research date = 1 *) (* BUG - cannot handle negative values for dates > 2067 *) VAR i, y1 : integer; dayspermonth : ARRAY[1..12] OF 1..31; BEGIN (* drtodate *) FOR i := 1 TO 12 DO dayspermonth[i] := 31; dayspermonth[4] := 30; dayspermonth[6] := 30; dayspermonth[9] := 30; dayspermonth[11] := 30; IF thedate >= 731 THEN BEGIN (* avoid overflows *) yr := 1980; thedate := thedate - 731; END ELSE BEGIN thedate := thedate + 730; yr := 1976; END; (* 0..365=y0; 366..730=y1; 731..1095=y2; 1096..1460=y3 *) i := thedate DIV 1461; thedate := thedate MOD 1461; y1 := (thedate-1) DIV 365; yr := yr + y1 + 4*i; IF y1 = 0 THEN (* leap year *) dayspermonth[2] := 29 ELSE BEGIN thedate := thedate - 1; (* 366 -> 365 -> 1 Jan *) dayspermonth[2] := 28; END; day := thedate - 365*y1 + 1; mo := 1; WHILE day > dayspermonth[mo] DO BEGIN day := day - dayspermonth[mo]; mo := succ(mo); END; END; (* drtodate *) (* 1-----------------1 *) sARRAY[1..12] OF 1..31; BEGIN (* drtodate *) FOR i := 1 TO 12 DO dayspermonth[i] := 31; dayspermonth[4] := 30; dayspermonth[6] := 30; dayspermonth[9] := 30; dayspermonth[11] := 30; IF thedate >= 731 THEN BEGIN (* avoid overflows *) yr := 1980; thedate := thedate - 731; END ELSE BEGIN thedate := thedate + 730; yr := 1976; END; (* 0..365=y0; 366..730=y1; 731..1095=y2; 1096..1460=y3 *) i := thedate DIV 1461; thedate := thedate MOD 1461; y1 := (thedate-1) DIV 365; yr := yr + y1 + 4*i; IF y1 = 0 THEN (* leap year *) dayspermonth[2] := 29 ELSE BEGIN thedate := thedate - 1; (* 366 -> 365 -> 1 Jan *) dayspermonth[2] := 28; END; day := thedate - 365*y1 + 1; mo := 1; WHILE da (* For library utilities - specialized sub area *) (* typical global declarations required, commented out here *) { CONST binrcdmax = 63; TYPE byte = char; binfptr = 0..binrcdmax; binfile = FILE OF ARRAY[binfptr] OF byte; direntry = RECORD status : byte; name : ARRAY[1..8] OF byte; ext : ARRAY[1..3] OF byte; location, size, crcval, modified : integer; spare : ARRAY[1..12] OF byte; END; dirptr = ^dirchunk; dirchunk = RECORD next, left, right : dirptr; dir : direntry; END; } FUNCTION loaddir(VAR l : binfile; VAR root : dirptr; VAR dircrc, crcwd : integer) : boolean; (* libfile l is open and rewound. *) (* Returns true if apparently a library *) CONST dirpcmax = 31; (* 0 based *) dirpcsize = 32; (* dirpcmax + 1 *) TYPE  dirpiece = ARRAY[0..dirpcmax] OF byte; VAR p : dirptr; dirsize, i : integer; (* 2---------------2 *) PROCEDURE savechunk(VAR r : dirptr); VAR ix : integer; (* 3---------------3 *) PROCEDURE insert(VAR dp : dirpiece); (* this operation preserves compatability *) (* across various 16 and 8 bit machines. *) BEGIN (* insert *) new(r); r^.next := NIL; WITH r^.dir DO BEGIN status := dp[0]; (*$s-*) name := dp[1 FOR 8]; ext := dp[9 FOR 3]; (*$s+*) location := mergebytes(ord(dp[13]), ord(dp[12])); size := mergebytes(ord(dp[15]), ord(dp[14])); crcval := mergebytes(ord(dp[17]), ord(dp[16])); modified := mergebytes(ord(dp[19]), ord(dp[18])); END; END; (* insert *) (* 3---------------3 *) BEGIN (* savechunk *) IF odd(i) THEN ix := 0 ELSE ix := 32; (* unpack direntry from l^ *) (*$s-*) insert(l^[ix FOR dirpcsize]); (*$s+*) IF NOT odd(i) THEN BEGIN (* need more from l *) FOR ix := 0 TO binrcdmax DO crc(l^[ix], crcwd); get(l); END; END; (* savechunk *) (* 2---------------2 *) BEGIN (* loaddir *) dirsize := mergebytes(ord(l^[15]), ord(l^[14])); dircrc := mergebytes(ord(l^[17]), ord(l^[16])); loaddir := false; (* default *) root := NIL; (*$s-*) IF (l^[1] <= ' ') AND (* reduced test for MSDOS compatiblity *) (*$s+*) (mergebytes(ord(l^[13]), ord(l^[12])) = 0) AND (dirsize < 8192) AND (dirsize > 0) AND (l^[0] = chr(0)) THEN BEGIN (* looks like a valid directory header *) l^[17] := chr(0); l^[16] := chr(0); i := 1; savechunk(root); (* the directory header *) p := root; FOR i := 2 TO 4*dirsize DO BEGIN savechunk(p^.next); p := p^.next; END; loaddir := true; END; END; (* loaddir *) (* 1---------------1 *)  PROCEDURE skipblanks(VAR f : text); (* exits with either eoln or eof true, or (f^ <> ' ' *) BEGIN (* skipblanks *) WHILE NOT (eoln(f) OR eof(f)) AND (f^ = ' ') DO get(f); END; (* skipblanks *) (* 1---------------1 *) PATCH DOC%CREATE COM &'LBRDISK2DOC!()*+,LBRDISK2NOT -.LBRDISK2SET /0LBRDSK22COM;12345678LBRDSK22NOT9LBRDISK3COM;:;<=>?@ALBRDISK3DOC!BCDEFLBRDISK3SET GHLLF11 COM$IJKLMLLF11 DOCNONOPIPES MACPSETRSX COMQSLUDIR11ZQ0RSTLDIR COM~UVWXYZ[\]^_`abcdLDIR PQSCefghijklmDRTODATEINC noLOADDIR INCpqrSKIPBLKS$$$ PROCEDURE skipto(c : char; VAR f : text); (* skip characters until either c or eoln encountered *) (* at exit c is in f^, or eoln or eof is true *) BEGIN (* skipto *) WHILE (f^ <> c) AND NOT (eoln(f) OR eof(f)) DO get(f); END; (* skipto *) (* 1---------------1 *) LBRDISK2SET /0LBRDSK22COM;12345678LBRDSK22NOT9LBRDISK3COM;:;<=>?@ALBRDISK3DOC!BCDEFLBRDISK3SET GHLLF11 COM$IJKLMLLF11 DOCNONOPIPES MACPSETRSX COMQSLUDIR11ZQ0RSTLDIR COM~UVWXYZ[\]^_`abcdLDIR PQSCefghijklmDRTODATEINC noLOADDIR INCpqrSKIPBLKSINCsSKIPTO $$$ PROCEDURE skipredirection(VAR f : text); (* skip over ">name" and/or "'] DO BEGIN skipto(' ', f); skipblanks(f); END; END; (* skipredirection *) (* 1---------------1 *) LBRDISK2SET /0LBRDSK22COM;12345678LBRDSK22NOT9LBRDISK3COM;:;<=>?@ALBRDISK3DOC!BCDEFLBRDISK3SET GHLLF11 COM$IJKLMLLF11 DOCNONOPIPES MACPSETRSX COMQSLUDIR11ZQ0RSTLDIR COM~UVWXYZ[\]^_`abcdLDIR PQSCefghijklmDRTODATEINC noLOADDIR INCpqrSKIPBLKSINCsSKIPTO INCtSKPRDRKT$$$ (* For library utilities - specialized sub area *) PROCEDURE sortdir(p : dirptr; how : sortkind; VAR pp : dirptr); (* follow the chain from and including p via *) (* the "next" fields, and set up the "left" *) (* and "right" fields so that pp becomes a *) (* pointer to the root of a binary tree. *) (* Modified 85/10/16, sort speed up, pp param *) (* The code now caters to presorted data, at *) (* the expense of random data. *) VAR p1 : dirptr; (* 2---------------2 *) FUNCTION greaterorequal(p1, p2 : dirptr) : boolean; BEGIN (* greaterorequal *) WITH p1^, p2^.dir DO IF how = bygroup THEN IF dir.ext < ext THEN greaterorequal := false ELSE IF dir.ext > ext THEN greaterorequal := true ELSE IF dir.name < name THEN greaterorequal := false ELSE greaterorequal := true ELSE (* how = byname *) IF dir.name < name THEN greaterorequal := false  ELSE IF dir.name > name THEN greaterorequal := true ELSE IF dir.ext < ext THEN greaterorequal := false ELSE greaterorequal := true; END; (* greaterorequal *) (* 2---------------2 *) PROCEDURE install(p1, (* in root *) p : dirptr); (* 3---------------3 *) PROCEDURE insert(p1 : dirptr; VAR p : dirptr); BEGIN (* insert *) IF p = NIL THEN p := p1 ELSE IF greaterorequal(p1, p) THEN insert(p1, p^.right) ELSE insert(p1, p^.left); END; (* insert *) (* 3---------------3 *) BEGIN (* install *) WHILE greaterorequal(p1, p) DO p := p^.next; insert(p1, p^.left); END; (* install *) (* 2---------------2 *) BEGIN (* sortdir *) pp := p; (* default *) IF p <> NIL THEN BEGIN p1 := p; IF how = unsorted THEN REPEAT (* make links reflect original order *) p1^.left := nil; p1^.right := p1^.next; p1 := p1^.next; UNTIL p1 = NIL ELSE BEGIN REPEAT (* clear the pointers *) p1^.left := nil; p1^.right := NIL; p1 := p1^.next; UNTIL p1 = NIL; p1 := p^.next; WHILE p1 <> NIL DO BEGIN IF greaterorequal(p1, p) THEN BEGIN p^.right := p1; p := p1; p1 := p^.next; END ELSE BEGIN (* must go in a left field somewhere *) install(p1, pp); p1 := p1^.next; END; END; END; END; END; (* sortdir *) (* 1---------------1 *) =>equal(p1, p) DO p := p^.next; insert(p1, p^.left); END; (* install *) (* 2---------------2 *) BEGIN (* sortdir *) pp := p; (* default *) IF p <> NIL THEN BEGIN p1 := p; IF how = unsorted THEN REPEAT (* make links reflect original order *) p1^.left := nil; p1^.right := p1^.next; p1 := p1^.next; Õ$DÉÐty77Å77@9!}>͒y>?o*o>gʵ0¾33} Real arith. error, ABORT $:z>͒>O( 33!:z52z:y:>͒7?7O>Ë:!>2z52y2z5>Ë>͒:> ͎> ͎O!"y:o"{! +!/! 9^#VK3! 9^#V\2{_{_! 9^#V͵3^ {>W_{_! 9^#Vͅ3ï"0!/! 9^#V͵3^!9^{>W_! 9^#VK3!9^#V\2{_{_{_e! 9^#Vͅ3"0!/! 9^#V>ͩ! 9^#V͵3^<ͬ0>ͬ0u0͑0 ! 9^#V>! 9^#V>ͩ~"0!/ !9s#rN<@!9s#r!9!9^#V)s#r!9^#V!9^#VN<00@!9s#r33!9)s#r!9)s#r!9 )s#r!9 )s#r!.9^#VN<ʯ!,9^#Vs#r!.9^#VC0!.9s#r!.9^#V<0!.9s#r+++^#Vs#r!.9^#VKBQ0!9s#r!.9^#VKB̀;-!.9s#r+^#VC0mKBQ0!9s#r!,9^#V+^#V^#V! 9^#V<0! 9^#VJ0<0s#r!9^#V{_z>W_¼!9)s#r!.9^#VC0!.9s#r!9)s#r!(9^#V!09^#Vm!"9^#VJ0C0<0s#r!*9^#Vs#r!(9^#V^#V!9!.9^#V^#V)^#VN<W¥!(9^#V+^#V^#V!9!09^#V^#V)^#VC0s#r!*9^#V+^#V^#Vs#r("0!/!9^#V! ^#V&e,!9^#V! ^#V^#Vs#r!9^#V! ^#V^#V!!9s#r+^#V!9^#V^s!9^#V!9^#V~#3!9^#V! !9^#V ~#W!9^#V!;;!9^#V ^!9^#V ^}/s#r!9^#V!;;!9^#V^!9^#V^}/s#r!9^#V!;;!9^#V^!9^#V^}/s#r!9^#V! ;;!9^#V^!9^#V^}/s#r"0!/!9^#V!^#V{_p!9s#rz !9s#r!9^#V!^#V͵3!9^#Vͫ!9^#V!^#V{_{_P ?!9s#rN<< !9s#r!9^#V!^#V͵3!9^#V^!9^#V! ^#V.!9^#V+++^#VN<, , < !9s#r33!9^#V!^#V3"0!/;;!9^#V͵3^!9^#V͵3^}/!9s#r!9^#V;;###^#V͵3^!9^#V͵3^}/s#r!9s++++^#Vs#r!9^#V͵3^ {?>W_;;!9^#V͵3 ^!9^#V͵3 ^}/{_z>W_{_!9^#V N<^ ^ {_!9^#VN<y {_!9^#V͵3^{>W_{_Œ !9^#V͵3s!9^#V͵3s!9s#r!9^#VկE!9^#V^#V!9s#r!9^#VJ0!9s#rN<# ‚ !9s#r!9^#VկE!9^#V^#V!9s#r+++^#V!9^#VN<r r ‚ !9s#r/ 33!9s"0!/!9^#V!9s#r!9^#V!!9s#r!9^#V! ^#V{_z>W_‰ !9^#V!!9^#V! i<   !9sÆ !9^#V!!9^#V! i<; J !9sÆ !9^#V!!9^#Vi<o o ~ !9sÆ !9s. !9^#V!!9^#Vi<ʮ ½ !9s. !9^#V!!9^#Vi<  !9s. !9^#V!!9^#V! i<  & !9s. !9s"0!/! 9^#V^#V{_z>W_n ! 9^#V#^#Vs#r ;;!9^#V+++^#V^#V>͒ ҧ ! 9^#V+++^#V^#V>4 ! 9^#V+++^#V^#V>4 "0!/;;!9^#V+++^#V>͒ ! 9^#V^#V! 9s#r ! 9^#V+++^#Vկ4 "0!/! 9^#V###^#Vs#r!9^#V{_z>W_!9^#V!9s#r!9^#V{_z>W_!9^#Vs#r!9^#V+^#V^#Vs#r!9^#V^#V!9s#r+^#V{_z>W_{!9^#Vs#r!9^#Vs#r!9^#V^#V!9s#r+^#V{_z>W_!9^#V^#V!9s#r!9^#V{_z>W_;;!9^#V!9^#Vկ͒ ҫ!9^#V!9^#Vs#r!9^#V!9s#r+^#V^#V!9s#r!9^#V!9^#V^#Vկ !9^#V^#V!9s#r="0!/LDIR (cmd, input, output); * ? ^#V2,Ver. 1.9 (RCPM)* ? ^#V2b (c) 1983, 1986 by C.B. Falconer * ? ^#V2* ? ^#V͊2ͱ Execute with "ldir {[options] [libfname]}"+* ? ^#V2* ? ^#V͊2 where {} shows a field that may be repeated and []3* ? ^#V2* ? ^#V͊2a enclose optional fields. "options" is the character5* ? ^#V2* ? ^#V͊2ͥ "-" followed by one or more of: * ? ^#V2* ? ^#V͊2 n sort by name u unsorted(default)4* ? ^#V2* ? ^#V͊2Q g sort by "typ" m date modified0* ? ^#V2* ? ^#V͊2ͨ s sectors of storage k kilobytes (size)3* ? ^#V2* ? ^#V͊2EXAMPLE: B>ldir -m command* ? ^#V2* ? ^#V͊2ACommands may be placed on the command line or executed6* ? ^#V2* ? ^#V͊2͙ interactively on ">" prompt. "fname>" shows an open4* ? ^#V2* ? ^#V͊2 library, and -options will display its directory1* ? ^#V2* ? ^#V͊2=You must be logged onto the drive/user area+* ? ^#V2* ? ^#V͊2* ? ^#V͊2"0!/͇** ERROR **  * ? ^#V2! 9^#Vò͸Bad directory CRC* ? ^#V2Not a library: * ? ^#V2!9^#V!* ? ^#V2%Cannot find:  * ? ^#V2!9^#V!* ? ^#V2gBad option * ? ^#V2͔No library specified* ? ^#V2>-!|!Ҫ!^#VZ}* ? ^#V͊2"0!/! 9^#V͵3^-{>W_³! 9^#Vͅ3!9^#VͶ0!9^#Vs#r#E! 9^#V͵3^ {>W_³! 9^#V͵3^!9s#ri!9s#ri!9s#ri!9s#ri!9s#ri!9s#ri!9s#ri!|!GC0! ^#V!9^#V+^#V +V+^ {!9^#Vͬ0u0!9^#Vs#r#›! 9^#Vͅ3O"0!/!9^#V! +V+^ ͑0!9^#V! +V+^ ͑0{_{_D!9^#V! +V+^ ͬ0u0!9^#V!s#r#;!9^#V!^#V{_z>W_!9^#V!^#VA,!9^#V!s#r!9s#r!9^#V! ^#V͵3^* ?6  +V+^ º͑0y!9^#VN<-!9^#V! ^#V!9s#r!9^#V!!9^#V!9^#V:3!9^#V+s#r?!9^#V! ^#Vͅ3!9^#V! ^#V͵3^* ?6  +V+^ b͑0{_ì!9^#V!͖LIBRARY~#š!9s#r!9^#V+++s#rN< !9s#r!9^#V!!9^#V s!9^#V+++^#VN< !9s#r33 !9^#V! ^#V>;;.!9^#V!̈́/{_z>W_;; !9^#V!̈́/!9s#r+^#VC0N<ʶ!9^#V!!9^#V.LBR ~#;;!9^#V! ͫ1!9^#V! .!9^#V!s#r;;  ####>V !9^#V!^#V{_z>W_!9^#V!^#V#^#V{_z>W_{_”>r!9^#V! +V+^ ¤ͬ0X0!9^#V!s#r#>r!9^#V!62>r"0!/! 9^#V N<20* ? ^#V2! 9^#V* ? ^#V͙2"0!/!9^#V!9####> * ? ^#V2!9^#VdKB̀;-/* ? ^#V2!9^#Vկ/* ? ^#V2!9^#Vկ"0!/! 9^#V!!9s#r+^#V^{>W_!9^#V^#V{_z>W_{_!9^#V!^#V{_z>W_!9^#V^#V! ^!9^#V!^#V{_z>W_{_ͨ* ? ^#V2* ? ^#V}2!9^#V!s#r* ? ^#Vc3* ? ^#V͊2!9^#V!^#V+s#r* | * ? ^#V2!9^#V* ? ^#V2.* ? ^#V2!9^#V! * ? ^#V2!9^#V! ^#V +V+^ “͑0!9^#V^#V* ? ^#V͙2!9^#V! ^#V +V+^ ͑0!!9^#V^#V<0KBQ0* ? ^#V͙2!9^#V! ^#V +V+^ 9͑0¢!9^#V ^#VN<guunknown * ? ^#V2â!9^#V ^#V>R!9^#V!^#V+s#r ^#V ^#VKB̀;-!9^#V!s#rE !9^#V^{>W_ !9^#V!^#V+s#rE !9^#V^{>W_E !9^#V!^#V+s#r"0!/! 9^#V{_z>W_Ÿ ! 9^#V##^#V>K ! 9^#V>! 9^#V^#V>K "0!/!98/!9* ? ^#V2 Library * ? ^#V2!P9^#V!* ?  ^#V2* ? ^#V͊2(! 9s#rN<2!!!@9s#r!9!@9^#V s!>9^#V!9^#VN<q!q!!!>9s#r>!33!>9s#r!9!@9^#Vͤ!Name~#¨!!9!@9^#V <0+!Typ~#!!>9^#V <0!>9s#r!\9^#V +V+^ "͑0O"!9!@9^#V,"Sectors~#0"!>9^#V<0!>9s#r!\9^#V +V+^ `"͑0¬"!9!@9^#V͉"Kbytes~#"!>9^#V<0!>9s#r!\9^#V +V+^ ½"͑0 #!9!@9^#V"Modified~#"!>9^#V <0!>9s#rP<0!@9^#VKBQ0!N9s#r!>9^#VC0!>9s#r!9!@9^#V(* ? ^#V2!R9^#V! 9s#rN<##!B9s#r * ? ^#V2!9!@9^#V(* ? ^#V2!@9^#V!9^#VN<###!@9s#rÎ#33* ? ^#V͊2!B9^#V! 9s#rN<!$q$!D9s#r-* ? ^#V2!B9^#V!9^#VN<a$a$q$!B9s#r-$33!R9^#V! 9s#rN<$U%!B9s#r * ? ^#V2!B9^#V!9s#rN<$%%!D9s#r-* ? ^#V2!B9^#V!9^#VN<%%%%!B9s#r$33!@9^#V!9^#VN<E%E%U%!@9s#rß$33!J9s#r+++s#r!D9s#r#s#r!L9s#r!\9^#V +V+^ –%͑0&!P9^#V!^#V! 9>!Z9^#V+^#V +V+^ %Ͷ0X0!9^#Vs#r#%!\9^#V +V+^ &͑0z&!P9^#V!^#V! 9>!Z9^#V+^#V +V+^ P&Ͷ0X0!9^#Vs#r#p&!\9^#V +V+^ ‹&͑0&!P9^#V!^#V! 9>!Z9^#V+^#V +V+^ &ͬ0X0!9^#Vs#r#&!9^#VկK * ? ^#V͊2!J9^#V* ? ^#V͙21' entries,  * ? ^#V2!H9^#V* ? ^#V͙2l' inactive,  * ? ^#V2!D9^#V* ? ^#V͙2ͩ' free entries * ? ^#V2* ? ^#V͊2* ? ^#V͊2"0!/@' !+V+^(!399!9s#rͬ0!'9s#r#-(!9 s!29^(!#9ͧ3{_z>W_š(!9;; ̈́/* ? ^#V2ð(?* ? ^#V2>* ? ^#V2* ? ^#V}2!49^#V>k!49^#VK3!69^#V\2{_!'9s^{_+!49^#V͵3^-{>W_A)!9!69^#VկZ)Ͷ0!'9s#r#Q)!49^#V>k!49^#V͵3^* ?6  +V+^ ƒ)͑0½)!9 +V+^ œ)ͬ0u0!'9s#r#´)!9 +V+^ )͑03*կr!9 +V+^ )ͬ0X0!'9s#r#*!29^(** ? ^#Vc30*!'9s+!9 +V+^ @*͑0W*͹|*!#9ͧ3{_z>W_|*կr!#9ͧ3{_z>W_!'9s!29^³** ? ^#Vc3!'9^*!29^*!'9s!9 +V+^ *ͬ0u0!'9s#r#*+!9ͥ !'9^G(!#962"0ͻ,!6/ A+CMD !+V+^H+* ?F 9 ~Ͷ0,ͬ0.ͬ0u0;>Ͷ0u0[ͬ0u0]ͬ0u0_ͬ0u0X0* ?6 s#r#®+;;ͫ1,* ?F >k* ?F K3{_+* ?F >',>* ? ^#V>'/,>* ? ^#V>'* ?F 62ͮ.v7|>-"?*?\<"?"?!͒,>-N,s#r͒,҉,*?N,s#r*??ҩ,!9\-21?*." ? " ?!??ͬ,!"/?!>2?͝5'1?,>--!-2=<=!._^#V/=*?|1-!-2=*?G=ͬ=U-l=L-!?57!-2=î. !-2=շw-w-@J=͎-! !>.J=!J=Ž-aborting in line # FILE=???o'flownot imp.stk o'flowheap o'flowdiv 0can't loadbad ptrcase indexreal u'flowreal o'flowsqrt -velog -ve/0eofbad ch/valuemod -vefile R/Orangefile sys.string fld/sz > 255file not open---------...&.0.4.A.I.R.X.b.v. 14 14:0?.>$$$ SUB}F#N>p#q//@w#6:# /w# /6.#%/6.# /w# '/6 #0/>$0/k/>$k/ >$k/ :>$k/>$0 o& v/y=xa}͒///ʯ/ʯ/# ž/ž/ʯ/+ ±/±/ì/Wxz >x/Gy/Oz!!* ?//* ?/^#V=/!9" ?*?͸>>-!"?* ?" ?!!"?9A<-0<-͎;-;-!9/w#c0!9!9w#€0!9!9^0!910w}1COxʱ00=/wxxGyx<=0#60Y0=w{o&9{_70!9! w#1>p#=1!"?y1 >=1 > l1!1͒>.> l1&l1>*l1,>* ?^#V w* ? DMͅ1͒,>-"?{zCON: 92>/w|1͊9! w!$w516:!!)292>292>/w|2͊9! w!$w5)26:3!&~3!&~+4843!&~w/w!&~35?:$4>!{2#G:$44G:$444G:44z2 ͸>=Gy2o5>-54G:44-5}5!032!532G:44|&3-3Ͱ> E!3MG4>-TRUE FALSE35!.~wÈ335?:$4~!a3#35?:$4!&~3~Ž3;5o3?:$4!&~;5!&>/w3?:! 7!&~!.3!0353?:$4~36:17:!77>-6:@w> -4!&~@w>-#4!&~@w>-* ?^#V!&~Q4!77W4~ a4!&>/w!&~z4͎4><7!&~M;><7!/~O!&~ʴ4!0 6# 44ym;6<4l;P;>-> 5> 5!&~w=|405h5 ~#54> -55O!&>/w)5:/5!77y!&~!&~7̓5 D5!&>/w!.wp5!&~w>Á5 56 !&~w> Ғ5ͤ:Ø5!77>!"#?"%?!>[N #­5 #~ ʴ5>o& >5>o|g5]5  5"#?}2%?!&~Ͷ6!/617656,6!&>@w7!77!&~wt6!&>/w! ~ Q6#6 #6 ! 6! 6!&~V:ͱ6><7!~  !6͒>!*?#"?=w+|–6TEMP0000$$$>!$~Gw! 6 #6 #6 !N#G w # ~(66# ~),66# ~ 6,) Ê9p9!77-8o|g~#fo:77! ~# w7|7 w7O7#P7#Q7#~:x7 x77yCMDAUXLSTPUNRDRKBDCONNUL-89y=18-8-8<9L908==0808080808080808080880808080808080808p9887p987p9!&~!!&~!!.!&~!>8>o>*8>o>7<8!&~ʈ8!,~!0Wg8͞8{8 W8{8͞8w#x8 S8+6{!(w!/6!/~4!0o|g~> =>p9} .p9}!&~ .:<  H9>!&~!/~^94!0o|g~> !&~@!!&~!> o|ů#~+:§9~##?@ҧ9;9~.´9#;9~q:9?#¾9> 9+#~q:9BK>}|=9> ! wDM!&q#pDM!,q#pDM!*q#pDM!$q#p!&~w!&~!&~/7><f:>><7!>G!:͛:x7?.,*:@[]<>()=;_?~#<:!/~4:6!0?;7!0o|g~!&~ w!/~w!0o|gq!/4y!0P;y*;!/~4;69;;!&~wm;~!0 w!*y#x:!&~>/wl;?;>>l;>>!&> w7ɯ!*N#F!0 o$;| >7z;x;Ͱ>_>ͦ>ó;͸>x;Ͱ>_>|z;>7ɣ<>7|;x>7z;ͦ>x;#<<͸><Ͱ><; <<<Ͱ>#<<>7>z>͸>z?͸>A<|>7|7?z>7zW<\/w<# xi<>}==•< ڕ J=> J=!|͋= y< =+#~5!Ҩ=ʪ=~. =|=0=|=x ) >#>T]))ɷ{z2>5>_8>_7Ͱ>zS )V>G># P><>33<<>[># <>{}>|}>W_s>}g{>bj҈> )چ>È>x~# x˜>͹>> y/Ox/G{/_z/W+}/o|/gթW_WOzGzO>A[?a{?:?0a?{;| >7z;x;Ͱ>_>ͦ>ó;͸>x;Ͱ>_>|z;>7ɣ<>7|;x>7z;ͦ>x;#<<͸><Ͱ><; <<<Ͱ>#<<>7>z>͸>z?͸>A<|>7|7?z>7zW<\/w<# xi<>}00000001(*$d-,n-,i'ldir.pas' no run-time checks, no line nos. *) 5Õ$DÉÐty77Å77@9!}>͒y>?o*o>gʵ0¾33} Real arith. error, ABORT $:z>͒>O( 33!:z52z:y:>͒7?7O>Ë:!>2z52y2z5>Ë>͒:> ͎> ͎O!"y:o"{!l!ͣ$! 9^#V'! 9^#V)'{_{_! 9^#VA(^ {>W_{_! 9^#V(ï$!ͣ$! 9^#VA(^!9^{>W_! 9^#V'!9^#V)'{_{_{_e! 9^#V($!ͣ$! 9^#V>ͩ! 9^#VA(^<\%>\%%%A% ! 9^#V>! 9^#V>ͩ~$!ͣ$ !9s#r2@!9s#r! 9!9^#V)s#r!9^#V!9^#V200@!9s#r33! 9)s#r! 9)s#r! 9)s#r! 9 )s#r! 9 )s#r !.9^0%%!.9^ %0%!9s#r !.9^0%%!.9^ %0%!9s#r !.9^0%%!.9^ %0%!9s#r!9^#VB2ʊ¥!9^#Vd %!9s#r!9^#VN2ʾ!9^#V{_z>W_{_!9^#V{_z>W_{_ !<9s#rÀ!9^#VL%!9s#r+^#VKB%!9s#r!9^#VKB@1!!9s#r###^#V%! 9^#V% %!9s#r!9^#V2!9^#V2{_!9^#V %!9s#r!9^#Vm!9^#V% %!9s#r+++^#V%!9s#r2p! 9s#r!9^#V###++^#V)^#V %!9s#r#^#V!9^#V2``p!9s#r 33!9^#V!<9s#r$!ͣ$!9s#r!9^#VA(^ {>W_!9^#V2!9^#V!9s#r!9^#V!9^#V!9^#V'!9^#V+s#r!9^#V(Ö!9^#V+++s#r2<!9s#r!9^#V!9^#V s!9^#V+++^#V2}}!9s#rH33$!ͣ$*4 ^#VW'LSETDATE Ver. 1.2 Copyright (c) 1983, 1986 by C.B. Falconer;*4 ^#V͔'*4  ^#VW'; To set module modified dates in LU libraries for0*4 ^#V͔'*4 ^#VW'} all modules not already dated:*4 ^#V͔'*4 ^#VW' B>lsetdate libraryname YY/MM/DD!*4 ^#V͔'*4 ^#VW' To unconditionally redate individual modules use:1*4 ^#V͔'*4 ^#VW'c B>lsetdate lbrname YY/MM/DD modulename(*4 ^#V͔'*4 ^#VW'͵ Wildcards accepted. *.* equivalent to no entry.*4 ^#V͔'*4 ^#VW' YY/MM/DD is the date to be set. Mandatory if the1*4 ^#V͔'*4 ^#VW'` system does not supply the current date, otherwise2*4 ^#V͔'*4 ^#VW'͚ overrides system date.*4 ^#V͔'*4 ^#VW'$!ͣ$ *** ERROR *** *4 ^#V͔'! 9^#V}  CRC directory error, bad library: "*4 ^#V͔'*4'  ^#V͔'*4 ^#VW'*4 ^#Vf'͆ ^C aborts, continues*4 ^#V͔'*4 ^#VJ'*4 ^#V'ÿ ì Not a library: *4 ^#V͔'*4'  ^#V͔'ì Can't find  *4 ^#V͔'*4'  ^#V͔'ì _ No system date or invalid date format%*4 ^#V͔'ì >!ì !| ! u ! ^#V7 *4 ^#VW'>͕$!ͣ$!9s!9s#r2 «!9s#r!9^#V! ^#V';!9^#V! ^#V!9^#V %+ s~!9^#V! ^#V!9s#r!9^#V! ^#V!9^#V %+!9^#V'!9^#V+++^#V2ʛ«!9s#r 33!9^#V! ^#V %+^!9^{>W_!9^#V! ^#V^*4  +V+^ A%{_!9^#V! ^#V^*4  +V+^ ?A%{_ !9^#V! ^#V^0%%!9^#V! ^#V^ %0%!9s#r+^#V!9^#V2!9^#V!9^#V2{_!9s!9^#V!^#V %!9^#V!s#r$!ͣ$!9s#r!9^#VH00/00/00 0:00 ~#L;;c/կ ҫ;; /կ ҫ;;կ ҫ!9^#V!9~#£$!ͣ$! 9^#V;;#^#VA(^!9^#VA(^J$s#r!9^#VA(^{>W_!9^#VA(^}>W_{_!9^#V^#V2N{_!9^#V^#V 2pp{_;;!9^#VA( ^!9^#VA( ^J${_z>W_{_!9s! 9^#V;;###^#VA(^!9^#VA(^J$s#r!9^#VA(s!9^#VA(s$!ͣ$!9^#V!^#VB$!!9^#V!^#V^#V!9^#V!s#r+^#V ^#VA(@~#{!9^#V!^#Vͅ(?!9s#r2!9s#r!9^#V!^#V!9^#V^!9^#V!͗#!9^#V+++^#V2!9s#rý33$!ͣ$!9^#V^#V!^#VA(! 9^#V %!9^#V^#V!^#Vs!9^#V^#V!^#VA(! 9^#V %!9^#V^#V!^#Vs$!ͣ$!9^#V^#V!^#VA(!9^#V^{>W_ !9s#r2¿!9s#r!9^#V^#V!^#VA(!9^#V!9^#V %^!9^#V^#V!!9^#V^{>W_!9^#V^#V!!9^#V^?{>W_{_’!9^#V+++^#V2ʯ¿!9s#r33!9^#V>$!ͣ$!9^#V^#V!^#VA(! 9^#V^{>W_!9^#V^#V!^#VA(!9^#V %^{>W_{_!9^#V^#V!^#VA(!9^#V %^{>W_{_•! 9^#V>$!ͣ$*4 Ͷ*.*)2կ կկͣ կͣ$!ͣ$!9^#V!^#VA(!9^#V!^#V@~#>͛?!9s#r2G®!9s#r!9^#V!^#VA(!9^#V^!9^#V!͗#!9^#V+++^#V2ʞ®!9s#rS33!9^#V!^#Vb(!9^#V!^#V^#V!9^#V!s#r$!ͣ$! 9^#V^azf%A%*! 9^#V+^#V^ %s! 9^#V^! 9s$!ͣ$!9s#r!9^#V+s#r;;!9^#V!9^#V {>W_P!9s#r#s#r!9^#Vͭ  ~#±!9^#V2!9^#V!9^#V^ \%*\%%%.\%%%A%{_{_O!9^#V!9^#V!9^#V!9^#V^s!9^#V+s#r#^#V+s#rù!9^#V!9^#V^*{>W_!9^#V!9s#r2!9s#r!9^#V!9^#V?s!9^#V!9^#V2!9s#râ33!9^#V+s#r!9^#V!9^#V^ \%.\%%%A%{_5!9^#V+s#r!9^#V!9^#V^.{>W_—!9^#V+s#r #s#r!9^#V 2!9^#V!9^#V^ \%*\%%%A%{_{_!9^#V!9^#V!9^#V!9^#V^s!9^#V+s#r#^#V+s#ro!9^#V!9^#V^*{>W_—!9^#V !9s#r2C•!9s#r!9^#V!9^#V?s!9^#V!9^#V2ʅ•!9s#rO33$!ͣ$*4 !9@!9B$!!9^#V+++s#r+^#V!89^#VA(@~#!69^#Vͅ(!9s#r;;!(9!+V+^ >!9##<$?!9s#r2B›!9s#r!9^#V!9^#V^!9͗#!9^#V!9^#V2ʋ›!9s#rN33!*9^#V%!9s#r2!9s#r'!9^#V!9^#V2!9s#r33!9^#V*4 ^#V{_z>W_*4 ^#V{_z>W_{_Q> !9^#Vs#r!9^#V^#V!9s#r!69^#VA(!9^#V@~#Š͛!9s#r###^#V!89^#VA(@~#¸?!9s#r25!9s#r!9^#V!9^#V^! 9͗#!9^#V!9^#V2%%5!9s#r33!69^#V͙&!69^#V&!9^#V{_z>W_yU!69^#V&!69^#VA(!9^#V@~# !9^#V!9##<$!69^#VA(!9^#Vs!69^#VA(!9^#Vs!69^#Vb($!ͣ$*47 ͨ&*47 >k*4 #09f%*4 s#r#BZ*.* ~#^$z!!ͣ$@͐ !+V+^—*4C ͽ. CMD !+V+^*47 ͽ.>*47 '*47 )'{_ >͕ *47  >͆*47 >k;;.*4' Q${_z>W_‚*4' ;; Q$v.LBR ~#z;;*4C  [& *4C  ͨ#;;*4C  ##>ͱ *47 '*47 )'{_{_h *47 A(^*4  +V+^  A%$ *47  >*47 >k*47 '{_*47 )'{_h *47  >͆*4 ͂ 00/00/00)2‘ ¡ > *4C  !+V+^´ *4 ^#V>͝ > > *4C '*47 'm#v|>!"4*42"4"4!Q!>! !s#rQ!H!*4 !s#r*4?h!!92?"4"4"4>!24*."4 "4!4k!!"4!>24ͅ*%(>!!!Z"2<=!C#_^#V2*4|!!c"2*43l3",3 "!457!Z"2m# !n"2շ6"6"@ 3M"! !>. 3! 3M"aborting in line # FILE=???o'flownot imp.stk o'flowheap o'flowdiv 0can't loadbad ptrcase indexreal u'flowreal o'flowsqrt -velog -ve/0eofbad ch/valuemod -vefile R/Orangefile sys.string fld/sz > 255file not openu"y""""""""""""""####!#5# -) -):4#>$$$ SUB}F#Nu4p#q##@w#6:# #w# #6.##6.# #w# #6 ##>$0/*$>$*$ >$*$ :>$*$>$0 o& 5$y͙3x|}a}_$͏$~$|$|$# k$k$|$+ ~$~$y$Wxz >x/Gy/Oz!!*4$$*4$^#V=¿$!9"4*4e4>!!"4*4"4!!"492!1!N1!͇1!!9w#0%!9!9^͙%!9Ͳ%͙%w}Ͳ%COxa%͙%=/wxxGyx<=ʐ%#6Æ%Y͙%=w{o&9{_7¬%!9! w#%>p#=%!"4)& >% > &!J&?4.> &&&>*&,>*4^#V w*4 DM5&Q!>!"4{zCON: '>/w|ʀ&d.! w!$w*Ґ&/!!&'>ø&'>/w|&d.! w!$w*&/æ(!&~ˆ(!&~¦( ,Ҧ(O/ڦ(!&~+)4)ڦ(!&~w/w!&~*/(>!H'#!/(ھ(!/(ھ()!/(ڶ(-)})!'ڌ'!'×'!/(ڶ(|'']4 Eڻ'MG)>!TRUE FALSE*!.~w"(*/(~!'#*/(!&~«(~((#* (/(!&~#*!&>/wë(!&~!.X(!0*ګ(/(~y(~ʾ( ,ژ/!,+/(~«(/ ,ڱ0!p,+>!/@w> !ý(!&~@w>!(!&~@w>!(> (< !")#~107*4^#V4)!$wH~d.*>ڷ!F7#~#)*4^#V!&~M)!,+S)~ ])!&>/w!&~v)͊)><7!&~ 1><7!/~O!&~ʰ)!0 6# )ÿ)y-16<),11>!> )> )!&~wh) ~#))> -))O!&>/w*͆0*!,+y!&~!&~7k* ,*!&>/w!.wX*!&~w>i* i*6 !&~w> z*d0À*!p,+>!"4"4!>[N #•* #~ ʜ*ͧ4o& ͧ4*3o|gï*]*  *"4}24!&~͞+!/6 ,+++!&>@w7!,+!&~w\+!&>/w! ~ 9+#6 #6 ! 6! 6!&~0͙+><7!~  !+?4!*4#"4ͬ3w+|~+TEMP0000$$$>!$~Gw! 6 #6 #6 !N#G w # ~(++# ~),++# ~ +,) d.-o|g~#fo,7! ~# Q,V, Q,),#*,#+,#~:R, R,7yCMDAUXLSTPUNRDRKBDCONNUL--93 ---.&. -@3@3 - - - - - - - - - -- - - - - - - - -J.--,J.,,J.!&~!!&~!!.!&~!>,>o>->o>7-!&~b-!,~!0WA-x-U- 1-U-x-w#R- --+6{!(w!/6!/~4!0o|g~> ͗3>J.} .J.}!&~ .:<  ".>!&~!/~8.4!0o|g~> !&~@!!&~!> o|ů#~+:.~##ͮ4@ҁ.͘.~.Ž.#͘.~10ک.ͮ4#˜.> ¬.+#~10Ҵ.BK>}|=.> ! wDM!&q#pDM!,q#pDM!*q#pDM!$q#p!&~w!&~!&~/7,1!!q#p#6>>!7!&~a/>/w 1!*^#V 4}|O{G}0/҇/ 0>(H/|!/w!&~w!*~#!&~w!/~w-1!0 ~w!/4/w 1>!&~/!&>/w!*y#xڣ/>$>! 0!&~w,1>6#=0><&0>><7!͕4G!J0[0x7?.,*:@[]<>()=;_?~#<[0!/~4y06!007!0o|g~!&~ w!/~w!0o|gq!/4y!01y0!/~40600!&~w-1~!0 w!*y#xڷ0!&~>/w,10>!>,1>>!&> w7ɯ!*N#F!0 o$͇1| >7ze1xp1]4 4S4s1e4x\1]4 4|zڀ1>7ɣ<>7|1x>7z1S4x111e41]41é1111]411>73z3e4z?e42|>7|7?z>7z22z$2{>/72# x)2>=2/G*#22xG3 2r2!@3@3,3P2Œ2\@3@3U2+U2ª2U2@3 @3@3+Ò2 22U2 @3>22U2 U2w#U2,36z#~O@3,3~#2 3293 ,3O<!"3:|G:{=,3@3 7?> 3> 3!|K3 y< ]3+#~5!h3j3~. ͬ3|ę30 )ڹ3#3T]))ɷ{z33_3_7]4zS )43# 3333<34# 3{*4|*4W_ 4}g(4bj54 )3454x~# xE4f4m4 y/Ox/G{/_z/W+}/o|/gթW_WOzGzOͧ4A[?a{?:?0a?{lv?LSETDATE.PASc o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab oOՌ|lljJ)|Ĺ/&3 Zvz]RqϻϕV;Q !)|ıBA +G_a5ϕV p<%Ā_`}͠aT 0'<%U'4ܛҬ b nrXnNa)#T #E2Lq*֨0)|0ũR(E]A"uAl̸*C R2LYAi^R#uJ;p]C'֯}s@5t**ϟBCuNO5㕙s<%UQC bcA > x)qs6 1H#nfT+vF %g}XXԕ$Be2:MU# 'XA qSœ@LbO(vz >~yDkhc #AeO9+%Ψ _`4# ]nZ0d2lv|5E1XhGL'w篯^}% EpE5Q0OC)Xh N篯^֒seJHUtJ;a RgA2Cs! V3>/5#U1H#ܟBs\yVTT 9VQ1ɐbG?+vx``f*UMnz!)|sSb>} b'mk cG?)TLatf5R"F6 S bGL''7w5'7+C 3^*xe&pǏzm/wNEu,\3^r}ڜy>B RH߬1+;q2LR f ܇1ޞ?|8N&V3Jxz U)pdtMp1ޞ?|8N&#S):CkUJ7s327d2sm)p͈'qy`u~h3wJ)Yh Skdm؈FV RR f!=X(R a-UnY)0'0fR  @#k*6]ܰ5R -?嬀ûn2~tpÂ?5jeVbnh*}FJ>nҙHU5,WbB GL)bB ?y/&.)|ȻoY5&w1HG[e=p#גּф yW3 7A b̞/)mK)4>Oi^*(R ⌒}ҖT(^*(+PWvueՌ p'ϑ\iũR](^*(PWvtRV3.R /g f5#$>WZ팮 _lօR ⌒ݱXxetJ;(5PWv^J)3JwT\]|y ue pK%?xY+[@L[Fv8 k0 v](^*(}Wx'XœP?Uj>SJ)3JwŮ`TVTT `M;>!"`55*'u B)RqFzMJqK]Ռ&](6S")|ڽ").VAON=RB R oM QSbnx8#,bB)][Τ*R=)7æny8d|x2T֘kJ]GFJ)[U[s__az^)VM\̀.R-iLqi)ܲigb{R-/g件bH|Э|dtM"kF؞pKQcqcѭ|dtMYͨ'RqFk+Q RNjFU֬ p˦R /gL>m)Ŵ4( 1H!#1H!vzlf bV3F,zQ2B pK SRpK;EV3JB v/R Ϟͪ)d}E0:%UR5gCküiSJ!B @0:%UJ!yشFE R-O8%# *[x'8p R]m@U2~p|ִ='87FN ɻ5t /n9='0kH3)ia)gEy;}1p姜gMaJw1'Wz;C5*e}w҅Ov/9{רIJ)6g/}vƨmY؈SԀJ4nޔR-vVGqJ1H!G]wA )7æ(Y1H71-a;9yur8靜+#, 1*RRA F'kF 8>kZ)3qJOטޭѽϚV N8%kѡ 8>kZXưR aJՌR>bz^NRgf5)> $0fR ְ\e7NI0DڔR>"Š`dȮQTHW3JY #}^ W #bz:(09gbŮ`T6 *b'B,71Hwj, Ja5a>`(l1HN l OH|hA )7æbnX5SR֧!Q)~Cpפh>]O#?  >]|C+?ۙp/}$༝)>O3)^)w _)~֨b?;1NB)rUFo)w _)~֨b?zn._}OBt~=7F+JQ`BVY80S*nxnY]m c=G3bqe?LVg}J)snr`1/97-S01*[ιQLa97-[ιQ-1j1-[0FQ2UJw([esnr`K)"சvVG̹Q-bB p

".&nY(Ja荑JaCnJaE٢7F(qJ̧PJ<[-ܨlk} YeJaEa p˦#)k1H!b̞/[RHo7A )of|р锬fFB)pW7æ`:%iJ{~O87F+D[|1r_TR Ld5#R-}ěk bB 걙=_4Z[ SRn#xMTa.yZYԚ>7Ч!]1H!Փ R]?_H'8atJB aG}Ykڜ!]c'gMaG$@bN1qp9O{O|pkk}G.i´0jr1H'|DY1ZObNpS0Ռ46hY)i@Jܿ5}R-}ěk bB 걙=_4{SYH3o7NIR 6QM(1nNQSՌ == )i6-|DߛjF!)6gbo#? L t}OBy;O{~O~>`W$5p锬f緡ig%|DߛjF!)[7 p˛aG[!)|X\ rs&kOqZctq;5-nM SX")|X|o*iOBܿ7Ռ4oBIlkpyyv11tJ)M;+#sn#; p÷c3{hP0mV?%|&kB#k*|CmtMlPJ7l ͵{1H!yxܬZ E@*תB aG EbjsǦžd=8>kZ>zc>.R] Ezc~)UJC RHo7A )7æ(6V+˟bn㤔nh6G)8zc=pqm#kictJ)1%^7ƴDmtM+ndz͓M}nnҭ0[yشR]F״q@o&kC  gCQ r/BR-7gm2=?`.v8>kZ4V /+|l/+Q rkZ)jSVi߻M;+[6(6V+˟bB v/R oM 5/1H7,6V+˟m25jk %|eVF5C R ]zUU,0PUJRdDQ荑.J)R ʗ1NJ|ǨVY[(qCa>_#UnxZ7 +̹Q>".&YKJ)g8zc],SlUr`K'\D\Qf!)3ŷ\e*oqp|ִ(gIPJ7Ȱ[I

bz^NRof|рθN)RH7i6-|7qSB R |m(Q"e+smC)jF[(qC89yur|SjXI!)rV7ƾ;&Gw(cqp&kOqZ/$+c))M;+#ğbB GL)bB yش f5#  g\'J)JjsmϚ}J[)ɻ7ænX3&kF5=*\Qf2>6RA EfT)M5i 8YG`iaf[&>]Ӿڌ*;tk$>]#S)}@onfn9>'Z#Ϛ7æǏŧ[x"kG<GFJbW0Q0mVFׄ[n|OFrYyشR]mЮT%smV P5!iqkZĬfsmװQB)(V2񹶡NlЮ*kZϵ 8>kZČڮQdtMDJ)|X\ǀfg>0FwrI㳦EONY(HS hk5/'>DkX(qCk)͐tCIlkPS7K|J4L a]|ֆDJ)M#RAjFAvaJՌR>bz^NRgf5)> $0fR ְ\e7NI0*_PJ7lfS(h[4R xy ";VX})PѶ*8iP"]7*v1Qm)ܰ&;F*_5|TR aO#OU(._}<^,A v| pæ^R>bz^NRof|рθN)RH7i6-|7qSB R |m(Q"e+smC)jF[(qC89yur|SjXI!)rV7ƾ;&Gw(cqp&kOqZ/$+c))M;+#ğbB GL)bB yش f5#  g\'J)JjsmϚ}J[)ɻ7ænX3&kF5=*\Qf2>6RA EfT)M5i 8YG`iaf[&>]Ӿڌ*;tk$>]#S)}@onfn9>'Z#Ϛ7æǏŧ[x"kG<GFJbW0Q0mVFׄ[n FUNCTION drdate(d : dateln) : integer; (* 1 Jan 1978 <--> drd = 1. Assumes valid d *) VAR dayspermonth : ARRAY[1..12] OF 1..31; year, month, day, i : integer; BEGIN (* drdate *) FOR month := 1 TO 12 DO dayspermonth[month] := 31; dayspermonth[2] := 28; dayspermonth[4] := 30; dayspermonth[6] := 30; dayspermonth[9] := 30; dayspermonth[11] := 30; year := 10 * (ord(d[1])-ord('0')) + ord(d[2])-ord('0'); month := 10 * (ord(d[4])-ord('0')) + ord(d[5])-ord('0'); day := 10 * (ord(d[7])-ord('0')) + ord(d[8])-ord('0'); IF year < 66 THEN year := year + 100; IF (year < 78) OR (month = 0) OR (day = 0) THEN drdate := 0 ELSE BEGIN year := (year - 76); i := year DIV 4; year := year MOD 4; day := day - 731 (* from 1 Jan 1976, -1 *) + 1461 * i; IF (year > 0) OR (month > 2) THEN day := day+1; day := day + 365 * year; FOR i := 1 TO month-1 DO day := day + dayspermonth[i]; drdate := day; END END; (* #drdate *) (* 1-----------------1 *) )CY[1..12] OF 1..31; year, month, day, i : integer; BEGIN (* drdate *) FOR month := 1 TO 12 DO dayspermonth[month] := 31; dayspermonth[2] := 28; dayspermonth[4] := 30; dayspermonth[6] := 30; dayspermonth[9] := 30; dayspermonth[11] := 30; year := 10 * (ord(d[1])-ord('0')) + ord(d[2])-ord('0'); month := 10 * (ord(d[4])-ord('0')) + ord(d[5])-ord('0'); day := 10 * (ord(d[7])-ord('0')) + ord(d[8])-ord('0'); IF year < 66 THEN year := year + 100; IF (year < 78) OR (month = 0) OR (day = 0) THEN drdate := 0 ELSE BEGIN year := (year - 76); i := year DIV 4; year := year MOD 4; day := day - 731 (* from 1 Jan 1976, -1 *) + 1461 * i; IF (year > 0) OR (month > 2) THEN day := day+1; day := day + 365 * year; FOR i := 1 TO month-1 DO day := day + dayspermonth[i]; drdate := day; END END; (*  PROCEDURE setname(VAR f : text; VAR n : fname); (* parse the name from the input stream in f *) VAR i : integer; BEGIN (* setname *) i := 1; WHILE f^ <> ' ' DO IF i < fnmsize THEN BEGIN read(f, n[i]); i := succ(i); END ELSE get(f); FOR i := i TO fnmsize DO n[i] := ' '; END; (* setname *) (* 1----------------1 *) v*LTYPE.PAS` o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_˓m3n%g+٭d^jEYs( R[BqI}AkE@^IIH773V\XȀG&\,aRX )"K>^tSϣZŖGa*RRŖ\,aqI / oN >@^:CTA5%}MY$[=w Ux(va 3)"KO* @Jy%xPGQRr-b VaO`գ Nls.*2\,a5 I ( EGVmr-Z>`pZuǯJ-#Vh{[j72EHp%n%Xis|)B ӻJ DX%t6+RܸV%/ɳx2?tlj>;єZGNKίgʹPlmfP|`L8/Q- $mR n?c|Z0YbPj7C,!T%\ -,a{^or-ϪÇyfvm;H,1+IdR Km!/ /lW%[E >l_aDRp,{)B C|0,)P!#k=EUj7[C Op(^Ea2Bsk7 ɕQ%)hQەjr-[~2TI3$pSA}V.ȔZhޞor-[>Χ5{`*ᬺj>P!Aʵ{G8zU7^,= )>n?Lj)Gd ϣ=.֙Q͞r_U=_35Z Q͞R 8܎X |$sX |;L#[1yEo)pA2+{|J-{8n=pϝRïu$O@涳$;,p$L:JK-P"K: Zh$or-f,P*5e%`c] d)n}VL{d Ò\ tTHkp~U8np ÒLfE%:JdG%=wp:J{lav$sAnU㬺Z t`D(m43*5e%Ͱ}괳$ETP8bD( 3CBZsYV ǯpβdm܋SAxGTP8b+$-^T/+$Y0Y>P܋?QGPst=)tp%H548ztL#&Kj:ipm܋aIYBZsYV v9_apKd XXsr-^t$e%:±tβdǯp~U8np?%yU"KJ5( R^ zҬGgYI2,VEu$:C܋?h'Ϊi, sHp/:JdW%%*5,QGDJ-D[W/+, K THk0Y>Pܺ%aI i RE>? !NU)B qԽ~k|:|WXDIY%aV.p,aC [oTWHZ??kpBZ%/gh 0+IdJ-[g oOHZϪÇyOauq$c)d XI m6?*kYu3%x #K)a=p~UX aaXRƘ`Z=TD)6.d,\ -YS-Rpf#KXDIHpHDIY%pBZ%/ghI^j^ bHRN(kѣn0,)1%<ņőV˼n0,)1%<ņő5$/[WD0,r-g OHZϪi,Y]a*R)n0,ɫR °,1v kVȆpV%Ljk G-P6 Ca(lYEJpMxYu3[/ KLU{j°&Jʚ()/QR °$J$Y0YBZ]M+, K THkp#KvHyxC?A WUaI^ZP"KhVmWضDʵ)B ଺<)0HfE%=w6TH*+&/;*+&~uVM%N ~YᬺZw9%8ߣVm#ᰇQbK|R qa*R%dzz62>c(OwET5ٰf{"%gJ5hP!9Aʵ{@ΊɱWY69ί/T7&~Yi'ջɹp/I[ vVy܋G9K?K@KAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzK{K|K}K~KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLBRDISK2.DOC BC 17 4224 33 LBRDISK2.NOT 7C 49 1664 13 LBRDISK2.SET 17 42 1280 10 LBRDSK22.COM 7E 98 7552 59 LBRDSK22.NOT B8 59 384 3 LBRDISK3.COM F0 29 7552 59 LBRDISK3.DOC F1 1C 4224 33 LBRDISK3.SET 95 95 1152 9 LLF11 .COM C8 A2 4608 36 LLF11 .DOC D7 34 1920 15 NOPIPES .MAC 7F 15 256 2 SETRSX .COM D8 87 1024 8 SLUDIR11 Fog Library Disk FOG-CPM.160 Copyright (1987) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Files for working with Library Files (.LBR) as well as various Library utilities written with a pseudo code implementation. Filename Description -03-00 .87 This is the release date of the disk. -CPM160 .DOC This is the description of the disk contents. RUNPCD .COM 145C 15K [RUNPCD 1 of 8] This program runs the files with a PCD extension. In this case they are a pseudo code program. They are much smaller, and much slower. READ .ME 05B4 2K [RUNPCD 2 of 8] EXPAND .PCD 9038 1K [RUNPCD 3 of 8] LDIR .PCD 6FD8 5K [RUNPCD 4 of 8] LSETDATE.PCD AF17 3K [RUNPCD 5 of 8] LTYPE .PCD DE3F 3K [RUNPCD 6 of 8] PCDHELP .PCD B1A4 5K [RUNPCD 7 of 8] PATCH .DOC 0569 1K [RUNPCD 8 of 8] CREATE .COM 3B2E 2K This creates a .LBR file template. LBRDISK2.DOC BC17 5K [LBRDISK 1 of 8] This set contains the programs, documentation, and notes on how to set up an .LBR file as a pseudo disk. Implementations % are here for CPM 2.2 as well as CPM 3.0. LBRDISK2.NOT 7C49 2K [LBRDISK 2 of 8] LBRDISK2.SET 1742 2K [LBRDISK 3 of 8] LBRDSK22.COM 7E98 8K [LBRDISK 4 of 8] LBRDSK22.NOT B859 1K [LBRDISK 5 of 8] LBRDISK3.COM F029 8K [LBRDISK 6 of 8] LBRDISK3.DOC F11C 5K [LBRDISK 7 of 8] LBRDISK3.SET 9595 2K [LBRDISK 8 of 8] LLF11 .COM C8A2 5K ver. 1.1 [Library Lister 1 of 2] This program lists the files within a Library (.LBR file). LLF11 .DOC D734 2K ver. 1.1 [Library Lister 2 of 2] NOPIPES .MAC 7F15 1K This is an assembler macro to eliminate writes to disks. This is helpful for a remote system. SETRSX .COM D887 1K This program can be used separately, or with the program LBRDISK. It helps set the proper system extensions for another disk drive. SLUDIR11.ZQ0 5B6D 3K ver. 1.1 Sludir is an updated module for the SYSLIB  collection LDIR .COM 6599 16K [Library Directory 1 of 10] This set contains the program, squeezed Pascal source code, and a version customized for bulletin board usage. LDIR .PQS 1C07 9K [Library Directory 2 of 10] DRTODATE.INC 107A 2K [Library Directory 3 of 10] LOADDIR .INC 2334 3K [Library Directory 4 of 10] SKIPBLKS.INC 8685 1K [Library Directory 5 of 10] SKIPTO .INC C107 1K [Library Directory 6 of 10] SKPRDRKT.INC FFA9 1K [Library Directory 7 of 10] SORTDIR .INC 9F03 3K [Library Directory 8 of 10] LDIRBBS .COM 9606 16K [Library Directory 9 of 10] LDIRQ .PAS E543 1K [Library Directory 10 of 10] LSETDATE.COM 62F2 13K [Library Date Set 1 of 4] This set allows you to set the dates within a library file. LSETDATE.PQS 7CFE 8K [Library Date Set 2 of 4] DRDATE .INC AA99 2K [Library Date Set 3 of 4] SETNAME .INC 2CDC 1K [Library Date Set 4 of 4] LTYPE .PQS 3EC1 5K This is Pascal source code for a program to type a text file from within a library.  filedesc SET ALTE OFF SET ALTE TO SELE A STOR diskf-"-"-SUBST(dfile,5,3)-"&mdiskno"-".DOC" TO malt SET ALTE TO &malt SET ALTE ON DO WHILE diskno="&mdiskno".AND. .NOT. EOF() IF diskno="000" IF dfile="FOG-DOS" ? " &'