IMD 1.16: 29/05/2007 12:07:41 FOGCPM.016 --FOGCPM016LU310 COM LU310 COM-01-08 88 LU300 DOC !"#$%&LU300 DOC'()*+,-./0123456LU300 DOC789-CPM016 DOCLU310 HLP:NULU151 COMx;<=>?@ABCDEFGHINULU15 DOCJKLMNOPQRSTUVWXYNULU15 DOCZ[\]^_`abcdefghiNULU15 DOCjklmnopqrstuvwxyNULU15 DOC7z{|}~NULU15 NOT NULU PATNULUTERMASMNULUFIX ASM NLUPATCHMACDEARC COMpDEARC DOCDEARC PQS%DEARC2 IQC'DEARC3 IQCThis is the disk name. Change to ; suit your terminal. Use This Format: ; ; ID byte,Number of Bytes,byte,byte,byte,byte,byte - 7 bytes total ; Do Not Change The ID Byte ; ORG PATCH5 DB 1,2,27,41,0,0,0 ; Background Mode ON DB 2,2,27,40,0,0,0 ; Background Mode OFF DB 3,3,27,71,56,0,0 ; Underline ON DB 4,3,27,71,48,0,0 ; Underline OFF DB 6,1,26,0,0,0,0 ; Clear Screen ; ORG PATCH6 DB 60 ; Number of lines/page for LST ; 0 to supress page formatting ; ; ; Number of Bytes,byte,byte,byte,byte,byte,byte - 6 bytes total ; ORG PATCH7 DB 0,0,0,0,0,0 ; Initialize Printer ; ; END X <\<#}o|g= <|g}o=<}|g}o܂<=(<}A8 ;b͡zPOXvzÕù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~# :" 2d +}|~#:G:dx."2d+w# +6# !6#@**|^+R2i2:*e!#"0!#"2!>ڋo&͕=|  v~2ʷ͹56!+W ?_!~7z?ͤ:>͛@w#2.ww#w#w#w*>?=͉;w#͉2> w#=ͤͲd 2l&0OxGͲg/ʃPxY͛.7:77!a{  ʥ ʥ0:?ŷO !y$ 7o&))T])))!y 2k_ :k! s! s! ! !`i*X}DLNRß! ! ͐ n}͐ n&@! A!! !$͐ ! ! !0͐͐!9%8s %3s %d/%c:%s.%s%s.%s(Yw~PRINTBDOJ !9DM!C`is#r͐n}4!E!͐6!9No!"%)1ISSPACTOUPPE !9DM͐6#6! ~#fo##!s#r͐|ʴ͐n}ʴ͐n&| ! ^#Vr+s͐s#r͐^#Vr+s͐͐n&s| ! ^#Vr+sr͐6! ^#V!9DM͚*͐! ͉-*P}*P}*P&|g}o}2P!D !t ! !!} !5! G|g}o| ! !"X"X"X}2X}2X!@"X͐ͯ}2X}Y !G"X>?2X!! G}2X!G}2X`i6#6͐͐ڶ *X} `is#r͐! (| ! ~#fo͐)~#fon}- ! ~#fo͐)~#foO++| ! ~#fo͐)~#fo#n}2X*X}AN DN NN RN Ef O} U} Bʀ Cʲ Lʸ X H Û *Xͅ!|f ! 5Û 7 |q Û *X}R} }$ *X|ʘ *X! 5Û *X&! 5>?2X ͐ 7 | Û  >2X + *X}A B D9 EU Nq Oʍ Uʩ ! ~#fo͐)~#foͦ ! ~#fo͐)~#fo ! ~#fo͐)~#fo  ! ~#fo͐)~#fo ! ~#fo͐)~#fo\ ! ~#fo͐)~#fo ! ~#fo͐)~#fo͓ ͐+| ! 5! ~#fo͐)~#fo>?2X `i^#Vr+s ͐ !G+! 5*X&!G*X&! G͖1!9Copyright (c) 1983, 1985 by Gary P. Novosielski85-01-01Library Utility Ver:%d.%02d %s %s Requires CP/M 2.0 or betterREAD ONLY--Too late. Buffer is %d sectors. Operator -%c not valid Operator expected. Highest memory used: %04x *X}E !*X}Z !i 5!! !No library open now--LIBRARY........͖*X} *X0H#| !XTI3H! !X! 5>2X%s: %s Old library: %s closed. !9DM͐ ͐k |#͐! ͠ |1͐! ͐!X*O͐!.͠ |_!(!X@O!!X[I"X#|ʈ!X!-5!X;I"X#|!X!B!5!X!l6+|™*X|™͐TI3H!o >2X*X*X*Xͅ!|!w !5 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*X|͐!5Ú͐k |! 6#6! ^#Vr+s͐`i!#|!`iI|`iͦÚ͐2|<͐!5Ú͐!5!͐[I"X#|ʆ!*X *Xs#r*X-J#|”]!*X͊JÚ*X͡J*X*XJs#r!"X!!*X-J*X~#fo*X*X'#|*X͊J]!Ú͐*X#Ͳ*X6*X*XH5s#r*X6!!*XJ*X͔+*X*X~#fos#r*X*X~#fos#r*X*X~#fo"X*X+"X*X͊J!9Ignoring: %s--Directory Full .LBRIgnoring: %s--Already in library Adding: %s !9DM`i!V͐+6+|.͐|.͐|9!Y5M͐"X*X!w5!9%dBad buffer size: Not 1..255. Buffer will be %d sectors. !9DM͐*`i K!$ s`in!% s! n} ! n} ͐*)!% n}!% n&+!G!% s͐ ! G!% n&!G!$ n&! G!&9!9DM`i6͐! Ͳ*X "X*X*X! s#r! ^#Vr+szʡ`i*X|”!&é*X "Xk!&é!9!9DM͐*`i K! ͐(! (K!$9!9DM`i6 #6`i^#Vr+szM͐n͐ nѯgW! s#rz4͐ n}?4͐S! ^#Vr+s! ^#Vr+s!S!9!9DM!`is#r! ! !͐:+6++|ʟ͐:!5À͐:k |ʾ͐:!5À!* 6! !+ Ͳ!* ! p)! !+ Ͳ!* ! p)! 2}! n}.0!! ͐5À! 2}U!! ͐5À! *X#Ͳ*X͔+! ! !5!69Can't change name; %s %s in library. %r=%sForm = doesn't fit %s Ambiguous input: %s alreadynot%s now known as %s !9DM͐2}2͐!5Ð͐k |u! 6! n&͐`iM##|r`i ! 6FÐ͐!5*X6*X͔+!9Can't delete %s; not in library Deleting: %s !9DM͐2}͐!_5V͐k |2! 6! n&͐`iM##|/`i! 6V͐!5!͐"X#|ʂ*Xͅ!|ʂ͐!!5*X͊JV*X͊J!"X͐;I"X#|!!*X-J#|!*X ~#fo*X-J#|*X~#fo*X*X'#|*X0H#|]!*X͊JV*X*X~#foa5|V*X~#fo|V͐!!5V!9Can't extract %s; not in library Extracting: %s File %s is protected CRC error. %s file questionable. !9DM͖*X͡J! s#r*XJ!X!35*X"X*X~#fo! s#r!V5! s#r! s#r*X*X! s#r! ^#Vr+sz*X "Xn}*X`ip)*X~#fo*X~#fo*X ~#fo`i!f5! ^#Vr+s! ~#fo*X~#fos#r! ^#Vr+sD*X*X͐! ^#Vr+s͐͐͐͐!y5!9! ^#Vr+s*!9 Library: %s Name Index Size CRC DIRECTORY %4u %-8s %5u %4u %04x Active sectors %12u Unused %12u Total %12u Active entries: %u, Deleted: %u, Free: %u, Total: %u. !9DM͐!5Ignoring: %s !9DM!! s#r*X|B*X?͜'"X#|B!"X&õ͐͐~#fo^!&õ! ^#Vr+s͐~#fo͜'`is#rz!&õ*X|Ÿ͐"X͐͐s#r!&õ!9!9DM!}ͼ!!*X-J#|:!*X*XyK+|:!k*X|:*X ~#fo|:*X~#fo|B!x *X~#foҭ*X~#fok}rͼ*X~#fo+*X*XyK*X~#fo+ʭ! *X~#fo`is#rz͐*Xs#r*X~#fok*X5H5!5*X͡J"X !*X~#fok"X"X*X"X*Xn}]*X|]*X+"X*X "X7>2X!9 no directorya bad directorya directory CRC error! Seems to have ! a directory too big for memory!9DM͐|*X͊J!X,L!_ ͐*X-*X! s#r !͐####`is#r?"X"X*X ?}x!l5!V*X6!*X#Ͳ*X͐s#r*X͔+*X*X~#fos#r*X*X~#fos#r*X *Xss#6!!*XJ*X+"X`is#r*X"X`i^#Vr+sz2*X "X6*X~#fo"X͖!X!5!V!9Illegal sizeToo many. Try again. .Created %s with *X}K !!*XJ*X*Xs#r*X~#fok*X5H5s#r!!*X-J#|6 *X~#fo*X*XVL*X~#foF ]!!X!M >2X Error updating directory: %s!9DM͐!*͠ |ͣœ ͐!?͠ |ͣ!9DM͐n} ! n! ^#Vr+sn} !è !!9DM͐ ͐͐͐!5*X&!G*X&! G!H!,L>2P͖1!R!!5!GA:$$$.SUB...ABORTEDTI3H!w!!5ERROR: %s. !9DM͐L`is#r͐#|͝¯!!!͐  M|g}o&!!9!9DM!!G!! G!$ s͐0`i K! G!( w#w͐(͐2{"`i͐(|<"!?"!G!% s!|m"!$ n&! G!"!( ^#Vr+s"!% ng ?!& s#r͐&`ins͐&͐.p)!$ n&! G!"!*9!9DM! ^#Vr+sz>#! ^#Vr+sn! nѯgW|g}o! ^#Vr+sn! nѯgW|g}o`is#rz;#͐D#"!D#!9!9DM!y$`is#r!{$! s#r!3 n}ʖ#͐*Xs#r͐*X*Xs#r!! G!) s͐1! K! G! n!* s! 6͐^#Vr+szP$! ͐^#V! r+s|M$! ! ͐~#fo(K!* n! s! ͐/p)!) n&! G!p$#͐6#6!) n&! G!p$!+9!J9DM`i!* s#r!X!H'5*X! s#r!X͐**O!! *X*XF6*X͔+"X!['!( s#r,L͐( !"X*X"X!͐*[I! s#r! 6#6! 6#6͐͐ҿ&͐͐ʅ%!͐! s#r͐-J!!, ͐yK͐!, ! k! s#r͐n}ʴ%ÿ&͐! p)! !h'5! *X "X͐(K*X *XJs#r!͐ ~#fo͐-J!"X͐~#fo͐*X'#|Q&TI3H *X͐~#foa5|ʋ&͐~#fo|ʋ&! !u' ͐~#fo|±&*X*XH5s#r! ^#Vr+s'%*X͔+͖*X0H#|&!XTI3H!' {2X{2X͐L͐*p)͐͊J͐*,L͐*͐(M͐* !'5!9 Reorganizing: %s WORK-LBR.$$$Copying: %s CRC error in %s.%s: %sReorganized. !9DM͐G`is#rz'!͐͐J͐'!9!9DM͐*Xj(*X*X͐yK*X0(*X*X͐VL*X5(!*X*X?*X5"X! ~#fo*Xs#r'͐*X͐yK͐ª(͐*X͐VL͐ʯ(!*X͐k*X5"X͐!9DM*P}+)!GA!! G*X&*X}?͝)!M))!a)!b)!5͐͐!*X͡7*Enter -H for help. %s-%c %d/%c:>!9DM! 6! n&|ҿ)! n&`i! ~#fo! 4n&n&|g}os~)! s! s! s! ! !*`i+6*X}DU*LU*NU*RU**! ! ͐ n}%*͐ n&@1*!GA!! G!*͕͐8o*! ! !*͕͐8͐v*!9%8s %3s %d/%c:%s.%s%s.%s!9DM!*`is#r͐n}*!*5!G͐6!9No!!9DM͐6#6! ~#fo##!+s#r͐|ʆ+͐n}ʆ+͐n&]O|r+! ^#Vr+s͐s#r͐^#Vr+s͐͐n&pOs]O|r+! ^#Vr+sD+͐6! ^#Vr+s+͐~#fo+!9DM*X͐s#rs#r*X͐s#rs#r>2X!B,5!e,5!x,5!,5!,5!,5!,5!,5!-5!-5!+-5!G-5!Q-5 Operator Operand(s) expected -A Add u/d:file -B Buffer size sectors -C Close library -D Delete member -E Extract u/d:member -L List directory -N Name change newname=oldmember -O Open u/d:library -R Reorganize -U User/Drive default u/d: -X eXit [User number (u/) and drive letter (d:) are optional] !9DM*s*s*s! ~#fo͐ ~#fo)* s#r*6**s#r! 6#6`i6#6͐͐ ~#fo71w}.71! ~#fo͐)~#fon}ʱ/ 1! ~#fo͐)~#fo#n}g./*! ~#fo͐)~#fo#͹8#|.!!@18!! ~#fo͐)~#fo#8!!L18́M*4*6!N1! ~#fo͐)~#fo͂O|/*n&|g}oso0*4! ~#fo͐)~#fo#* s#r! ~#fo͐)~#fo#n}ʗ/! ~#fo͐)!Z1s#r! ~#fo͐)* s#rñ/*n&|g}os! ~#fo͐)~#fo#n}/!!g18́M! ~#fo͐)~#fo#,L*! ~#fo͐)~#fo#]9#|[0!!18!! ~#fo͐)~#fo#8!!18́M*4*4w}0͐! s#r͐͐ ~#fo0! ~#fo͐)! ~#fo͐#)~#fos#r! ^#Vr+sÄ0͐ ^#Vr+s`i^#Vr+s* ^#Vr+s1͐ ͐s#r! ~#fo͐ ~#fo)w#w+1! ^#Vr+s`i^#Vr+s-!9Can't open 9>":>:>0:>:>C:>:>V:Á:! n&3! n&!G! n&!G! n} n:! !G! n&!G͐##^#Vr+s|:!͐͐~#foVL|ʿ:!͐##6#6͐͐s#r͐^#Vr+s! ns&!9DM͐;!6<͐##~#fo|2;!6<͐##~#fo`is#r͐͐͐~#foVL͐;!6<͐+?`is#r͐##~#fo|! ^#Vr+s! 4͐n}0X>! 4͐n&͞O}u>! Fx>!! s#r! ^#Vr+sn`is{.>! F! s#r! 4! ^#Vr+sn`is`in&pO}D>U(?X1?O:?Cʀ?Sʱ?vA͐~#fo|(?! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 @?! 6@?! 6! ~#fo! n&! ^#Vr+s~#fo! %Fѯgs#r)@! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+s)@! n}?! 6#6! ^#Vr+s~#fo! s#r͐n})@͐|)@! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s?͐6! ! s#r! n}ʇ@͐n}-‡@͐͐! ^#Vr+sn&!x@!9~#fo#|‡@!A! n}@! ^#Vr+s!|@͐͐! n}@!0@! !@!9~#fo#|@!AÑ@͐n}'A͐͐! ^#Vr+sn&!A!9~#fo#|$A!A@! n}sA! ^#Vr+s!|sA͐͐! !aA!9~#fo#|pA!A1AâA͐͐`in&!A!9~#fo#|¢A!AA͐͐`in&!A!9~#fo#|A!A=!9!9DM! ^#Vr+s~#fo! s#r͐! s#r! w#w! $G! s{ʤE͐n}ʤE! ^#Vr+s! n}%nB! n͐n}`B͐ ëE! ^#Vr+sB! 6 `is! s͐n}*—B`i4! ^#Vr+s͐n&͞O}ʴB! F÷B!! s! ^#Vr+sn&pO}XBOQCDZCUʅCRDS!DCEVE! 6! n&|NC! $G}0NC͐#n&pO}XNC! ~#fo##s#r! n&++sÅC! 6ÅC! $G}-…C! ~5o}ʅC! 4! ^#Vr+s! w#w! n&! $G&dG#|³C͐ ëE! n&! ^#Vr+sn&dG! s{D! ~5o}D͐ ! nѯg?! nѯg! s#róC! ^#Vr+s]E! 4! $G}6D͐ ëE͐ ~#fo! s#r! ~5o}D͐n! s{D! n}ʀD! n͐n}͝ÎD! n&]O&|D! ~#fo! nѯgs#r! ~#fo! nѯgs#rD`in}D! ^#Vr+s! ns! ^#Vr+sFD`in}E! ^#Vr+s͐6! ^#Vr+sB`in}HE! ^#Vr+s~#fo͐ns! ^#Vr+s! ^#Vr+sB͐ ëE`in}¡E! ^#Vr+s~#fo! n}ʍE͐ ÑE͐ s#r! ^#Vr+sB͐ ëE!9!9DM̓`i̓(K̓̓̓ (K̓̓ `i(K!9!9DM͐^#Vr+s͐s!9DM͐͐ sF͐^#Vr+s͐`F͐0hF͐7s!&þF͐ ͐͐ ͉͐%F`is͐ ͐͐ )͐%F`in&#&þF!9!9DM`iw#w͐~#fon&͞O}G͐ ?͐^#Vr+snѯg`is#rF͐G!9!9DM͐~#fon`is]O|SG͐^#Vr+s,G`in&[G!9!9DM! n&pO! sͮO|ʜG! n&sG! n&͞O}ʿG! n&sG!! n! n&+G!G! n&7:KO*M *_%H+*a|/g}/o#9)H%H#"_z{# =H>)GH~#fo}HgH~HHHHHHHHH III/IFIReading unwritten dataNot enough disk spaceCan't close extentSeek to unwritten extentDisk directory fullSeek past end of disk007008009Too many files openFile not found012Can't create fileSeek past record 65536Unknown error::o&7,jI> 2c*K/:l2> ʵI:c):MʦI=ʦI=> µI:lw:co&552:7*K,L:l2\5I> 2:!*K[I7*K*M J!ɾJ#~#J*KJJ7:K,>CJ2:͂J*M:OvJ=YJvJ:K)~2#5͂J*M!s#r!^#V )қJ>2:6!7:K,ҵJ>2::K)~2#!~#fo5 ,J>2:!~#fo7*M*K:OOzKq#K7*M*K/:lo&7*O|DM*M*KWK>&Lz>&Lz2:K,"e!"g*O|*g¾K5*M*e!ѷK2:KK!ïK*gïK*O+"O*M"M*g#"g*e! N#Fp+qx¤K##6>2:éK2: !\/:l25!OL> 2:+7:K)V>Lz> Lz2:K,"e!"g*O|›L*g5*M"M*e"*gL2:ÌL#"g*O+"O*e! N#Fp+qxL##6>2:ÉL2: )M>2: , n&7*K!LM/:l2*M!\M/LM5!EM> 2:+Q:zJEËC–EQyQxQRQ* 7*M^#V#zŒMx2M+V+^+›M*KM:Mo&9! !j96  #F#xM~#M7*K!9/:l2 6C#6O#6M5"N*M|8NM!\&JN!\&*O|JN!O!l&!9~#fozN> +N#~hN##\NxSڬNN NEXECL: Command line overflow $!pN!*w#¸N*:1N*N!N!a{ ѷ!bkO{ozg7*K*M~#4O*K7*M*K~#JO+w#QO*K!9~! -!9~o&a{_o7*K*M›O#ŒO!ɖg!9~!0:,!9~!A[,DISTRIBUTION OBJECT CODE LU V3 R1 P0 (C) 1985 GPN been an official plug.) v@pᗫ where m is the current operator in effect 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 entered it will be interpreted 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 use these defaults. The defaults can be changed at any time with the -u operator, discussed below. Page 4 of 14 83-08-16 Documentation for LU.COM and LRUN.COM When the program first starts up, the prompt begins with "-?", which means no operator is currently in effect. In this case, the only valid input is an operator. Any operand will be rejected. Page 5 of 14 83-08-16 Documentation for LU.COM and LRUN.COM SUMMARY OF OPERATORS In this discussion, the "open library" refers to the library name 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 causes 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 filetype 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 for 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 scope 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 the | 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. Con versely, setting the | buffer to a value less than 64 will increase the maximum | 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 library. 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 need 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. Before 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 causes 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 are obviously in whichever area contains the open library. -e extract files from library. -e causes subsequent operands to be treated as the names of members in the open Page 6 of 14 83-08-16 Documentation for LU.COM and LRUN.COM 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 member 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. -l 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 | internally 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 displayed, 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, 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 | member 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.TYP 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 do 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. 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 the wildcard matching of the -a (add) operator. This prevents libraries from being accidentally added to other libraries, or to themselves; a situation not unlike trying to drive a truck up its own Page 7 of 14 83-08-16 Documentation for LU.COM and LRUN.COM 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 reorganize 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. The 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 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 the 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 library 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 result 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 enough 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 operand 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 is 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. 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 to some unfortunate assumptions in the C run-time package, the default drive cannot be safely changed while directed I/O files are open, and the BDOS gets confused by the 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 Page 8 of 14 83-08-16 Documentation for LU.COM and LRUN.COM cause immediate 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 number 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. 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 the 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 like 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 the 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 response before the size is calculated. Therefore just enter the maximum number of member files you want the library to be capable of holding. The maximum number of member files is also constrained by the amount of available disk 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 of 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. PARAMETER DRIVEN METHOD All of the information needed for a maintenance run may be specified on the command line. The operators and operands are 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: Page 9 of 14 83-08-16 Documentation for LU.COM and LRUN.COM LU [ [ ...]] [ [ ...]... where square brackets indicate optional parameters, and: is any operator. is any operand. ... indicates that the preceding parameter may occur multiple times. Any 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 the 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 not 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 feature 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 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 checked when | the library is opened. A message warning of a CRC error will | be displayed at that time. Libraries modified by LU versions | prior to 2.20 have no directory CRC word, and the CRC check | will usually be bypassed. If a warning does occur, 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 member 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 10 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 by a "<" character and no intervening blank. Example: LU ". This applies to parameter driven as well as interactive (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 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, except 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 +RECORD.DOC prompt returns, do not hit RETURN. Instead, abort the program with Control-C. This will cancel 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 that 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 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 slightly higher if interactive operation was used, since a console buffer must be allocated. It does not include the stack, which grows down from high memory, and is allowed about a thousand bytes of space for subroutine parameters and temporary work areas. Page 12 of 14 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 keep 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 called 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 [-] [] 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 leave 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, 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 appropriate 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 assumed. 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 .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 going on. (Thanks to Ron Fowler for supplying the code which makes this possible.) LRUN EXAMPLES LRUN ED FOO.BAR the 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. Page 13 of 14 83-08-16 Documentation for LU.COM and LRUN.COM LRUN -C:SPECIAL LU -O COMMAND -A A:*.COM the 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 on 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. Compare 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 memory 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 weekends. Gary P. Novosielski Page 14 of 14 83-08-16 -> FOR NULU patch, hl for bc, de modified. .crc: ;push d; changes to alter i/o reg bc/hl. bc in PASCLIB xra l; c/l mov d,a rrc ! rrc ! rrc ! rrc ani 0fh ! xra d ! mov e,a rrc ! rrc ! rrc mov d,a ani 1fh ! xra h ! mov l,a; b/h, c/l mov a,d ! ani 0e0h xra e ! mov h,a; b/h mov a,d rrc ani 0f0h ! xra l ! mov l,a; c/l ; pop d; <-- REMOVED TO FIT IN NULU space. ret ; end e#squeezing to NULU as soon as I get a good algo- ithm for it written in assembly language. If you have one you want to share,  BRIEF SUMMARY OF LU310 OPERATORS -a add files to library. -b buffer size set. Normally, need never be used. -c close the open library. Normally need never be entered. -d delete files from library. -e extract file(s) from library. -h help table of these commands -l list directory of files. -n name a member. Renames, example: newname.typ=oldname.typ -o open a library. -r reorganize library, eliminate previously deleted files. -u user/drive default. -x eXit program. CR also exits the program8!00' X        Wwռ6wG'Ww6c;`08oHLk腔5k6KD9LkYL`np܌04dk6O?//5`@#5xkL5x`C$h04#'/6-܌LC$L`܌C'67`8&$mtcCX%6|||6ǘ?@9$- $`6{ߵ jG$8p dx3â NULU 1.51 (01/09/86) Copyright (C) 1984, 1985 by Martin Murray!:72O<`Ͱ4 âPPF>2>G3:8=0ډm͔Ï!"1!9"1!9"*e&###:fO *<"8*hDM) "<22m332r2(3 ͔"8=}0 -͔m͔">_Tm͔*"!"ͯ+ -Y *LBR -O<  WORK-LBR.$$$ NCF NOF LBR )ibrary lL membersNULU/s oryDiskUnDfile erroreleteress RETURN CRCreadunwritten datalRe runchKBrief entriesAbandonConsole put to be ing enameRWildcard specsqueezeFilesweep Extract drive/user to: ...ReplacedirectAddtoggleClose themodeGetHelpListOpen aPrintStrsearch/AddDrive/User changeViewopenExit inputoutputREADYNextPreviousCloseFindLog newMass operationsOpen newPrintTagUntagViewrExit command modeHelp! FJKMNSUVdktdisk fullcan't make filemedia changeddisk i/odisk r/ofile r/obad drivepassword existsambiguityfile table fullchecksumno memoryuser cancelsyntaxfile not foundincompatible cp/m versionbad decode table͔4!͓TYPE -H FOR HELP  * &j;e9*<"RN8 :8= ^>V l21!N#W>ͼ: 6!!"6>2yʈ:2 ÈABORTEDï2*6>!  2j%y$>2j%G ͪ4ð4 ͔>ë5:<2Clos͑Ͷ4\$:Ͷ>\>g222ê4 Ͷ4 changes?h4͡4͑2<~-#~GͶxN*U6ml! ͚͡4inreceived from :.͗>ON)ʨ:e2,2e*4m ã:͗+mTo! ͡4outsent to F+:.͗2O9ͪ4>KN) v2~5mͧ4ö4,}*6\, ͡4Press ^C to stopF+t9ȗ,:͗+X*h,1/Xͤ9.,w͡4Deleting: :.G3́.>P͛13,3*6Ϳ *6) ʣ úC% N8 ͡4Undeleting%" ͡4 %.&*%*%*/&.C%"%"% Ͷ4 can't be undeleted--name existsU&7÷~(#>):< +6>2:2> 92 2 g Tj !=2 º ͪ4>2  Ͷ4 |  2:\2:=Ī4:0ͪ4221em:À>?Ͷ!͚92<2ɗ2B *<;<= *6Ϳ: >:͟7 ͊7:= !<*6>͛ *6" *U" !"U:0!" >O2 :͗+Jo7:͗+y$y;`i#"" N8 e<% s#r#6 #%:B=N7s#r#å oN8 7!"* ͪ4! y;;< " g|<") 2[ {<": ͪ4!Ͷ4.>͇5!|&͏.."6!R I6>  7>k2X Ͷ4 : 4O6ABCDEFLMOPQRTUVWXYZ? ] y͆!Ú9* # * +} * Õ g Ͷ4?h4 *) { %͡4Deleting: .&:>O >> >U&Ͷ4    Ͷ4ind what? s  O >*w#w#wC% %}BK;<, * Ͷ4Log: g "6g >*s͡4, , Print, , or View (DEPQV) Enter one: 42 O6EQDPV y͆ ͡4Destination? \[-  ͭ.>::#6} >D ͼ |&."6  : D{  Ͷ4 name: g "6kg  Ͷ4  ͱ Ͷ4  ;{ ͫ*c >*"22s Ͷ4 Tagged = >k͆Ë ͫ ʔ O<> e  ͡4Old:  =<Oͼ:"6͡4New: K N g o7!"6!"U >!͖564O6LOXYZ?y?` a ͽ Menu>52x 2$>2d !~> 2x ^No. ;^No open. Jͧ4ö4+j; !"2!#";<ڑgk<>ʨ#N#F<* g##~"i #k<*>::*6"*<"6*Ù6!"6B*U>"#:6#"U,m>"*6Ϳ2?2=2E!\>,8) C% >ʁ>͗+',,\3!=33ͭ.́.<:>ON)2E `iÎ%%(&>a(ž; 3;!#"> ͇5Ͷ4--> found;Ð!"͡4Now searching: O9e9TʬBO: 2y2 6':;BCFHKLXY>:y6"JZ:e:m m4 CmlF+͹2:.GG31Insert disk containx͗͡4 and pC]O9e9!W>"6"U>¾!J~6>¬͡4-:: 6ABCDEFGHKLNOPQRSTUVWXY<>?O!ͥ7͘7͓͉͆9z>:4Ͷ4:>>a*6:eG:͗+G&H6[7 !!̀6"U*62>͗+ʦt9ʑfʑ!+"z}l C5!"z!"zͣ:,2e'd>ͫ5O*6> ڷw# ²,2͋!33ͭ.!W>ͭ.> 6;76 #!U=͘7>O2 !mT5}"z:e͗+*:2i~5͒ERROR ͧ4>v>Ç5>&H%'2e9͒closed. 2~5͡4CONOUT file ö4!=:,ͭ.\[-og2G'3OG3;<1> y$`i""N8% |&#:N87g,!:,2=ͭ.!=͘7oG3F+͛1>5!ͭ. will be ked to >W4>5ͪ42ʬ!"%"r"%!oG3)2"+!"I"&&!="t9ʕ+"*&&}O<Ͷ4 -Continue?h4ʕ!}+"+͡4 Copying: !#"U&#!:"$ͼ:͓.% s#r###"ͨ&+>+>G3ͺ+`}*%"%*j"jʦ>MʦM•*,DM!"r:,G3>ͱ*ʕ*,",I8 :,G3'2*!O9Ͷ4 abortedreopenold>K2 *6!"6k"6m7*j}*,DM*r:,G3>ͱ*ʕ\:=G3͛1:,G3g,!>::#>.682͑Ͷ4 ked.m7÷!"jͪ4eT) +!<+*6\[-K !52>-2$>2!>?2ͧ4͔4Ͷ4 >5ö4l2 :.G32(321F+m2>͗+G>g,*<:,ͭ.o1Can't find ͑͡4Replace it and pCʑ1F+: 6KOXm͡4NO LIBRARY OPENmlF+! ͥ 2͑͘222 Ͷ4 open. (Buffer size: *,*,O<><Ͷ4 sectors)múU :>U !=> 6͓Ͱ4 not found. To make it, enter the number of to allow.!"͡4 Pnow to abort making the. Allow how many: ~~<~T#͓É!> ͖5ʑ52}>N ;<ڪ;<ҼDM!=o͇M Too many.2!<"*6>=:6#͌:"o5f5> 4o5f5͡4 ͧ42ʧ4O> >͇5#ͪ4>Ćy͆͆9͓#:2 :2ͪ4͓2>@mm͌:2|e<͘7o9*<@>ͫ5u*6̀66~ž:‹um*U6 :͗+mͪ4l*6) *<;<>>̀$K >Oà>Rà:>O mg,͘2͡4 is READ-ONLY. Modify anyway?h4g22 <2>S ͡4now O:2^>NÆͼ4FF:2: 6'":;BHIJLOUYZ<>ʋ>Í>?2 g,:,*<ͭ.> 6¨ > 6'":;ABCDEFGHJKLNOPQRSTUVWXYZ<>?*6Ϳ:22*6) ͢! >2:22?CmU:2*U>U=͘76,}"*6\, !I-͘7 w<2yOyO}o|g|g}!oi a_{zı9{z33:l,>͗+*,*,w*,O<K'H",ė+G3Z͔z   := G >G:cx2> 2<5&o:2͡4ERROR Ͷ4: }!Z:!]W!Oͥ7͓ê4unnamed!W>{ʍ)ʍʍʍw# p6y~<#O!ͥ7͓Õ͉ÕJ*: 6VPS<+4T`UC} O P)Pk#E N d] = W ) / E Z  ,}\,͔4\:.́.!=<:>ON)3!DMc'',,LUS"`i#>(<"))"Ͳ&<:>PN)>2< <",;<͞:!  :`i"!rs#rͶ'!ͥ MSe<>K͛1'>M 212l"n͡4Library: +͡4Name Index Size KiloBytes CRC2j%>!C%"<%% y¸͋>5͡4DIRECTORY >5xͪ4(&>P5͂>P5͂>P5:B=N7͂>P5>2<*&&=I6>0 7͓x"<*%?͋*%X͋p͋>5͡4Active sectors ͡4Unused ͡4Total <2j%>5G ͈Ó=> 2 72$:l,2՗C%<N8=[-2\BK.F+͡4Extracting...>͗+t9%<7͡4 %*/&͏.\͋Ͷ4 to ͨ&>7a(: ͗ '2RyN!=;6̓͗>&ʑa(S‘'ʑ:͗++*&&}O<>K \[-BK!=. '\͹2!=>ͭ.>K<:N)+ *!O9:<'4&*,>ͱ* 'C%͡4Deleting...%ʼ%͡4 .&y =U& >U&*%+"E >2< *,"; !; w3A ͡4Active entries: *%Ͷ4, Deleted: *%Ͷ4, Free: *&Ͷ4, Total: *%Ͷ4.ɗ2<>ON)!"&"&"&}#",J*ʁ!~’! #~ ’! #|<A<’!{<{<"T!'))Ͳ&y!"%"a!!j;"!e9<:*<>N):.2,>;;k *, ~͊& yi!:l,͙!>M'ʕ!ʕ!'>dO9'C%t9%ʼx5̔4̪4%(&c'å!2A",2#<=,"+t9q#+"H$2j%<$><$,q#,=;=m$#"!I->.:#m$#"!!"W$#ͪ4C%q"|<"W$V$q">Oʠ"Rʠ".&Ͷ4 already exists--not added.!:A"R "d$Ͷ4 not in library--not replaced!=3"d$Ͷ4: Cannot add an 8 megabyte file!!"#V$>U&z$%"%"#*#O<"#e#>#Ͷ4No room for: d$<[#*&}>fG#Ͷ4No directory space for: #*H$"#*%O<#e#V$>U&!2# !>2j%U2$V$ʘ#Ͷ4Replacing: ç#Ͷ4Adding: "*$U&!=͘7;d$ q#p###"$4$=)2*,DM!"6$>+2$:.G3ͺ+:,G3$($+"<*#>ͱ**6$"6$($#!>U&q#pz$%%;¤%!#"%!"%ò%!#"%!"%l%s#r#l%"%DM"%y>U!}+"%!^#V#"%!O<*,DM"&|&"/&<~ k2<~!&n&<##d&^#Vr+swÊ&+> <*,!&ʙ&<##Ï&4Ÿ!Aj; >9~ʼ&ʾ7#&y&~&&# &<<*+*B+w*D++}K'*,#",g,͛1'USɗ%'>%'>%'<<;'<4'K'g,1ȗ2e,K,*,7<*,DMF/g,*,͸,`i",>a('Gyʀ'Ͷ4---> !=͓x5:o'>5͡4^C=abort,^X=next file,L=next line,=next page>5>2(ͪ4x' (a('_(x5'4<͡4press RETURN...4>N͉ t9<>=2(x53(:o2(446 L3(!H(Ú9R(W(<\(R(>(>(>N2((2(+>ͺ:l,2(!("/"(!"(*<"(*, "(>(U/"(®(t(*,O<",*tڨ(!/"(>2(!;<~#"(:l,2)>͗+J**, "(*+*B+"(>͗+(S>*,DM8)/)**5)!)#",*,;<>RS*, ~2)")`i>(<> <"):l,͗+*,:gG~})#p)>F:g<͗+<:*g98PYO<گ)><> <³)>ڳ)ʳ)>MDMO<)BKe<*,s#r`i",!:)=$:)[-2,G3:<>,.K,9,,*,N8g,!$9:l,͗+>2e,*,DM*,!",J*<F*{><<2*]*"*",`i",*,}DM*,*,O<><>M;ҙ*2!3͋1,,*,DM*,O<",Ҿ*"*`i",BK*,*,g,*2!3{1*g,͸,:<,*<*,2g,!",",3͋12g,:,́.<ͬ<*,*,"B+*,O<"D+ͼ<33:l,2v+ :gj+͗+G3ù2y͗+W+*h,~W+! ~###~1)2wwW+:e,K,2l,,,ȷ:,G3:gO*<9,N8O ,N8*h,\$͋9<*,DM!",*,:",ͼ<*,*,*,O|,O:g,>Bɷ!+ "b,!++ ",v<"h,8 ",2!͞:R1<#22!͞:j1<2#!"-*-#"-< -[-!I-ͭ."-!I-[-G3!1O+},-2-y!`O #[-332.<2'32.>::~ʰ-͟7 # 6> 2<5ʙ-|™-}*kҙ-2.6ʯ-@O:j".+q# -*?-.- ڴ-3;-ô-xʴ- y-xʴ--w#.x >?-> H99>?:.>2<+:#>>;7#Pd.12Ͱ4File exists-delete it?h4>P͛12U2KU.2w.)2US>M<2!=ͭ.ɗÕ.> !=ͭ.>::#6ͼ 2<2@w#i&I6;76:#:>.:# .ͺ:<~> 2-/#~?/?/>2-/~=/#PY:>< #~?A/6/`i>(t×/ʹ/=2/>////>==2/:/2/O! "/O>/70O>=2/yO! 0##^#Vz/y2/z&0{/*/O<>70>J<2@2T0@ͳ0Ͷ4Drive : Total *I=T]*E=#zW{_u0+j0:B=ʆ0)=~0Ͷ4k, Used O<Ͷ4k, Free Ͷ4k<21:8=00*<*<22=_.͔D^#V2<0`Z30><<͔*E=#1W+}11z 1`i:B=-1)=(1<0ͼ<͔=1@=::8=1ȗ+w+w<͔ʼe1>Z3<͔ʼZ3<"͔ʼOZ3<!͔ʼOZ3S͔<Z3*< 2ͼ<"<Ô#͔! |<!!s#r#6>332(3:I3< ͔2I3<ͼ<2I3_ ÔG:8=0yu3xn3u3|y| d4:|<"A4{<")4{<"04{<"3|Ÿ3}=!I<Ҵ3DM)ң3`i÷34+}¾3#"3# 43!O<33 43!O<33*34þ3|g}o#4:g4A4!4;4;4J4 :f4-7J4͋9YͶ4No>N>5>2ͪ4ö4ͪ4ͼ4 o9ö4͓͓43;>́:42S=.:C5~>5~͆>5#4> 4 ͆S5:2:2::2O:<͆9É5*5++"5ͫ5##"5qܨ<#6+ ͔^#r{ͬ<=I6Ó՗2F6͌:A62ͼ<"k6:<O͜;}Q6{0:j6!w#"k66~ͮ9#v6+Ͷ6"6W>~ʧ6ʥ6#ͫ6ʎ6Ͷ6y~6 #ͫ6¶6Z:;79:3;287̈́<>U~3;G3;#<(<)=U7"f7!N#F# ͌:{7 bk ͑7ü:͘7 ͌:ò:͌:ü:.:ü:|< xʼ7:#zª7<:`:88*Mm8*8*hOTDM#"8*8 w#s#r8e<"<#9ʼs#rÐ828"88*8;<><#|<8#98"8v<>8O<8"ÿ8ê8!}!#~#8~ 9;<#8++~<2$9~>269bk",9<>=2$9!##",9>v<<<<:*g9< O<*g9O<`9"g9<>M!"g9>Æ>́:>N:> Æͼ<͙<~w#_N::ͼ<_ 9 9 9:9=ü9 9 9>9><29ÔW:d 9999 y:2:͙<6#;;O~*:<#:<#2:yͬ<*՗2;>)ܔ;yOxG҈;ܔ;=v;:;><2;?y";}|;3333x;՗yOxG{_zWñ;z;}o|g!";é;*;<`i NULU.DOC Documentation for NULU.COM as of 11/01/85 Version 1.5 NULU.COM and NULU.DOC are both Copyright 1984 and 1985, by Martin Murray, P.O. Box 35972, Dallas, TX 75235. Both may be used freely for non-commercial purposes, but neither may be sold, included in a package for sale, or used as an incentive to buy, by any person, organization or corporation without prior arrangement with the copyright holder, Martin Murray. Furthermore, Martin Murray will bear no responsibility for losses resulting from the use or inability to use this program. NULU.COM may not be distributed without NULU.DOC, nor may the copyright messages be removed from either file nor caused to not be displayed. ACKNOWLEDGEMENTS This program would not have been possible were it not for the elegant work of Gary P. Novosielski and those others working with the LU library structure. Additionally, I would like to thank the people who have supported the development of NULU in a variety of ways, from suggestions to financial contributions. All comments (good, bad and disastrous) are welcome. Special thanks to Keith W. Antcliff of Mead, Washington for his development of NULUTERM.ASM, a patcher overlay, and to Ron Fowler of Nightowl Software for his gracious permission to include MLOAD23.COM in the NULU release library. Honors for Courage go to Dennis Recla, Norm Gregory, and Jim Switz for having the guts to "risk everything" by testing NULU and offering suggestions and pointing out bugs. INTRODUCTION NULU is a complete replacement for LU and LSWEEP. Weighing in at 15k, it includes all features of both programs and then some. It features: Two operation modes with a full menu for each LU style CRC support and verification Viewing and printing of member files and disk files, unsqueezing when necessary Extraction of member files with an option to unsqueeze where appropriate Bigger libraries, up to 800 members or more depending on available memory Automatic member sorting, all members kept sorted at all times Faster reorganization Enhanced error handling Swapped disk handling Automatic self-verification Access to deleted members Access to read/only libraries Wildcard library processing Optional read/only patch CP/M Plus support General compatibility with LU and NSWEEP syntax Numerous user patches DIFFERENCES BETWEEN NULU 1.5 AND NULU 1.1 NULU 1.5 incorporates several significant changes, not least of which are the bug fixes. Version 1.1 had several bugs, including occasional improper extraction of large files, and clobbering of bytes in directory entry member names. All known bugs have been addressed as of the new release. (Actually, the extraction "bug" was due to one of the bugs in CP/M that effect unusual combinations of direct and sequential file access. If you watch carefully, you will see BDOS re-allocate used blocks of the disk, in descending order, no less!) If you attempt to make changes to a library file that is logically read/only, NULU will display the message: Library is READ-ONLY. Modify anyway? (y/n) and will wait for you to say yes or no. If you say no, then the operation you were attempting will be cancelled. If you say yes, you will be able to make changes and when you close the library, the file will be read/only once again. There have been other, more visible changes. The disk interface has been expanded so that several commands that used to apply only to library member files, can now also work on disk files. These commands include, -D, -P, -V and a new command, -S, which performs a limited string search. For example, to delete a library member the command is still: -d filespec but you can also delete disk files with: -d du:filespec where the drive/user combination informs NULU that you are talking about disk files instead of library members. (Note that the -Z command has been re-assigned.) This syntax applies to the other commands listed above, as well. Additionally, I have made an effort to bring NULU 1.5 further in line with LU syntax and operation, especially LU310.COM. Therefore, in addition to other changes, the user will find that the -M command for the NULU Command Menu has been changed to -H for Help. NULU To the best of my knowledge, NULU will run on any system running CP/M 2.x or higher, however it has only been tested by me on the Osborne 1 and the Osborne Executive computers. It is written in 8080 compatible, Z80 assembly language. A complete discussion of the nature and advantages of library files is beyond the scope of my endurance, however a short recap is in order. A library file is a single CP/M file which maintains 1 or more smaller files as its members. Each file is written into the library and recorded in the library directory. After that, it may be accessed for viewing, printing, or execution, or may be extracted from the library to assume the status of a stand-alone file once again. The reasons for doing this are many. For one, under CP/M each file occupies a minimum amount of disk space. This amount can range from 1k to 16k, depending on the system. Even though a file may only be 1 byte in length, it will still occupy the minimum required amount; the rest of the space is wasted. Putting these files in a library minimizes the possible waste to 127 bytes. Each file also occupies a directory entry. On most floppy disk systems, the maximum number of file entries per disk is 64. By including a file in a library the directory space it used to occupy is freed for another file. Additionally, using library files can simplify the process of categorization by subsuming several files of similar types or subjects into one file. However, there are also dangers associated with using libraries. The main one is that if a library file is lost or damaged, all of the member files are lost as well. The solution to this problem can be summed up in one word: BACKUP. NULU probably isn't perfect, and we all know that disk systems aren't, so backup your important libraries, please. I don't want to hear any sad stories. Almost as important as backing up libraries is the use of discretion when deciding what to put into them. Let's face it, if a file is in a library it is not as easy to get to. If you need to get to a file every 15 minutes, it probably shouldn't be in a library except as a backup measure. AN ASIDE CONCERNING FILESPECS When specifying a filespec, wildcards may be used freely, however, unlike most programs, NULU doesn't insist that a "." separate the filename from the filetype. For example, the filespec "**" means the same thing as "*.*" to NULU. On the other hand, the filespec "FRED.TXT" should be typed in just like that. "FREDTXT" would make NULU think that no filetype had been specified. The rule is simple: use a dot any time you like, but it is only strictly necessary when it is needed for clarity. When specifying a drive and/or user area the syntax is very liberal. "A15:**" means the same as "15/A:*.*", as does "1A5:**". The colon is absolutely necessary. If a different user area is desired for the default drive, the drive specifier may be omitted, as in "15:**", just as the user area may be omitted as in "A:**". If a drive/user specification is made, but no filespec is indicated, a filespec of ????????.??? is generated. Therefore to indicate the default drive, current user area, and a filespec of ????????.???, just type a colon by itself (e.g., ":") ! NULU OPERATION When NULU loads, it automatically verifies its own CRC. This process causes a 2.5 second delay on my 4mhz machine. However, because of the safety that this feature affords, I hope that you will find it to be a reassuring pause. Note that the CRC is not affected by normal user patches. NULU may be invoked with or without a command tail. A command tail can consist of any combination of valid NULU operators up to 128 characters (the limit imposed by the CCP. Once NULU is running, command lines can be as long as 254 characters.) As in LU, all NULU commands are preceded by a dash. This is a copy of the menu for the command mode of operation: -A Add members -B Brief toggle -C Close the library -D Delete members/files -E Extract members -F Filesweep mode -G Get filespec -H Help -K Krunch library -L List members -N Rename members -O Open a library -P Print members/files -Q Unsqueeze members -R Replace members -S String search -T Replace/Add members -U Drive/User change -V View members/files -W Wildcard open -X Exit NULU -Y Disk directory -< Redirect input -> Redirect output Commands may be strung together, each terminated by a space. They are processed left to right. All characters are converted to upper case. The default drive/user area are displayed along with the name of the current command mode each time the console is prompted for input. The commands will be explained in order of their appearance above. All items in [square brackets] indicate optional parameters. The word "filename" refers to an unambiguous file specification, while the term "filespec" refers to a potentially ambiguous file specification. Filespec parameters enclosed in (parenthesis) indicate references to deleted member files. Three dots ("...") after a parameter indicate infinite repetition. During the execution of most commands which receive an ambiguous filespec as a parameter, entering a ^C at the console will interrupt the current process. COMMANDS -A ADD MEMBERS Syntax: -a filespec[ filespec...] Use this command to add files from disk to the current library. NULU will make a series of passes through the directory, adding files as it goes, until the list of matching files is exhausted. If a matching filename already exists as an active member in the library, its name will be displayed and the file will not be added. In all file addition and replacement operations, if a deleted entry of identical size can be located, that disk space and directory entry will be used rather than allocating new space for the file. This means that it will be necessary to reclaim wasted disk space less often. An LU style CRC will be generated for each file added. -B BRIEF TOGGLE Syntax: -b This toggles the prompting mode. The release version of NULU is setup to print the full name of the current mode for a prompt, as in "-Add members A0:>". If BRIEF is turned on the user will simply see "-A A0:>". NULU may  be permanently patched to default to BRIEF ON or OFF. See NULU MODIFICATION. -C CLOSE THE LIBRARY Syntax: -c This command closes the current library, writing its directory to disk if any changes have been made to the directory. The library directory is NEVER written except when the library is closed, so be sure to do it. If you forget to do so and remove the disk, NULU will prompt you for the disk again and will attempt to recover. Some other operations that cause the current library to be closed are: -k, -o, -w, -x -D DELETE MEMBERS/FILES Syntax: -d filespec[ filespec (filespec)...] Syntax: -d du:filespec[ du:filespec...] If the drive/user specification is included, the DELETE function will apply to files on disk, otherwise it applies to library member files. Member files matching the given filespec will be given deleted status in the library directory, except when the filespec is enclosed in parenthesis. In that case matching deleted members will be given active status. That is, they will be undeleted. If the filename of a matching deleted member file already exists as an active member, the filename will be displayed and the file will not be undeleted. If the member file being deleted has a size of zero sectors, its entry will be entirely REMOVED from the library directory, thereby creating a new, free entry. -E EXTRACT MEMBERS Syntax: -e filespec[=newfilespec filespec du:filespec...] Use this command to extract active member files. If extraction to the current drive/user area is desired, no further syntax is necessary. To indicate another drive, however, a destination drive/user area may be included in the source filespec. Example: -e a5:** would extract all active members to drive A, user area 5. Files may be renamed as well as redirected by indicating a filespec along with, or in place  of, a drive user specification following an equals sign. Examples: 1. -e *asm=*bak 2. -e *asm=5:*txt 3. -e fred.txt=sam.txt jane.inf=c8:girls.dbf The examples would produce the following results: 1. Extract all files with a type of .ASM to the default drive/user renaming them with the filetype of .BAK. 2. Extract all files of type .ASM to user area 5 of the default drive, renaming each with the .TXT filetype. 3. Extract the member file FRED.TXT to the default drive/user under the name of SAM.TXT, and extract the member file JANE.INF to user area 8 of drive C: with the filename GIRLS.DBF. The two redirection rules to remember are: 1) if a destination filespec is entered it cannot be any less ambiguous than the source filespec, i.e., "*asm=*bak" is valid while "**=*bak" is not valid; and 2) any filespec following an equals sign takes precedence over any drive/user specification in the source filespec, i.e., "-e  6:*asm=*bak" would extract all member files to the current drive/user, renaming them, and would ignore the "6:" specification. During extraction, a CRC is generated for each file. After the destination file has been closed, the CRC so generated is compared to the CRC for that library member that was stored in the library directory, if that value was non-zero. If the results are not identical, an error message will be displayed before the next member file or filespec will be processed. The erroneous destination file will not be deleted from disk by NULU as a result of this error. -F FILESWEEP MODE Syntax: -f This command places NULU in its second operational mode: the filesweep mode. This allows the user to move through the directory of active member files as if they were individual files being examined by a program like NSWEEP. The filesweep mode's command list is as follows: A Next member B Previous member C Close library D Delete member E Extract member F Find member L Log new drive/user M Mass operations O Open new library P Print member Q Unsqueeze member R Rename member T Tag member U Untag member V View member W Wildcard rename X Exit NULU Y Disk directory Z NULU command mode ? Help! Because of the extreme similarity between these commands and the commands of NULU's command mode, only a short description of each command will be given. A -- Advance to next member (spacebar, cr, or lf will produce the same result) B -- Back up to previous member C -- Close the current library D -- Delete current member file E -- Extract current member file (prompt allows redirection) F -- Find first member matching input filespec L -- Change drive/user defaults (returns file pointer to the top of the file list and untags all member files) M -- Mass operations on all tagged files (allows Deletion, Extraction, Printing, Unsqueezing, or Viewing) O -- Open new library (closes the current library) P -- Dumps the current member file to LST: (unsqueezes if needed) Q -- Extract current member file, unsqueezing if necessary (prompt allows redirection) R -- Rename current member file T -- Tag current member U -- Untag current member V -- View current member file (unsqueezes if needed) W -- Wildcard rename (prompts for oldname & newname) X -- Exit NULU (closes all files) Y -- Get disk directory for default drive/user (returns file pointer to the top of the file list and untags all member files) Z -- Return to NULU command mode (current library remains open) ? -- Print the filesweep mode menu If, when the filesweep mode is entered, or after a library has been closed, there is not a library currently open, the filesweep mode will prompt with: No library open. and will accept only the following commands: L,O,X,Y,Z,? Likewise, if a library is open but only has a directory with no other active members, the message No member files. will be printed and only the commands listed above will be accepted. During filesweep operation, each file will be listed in the order in which it is found in the directory, along with the size in K that the file would occupy if it were extracted to the default drive. If the filesweep mode is terminated by a return to the NULU command mode, any commands that followed the -F command on the previous NULU command line will be executed. -G GET FILESPEC Syntax: -g filespec NULU will search for the filespec indicated. If it is found, processing continues. If not, the user is prompted to insert the disk containing that filespec. The drive is then reset and search again. The program will prompt forever until it receives the proper filespec or until a ^C is entered, forcing NULU to continue without the filespec being found. This command can be useful when attempting to control NULU through a submit utility like DRI's SUBMIT.COM. For example, one might type: nulu -o a:asm -g b5:-work.005 -e b10: -g a0:-5.005 -x After loading, NULU would open a library called ASM.LBR on drive A: in the current user area. Next it would search user area 5 of drive B: for filespec -WORK.005 until it was found. Then all active member files would be extracted to user area 10 of drive B:. Finally, NULU would search user area 0 of drive A: for a filespec called -5.005 until found. Then NULU would terminate. Notice here that the ASM.LBR didn't have to be closed before the search for the final filespec because no change had been made to the library directory. If a change had been made, after the new filespec had been loaded, NULU would have demanded the disk with ASM.LBR back so it could update the directory. Therefore the GET operation would be effectively negated. -H HELP Syntax: -h Print the command mode menu. -K KRUNCH LIBRARY Syntax: -k[ -: WAIT FOR RETURN Syntax: -: -failure mode This command will force NULU to wait for the RETURN (0dh) character to be input to the console device. If a RETURN is received, the balance of the command line will be ignored. If a ^C is entered, the remaining commands on the line will be executed. -; COMMENT Syntax: -; comment about this kludge of a JCL This command will cause NULU to ignore all text appearing after the command on the same physical command line. ----------------------------------------------------------------- -> REDIRECT OUTPUT Syntax: -> filename Syntax: -> With the first form of this command, NULU output will be sent to the filename indicated. The default filetype of ".NOF" will be used if no filetype is specified. If the file already exists, it will be deleted. All special characters that the user may have patched into NULU (see below, NULU MODIFICATION) will be sent to the file as well, with the exception of the EOF character, 26 (1ah). The only output not echoed to the file will be output caused by viewing or printing a member file. Even if the console has been turned off by an NCF file, all console output will continue to be sent to this file. The filename passed must be unambiguous. Under the second form of this command, the current output file, if any will be closed. When NULU is caused to terminate, the current output file is closed along with the current library, if any. ERROR HANDLING NULU should never crash to CP/M anymore. When NULU signs on, it redirects the warm boot BIOS vector, thereby preventing NULU termination due to BDOS errors. Under CP/M Plus, it goes even further, shutting down the console error messages, handling them internally. Therefore, if NULU attempts to perform some operation on a drive where no disk is mounted, one could reasonably expect (on a 2.2 system) for the BIOS to issue some error message. The user then hits RETURN or ^C and NULU should recover. It may think that the disk was full, when there really wasn't one there at all, but it should still take the proper course of action needed to recover. ERROR MESSAGES Most NULU error messages are of the form: ERROR XX: Explanation where "XX" is some number from 0 to 255 and "Explanation" is a clue as to the nature of the error. Each error message is listed below, along with an explanation. Suggestions about ways to handle the error are given where appropriate. ERROR 1: reading unwritten data Problem: A sector required to gain access to a file is indicated by CP/M to be unwritten. Solution: The library directory or perhaps the library itself has become trashed at some point. Deleting the entry and KRUNCHing will probably render it harmless, but the safest course to take is to obtain a fresh copy of the library. ERROR 2: disk full Problem: The library disk became full during file addition or KRUNCHing or the destination disk of an extraction command became full. Solution: If the error occurred during KRUNCHing, NULU should have recovered by itself, reopening the old library. If it did not recover, then you removed the original disk before the KRUNCH was complete or a serious read error occurred. If the error occurs during file addition to the library, operation should not be impaired, but no files that required additional disk space can be added to the library until some disk space is cleared. Note that deleted entries can still be overwritten by incoming files as long as the file sizes match. The incoming file that caused the error will be recorded in the library directory as a deleted entry. If the error occurs as a result of attempting to replace a member, the original library member should be unharmed and left as an active member. If the error occurs during file extraction or unsqueezing the destination file is deleted because it is an incomplete file. Extraction can continue as before. ERROR 4: reading unwritten data See ERROR 1. This is the same except that BDOS mentioned that an entire extent was missing. ERROR 5: can't make file Problem: An attempt was made to create a file on a disk with no free directory entries. ERROR 10: media changed Problem: You pulled the diskette out in the middle of a crucial operation. Solution: Don't do that. It is probably an unrecoverable error. ERROR 11: disk i/o error Problem: You are probably running under CP/M Plus if you get this message. It means that the operating system detected a physical problem with your disk and the read or write failed. Solution: Try it again. I have recovered from this type of  error by persistence. ERROR 12: disk r/o Problem: Your operating system probably discovered that you have a write-protect tab on your diskette. Solution: Remove it. ERROR 14: bad drive Problem: An invalid drive for your system was chosen (see below, NULU MODIFICATION) or a letter higher than "P" was indicated. Solution: Choose another drive or re-patch NULU. ERROR 17: password error Problem: You tried to access a file for which a password was required. NULU does not support access to such files. ERROR 18: file exists Problem: You attempted to KRUNCH a library from one user area into a different one in which a file with the same name already resided. ERROR 19: ambiguity error Problem: This means that you entered an ambiguous filespec where an unambiguous filename was required, or that the destination filespec in an extraction or unsqueeze command was less ambiguous than the source filespec. See -E EXTRACT MEMBERS for complete details. ERROR 70: file table full Problem: You attempted to open one more NCF file than your nesting patch supported. See NULU MODIFICATION. ERROR 74: checksum error Problem: During the unsqueezing of a file, the internal checksum generated did not match the explicit checksum stated in the file's squeeze decoding table. Solution: Get a new copy of the member file. Yours has been trashed somehow. ERROR 75: CRC error Problem: When each member file is added to a library, a CRC is created for it and stored in the library directory. If, upon extraction or unsqueezing, the CRC generated at THAT time does not match the original CRC in the directory, that means that the sectors wherein that library entry resides have become corrupted. There is an outside chance that the CRC entry in the library directory has become damaged instead, however that condition would probably also generate ERROR 107. ERROR 77: not enough memory Problem: An attempt was made to open a library with a directory too large to be accounted for with available memory. Solution: Open the library on a computer with a larger TPA and reorganize it so it can be handled by the smaller system. ERROR 78: user cancel Problem: No problem. NULU is simply letting the user know why an operation has been cancelled. Most operations which work on ambiguous filespecs may be interrupted by entering a ^C during their operation. (You may have to hold the key down a while.) The KRUNCH operation may be so interrupted as well. ERROR 83: bad syntax Problem: Improper syntax was used to attempt some operation. ERROR 85: file not found Problem: The filespec indicated for some operation could not be located. ERROR 86: incompatible cp/m version Problem: An attempt was made to run NULU on a system with a CP/M version number of less than 2.0. ERROR 100: bad library directory Problem: The file specified could not be opened as a library file. Solution: The directory could be bad, but most likely the file simply isn't a library. Check it out with some disk editor like SPZ or EDFILE. ERROR 107: library directory CRC error Problem: The CRC that was calculated and stored for the directory the last time the library was modified does not match the directory CRC calculated as the library is opened this time. Solution: With most libraries, this error will be valid. In that case, the only remedy is to obtain a new copy of the library. However, there are some libraries that were created with LU, and then modified but never KRUNCHED by NULU 1.0. In that case, it is likely that the old, original CRC stored in the library directory would still be there, even though it is way out of date. My suggestion is, when you first get NULU 1.5, go through all of your .LBR files, if you were using NULU 1.0 previously, and KRUNCH them. This way you will know later on that the CRCs stored in each library should all be accurate. ERROR 116: squeeze decode table error Problem: A file has a squeeze decoding table, but at some point the table is trashed or perhaps is missing. Solution: None really; get a new copy of the file. If your Data Buffer Size has fallen below 9 sectors, then the reason might be that the entire decode table could not be read into memory. ERROR XX: undefined Problem: Unknown. Solution: Write down all information presented on the terminal. The number following the word ERROR is especially important. Get the information to me. Mail it or call and I will try to help. The most serious, non-recoverable error is: NULU CRC error which can occur when NULU 1.5 is first loaded. This means that NULU failed to match its own CRC. You need to get a fresh copy. Or perhaps you have tried some patch not described below...? NULU MODIFICATION Patches are listed in the order in which they appear in NULU.COM. Each patch is explained and the default values are listed immediately next to the patch address. All addresses are absolute hexadecimal. Patch Default Explanation 00163h 50h Number of characters each full video line can contain. Not necessarily the same as the number you can see. 00164h 50h Number of characters visible on a line at any one time. 00167h 07h This byte indicates the number of files that NULU can have open at any one time. The base number is 4 and should never fall below that. The value of 3 has been added to it to allow 3 level nesting of NCF files. If the NCF value is increased or decreased, identical changes should be made to this byte. (See Patch at 00220h.) 00168h 0010h This obscure word controls the number of relocatable tasks that can be controlled by the NULU memory management routines. Because each file is a relocatable task, the same modifications for the previous byte apply here. The base value of this word is 000dh and should never fall below that point. (See Patch at 00220h.) 0016ah 10h Number of contiguously numbered disk drives in your system. If you have drives A and B, set this value to 2. It will prevent you from accessing an invalid drive. 0016bh 10h Number of contiguous user areas that NULU will be allowed to access. Under normal CP/M 2.2, Turbo-Dos or a ZCPR system, I understand that this number can be as high as 20h. For CP/M Plus or most systems that use time/date stamping this number should not exceed 10h. 0019ch 0005h This is the address of the BDOS vector. All operating system calls go through this address. If you have some weird, non-standard CP/M implementation you can patch this to try to make NULU work with it. 0021ch 00h Set to a non-zero value to make NULU READ/ONLY. No operators will be executed that could change the library or disk directories in any way. 0021dh 00h LU.COM was set up to exit automatically if a command tail was used when LU was invoked. With the release version of NULU, it takes the -X command to exit. Set this byte to a 01h to get it to act like LU in this respect. That is, it will automatically exit after executing the passed command tail, if one was present. 0021eh 01h Set to a 00h to start NULU with BRIEF mode ON (long messages not printed). 0021fh 01h Set to zero to prevent users from being able to ESC,RET from the PROMPT AND CHAIN TO PREVIOUS MODE prompts in NCF files. (Be sure to also change the values at 00167h and 00168h.) 00220h 03h This byte indicates the nesting level allowed for NCF files. I have no idea what the upper limit  is, but watch that Data Buffer Size! 00221h '-Y *LBR -O',0 Starting here are 39 bytes in which any valid NULU operators may be stored. This line will be automatically executed when NULU is loaded, even before any other parameters passed on the command line. This might be used to create a version of NULU that, after loading, sets the drive/user defaults to B0:, prints the menu, scans the drive for library files, then switches to the open library mode. That command line would look like this: -U B: -H -Y *LBR -O Notice that all characters in this line MUST be UPPER CASE. The entire line MUST be terminated by a null byte. Only 39 bytes are available for text...not a byte more. The 40th byte is for the null terminator.  0026fh 3ch This is the number of lines that NULU will print on each page during member file printing. Change this value in accordance with the line printer patch below. Set it to zero to have NULU ignore line counts altogether. Starting at 0024ch are 5 data areas used to define strings needed to control the console attributes. Each string is preceded by an identification byte and a byte indicating its active length. Then 5 bytes are available for the actual definition. Therefore a total of 7 bytes is consumed for each video control. The attributes are, in order: DIM or REVERSE VIDEO ON (DIM is preferred) DIM or REVERSE VIDEO OFF UNDERLINING ON UNDERLINING OFF CLEAR SCREEN Each control becomes active as soon as it is patched in. Likewise, there is one string defined for the LST: device that will be issued immediately before printing a file. It begins at 00271h and has the same format as the strings above. FINAL NOTES Please report any bugs or problems to Martin Murray, P.O. Box 35972, Dallas, Tx 75235 or call (214) 351-6117, EVENINGS AND WEEKENDS ONLY. Please specify the version of NULU with which you are working. As always, donations will be gratefully accepted. It took a lot of work to produce NULU and if you enjoy it and it benefits you, don't hesitate to show your appreciation with a check! Note: I no longer work for SYSTEM SOLUTIONS, so please, no checks made out to them. I am now working for INOVA, a company founded specifically to support 8-bit computers running CP/M. Look for new and exciting retail products from that source. (The preceeding has been an official plug.) vr fall below that point. (See Patch at 00220h.) 0016ah 10h Number of contiguously numbered  11/01/85 I hope that you enjoy the new release of NULU. Even though I have not implemented all of the features I had planned for this version, like time and date support and multiple open libraries, this release was necessitated by some of the bugs that were found in NULU 1.1. I have added some new features as well. Please let me know if you work with libraries that have in excess of 200 members. I am seriously considering some future NULU upgrades that would limit the maximum library size to somewhere in the range of 150 to 200 members. However, if there is a sufficient number of people that use libraries larger than that, I will recant. It is very important that I get feedback from the users of NULU as to which features are the most helpful, what features are still desired and what bugs may exist. Please let me hear from you. Incidentally, I will add squeezing to NULU as soon as I get a good algo- ithm for it written in assembly language. If you have one you want to share, send it along! Thanks, Martin Murray P.O. Box 35972 Dallas, TX 75235 (214) 351-6117 evenings and weekends only d Page 14 of 14 83-08-16 -> FOR NULU patch, hl for bc, de modified. .crc: ;push d; changes to alter i/o reg bc/hl. bc in PASCLIB xra l; c/l mov d,a rrc ! rrc ! rrc ! rrc ani 0fh ! xra d ! mov e,a rrc ! rrc ! rrc mov d,a ani 1fh ! xra h ! mov l,a; b/h, c/l mov a,d ! ani 0e0h xra e ! mov h,a; b/h mov a,d rrc ani 0f0h ! xra l ! mov l,a; c/l ; pop d; <-- REMOVED TO FIT IN NULU space. ret ; end e#squeezing to NULU as soon as I get a good algo- ithm for it written in assembly language. If you have one you want to share,  How to patch NULU 1.5 to make it start up more quickly by Jon Saxton, 30th April 1987. When NULU loads the first thing it does is an internal CRC calculation to check its own integrity. The idea is to make sure the program was loaded correctly and/or that it had not been corrupted on the disk. This is a most admirable idea and it protects you against the unforseen and unpredictable consequences of executing a bad copy of the program. Unfortunately, the checking takes time (about 2 seconds) and that can become annoying after a while. If your impatience exceeds your concern for safety then you can risk changing the jump instruction at the start of the program from JP 0146h to JP 01A2h to bypass the checking. Of course if you do that you will be completely at variance with the intentions of the author but then none of your other programs does an internal check and you're not paranoid about those, are you? ; NULUTERM.ASM 11/01/85 ; ; For NULU.COM Version 1.5 ; ; The NULU.DOC contains the information to patch NULU.COM using DDT and ; the save command. An easier way is to use this routine and then use ; MLOADxx.COM. Set the various items as desired and assemble with ASM ; or MAC to obtain a .HEX file. Then use MLOAD as follows: ; ; MLOAD NEWFILE.COM=OLDFILE.COM,NULUTERM.HEX ; ; Keith W. Antcliff ; P.O. Box 906 ; Mead, WA 99021 ; Northwest GodBout/CompuPro RCP/M (509) 624-6799 ; S.M.U.G. (509) 624-7321 ; ;----------------------------------------------------------------------- ; ; 11/01/85 Revised for Version 1.5 - Martin Murray ; 01/25/85 Revised for Version 1.1 - Keith Antcliff ; 12/02/84 Added EQU's for Patch ORG's - Keith Antcliff ; ;----------------------------------------------------------------------- ; ; See NULU.DOC for further information on the following values. ; NO EQU 0 YES EQU NOT NO ; NL EQU 03 ; Nesting Level for NCF files PATCH1 EQU 00163H ; Number of Characters etc. PATCH2 EQU 00167H ; Number of Open Files etc. PATCH3 EQU 0019CH ; BDOS Vector PATCH4 EQU 0021CH ; Some Toggles and Storage Area PATCH5 EQU 0024CH ; Terminal Control Area PATCH6 EQU 0026FH ; Number of Lines for LST PATCH7 EQU 00271H ; Printer Initialization Area ; ; ORG PATCH1 DB 80 ; Number of Characters each line can contain DB 80 ; Number of Visible Characters/Line ; ORG PATCH2 DB 04H+NL ; Number of Open Files Allowed DW 0CH+NL ; Number of Relocatable Tasks DB 16 ; Number of Contiguously numbered drives DB 32 ; Number of Contiguous User Areas ; ORG PATCH3 DW 5 ; BDOS vector (See Doc) ; ORG PATCH4 DB NO ; NULU Read/Only DB NO ; Exit like LU on command tail DB YES ; BRIEF mode OFF DB YES ; Allow ESC,RET from PROMPT etc. DB NL ; Nesting Level for NCF files ; ; ; The following 39 bytes can be used to store any valid NULU operators. ; See NULU.DOC for details ; DB '-O',0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0  DB 0,0,0,0,0,0,0,0,0 DB 0 ; Terminator...Do Not Change ; ; ; The following routines are for a TeleVideo 950 terminal. Change to ; suit your terminal. Use This Format: ; ; ID byte,Number of Bytes,byte,byte,byte,byte,byte - 7 bytes total ; Do Not Change The ID Byte ; ORG PATCH5 DB 1,2,27,41,0,0,0 ; Background Mode ON DB 2,2,27,40,0,0,0 ; Background Mode OFF DB 3,3,27,71,56,0,0 ; Underline ON DB 4,3,27,71,48,0,0 ; Underline OFF DB 6,1,26,0,0,0,0 ; Clear Screen ; ORG PATCH6 DB 60 ; Number of lines/page for LST ; 0 to supress page formatting ; ; ; Number of Bytes,byte,byte,byte,byte,byte,byte - 6 bytes total ; ORG PATCH7 DB 0,0,0,0,0,0 ; Initialize Printer ; ; END Xe checking. Of course if you do that you will be completely at variance with the intentions of the author but then none of your other programs does an internal check and you're not paranoid about those, are you? ; ; FIX FOR NULU VERSION 1.5 ; A Message from Martin Murray ; with acknowledgements to ; Howard Goldstein ; 01/09/86 ; ; A fix has been found for NULU v1.5. Like all good fixes, however, it ; causes its own share of problems and can only stand as a temporary fix ; until I can get version 1.6 out. The problem was BDOS function 37, ; which NULU15 uses before writing to a drive in case it has been ; changed. Under certain circumstances, BDOS loses its mind when this ; function is called and starts giving away previously allocated disk ; blocks. This is no good for anyone. The "solution" lies in NOT USING ; BDOS 37. The problem now is that you cannot tell NULU to log in a new ; disk. Oh well, try to live with it until I get the new one out that ; will support the fix. ; ; Assemble with your favorite assembler and merge the resulting .HEX ; file into NULU15 with MLOAD. ; ; MLOAD NULU151.COM=NULU15.COM,NULUFIX.HEX ; ; The result will be NULU 1.51 and will have the date of 01/09/86. ; ; More than special thanks are due to Howard Goldstein for this fix. He ; found the problem. He tested the fix. He waded through all my self- ; modifying code. His family will appreciate any help in paying the ; psychiatrist's bills. ; ; ORG 010CH DB '1' ; ORG 0110H DB '01/09/86' ; ORG 0150H DW 9832H ; ORG 32B9H RET ; ORG 32BCH RET ; END Z@h This obscure word controls the number of relocatable tasks that can be controlled by the NULU memory management routines. Because each file is a relocatable task, the same modifications for the previous byte apply here. The base value of this word is 000dh and should never fall below that point. (See Patch at 00220h.) 0016ah 10h Number of contiguously numbered ; Patches to NULU 1.51 (to 1.52) for faster CRC generation, and to ; allow CCITCRC use (the last two bytes of the file are not included ; in its internal CRC self-check, allowing them to be patched to the ; CCITCRC checksum, causing CCITCRC to report 0). Load time cut from ; 4.9 secs to 2.3 secs on 2.5 Mhz Kaypro 4 of which 1.2 is load time. ; C.B. Falconer, 680 Hartford Tpk, Hamden Conn. 06517 (203) 281-1438 ; ; Suggest changing the Y command so that it reports the library ; directory (if open) in a compact form, unless a drive spec is used, ; when it reports the drive directory. Analogous to the D command. ; ; The only video characteristic I have is FLASHING. Useless with ; the present setup. If used to report attribute bits, the headers ; flash. Suggest two more strings, and define them by system usage ; rather than terminal characteristics. Seems to be 1: Sweep header ; 2: attribute bits 3: directory headers, with 2 and 3 merged now. ; Attribute bits could be reported by setting the file character to ; lower case (a blank becomes a `). Could be conditioned by a ; user settable patch, i.e. 0..5 = none, video case 1, 2, 3, lowcase. ; org 010ch; Revised sign-on, ISO std. date db '2 (86/2/23) ' ; org 0149h; Revised self-check range and CRC lxi b,03a7fh ds 3; unchanged orig. call lxi d,0da91h; revised crc checksum for file ; org 01a60h ; crc for (bc) bytes from (hl) up, initialized to (de) ; leaves de pointing past last byte. Result in hl, bc=0 ; a,f,b,c,d,e,h,l .crcrg: xchg crcrg1: mov a,c ! ora b ! rz; zero range, exit push d; CRC push/pop d moved to here ldax d ! call .crc pop d inx d ! dcx b jmp crcrg1 ; org 03a11h ; This algorithm needs no final zeroes injected, but returns ; with the bytes interchanged from the slow routine. .fincrc: push psw mov a,h ! mov h,l ! mov l,a pop psw ret ; org 03b14h; for NULU 1.51 to 1.52 patch ; This crc routine updates the checkword in (bc) using the byte ; passed in (a). The checkwords computed are suitable for IBM ; floppy disk communications. The two byte checkword is the word ; produced by the generating polynomial x**16 + x**12 + x**5 + 1. ; The checksum should be initialized to 0ffffh (i.e. 0ffffh is ; passed in bc when the checksum sequence is started) to detect ; variations in length of initial zero strings. The new checksum ; is returned in (bc). ; a,f,b,c--> FOR NULU patch, hl for bc, de modified. .crc: ;push d; changes to alter i/o reg bc/hl. bc in PASCLIB xra l; c/l mov d,a rrc ! rrc ! rrc ! rrc ani 0fh ! xra d ! mov e,a rrc ! rrc ! rrc mov d,a ani 1fh ! xra h ! mov l,a; b/h, c/l mov a,d ! ani 0e0h xra e ! mov h,a; b/h mov a,d rrc ani 0f0h ! xra l ! mov l,a; c/l ; pop d; <-- REMOVED TO FIT IN NULU space. ret ; end e#r fall below that point. (See Patch at 00220h.) 0016ah 10h Number of contiguously numbered  ͫCopyright (C) 1985 BORLAND IncBSoroc 120/Apple CP/MP= * E RT(1)1~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0( d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! ""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> S>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M 9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́ ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*" w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(> >22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!8VZB>Ã8@AAŁ@ Aρ@ ʁ@  AAہ@ށ@Aԁ@AAс@01A3@26@754A<@=?>A:;A9@8(@)+*A./A-@,$%A'@&"@#! A`aAc@bf@gedAl@monAjkAi@hx@y{zA~A}@|tuAw@vr@sqpAP@QSRAVWAU@T\]A_@^Z@[YXAHIAK@JN@OMLAD@EGFABCAA@@d!]͛ͺABORT: !]:!ͪ "\Md!%\!"#\*\*#\n&!͒Eʒ#!%\:*\*#\n&e.=d!%\*#\!"#\I#!%\:d!\!\:"\*\!ͥE#*\ !\$*\!E#!!\$!*\ !\!\, \* \!ͥEj$* \ ! ![!}2[$!}2[* \!Eʧ$!! ![$* \}/o|/g# ! ![![,* \ͫ# ![*[&!E%![,xG! \"%![,! \! \,!IE>%!}2O%!! !; !"!q!!ͺ !"!!:p!͒Eʫ%MCannot open archive file."!p!͒E%MCannot open archive file."!}2)%!q!:p!͒E)&MCannot open extract file."!qo!͒E_&MCannot open extract file."!"*&Ez&!}2[í&! *+n&}2[*!Eʡ&)%í&*!"*[&}2[!*+*[&s*!E&V%&*!"!Ͱ *!͒E'!ͳ&&!qͰ "[![*[RN'![,![5(R'![,!Uͫ#! ! * ! ![5(R(![,!]ͫ#! ! ![5(MInvalid parameters to fseek"![,! "[![,*[ ! "[!*[o )%!*[fzʴ("[f&}2[*[#Û("["[!*[fz("[*[*[+f&s*[#(͛!E)!MToo many parameters"͛!E;)!}d!ê)͛ͺEnter archive filename:  !d͎ !:M͍Eʘ)MNo file name entered"͛ ͛ !!:ͣfz)"[!*[!*[n&s*[#û)!.e.!:Ͳ!E*!:M.ARC=d!"[! "i[*&EB*!}2[[,f&!͒E**i[!Eʄ*!:M is not an archive="*i[!R"i[!:͛!ͪͺ% is not an archive, or is out of sync *&E*MArchive length error"B*f&}2*&!E<+MInvalid header in archive !:="*&!EX+!}2[[,*&!E,!k[! ͵(͛ͺI dont know how to handle file !k[/#!ͪͺ in archive !:!ͪ ͛ͺ*I think you need a newer version of DEARC. *&!EI,*[!!R͵(!}2*[*[ T,*[!͵(!}2[*[&"g[*!V!|g}o! **g[|g}o!|g}o)^#V|g}o"*g[ͳ&"][*&R,*][!E,!}2,*]["*][a,Y-RY-*][!E-!a,R-*][!R"][*][!͒ER-*a,*][!R"][)-!}2!,!͈Eʁ-!"S[ç-!,! !f&"S[*S[!c"y!u!͵(*u!*u!}oE.MFile has an invalid decode tree"!{!))!)!!}/o|/g#s#r!{!))!)!!}/o|/g#s#r!*u!Rfzʬ."A[!{*A[))!)!͵(!{*A[))!)!͵(*A[#f.!"5[*5[!ͥE`/*y!"y*y!E+/Z-"w*w!E.!"?[Ò/!"y!{*5[))!*w|g}o)^#V"5[]/*w!V"w!{*5[))!*w|g}o)^#V"5[ó.*5[!}/o|/g#"5[*5[!Eʌ/!"?[Ò/*5["?[*?["/["1[*1[*/[!|g}o!![!![,!E/!![,! !![!![,!![, ! !![!![,!!! [ͽ!"[!" [! [!n&}2[*[&!.͒E0*[&!0ͥ*[&!9͸}oEʸ0*[! *[&!0R"[* [!" [! [* [n&}2[c0*[!|g}o"3[*3["[!s]*[)]T)^#V"Z*Z!͒E?1*Z"[!s]*[)]T)^#V"Z 1*["[*["Z"Z*Z*Z͖/"Z!s]*Z)]T)n&}oEʆ1*Z"Z2*Z0"Z*Z!e!|g}o"Z!s]*Z)]T)n&E1*Z!"Z*Z!E1!"Zç1!s]*Z)]T)*Zs#r*Z"Z*Z"Z"Z!s]*Z*ZI1)]T)"Z!*Zs*Z!s#r*Z*Zs#r*Z*Zs*h]!E3Z-"Z*Z!Eʒ2!"Zt3*Z!|g}o"ZZ-"h]*h]!E2!"Zt3*h]!|g}o"h]*Z!N!|g}o*h]!V!|g}o"Z*h]!|g}o"h]n3Z-"Z*Z!E83!"Zt3*Z!|g}o"Z*Z*h]!N!|g}o"Z!"h]*Z"Z*Z"Z!u*s*Zs*s!"s*s!ͥE3MStack overflow"*s!E3*s!R"s!u*sn&"Z3!"Z*Z!s]!`!N!!fz34"Z!*Z2*Z#4!"h]!"f]!"s3!!R"q]!}2n]*n]&Eʘ4!}2n]c2"l]!s]*l])]T)n&"j]*j]"ZÜ5*s!Eʖ5c2"Z*Z"Z*Z!E4!"ZÜ5!s]*Z)]T)n&}oE4*l]"Z*j]x3!s]*Z)]T)^#V!͒EG5!s]*Z)]T)"Z*Zn&x3*Z^#V"Z4!s]*Z)]T)n&"j]*j]x3*q]!͒Eʐ5*l]*j]2*q]!R"q]*Z"l]3"Z*Z"Z!"*Z  $!!}2*&R5R6Z-"Z*Z!͒E6*Za,Z-"Z5d7R;6Z-"Z*Z!͒E86*ZͶ,Z-"Z6d7Rq6ͫ-ͭ."Z*Z!͒En6*ZͶ,ͭ."ZN6d7R§6@4`4"Z*Z!͒Eʤ6*Za,`4"ZÄ6d7R6@4`4"Z*Z!͒E6*ZͶ,`4"Zú6d7͛ͺI dont know how to unpack file *Z/#!ͪ ͛ͺ)I think you need a newer version of DEARC *Z  $! 'ø7**Z^#V͒Eʸ7͛ͺWARNING: File *Z/#!ͪͺ fails CRC check "Z*Z/#d!͛ͺExtracting file : !:!ͪ %*Z͠5&n%!^Z *E"8!^Z͹7 8&͛ ͛ͺTurbo Pascal DEARC Utility ͛ͺVersion 1.01, 10/19/85 ͛ &8( 8 *Etu!^Z͹7 8&͛ ͛ͺTurbo Pascal DEARC Utility ͛ͺVersion 1.01, 10/19/85 ͛11/5/85 Documentation CP/M Version of DEARC (De Arc) I allways wanted a program that would remove the files from an IBM PC .ARC file. Now Systems Enhancements Associates has provided the means to fulfill my dreams. DEARC (De Archiver) is a program that removes the files from an Archive file. It was not tested in CP/M, but since it was written in Turbo Pascal, I thought that the port to CP/M would not be too difficult. I was right. I had to delete a total of three characters that wern't important anyway. Works like a champ. If you need a utility like this then here it is. The included .COM file (DEARC.COM) is the CP/M version. The IBM PC version is availiable in a seperate file by the name DEARC.xxx. Sincerely James W. McMann n. The IBM PC version is availiable in a seperate file by the name DEARC.xxx. Sincerely  &8( 8 *Etu!^Z͹7 8&͛ ͛ͺTurbo Pascal DEARC Utility ͛ͺVersion 1.01, 10/19/85 ͛"vZDEARC.PAS^ o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]ū'ů~'şzn.RfR)ԏX̦/kKS Lv _y%0Ef(^S9RPPfH~D1|+E#/ܾ^ay罧K(.zLH1ox7=~DC=M̲ˬOY8lnяI0-'ya< {Ma//׌'rQvE(lwOѣR^0ke׸"uj+}6R#4E$]R#4I6$~Dg~8v]14Wqhia; h~DL+]:, ̛,yj/G41G %_RcaW[U1~5anD}`9']wX, !eG~'\ߍ2OWdGGoR?I-u*lc3Rj̤$gXJ=SY̤Q"\f=m3Ӣ&:?“cۑEp.q6$td~WpxZT#%ȌYm 14 3kU"wc*A9P\1Z׊!uXjF;BrV _T!J)WcCR,5B#\9PyB-jr NJ1D~C1UFh*4w ojjS)1!T]+ʱX1sn_+X+nC,6cŴv ᦕbfJ1b;XjT)X,cCV +R#4UJ1ĢC,VcC,.cw+pZ1bW9r ֹbwC,cbC,T©J8)rW+81CcӺv qXWFhaCvcEpQ)8c*W qjr,5B#R qsEⰨCN1+8jYXjF1a+8ljMW!N1ĩCJXJ1ĬCcR 1(Mb=C̦c1)Yb}CNcB)-rv +R#4bV)*W ^Պ!f1B)]!f1zW)R 1[!f1P)9brkU+ʱ*br;W+1CLcv [WFhnCLwcEbwQ)c*W jӪr,5B#vR 1sEbCLO1+jYXjFL1n+mjMbW!1ĴCJbM;kJ1fC\lrZ1fZ9r q1C\jSbClcM^;+R#4bS)UbU+ج*J1"w Վ!.vbqV!61P;8T!6N9pb U+بʱX)br{W;XJ1CbպV _WFh~CvbEbQ9Xb*w jR,5B#r sEbCNJ1;jYXjFJ1~;ojMbW!V\1ĪCʱksվV Q+F)7czZ;bQ͔bz;OcT)1DCTy+R#4bCԫ1DC1Du+vbzW9Z9ֹbP+c)CԪv QJᦔZj>'t 4g0 "Z}t't 4 Ijc!4 #5-ٶZj>'9 7>tdR#|[>' 19>vl;_PF)Fp̘vc/(X{*F0P*L+5s]!֟ϩy!J'CDi@ṏ`h= ȔR#Rj8ca{ g=:X2^RK}> q1޾)FhIWY!4 SJP֕R#4] Rj8ca{  'g0 Jp;Eˢ(yRj۹}a!4 SJp;.#a'$ٶZ̠Yz!2cs|V'sOM?GCDi@齉vp"3&;gݾn^?|}r_PA֛Rj2TtLz Rj&-!eh= ȔR#4hz> ,2[J]!4 SJЌM 4CDi@v9#Rjdah= ȔRK(M_IGl"?lORK=7Evb;` 1oJ ah= ȔRKD+5BL: ϠJ> vpP]Z)Fhzy o?])5B0jcc!4Vjۄqbw~+J|>8tSJt\Rj 3 ȧ]j[l[JpBhX Zn8I6axt$SJp{7!7rh ,i;N7gOI2R#ܒmFdRjB3ĒJpmI2 3 ȧ$RjۻQ _C[`IhFx>t\Rj 3 ȧ$nɶR#H u=Ipg^y@[Xè/0,8v7={s=jftsSJpg^yEEKwdpEE1b6})FDﯻ8ʺQk}A7 wSJpOϢ!ۖR#4qdU7ZM&Jpg^ۇ q cl8\Z%0`ŮG"GQzFjl[J-ډ!3oUf0j Q7J3oK c{űzԚ.馔3Sg̞y%xàgftSJsGzKg57MꊞK mK"Q;1z3J` 1K% )dI(vCY;j57h 3o57MꊞIRdRjHN ᥉LYX Z;=u3Sg߼eYE_}?sSJܙ詳o~#mc8TܔR#4w&zٶZ% xi?SF;(񈹉#È6 ?5mvI%G ÏIxEǎ`K“=Ix=&KYa;16%4W'ɶ[/ܾ^ay罧K(.zLH1ox7=~DC=M̲ˬOY8lnяI0-'ya< {Ma//׌' NULU memory management routines. Because each file is a relocatable task, the same modifications for the previous byte apply here. The base value of this word is 000dh and should never fall below that point. (See Patch at 00220h.) 0016ah 10h Number of contiguously numbered #v^DEARC2.INC] o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\+ r/ѩFZEh9{%hCXIpﴁgH쨮}G8Xsl x/N-WVĹƚ.0J^kX* JFɊfUɊ*kNIF)a(bRpa;C>u ; qg Xw`y4`5Z*dE5H:`α5HcvPY4:5H} Bɷ_ uAhx@ɷipx8W %5kjk\YcMsT=׮ck k!_L=Z8VHfEe b=uL:h/pj 8(|GsTx5c)B|R + uA]'/tІĹt׹5H#5eyKWĥ/p+kF/qv8WX)B8"g5'4@]Qpj PeSBKWBqABW*hse5+ r/"^{5'+bhC' Ax+V"յ uAO\^׵xKWD;+|8it%\BІ~ g"ظ=t)jK,]As7 Bu_(>/At:*JWaAO\^B^DZ 'o.NA] P||-!_txꙃ"A*>*JWaABW*h+k\YcMsTKDRe |⣒6/q{B ©5BckFW8 hCt%i&,9iӑDĥ/oĕ]e ƕW*?]~>6ĸ!/Y&x+ĕ pi$ĹƚHª5]by4W֜^ .T|T(]A8Xsl H-]JXY4t+ x.?CbCe3kF*j]JЕ p Ε5֬$DʽbjZ{5'E  + uAcj4[kV"^5B+kNP!ЅJ+ uAWBW*GUk>s`3 _+"gן1?~>1.tĹƚHBY=BY֤h! -+u$se WvCBEXI +{/XB5HwPWhX#AD?X(U uA iEP5ie  ,kR<`vS^kX bz zK,]Ak϶3O<|n =K\dzme hʲ&z]ǔB4y+h/_=~s\xi&k6~ p+/~GJRCʚai$Ε5HPD;Wxt|ACYAzӂkLP/_=~y\"ޓh !_&z6y+ BqAo"g5Hc#4 5r@D;#]{ĹƚHB)/+ł-+u$se |P QJAظ=t`-+u$5H-K;%E/+k: e8X#,퀎t%ZkV"^免)!B m^bSk8pԑT uA]^iYGhC !7Yxգ ]8i$Ε5H+dٓ= !Bck6]xA܋S*x:\"VOM+5rjz5jB9yA4Y$hid9+;mh5Y4gPQ5HRrڽPN \se5HM>: Ε5֬$DʽVuϫ)cd[4F{_0MQ3` ҟ5H#q Ε5֔=Guёu+pԑT uA]ڽ& ؞m 1:ҸyvPM^{Ml[YHKi$ĹƚHcRYsN/kB=_zׄSk8pԑT uAUAK!'w2Wk Cz+kFWb~!SL5^ݯ߷І_tx Bkx/\F2A0W 2nb|C;zzs<8W 2nb|{C;zzs<8W e8w2G䀅: mJ!'nYl\owWk X#M)!ӭ;+ {M+u$l Hse5eQ]`tq_±RGRYs/=k©5 Z8VH*k: me x߸b9`α5HejUce ƕXV !Bck>^БuϫOD1<6Xsl H㺯p~sЅSk>O*hl+k>98duwgqE=sF5H *jBck>^{q+k>98duwgqE=sF5Hl H+kFv5&ѕpІi\ TԄ4 8WXOJv ms:ְlk HEMvS^kX 퀟g[< Ε5֔=GuQB (w3Z u=Ipg^y@[Xè/0,8v7={s=jftsSJpg^yEEKwdpEE1b6})FDﯻ8ʺQk}A7 wSJ$vdDEARC3.INCS o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRAXK$ Ú* kjJ c*i]I#g%?AN?P*xDQIY Kœoˬn~s@aMbV7"%f%@OͰͣ %v/<^b)`#onhCIz%ƣ %vx$ķozmm( ц 6tmV'w5m( ڢ0 kjȡh i+l=]g%?A ^ӳW^'5E\B[x _J6O:m(ַx:d%pϨY jSVytmV^\V7x=Ë8@3^K~ᐕoP;K5j7J6>+۬>ٙg%J6A6I {:°F ÚŬ+nT(f%@OͰäӥ0xytY j5fw[ + {:vtd%päӥ0xytJ6>+ېMfҨ {:*}Vd9hckc)°F ÚŬ+Ɇ~0QJfM7 Q55Y S3nl( ú_"{ 6CV1jL:n;]dCIDz%ZC$%pJfX ܜl( d&O6tJfM7 Qv'JK {<ߞe%pjap_hYz[ +;t05jM7 Q%NY ܹfa:jtx7Bt05jg%pӥH6tytԨ4,LGkVnV!Jb(Y Hӥ/=* kjY S3nseIGmKi/=ޢfX z%FOͰq;]M>XO CVw]#kz;NJfb6`=v` ֓ J6t؍!vX YkV"^免)!B m^bSk8d[4F{_0MQ3>Cb={2uq.|# Fog Library Disk FOG-CPM.016 Copyright (1988) 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. Save disk space and keep related files together with the programs on this disk. Also included in a program to extra%ct member files from some MS-DOS.ARC or CP/M.ARK archive files. Filename Description -01-08 .88 This is the release date of the disk. -CPM016 .DOC This is the description of the disk contents. LU310 .COM 30E4 20K ver. 3.10 [Library Utility 1 of 3] Combine many files into a single file while retaining the integrity of the member files. Excellent for conserving disk space and for keeping related files together. See also NULU, LBRDSK, LUX, not all on this disk. LU300 .DOC 533D 35K ver. 3.10 [Library Utility 2 of 3] LU310 .HLP E2CD 1K ver. 3.10 [Library Utility 3 of 3] NULU151 .COM 8A68 15K ver. 1.51 [New LibraryUtility 1 of 7] Combines LU and NewSWeeP functions for use with .LBR files. NULU15 .DOC 5AE8 55K ver. 1.51 [New LibraryUtility 2 of 7] NULU15 .NOT 5CB7 2K ver. 1.51 [New LibraryUtility 3 of 7] NULU .PAT 55EB 1K ver. 1.51 [New LibraryUtility 4 of 7] NULUTERM.ASM BC70 3K ver. 1.51 [New LibraryUtility 5 of 7] NULUFIX .ASM 2901 2K ver. 1.51 [New LibraryUtility 6 of 7] NLUPATCH.MAC 6E5E 3K ver. 1.51 [New LibraryUtility 7 of 7] DEARC .COM 6113 14K [DeARChive 1 of 5] Extracts members of an MS-DOS ARChive (.ARC or .ARK) file. Very version specific so it will not always work. DEARC .DOC 99C6 1K [DeARChive 2 of 5] DEARC .PQS C923 5K [DeARChive 3 of 5] DEARC2 .IQC 1EB5 5K [DeARChive 4 of 5] DEARC3 .IQC 4A1B 3K [DeARChive 5 of 5] [New LibraryUtility 6 of 7] NLUPATCH.MAC 6E5E 3K ver. 1.51 [New LibraryUtility 7 of 7] DEARC .COM 6113 14K [DeARChive 1 of 5] Extracts members of an MS-DOS ARChive (.ARC or .ARK) file. Very version specific so it will not always work. DEARC .DOC 99C6 1K [DeARChive 2 of 5] DEARC .PQS C923 5K [DeARChive 3 of 5] DEARC2 .IQC 1EB5 5K [De&'