IMD 1.16: 28/05/2007 17:19:56 -FOG/UTL050         -FOG/UTL050/UTL#050DOC(CREATE COM LBRDISK2DOC!LBRDISK2NOT LBRDISK2SET !LBRDSK22COM;"#$%LBRDSK22NOT&LU300 COM LU300 DOC LU300 DOC SETRSX COM'/UTL#050CRC)8 ;b͡zMLUvzÕùEK]0 2͵ ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2cZZk:c|/g}/o#|/g}/o#:c<2cqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2cZZ͉M|}ȯ|g}o)|/g}/o  #z/W{/_!9~#fo! ! ! ! ! ! K!9~#A!9"q**q"e!c*"_!"a!Y"C>2Y>2\>2[2^>2m2n>2l>2p!";!"?!@"=!"A !F#x:~#!e2d~# :" ^#Vr+s͐͐͐͐n& s|ʬ`i^#Vr+s! ^#Vr+sy͐6`i^#Vr+s! ^#Vr+s4͐ ~#fo+!9BMSV!9DM!@"U!"U)͐ ! +*M}*M}*M&|g}o}2M!w ! !!! ! 2d +}|~#:G:dx."2d+w# +6# !6#@**|^+R2i2:*e!#"0!#"2!>ڋo&͕=|  v~2ʷ͹56!+W ?_!~7z?ͤ:>͛@w#22! E|g}o|, ! W ! "U{2U{2U!"U!"U͐ͯ`is{g !E"U>?2U!! E}2U!E}2U! 6#6͐͐ `in}7 ! s#r͐ ! /(|7 ! ~#fo͐)~#fon}- ! ~#fo͐)~#fo0L++|.ww#w#w#w*>?=͉;w#͉2> w#=ͤͲd 2l&0OxGͲg/ʃPxY͛.7:77!a{  ʥ ʥ0:?ŷO !y$ 7o&))T])))!y ! ~#fo͐)~#fo#n}2U*U}A[ Bʄ Cʮ Dʴ Nʴ E O U L X R Ü ͂ *U!|n Ü *U|y ) ! 3Ü *U| ) *U! 3*U&!6 3 ͕  ͂ *U!| Ü ) ͂ ) *M} *M} ) !N 3Ü ͂  `i6 ͂ 2k_ :k!$͐ ! ! !0͐͐!9%8s %3s %d/%c:%s.%s%s.%s(Yw~ *U!| Ü # >?2U) *U}AI Be Dʁ Eʝ Nʹ O U ! ~#fo͐)~#foͫ) ! ~#fo͐)~#foͭ) ! ~#fo͐)~#fo) ! ~#fo͐)~#fo{) ! ~#fo͐)~#fo) ! ~#fo͐)~#fo ) ! ~#fo͐)PRINTBDO[ !9DM!D`is#r͐^#Vr+sz;!F!!9No program in memory),08STRLEISSPACTOUPPE !9DM͐! s#r͐ 6#6`iw#w͐͐͐n&|X! ^#Vr+s͐s#r~#foL) ! ~#fo͐)~#fo͒) ! ^#Vr+sÒ ͕ !E+!g 3*U&!E*U&! E.!9Copyright (c) 1983 by Gary P. Novosielski83-08-16Library Utility Ver:%d.%02d %s %s Requires CP/M 2.0 or betterLIBRARY  Directory Full--Too late. Buffer is %d sectors. Operator -%c not valid Directed I/O is active--Highest memory used: %04x *U}“ *U *U} *UJE#| !UnFME! W !U! 3>2U%s: %s Old library: %s closed. !3!9%dBad buffer size: Not 1..255. Buffer will be %d sectors. !9DM͐*`i'H!$ s`in!% s! n} †! n} ʒ͐*͒!% n}ʧ!% n&+ï!E!% s͕ ! E!% n&!E!$ n&! E!&9!9DM`i6͐! 9DM͕ ͐|(͐!  |6͐!W ͐!UDL͐!. |d!-!UZL!!UuF"U#|ʍ!U!23{!UF"U#|!U!G!2!U!q3+|ž*Uͷ|ž͐nFME!tW >2U*U*U*U!k*U "U*U*U! s#r! ^#Vr+szZ`i*U͝|M!&b*U "U$!&b!9!9DM͐*`i'H! ͐(! BH!$9!9DM`i6 #6`i^#Vr+sz͐n͐ nѯgW! s#rz͐ n}?͐ ! ^#Vr+s! ^#V| !|!3 Bad library name: %s.LBROld library: %s has New library: %s. Allow how many entries? %d %s: %s%d entries. (READ ONLY) %d entries, %d free. !9DM*U|͐!f3]͐|"! 6#6! ^#Vr+s͐`i*!#|r+sì! !9!9DM!?`is#r! ! !e͐:E3++|X͐:!k36͐:|w͐:!36!* 6! !+ k!* ! ͡(! !+ k!* ! ͡(! }! n}.!! ͐36! }!! !`iG|`iͫ]͐!3͐|I!3]!͐uF"U#|ʅ!*U *Us#r*UGG#|“ *UͤG]*UͻG*U*UGs#r!"U!!*UGG*U~#fo*U*U9'#|*UͤG ]͐*U#͐36! *U#k>2U! ! !3!69Can't change name; %s %s in library. %r=%sForm = doesn't fit %s Ambiguous input: %s alreadynot%s now known as %s !9DM͐}͐!L3C͐|+! 6! k*U6*U*Ub2s#r!!*U H*U*U~#fo"U*U+"U>2U*UͤG!9No room for %s in directory .LBRAdding: %s Name already in library !9DM`i!͐E3+|͐|͐|!3͐"U*U!0n&͐`iͤ"#|(`i! 6C͐!m3*U6>2U!9Can't delete %s; not in library Deleting: %s !9DM͐}¢͐!3 ͐|! 6! n&͐`iͤ"#|`i{! 6ö ͐!43!͐uF  "U#|5*U!|5͐!D!2*UͤG *UͤG!"U͐F"U#|ʻ!!*UGG#|ʻ!*U ~#fo*UGG#|ʻ*U~#fo*U*U9'#|ʻ*UJE#| *UͤG *U*U~#fo{2| *U~#fo| ͐!\!~#foh*U~#fok}-͍*U~#fo+*U*U͓H*U~#fo+h!VW !!*U͙2|*U~#fo`is#r͐*Us#r*U~#fok*U͙2b2!f3*UͻG"U !*U~#fok"U"2 !9Can't extract %s; not in library Extracting: %s File %s is protected CRC error. %s file questionable. !9DM*UͻG! s#r*UG!U!3*U"U*U~#fo! s#r! 3! s#r! s#r*U*U! s#r! ^#VrU*U"U*Un}.*U|.*U+"U*U "U>2U!9 no directorya bad directorya directory CRC error! Seems to have !W a directory too big for memory!9DM͐|*UͤG!UFI!W ͐*U*U! s#r +szʎ*U "Un}€*U`i͡(*U~#fo*U~#fo*U ~#fo`i!3! ^#Vr+s! ~#fo*U~#fos#rË! ^#Vr+s*U*U͐! ^#Vr+s͐͐͐͐!,3!9! ^#Vr+s!9 Library: %s Name Index S!͐####`is#r?"U"U*U ?}I!3!*U6!*U#k*U w#w*U͐s#r*U+"U`is#r*U"U`i^#Vr+szʩ*U "U6Ë>2U*U~#fo"U!U!3!!9Illegal sizeToo many. Try again. .ize CRC DIRECTORY %4u %-8s %5u %4u %04x Active sectors %12u Unused %12u Total %12u Active entries: %u, Deleted: %u, Free: %u, Total: %u. !9DM͐!3Unexpected input: %s !9DM!y! s#r*U|*U?&"U#|!"U&p͐Created %s with *U}!!*U H*U*Us#r*U~#fok*U͙2b2s#r!!*UGG#|ʲ*U~#fo*U*UpI*U~#fo !U!W >2U Error updating directory: %s!9DM͐!* |͐~#fo!&p! ^#Vr+s͐~#fo&`is#rzK!&p*U|Z͐"U͐͐s#r!&p!9!9DM!}“͍!!*UGG#|!*U*U͓H+|!<*U͝|*U ~#fo|*U~#fo|!IW *U ͐!? |ͣ!9DM͐n}P ! n! ^#Vr+sn}M !$ !!9DM͐ ͐͐͐!2*U&!E*U&! E! FI>2M.! !2!EA:$$$.SUB...ABORTEDnFME! !2ERROR: %s.   !9DM͐ J %J|g}o&!9DM!!E!! E!$ s͐0`i'H! E!( w#w͐(͐2!`i͐(|ʓ!!Ö!!E!% s!|!!$ n&! E!"!( ^#Vr+sq!!% ng ?!& s#r͐&`ins͐&͐.*Ub2s#r! ^#Vr+s$>2U*UJE#|H&!UnFME!&W {2U{2U͐*FI͐ J͐*͡(͐ͤG͐*͐(,J͐* !&3!9 Reorganizing: %s WORK-LBR.$$$Copying: %s CRC error in %s.%s: %sReorganized. !9DM͡(!$ n&! E!"!*9!9DM! ^#Vr+szʕ"! ^#Vr+sn! nѯgW|g}o! ^#Vr+sn! nѯgW|g}o`is#rzʒ"͐Û"-"!Û"!9!9DM!#`is#r!#! s#r!3 n}"͐*Us#r͐*U*Us#r!! E!) s͐E`is#rz)'!͐͐ H͐0'!9!9DM͐*U'*U*U͓͐H*UŒ'*U*U͐pI*Uʑ'!*U*U?*U͙2"U! ~#fo*Us#rA'͐*U͓͐H͐(͐*U͐pI͐͐1! 'H! E! n!* s! 6͐^#Vr+szʧ#! ͐^#V! r+s͝|¤#! ! ͐~#foBH!* n! s! ͐/͡(!) n&! E!#*#͐6#6!) n&! E!#!+9!J9DM`i!* s#r!U!&3*U! s#r! (!*U͐k*U͙2"U͐!9DM*M}p(!EA!! E*U&!(!2!*Uͻ4͐͐*U*-%c %d/%c:>!9DM! 6! n&|(! n&`i! ~#fo! 4n&n&|g}osï(! s! s! U͐*DL!! *U*U`3>2U"U!&!( s#r͐(FI͐( !"U*U"U!͐*uF! s#r! 6#6! 6#6͐͐&͐͐$͐! s#r!͐͐GG!!, ͓͐H͐!, ! k! s! ! !)`iE3*U}Dʆ)Lʆ)Nʆ)Rʆ)4)! ! ͐ n}V)͐ n&@b)!EA!! E!)͐ͯ5à)! ! !)͐ͯ5͐ç)!9%8s %3s %d/%c:%s.%s%s.%s!9DM!*`is#r͐^#Vr+sz)!*3!E!s#r͐n}%&͐! ͡(! !&3! *U "U͐BH*U *UGs#r!͐ ~#fo͐GG!"U͐~#fo͐*U9'#|­%nFMEW *U͐~#fo{2|%͐~#fo|%! !&W ͐~#fo| &*U9No program in memory!9DM͐0L! s#r͐ 6#6`iw#w͐͐*͐n&wL|i**! ^#Vr+s͐s#r͐ ^#Vr+s͐͐*͐͐n&͊LswL|ʽ**`i^#Vr+s! ^#Vr+sÊ*͐6`i^#Vr+s! ^#Vr+sE*͐ ~#fo+*!  9!9DM*s*s*s! ~#fo͐ ~#fo)* s#r*6**s#r! 6#6`i6#6͐͐ ~#foҜ.w}ʙ+Ü.! ~#fo͐)~#fon}<+|ʏ,+ ->"-Å.! ~#fo͐)~#fo#n}+=-*! ~#fo͐)~#fo!9DMw}A0*Y9`is#r!|>0*Y9`is#rî0Mn}–0**s#rJ*0L#*6*0L*6 *^#Vr+sn`is#6͐|0!0͐|0`i6 #6͐0!9!9DMw} 1*!#5#|I,!!.6!! ~#fo͐)~#fo#6!!.6͛J*6!.! ~#fo͐)~#fo͜L|Œ,*n&|g}os-*4! ~#fo͐)~#fo#* s#r! ~#fo͐)~#fo#n}-! ~#fo͐)!.s#r! ~#fo͐)* n&%:M*ͩA1*^#Vr+s! ns!D1!!9DM!B2`is#rw}1! n} ‰1͐n} ʉ1*! 6͐! ns*! n&6#|1!!C26͛Jw&|g}o|192! E|1!E+++|1͛J! n}  s#r"-*n&|g}os! ~#fo͐)~#fo#n}M-!!.6͛J! ~#fo͐)~#fo#FI*! ~#fo͐)~#fo#w6#|-!!.6!! ~#fo͐)~#fo#6!!.6͛J*4w}\.͐! s#r͐͐ ~#fo6.! 2͐n} 2! !E! n&!E͐! ns!9File output error; disk full? 22!9^#V#~#foZ22!9^#V#N#F#~#foxʿ2 o2ê2!9^##~#fo{_}o|g2|g}!o2!9DM͐!:! : ~#fo͐)! ~#fo͐#)~#fos#r! ^#Vr+s-͐ ^#Vr+s`i^#Vr+s* ^#Vr+sÂ.͐ ͐s#r! ~#fo͐ ~#fo)w#wÐ.! ^#Vr+s`i^#Vr+sy+!9Can't open <3!9!9DM! ͐>!9DM͐͐k! s#r͉͐! s#r͐|ʲ4͐͐k! s#r͐͐! s#r͐͐! s#r͐ `is#r͐͐ښ4͐͐ !}-/*6w&|g}o|-/!/FIw}ʷ/*!6*8*6!/FI!/!/,Jw}ʷ/\ !/s#r\ w#w\ \ ͞J#|·/!!/6͛Jtempin.$$$tempin.$$$tempin.$$$tempout.$$$`in}%¿>! ! s#r! 6#6! s! s! s͐n}-b;! ^#Vr+s! 4͐n}0r;! 4͐n&͸L}ʏ;! CÒ;!! s#r! ^#Vr+sn`is{.;! C! s#r! 4! ^#Vr+sn`is`in&͊L}D7><7>!7>J7>-7>]7>97>p7Û7! n&H1! n&!E! n&!E! n} ˆ7! !E! n&!E͐##^#Vr+s|7!͐͐~#fopI|7!͐##6#6͐͐s#r͐<Ð>͐~#fo|B! n}=! ^#Vr+s!|=͐͐! n}=!0=! !=!9~#fo#|=!>ë=͐͐s#r!!͐~#foGGP9͐##6#6͐͐s#r!P9!9!9DM͐|p90:͐+++|‡9!E:͐##^#Vr+s|:!͐͐~#fo͓H`is#r!|9͐##^#Vr+s:͐##͐?+s#r͐͐n}A>͐͐! ^#Vr+sn&!/>!9~#fo#|>>!>=! n}ʍ>! ^#Vr+s!|ڍ>͐͐! !{>!9~#fo#|Š>!>K>ü>͐͐`in&!>!9~#fo#|¼>!>>͐͐`in&!>!9~#fo#|>!>;!9!9DM!   ^#Vr+s~#fo! s#r͐! s#r! w#w! >D! s{ʾB͐n}ʾB! ^#Vr+s! n}%ʈ?! n͐n}z?͐ B! ^#Vr+s.?! 6 `is! s͐n}*±?`i4! ^#Vr+s͐n&͸L}?! C?!! s! ^#Vr+sn&͊L}X@Ok@Dt@Uʟ.D͐ ?͐^#Vr+snѯg`is#rC͐5D!9!9DM͐~#fon`iswL|mD͐^#Vr+sFD`in&uD!9!9DM! n&͊L! sL|ʶD! n&sD! n&͸L}D! n&sD!! n! n&+D!E!@R6AS;AC3BpB! 6! n&|h@! >D}0h@͐#n&͊L}Xh@! ~#fo##s#r! n&++sß@! 6ß@! >D}-Ÿ@! ~5o}ʟ@! 4! ^#Vr+s! w#w! n&! >D&~D#|@͐ B! n&! ^#Vr+sn&~D! s{(A! ~5o} n&7:KO*M *_?E+*a|/g}/o#9CE?E#"_z{# WE>)aE~#foɗEEEEEEEFF FF$F3F7FIF`FReading unwritten dataNot enough disk spaceCan't close extentSeek to unwritten extentDisk directory fullSeek past end of d(A͐ ! nѯg?! nѯg! s#r@! ^#Vr+swB! 4! >D}PA͐ B͐ ~#fo! s#r! ~5o} B͐n! s{ B! n}ʚA! n͐n}͝èA! n&wL&|A! ~#fo! nѯgs#r! ~#fo! nѯgs#r B`in}A! ^#Vr+s! ns!isk007008009Too many files openFile not found012Can't create fileSeek past record 65536Unknown error::o&7,҄F> 2c*K/:l2> F:c):MF=F=> F:lw:co&552:7*KFI:l2\5G> 2: ^#Vr+s`A`in}0B! ^#Vr+s͐6! ^#Vr+s.?`in}bB! ^#Vr+s~#fo͐ns! ^#Vr+s! ^#Vr+s.?͐ B`in}»B! ^#Vr+s~#fo! n}ʧB͐ ëB͐ s#r! ^#Vr+s.?͐ B!9!9DM̓`i̓BH̓̓̓ BH!*KuF7*K*M&G!ɾG#~=G*K,GG7:K,>]G2:͜G*M:OʐG=sGÐG:K)~2#5͜G*M!s#r!^#V )ҵG>2:6!7:K,G>2::K)~2#!~#fo5 ,H>2:̓̓ `iBH!9!9DM͐^#Vr+s͐s!9DM͐͐ ҍC͐^#Vr+s͐zC͐0ÂC͐7s!&C͐ ͐͐ ͉͐?C`is͐ ͐͐ )͐?C`in&#&C!9!9DM`iw#w͐~#fon&͸L}!~#fo7*M*K:OOz"Hq#H7*M*K/:lo&7*O|DM*M*KqH>@Iz>@Iz2:K,"e!"g*O|*gH5*M*e!ѷ I2:II!  H*gH*O+"O*M"M*g#"g*e! N#Fp+qx¾H##6>2:H2: !\/:l25!iI> 2:+7:K)V>Jz> Jz2:K,"e!"g*O|µI*g5*M"M*e"*gI2:æI#"g*O+"O*e! N#Fp+qx›I##6>2:ãI2: )J>2: , n&7*K!fJ/:l2*M!vJ/fJ5!_J> 2:+Q:zJEËC–EQyQxQRQ* 7*M^#V#z¦Jx2J+V+^+µJ*KK:Jo&9! !j96  #F#xJ~#J7*K!9/:l2 6C#6O#6M5 +K#~‚K##vKxSKK 7KEXECL: Command line overflow $!pL!*w#K*:1K*K!K!a{ ѷ!bk6L{ozg7*K*M~#NL*K7*M*K~#dL+w#kL*K!9~! -!9~o&a{_o7*K*MµL#¦L!ɖg!9~!0:,!9~!A[,o#|>!>;!9!9DM! Documentation for LU.COM and LRUN.COM | This document applies to version 3.00 of LU.COM and version 2.0 of LRUN.COM. Copyright (c) 1982, 1983 by Gary P. Novosielski All rights reserved. Permission is hereby  granted to copy and distribute this document for any non-commercial purpose. Any use of this material for commercial advan- tage without prior written consent of the author is prohibited. INTROD  UCTION Library Utility (LU) is a program to allow combining of multilple files into one larger file. It requires CP/M version 2.0 or higher to run. | Version 3.00 replaces version 2.11. The major revisions are the addition of | the -b, ussion, as directory size is calculated by the program. All directory sizes are input and output in terms of entries, each entry being a potential member file. The program adjusts directory size to an integral number of sectors. LRand -n operators, and the addition of CRC calculation and checking to improv reliability Erro reportin ha als bee improved Majo revisions | are marked with a vertical bar (|) in the left margin. Th director informatio i aUN.COM is a small program which allows running a .COM (object code) file member directly from any library, without having to extract it to a separate disk file. Page 1 of 13 83-08-16 Documentation for LU.COM an L styl librar i containe i th sam fil a th dat files o members. The amount of space to be allocated to the directory must be specified by the user when a new library is created, but can be changed when the file is reorganized. d LRUN.COM WHY USE LIBRARIES? First, a library file usually takes up less space than the total of the individual member files which went into it. The reason for this is that CP/M allocates disk space  The size of each directory entry is 32 bytes, which means each four directory entries take up one sector of the library file. Currently only 18 bytes of each entry are used, with 14 bytes being reserved for use with possible future enhancemin fixed blocks or groups, typically 2k bytes each. Any space after the last sector of a file up to the next 2k block boundary is wasted. The same files in a library use only the number of sectors they actually need, and though the lents. The directory itself uses one entry for control information, so the number of directory sectors needed for a library of members is (m + 1) / 4, rounded up to the next whole number. The user need not be concerned with this discibrary itself may have a partially wasted block at the end, and requires some space for directory information at the beginning, the net effect is usually a saving of total space. The best results are seen when many small   files are combined into one library. Second, a library file makes most efficient use of the CP/M disk directory, since it is treated as only one file by CP/M regardless of how many members it contains. Third, libraries can to the free space pool for use by new files. When a member file is deleted from a library however, the space previously occupied by the file is not useable. The library must be reorganized to make this space available to CP/M.  aid in transferring packages of software from one system to another using XMODEM. Only one file is transferred, eliminating the need to run the XMODEM transfer program several times, the chance of overlooking a needed file, and the pWhile this is easy to do with the LU program, it is not automatic, and if the situation is ignored, large areas of disk can be tied up as unproductive "dead space". Page 2 of 13 83-08-16 Documentation for LU.COM aroblems of naming conflicts, (such as READ.ME files) among unrelated packages. WHY NOT USE LIBRARIES? There are some very good reasons for not using libraries. For one thing, files withinnd LRUN.COM HOW TO USE THE LIBRARY UTILITY LU has two main methods of operation: interactive, and parameter driven. In parameter driven mode, the program takes its command inputs from the command line when  a library are not available to most "normal" programs. If a frequently accessed file is placed in a library, it will have to be extracted from the library to its free-standing counterpart before it can be used by most programs. (.Cit is first invoked, and when the entire line has been pro- cessed, execution ends. In interactive mode, the program takes its command inputs from one or more input lines from the standard input device (typically the console). When OM files are a notable exception to this, because of the availability of the LRUN command, covered later.) Libraries can actually waste disk space. When a disk file is erased, CP/M returns the space formerly used by the fileall the command inputs have been processed, the program reads another line. This process can be repeated as long as necessary. Input from disk files, C program "pipes", and the XSUB facility are also supported for more advanced   applications. Interactive mode is probably the best way to get to know the program, because the effect of each action can be immediatley seen. To start an interactive library maintenance session, just type LU on the commanding | general form: [u/][d:][filename][.[ext]] where [u/] is an optional user area prefix. It is a decimal number from 0 to 31, and if present, must be followed by a slash (/) character. User areas greater than 15 should  line with no parameters after it. All the methods make use of similar syntax: Each input line, regardless of its source, is scanned left to right. All alphabetic characters are converted to upper case. If the line contains  be used with care, as they cannot be accessed by any of the resident CCP (Console Command Processor) commands of CP/M, such as USER, TYPE or ERA; the [d:] is an optional drive designator. It is a single character in the range of A to P, and any blanks it is separated into multiple individual input strings. These input strings are divided into two classes: operators (sometimes called tags, or options) and operands. An operator is defined as any two character string whereif present, must be followed by a colon; the filename is a string of 0 to 8 characters, following the standard CP/M conventions for filenames; and ext is a string of 0 to 3 characters, following the standard CP/M naming conventions for filety the first character is a minus sign. Operators tell the program what to do. Valid operators are -a, -b, -c, -d, -e, -l -n, -o, -r, -u and -x. Anything else with the same form is an operator too, but an invalid one. Operands are any other pe extensions. Page 3 of 13 83-08-16 Documentation for LU.COM and LRUN.COM The period (.) after filename is manditory if ext is specified, and optional otherwise. The names "xyz" and "xyz." are equivalent. Ambiguous operands input string. | The most common operand strings are names of files which are to be | acted upon by the previous operator, for instance, added to or extracted from | a library file. These are called filespec operands, and have the followare those which contain the characters "*" or "?" in the filename or extension fields. Examples of valid filespec operands are: foo.bar 3/b:test.fil 3/test.fil b:test.* test.fil test. test z -z. comm?  nd 0/ b: 5/a: Note in the example "-z." the period, though not required by the syntax of a filename, is essential to prevent the operand from being mistaken as the invalid operator "-z". What action is taken ud it will be interpre- ted as the name of a member file to be Extracted from the library. It also shows that the current user number is 0, and the current drive is A:. Any operands which are entered without an explicit user or drive will usepon the operand depends upon which operator most recently preceded it. If no operator was entered, or an invalid one, or one that expects no operands, the operand will draw an error message, but will otherwise be ignored. When ru these defaults. The defaults can be changed at any time with the -u operator, dis- cussed below. When the program first starts up, the prompt begins with "-?", which means no operator is currently in effect. In this case, the onnning interactively, LU prompts for the operators and operands. You can type as many inputs as will fit on the line, separating them with spaces. The end of an input line has no special significance. The most recent operator remains in effect,ly valid input is an operator. Any operand will be rejected. Page 4 of 13 83-08-16 Documentation for LU.COM and LRUN.COM SUMMARY OF OPERATORS In this discussion, the "open library" refers to the library name  and the next line can begin with additional operands for it. The prompt displayed for each input line has this form: -m u/d:> where m is the current operator in effect specified as the current library by using the -o operator discussed below. The default name LIBRARY.LBR is used whenever an operator needs an open library, but none is currently open. -a add files to library. -a cau u is the current user number in effect d is the current default drive For example the prompt might be "-E 0/A:>". This indicates that the -e operator is in still in effect; if an operand is entereses subsequent operands to be treated as the names of files to be added to the open library. Ambiguous operands match all disk files which qualify according to normal CP/M wild-card conventions, except those with a filetyp  e of .LBR. Explicit user or drive specification on an operand causes that area to be searched for the file(s) instead of the defaults. | -b Buffer size set. -b reads the subsequent operator | as the size (in sectors) to allocate fobrary. If a library has been opened with the -o operator, or if the default library LIBRARY.LBR has been opened by some other operator, -c causes it to be closed. Otherwise, it has no effect. Normally this operator neer a disk I/O buffer. | Normally, this operator need never be used, since a 64 | sector buffer is assumed if not specified. A full discussion | of buffer size considerations, and their relation to disk | access speed is beyond the scd never be entered, since any open library is automatically closed at the end of the session or when another one is opened. It is provided for situations where it is desired to change disk volumes without ending the LU program. Befope of this document. | Generally, a larger buffer will increase the speed of | adding, extracting and reorganizing, but this widely | variable with different hardware. | Bear in mind that a large I/O buffer will decrease thore removing the disk containing the library file, it must be closed. After mounting a new volume, the -U operator (see below) should be used. The -c operator expects no operands. -d delete files from library. -d cause | size of the largest library directory which can be processed | by the program, since the directory buffer competes for | system memory with the I/O buffer. Conversely, setting the | buffer to a value less than 64 will increase the maes subsequent operands to be treated as the names of members to be deleted from the open library. Ambiguous names match all members which qualify. User and drive specifications on operands are ignored, since the library members aximum | directory size. This operator can only be used at program | startup, before the first library is open. Its operands are | not filespec operands, but simple integer numbers in the | range 1...255. -c close the open lire obviously in whichever area contains the open library. Page 5 of 13 83-08-16 Documentation for LU.COM and LRUN.COM -e extract files from library. -e causes subsequent operands to be treated as the names of members in th  e open library to be extracted to normal free-standing CP/M files. The original copy is not deleted, and remains in the library. Ambiguous operands extract all members which qualify. User or drive specifications on memb so the next input should be another operator. | -n Name a member. -n causes each subsequent operand | to be treated as a request to change the name of a member in | the open library. Since both the new and old names of the | memer names cause the output file(s) to be placed in the specified area rather than the default. Any existing file with the same name will be overwritten unless it is protected by having its Read/Only attribute set on. -lber must be given, a special double operand format is | used. It is essentially two filespec operands "glued | together" with an equals sign. For example: | newname.typ=oldname.typ | would cause the member OLDNAME.T list current library map. -l causes the directory of the open library to be listed on the console. The member names are displayed, along with their index (starting record within the library) their size in sectors, and the | intYP to have its name changed | to NEWNAME.TYP. If the old name is not found in the open | library, or if the new name is that of an existing member, | no rename takes place, and an appropriate message is | displayed. Operands which ernally calculated CRC value. Also, information is displayed about the number of sectors in the library, and how much space is used and unused (wasted). The number of active entries (members) in the directory is also displado not conform to the special | = syntax will also draw an error message. -o open a library. -o causes the following operand to be treated as the name of a library file to be opened for use with subsequent operators.yed, as well the number deleted, free for future use, and the total number. This helps determine whether the library needs to be re-organized to free unused space and deleted entries. The operator -l expects no operands,  If there is already an open library, it is first closed, and the new one opened. If the new library does not exist, it is created with no members. Ambiguous names are not allowed. User and drive specification can be used to   override the current area. The file type may be specified, but if not entered, defaults to .LBR which is strongly suggested as the file type for all library files. You will recall that files of type .LBR are ignored by library, so it is safe to enter a size of "1" to make the directory as small as possible. (See Specifying Directory Sizes below.) When reorganization is complete, the old library is deleted from its user/drive area, and ththe wildcard matching of the -a Page 6 of 13 83-08-16 Documentation for LU.COM and LRUN.COM (add) operator. This prevents libraries from being accidentally added to other libraries, or to themselves; a situation not unlike work library in the default area is renamed to the name of the old library. No backup copy is retained. The newly reorganized library remains open for use with subsequent operations. | Note that although the newly reorganized librae trying to drive a truck up its own tailpipe. If for some reason you want to add one library to another, be my guest, but you will have to specify the name without * or ? characters when adding it. -r reorganiry always | ends up in the default area, the default area can be changed | with the -u operator. (Do this first, before using -o.) | Also, the old library can be opened in any area, by using | explicit user/drive specifications. The net rze library. -r causes the currently open library to be reorganized. First, the directory is sorted into alphabetical order, and then all active members are copied to a work library which is opened on the default user/drive. Thesult is that | it is possible to reorganize a library from any desired area | to any other area. Reorganizing a library to a different | drive is usually a much faster operation, and is manditory | if the current disk does not contain enoue size of the directory may be changed at this point by specifying a greater or smaller number of entries than were present the old library. The directory will always be made large enough to contain all the active members of the old gh free space for | the old and work libraries at the same time. -u Use new default area. The -u can be used to change the default value for user number or drive. It causes the user prefix and drive spec of the following o  perand to be used as the new default area. If the following operand has no user prefix, or no drive spec, the corresponding default is not changed. (The filename and ext sections of the operand must be absent.) If a change idiate program termination, and if any more operators follow it on the same line, they will be processed normally. The program terminates only after the current line is fully processed. Any open library is then closed, and the user nus made, any open library is first closed, and the disk system is reset. Thus feature allows newly mounted disk volumes to be accessed for writing; CP/M causes new volumes to be Read Only until the program performs a disk system reset. mber and default drive are reset to the values they had when the program was originally invoked. To preserve compatability with earlier versions, the program will also end if an empty input line (carriage return alone) is typed. The -u operator also affects which area will be used for the work library during reorganization. See the -r operator above. Note: If directed I/O is active (See advanced features below) the -u operator is treated as invalid. Due t SPECIFYING DIRECTORY SIZE Whenever an old library is opened, the directory size is displayed as follows: Old library LIBRARY.LBR has 32 entries, 5 free. This means that 5 more members may be added before to some unfortunate assumptions in the C run-time package, the Page 7 of 13 83-08-16 Documentation for LU.COM and LRUN.COM default drive cannot be safely changed while directed I/O files are open, and the BDOS gets confused by he directory becomes full. When the directory is full, -a becomes an invalid operator, and the library must be reorganized to add any more members. When a library is created for the first time, the user is prompted lthe disk reset under these conditions. -x eXit program. -x causes the interactive mode to be turned off, which means that the input line containing it will be the last line scanned by the program. It does not cause immeike this: New library COMMAND.LBR. Allow how many entries?_ Any number from 1 to 65535 is valid. The actual maximum is determined by the amount of free memory available on the system in use. Directory size will be rounded up to t  he next whole sector necessary to contain the number of entries requested. This number will remain in effect until the library is reorganized. Since the directory itself counts as an entry, one entry is added to your responsee entered, separated by spaces, after the LU command, and the operations will take place without console intervention, except in the case where the directory size for a new library is requested. The syntax is: LU [ [ ...]] [ [ ...]... where square brackets indicate optional parameters, and: is any operator. is any operand. ... indicates that the preceding parameter may occur multiple times. Anyisk space. If the disk space runs out during an add, the name is not added to the directory. If a multiple add is in progress, due to an ambiguous operand, the remaining qualifying files are still added if possible. If any o names occurring prior to the first operator, or following an operator which does not expect operands, are ignored. | CRC CHECKING | | Whenever a new member is added to a library, a value | called thf them is small enough to fit in the remaining disk space, it will be added. If any sectors were written by a failed add attempt, and then never utilized, they remain as unused sectors, and the library should be reorganized. e CRC (Cyclic Redundancy Check) word is calculated | and stored in the member's directory entry. When the member | is extracted from the library, the calculation is done | again, and compared with the saved value. If the two values | do no page 8 of 13 83-08-16 Documentation for LU.COM and LRUN.COM PARAMETER DRIVEN METHOD All of the information needed for a maintenance run may be specified on the command line. The operators and operands art match, it is an indication that the member was | damaged in some way while it was in the library. The extract | will still be performed, but a message warning that the | extracted copy is questionable will be displayed. | This fea  ture is especially valuable for libraries which | have been created on another system and transmitted by phone | (possibly several times) before you receive them. It helps | insure that the extracted files are faithful reproductions | of the  9 of 14 83-08-16 Documentation for LU.COM and LRUN.COM ADVANCED FEATURES Input from BDS C "pipes" or ordinary sequential files is also possible. The filename is specified on the command line preceded b files originally inserted before transmission. | Members added by LU versions prior to 2.20 do not have CRC | words. The CRC check will be bypassed when one of these is | extracted. | The CRC word of the directory itself is checkedy a "<" character and no intervening blank. Example: LU ". This applies to parameter driven as well as interactiv, it will | not adversely affect operation. | When a library is reorganized, CRC words will be added | to all members, if not present. CRC errors which occur | during reorganization will cause the program to abort. The | damaged mee (including "piped") input. Examples: LU -O 3/SPECIAL -A B:ZOT.COM >20/C:LOGFILE.OUT would add the file zot.com from drive b, current user area, to the library special.lbr, in user area 3 on the default drive. Console mber must be deleted before the library can be | reorganized. | Libraries created by this version of LU can be read by | all previous versions. The CRC values inserted will simply | be ignored by early versions of the program. Page output would be written to a file called logfile.out in user area 20 on drive c. The placement of the output name on the line does not matter and except for turning on redirected output, it is ignored by all operators. LU   B:RECORD.DOC would take interactive commands from the file batch.in and write console output to a file called record.doc on drive B. Normally, console file output is also echoed on the real console, excumentation for LU.COM and LRUN.COM place as members are added or deleted. Precautions have been taken to minimize this risk. For one thing, the directory is read into memory when the library is first opened, and is onlycept when input is also redirected, as in the last example. To force visible console output when both an input and output file are used, the ">" character preceding the output file name may be changed to a "+" like this: LU written back if it differs from the copy on the disk. Operations which change the directory are: adds, deletes, and the sort operation which is done before reorganization. If only extracts (or LRUN executions) are done, the direct +RECORD.DOC prompt returns, do not hit RETURN. Instead, abort the program with Control-C. This will canceameters and temporary work areas. Page 11 of 13 83-08-16 Documentation for LU.COM and LRUN.COM THE LRUN COMMAND The LRUN command was created for those of us who have lots of command files we like to keel the program without updating the directory, and the original members will still be present. Here is another caution. Since the entire directory must fit in memory for a library to be successfully opened, it is possible thp on line all the time. We all have some favorite little .COM files are very small programs, but having a lot of them on disk eats up file space at an alarming rate due to the fixed CP/M block size. Put them all into a library calleat a huge directory created on a your system will be too large to fit in memory if read on another system will less memory. This should not be a problem with a library of under a hundred entries. To give you an idea of how much d COMMAND.LBR using LU. You can then run any .COM file directly from the library by saying: LRUN The full syntax of LRUN is: LRUN [-] [] elbowroom you have to work with, LU displays the highest memory location used each | time it terminates. This will vary depending on the size of | the disk I/O buffer, as well as the largest directory used | during operation, and will be sligh Where: is the library to be searched. The square brackets around - indicate it is optional. The - character tells LRUN that what follows is a library name. It is not an actual part of the name. Don't lea  ve a space after the -. If the first parameter doesn't begin with - then the default library COMMAND.LBR is used. If a drive spec is given, such as B:, then only that drive is searched for the library. If no drive spec is given,going on. (Thanks to Ron Fowler for supplying the code which makes this possible.) Page 12 of 13 83-08-16 Documentation for LU.COM and LRUN.COM LRUN EXAMPLES LRUN ED FOO.BAR the  the current area is searched first, and if no library of that name is found, the default area is searched before giving up. The default area is set to 0/A: in the distribution object code, but this can be changed to something more approp file ED.COM is searched for in COMMAND.LBR on the current drive, or the A: drive. If found, ED.COM is loaded from the library, and FOO.BAR is passed to it as a parameter. LRUN -C:SPECIAL LU -O COMMAND -A A:*.COM thriate for your system by changing two equates in the source program and reassembling. LRUN does not otherwise support user numbers, and will not recognize the "u/" syntax on its parameters. If a name, but no type is entered, .LBR is e file LU.COM is searched for in SPECIAL.LBR on the C drive. If found, LU.COM is loaded, and the strings -O, COMMAND, -A, and *.COM are passed to it as parameters. LRUN - -ZIP the file -ZIP.COM is searched for in COMMAND.LBR oassumed. is the name of the command to be run. No drive spec is used here. The type defaults to .COM and need not be entered. is a the normal (possibly empty) list of parameters which the n the current drive, or the A: drive. If found, -ZIP.COM is loaded and executed with a blank parameter list. Since -ZIP.COM begins with a -, the extra - followed by a space was needed to act as a place-holder for the library name. Comp.COM file expects to find on the command line when it is run. This list is parsed to the required file control blocks and command line area before execution begins, so the program will not be aware that anything cute is are with: LRUN -ZIP the library -ZIP.LBR is looked for, but nothing else happens, because no command was specified. LRUN with no parameters at all, causes a screen of help information to be displayed as a mem  ory refresher. Please report any problems or suggestions for enhancement to me via CompuServe CP-MIG or EMAIL, user number 70160,120; or by phone at (201) 935-4087, voice, evenings (eastern time) or weekenny entries: >   !~ʑG#0 ґT])))7,>7|g}oN""!<!>pEL!>E:GLÅInvalid entryoe!<!>ELoCREATE complete~#_#ds. Gary P. Novosielski Page 13 of 13 83-08-16 :[<=_ \\<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 ^ ^ .,:;[]=<>|  A w  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 marcial advantage without prior written consent of the copyright owner is prohibited. Please report any problems and suggestions for enhancement to the author via CompuServe CP-MIG or EMAIL posting to user number 70160,120; or by voice p  hone to (201) 935-4087, evenings (eastern time) and weekends. LU.HLP #3.00a first derived by Dennis E. Hamilton on 83-10-30. next: What is a Library? PAGE 1 OF 8 I 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 morNTRODUCTION: THE LIBRARY CONCEPT ================================= Library Utility (LU) is a system for storing several files as components of one larger file. The resulting library (.LBR) file has its own PRIVe 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 t 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 (RShe 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 andX) 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 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  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 transientfile 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 s  hould 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 os 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 copyr 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 boot 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 s. 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 onand 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 e 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 archivesMeadowlark RCP/M (403) 484-5981 @ 300/1200 baud. removes the RSX manager, and any LBR RSXs below it. Please make any bug reports and/or comments to the SYSOP at  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 waes in the open library. -O file-spec Close any open library and open the specified one. If the library does not exist, one will be created. -R Re-organize the open library. -U [u/][d:] Close, change t  o the given defaults, and reset the disk -X Exit from LU after the current line is processed. An empty command-stream line implies -X. In a pinch, you can ABORT processing with ^C at the input prompt. This l When a library file is used as a "carton" for a group of files being distributed together, there is an easy way to make separate copies of its entire content: a>b:LUNLOAD c:library will, for example, "unpack" the files of c:leaves the open library directory as it was at the end of the last -C, -O, -A, -R or -U operation. Do -L and cleanup as needed, following with -R. PAGE 3 OF 8 ::LDIR LOOKING OVER EXISTING LIBRARIES =========== 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 ==================== When all you want to do is find out, or remind yourself, what is IN a library, the LDIR utility (and LDIRZ, its ZCPR2 counterpart) are just the ticket. Typically, LDIR lets you examine a library via a specificatMAXDISK 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 goodion of the form d>LDIR library ... where library identifies the library that you want to know about Command "d>LDIR COMMAND will, with this convention, show everything that is known about files in library COMMAND.LBR. Fo 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 dir specific information about the version of LDIR available on this system, you should locate the file LDIR.HLP for review via d>HELP LDIR ::LUNLOAD UNPACKING ENTIRE LIBRARIES ========================== sk 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 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) . . 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 ca 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 n intercept. Jim Lopushinsky March 7/84 403-484-5981 @ 300/1200 baud. essage on select error, and jump to WBOOTE. Note: it must jump to WBOOTE, not to WBOOT so that the RSX manager ca= 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. nd- string -E filespec ... "EXTRACTS" copies of those members selected by each following filespec. Every library member that matches a single filespec is copied. The copy has the same filename as the original member. WHE 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. 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  EXECUTING PROGRAMS IN LIBRARIES =============================== Usually, library data that is going to be used by a program must be extracted first. But programs that are kept in libraries can be executed w  ithout having to be removed first. This is accomplished by use of the LRUN utility or one of its kin. For more information on the current release of LRUN, locate the file LRUN.HLP and review it by a>HELP LRUN ::LBRBUILD _: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 BUILDING AND MAINTAINING LIBRARIES ================================== With a set of well-organized libraries in hand, most access will be in order to USE the material that the library contains. LU supports thism 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: an2:  >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+d 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 :@ͷ :^:=ڨ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 n*(~ #!\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 { ~#*g+"g|tt!~d"e*[~ẃ+V+^##s#r# "[**#"**.*eʄ~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 !"w#w#w!'*[s#r+w+w)! !"4#4#4P?KO~#:_h~# _~# hG~# s:0_> ͊~_ _5ʮy O_!_>͊y O_COMOBJ|}}o|g=!y 2 :"kE"!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 ~| +"]@3 ! **#"[*.5 5 "**[ɯ=:-*k!~!~#fo"c!N#F*c DM!~#fo>%͊q#p! !~#fo#S>͊ _*(~^#V"o *oi !"w#w?!!^#V"g))+*] >&!>8  6g??%: >?| _:|?92h I: ͈ *]}\h >&}T*]#"]:ʙ?*]+"]*["[2tL!tځw4*Y*[~ ڴ># _>͊>##~!>w ww} g?:t!tʠڠÁ!t? *g+"g|a *]|(  >8 Z *[~@< >͊"[ #_8 >͊"[*]+"] )!"w#wJ *]|‘ >8 *[~@ʥ >͊"[ # _+F+N##^#V#"e +s#r#>*e͊"[*]+"] ? *]|z ! ځà !~>&*k'& @*k'͖ g[ !~! >&! F!~>&hͭ R*e} ҈*cMe."e*k! ~wրw! 4~!¯##~!w*e} [ ! nͭ M*e} +*k! ~wրw! 4!w*e} ͱ *("[!"]**"g*g|@) *]#"]*g+"g!  8 " )?  ! ~<> &>2*("[**"]2t![__!_[_!N#F!!^#V`i>&&)))))))! ~͊"c!^#V###N#F! "m!" q#p*mɷ *cy͊*k >& &"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!~#fo*k N#F *k N#F`i" s#r*k>͊s#r~w_  > ##~!w! w*e}շ% *k~#fo|G }G *ee."e*e} [ !!^#VM*q*k ~#fo+ͱʎ & N#F!!q#p#wg :&:- :,!u>&*(**"]*]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@  March 10, 1984 Jim Lopushinsky en changed to 2.2 to prevent confusion. Just replace LBRDISK2.COM with LBRDSK22.COM. All the other modules are the same.  IBI"@!"@@"B!  !$DHBBH $D$!$$HH $!$  D@  There 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. "  RSX y; zozc*|<*G >k xTs#r+#r+6.""**#s#r*D`.45. F.~s. ^#Vx>`. s#rzs.""s1*"o* .:OAD@ @I 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{a#   DISK.DOC FOG/UTL.050 First Osborne Group (FOG) Utilities Disk LU300, received from Bob Shands, is an update of the Library Utility LU111 found on FOG/UTL.017. This program will pack several file to address BDOS at D300h for the double-density Osborne 1. It does not work with my version of ZCPR, but will work with the standard CP/M CCP. Also, see LUX found on FOG/UTL.048 and 049. CREATE will create an empty LBR library file or ARC arcs into a single library file, or vice versa. The library file is named with type LBR (i.e., filename.LBR). The user interface is difficult to describe briefly here; LU300.DOC provides details. See LUHELP.DOC on FOG/UTL.048 for additional inforhive file. (See FOG/APP.036 and 037 for the ARCHIVE programs.) Place CREATE.COM in drive A. At the A> prompt, type CREATE filename.typ where typ is LBR or ARC. Refer to LBRDISK2.DOC. Jim Woolley FOG Dmation. LBRDSK22 will allocate one or more LBR library files as a pseudo disk drive. SETRSX must first be used to modify the operating system to support LBRDISK. For example, place one or more LBR files containing separate programs or text filisk Librarian June 1984 CREATE filename.typ where typ is LBR or ARC. Refer to LBRDISK2.DOC. Jim Woolley FOG Des in drive B and SETRSX.COM and LBRDSK22.COM in drive A. At the A> prompt, type SETRSX At the next A> prompt, type LBRDSK22 C:=B:* This will allocate all LBR files on drive B to the pseudo drive C, then log drive C. Each separate f --> FILE: -FOG/UTL.050 CRC = 00 00 --> FILE: /UTL#050.DOC CRC = E6 BD --> FILE: CREATE .COM CRC = B7 92 --> FILE: LBRDISK2.DOC CRC = 63 EA --> FILE: LBRDISK2.NOT CRC = 2C 42 --> FILE: LBRDISK2.SET CRC = A8 62 --> FILE: LBRile within the LBR files may then be accessed directly on drive C. The system works as if there were actually a third drive. Read LBRDISK2.DOC, LBRDISK2.NOT, LBRDISK2.SET, and LBRDSK22.NOT for details. This version of LBRDSK22 has been patched DSK22.COM CRC = 0F 6E --> FILE: LBRDSK22.NOT CRC = 2C EA --> FILE: LU300 .COM CRC = 4E 07 --> FILE: LU300 .DOC CRC = DA A3 --> FILE: SETRSX .COM CRC = 18 0D ---------------------> SUM OF CRCS = 53 EC $  %  &  '