IMD 1.16: 28/05/2007 17:23:04 -FOG/UTL053         -FOG/UTL053/UTL#053CRC /UTL#053DOCARCADD COMARCADD1 DOC ARCCOPY COMARCCOPY1DOCARCDEL COM ARCDEL DOC ARCDIR COMARCDIR1 DOC ARCGET COM ARCGET1 DOC ARCTYPE COM ARCTYPE1DOC LBR-ARC COMLOCK COMV !LOCK DOC"MKEY COM#MKEY DOC"$%&NSQ COM/NSQ110 DOCSORTDIR COM SORTDIR3DOCUNLOCK COMV'()*+,USQ COMCRCKLISTCRC!9" 1P 2  } &+ D:2 :} D>2 H D!6x :<2_!6~}t#ea{_ : _!P IQ ͐1(>ʪ2 " !" !h{* " : * ͐1͐)º" !]~ 1 ~?O#2 * ͐#/#͐E12 * }[!e͉ DT: _: <*  DT:* " ͯL D!e͓T!\@ I6Io!h" * " !$6I*  I<6 D:͚* " * +" }š: E:!h" * " !  $6I*  I* " * +" }: 4 4 ~# xI:\pG: * } *  #„ #  ^#V#N#F * }o|g" * #" * ͩھ* #" * ))))!h" * ))))!h" #U* #" * * Fwx# o:\ʎ_\<ª: _=!_#:\ ~#!\<ªÜ!\* ͐@G:y_xW* +ͩ~ 6*a"a!\ I\ DT"9* !* " * ͩ* ͩ9 "a6 x* * >ʱ  x˜ * #" 6#6I* è ARCADD Version 1.32 Dave Rand 12/26/1982 Use:  :  Ð͏!\ I\ DT"9* !* " * ͩ* ͩ¶@<ʤ! ARCADD (fspec1 fspec2) fspec3 | fspec1 fspec3 [/E] Where fspecN can be wildcard, such as B:*, ASSEM???.ASM, C:*.* The fspec3 defines the destination archive for the files. It may not be ambiguous. /E - Erase after I͓6I@@<ʿ* ))))* * }R>6I#" 4* * @¶! }Y@<ʤ6A#6R#6C#6D#6I#6R# D D: D: D: D: D:* * ͩ{OzG D% D@adding to archive.$ Can't find any files to add to: $ File not found. You must have changed disks.$ File too long, invalid.$ Can't find .ARC file!$ Can't close destination file.$ Can't rename destination file.$ Disk full.$ Directory full.$ Read er"¶*a#"a* ͩ* " P  T0 3>$0Q FDů`e)h)# [!I͓@ Writing $ bytes. $  ce as fast) o FULL Wildcards supported: B:*, A:*, C:AQ*.A?M o Uses only 22% of the memory required by Rubenstein's ARCADD: (4K instead of 18K!) o More efficient add algorithm. To use, just type ARCADD fspec1 arcname, where fspec1 is the wildcard specification for the source file(s), and arcname is the destination ARC file. If the destination does not exist, it will be created. You may also use the multiple file mode, as follows: ARCADD (fspec1 .... x:fspecN) arcname  where fspec1 through fspecN are wildcard source files, and may include drivespecs. ARCADD now has a more efficient addition algorithm. Instead of always appending to the .ARC file, it now checks to see if the file exists in the destination archive. If it does, and the size has not changed, the current write buffer is purged, the source file is read, and the file is overlayed with the new information. The advantage to this method is that if you are just making minor corrections to files, the  ARCADD - Version 1.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada ARCADD1 is an assembly language replacement for ARCADD, by Rubenstein. The advantages to this version are: o Faster operation (about twi.ARC file does not become so inefficient (read LARGE!). The disadvantage to this method is that the disk has to do more seeks, thus slowing the operation down by 0-10%. If you wish to always append, simply ARCDEL the files first.   <*#))))*"""*"]!""*))))"*~f**6#6l\ lgw N#F#^#V͆#"" *y ! *"***#"*7y < <! 1 l!  lA 1 <! 6l  <** ! v}M <]{ozg**** l*s#r# s#r#"6A#6R#6C#6D#6I#6R#6$#6$#6$#ggxgx8gx!9"11 2 } &egx:] 7Fgx :_:\S=_!e! \<†hgw:_*=!_#:\ ~#¡\<†""! "!Q R $6l*Q  lQ <gx*EgxWgx** **" ARCCOPY Version 1.16 Dave Rand 12/26/1982 Use: ARCCOPY fspec [fspec] Where fspec can be wildcard, such as B:* C:, ASSEMBLE, C:AQ* a: The second filespQ ) gx!&)))"}>͞* "*+"}x W W ~# xl:\ʓG:<ʓx@_W:W!]~ ʤ_W# ˜.W!e~ _W# µ]|}*"!""*|g}o"*+}o|g"!ec defines the destination drive for the files. If not supplied, current drive is used.$ No ARCHIVES under name: $ File not found. You must have changed disks.$ File too long, invalid.$ Can't find .ARC file! Skipping to next.$ Can't c"*"**"O;;͂**}o|g";; *#"**#"*))))*"*))))*"#x*#"**Fwx# ’*\ lzgw!y z O6l!\y  l!\  l:l2 y <  lose destination file.$ Can't rename destination file.$ Disk full.$ Directory full.$ Read error.$ CP/M 2.x required!$ Directory: $Copying file: $   ARCCOPY - Version 1.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada ARCCOPY1 is an assembly language replacement for ARCCOPY, by Rubenstein. The advantages to this version are: o Faster operation (about twice as fast) o Wildcards supported: B:*, A:*, C:AQ* o Uses only 10% of the memory required by Rubenstein's ARCCOPY: (2K instead of 20K!) To use, just type ARCCOPY fspec, where fspec can be a wildcard. To copy an archive called MYASM, for example, to drive B, type: A0>ARCCOPY MYASM B: To copy an archive called HARD to the same drive, type: A0>ARCCOPY HARD !9"[12] } &e:6@e :]_!j͌-(>c2v"t!"l!*l"l:vʜ*t͌ʜ)s"}!]~ - ~?#­*l}!eͶUeu:]_*[eue!eu!\ j6j[!"^!$6j*^ j͖*^"^*l+"l}͵ U U ~# xj:\ʑG:]<ʑx@_U:U!]~ ʢ_U# –.U!e~ ʿ_U# ³[|}!\ j !\*t͌@G::  ] Ì*b"w*}"yG&eu6â6A#6R#6C#6D#6I#6R#eeee!<;*}0 'xe!&)))"b6eu*w|ʱ*y ~ʝ#˜#b^#V#N#F#"y"p"r"{+"w\ j?g xT"y"w>!6j<*b))))*}*b} >6j ARCDEL - Version 1.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada ARCDEL is new in the series of ARC programs. It allows the wildcard deletion of files WITHIN an archive. Before, it was only possible to delete fil#"b*}*b! }< ARCDEL Version 1.12 Dave Rand 01/01/1983 Use: ARCDEL (fspec1 fspec2) fspec3 | fspec1 fspec3 Where fspecN can be wildcard, such as B:*, ASSEM???.ASM, C:*.* Tes inside an archive with DDT or DU. When a file is deleted, or when a file is re-added to an existing archive, a hole develops. ARCDIR will show the relative efficiency of the archive, and when the efficiency (%) drops too low, ARCCOPY should be he fspec3 defines the source archive for the files. It may not be ambiguous.$ Can't find any files to delete: $ File too long, invalid.$ Can't close destination file.$ Disk full.$ Directory full.$ Read error.$ Ambiguous archive not allowed: used. Note that ARCDEL can create holes very rapidly, and the efficiency should be monitored on a regular basis. Also be aware THAT ARCDEL IS VERY DESTRUCTIVE! ARCDEL *.* file WILL DESTROY ALL FILES IN THE ARCHIVE!!! Make SURE the parameters give$ CP/M 2.x required!$ Directory: $DELETING file: $ Archive directory does not exist: $oo long, invalid.$ Can't close destination file.$ Disk full.$ Directory full.$ Read error.$ Ambiguous archive not allowed:  ARCDEL are correct, and that you have a back-up copy of the .DIR file. To use ARCDEL, just indicate the files you wished removed, either in list form or wildcard form, or both. ARCDEL (OLD.ASM NEW.ASM) ASSEMBLE ARCDEL OLD.* B:ASSEMBLE    ARCDEL (OLD.* *.NEW) C:ASSEMBLE Drivespecs may be supplied on the file list, but will be ignored. Drivespecs on the archive file will be respected. Note as well that this program only modifies the .DIR portion of the archive, and the .ARC file ne2 Hw*T!6&)))"}TX͟* "*2+"2}w{ ̚ wʎ:7<27G:͎w27 [More...]$ $ m m~$#_m~# x:\ed not be present, or if present, it may be squeezed. ive file will be respected. Note as well that this program only modifies the .DIR portion of the archive, and the .ARC file neG:<x@_m:m!]~ *_m# .m!e~ G_m# ;|}*""!"$"&*"|g}o""*+}o|g"!"*"**"" *"*}o|g"Ð*#"*RgÊ*$#"$*))))*4"* ))))*4"#*&#"&**Fwx#  ̈́0 0>$0N C ̈́0 ]>$0~>  půÐ)Ø)# ‹!"*",*\ w26**4~#nͽ\ x*,$**$*,SXSSSXSS**y/Ox/G {_=j&$){_ :6<2626~ ʁ_mÄ #r.m~ ʥ_mè #– m °N#F#^#V{ozg*,",Q m####|g}o|g}o|g}oQ**!9" 1272 } .bw:] ?w:\M=_!e6D#6I#6R!\<…:_* =!_#:\ ~# \<…"4"2!"!$6* <w*4R "* m  ARCDIR Version 1.30 Dave Rand 12/26/1982 Use: ARCDIR fspec Where fspec can be wildcard, such as B:*, ASSEMBLE, C:AQ* (No extention .DIR is required, and any supplied will be ignored.)$ N  o ARCHIVES under name: $ File not found. You must have changed disks.$ File too long, invalid.$ CP/M 2.x required!$ Directory: $ Name Recs Size(K) Name Recs Size(K) Name Recs Size(K) $Using $ records of the $ records allocated. ($%) $tory: $ Name Recs Size(K) Name Recs Size(K) Name Recs Size(K) $Using $ records of the $ records alloca ARCDIR - Version 1.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada ARCDIR1 is an assembly language replacement for ARCDIR, by Rubenstein. The advantages to this version are: o Faster operation o Wildcards supported: B:*, A:*, C:AQ* o CP/M 'K' size shown for each file o Uses only 11% of the memory required by Rubenstein's ARCDIR: (2K instead of 18K!) To use, just type ARCDIR fspec, where fspec can be a wildcard. Extensions are ignored, so B:QQZ.OLD will be translated to B:QQZ.DIR. in's ARCDIR: (2K instead of 18K!) To use, just type ARCDIR fspec, where fspec can be a wildcard. Extensions are ig  !9"y1 2{ } &ͣ&2:}"ͣ>2/ͣ!6x :<2_!6~}t#ea{_:ʒ> :{_! ͨ2 1(>ʵ2"!"! !*":*1)"!!]~ ͨ? x""> ARCGET Version 1.31 Dave Rand 01/01/1983 Use: ARCGET (fspec1 fspec2) fspec3 | fspec1 fspec3 Where fspecN can be wildcard, such as B:*, ASSEM???.ASM, C:*.* The fspec3 defines the retrieve 1 ~?;#*}G!e͑8ͣͳ:{_:<*yͣͳ&3ͣ!e͛ͳ!\  ͨ6ͨ! "|*|"|*+"}w& ͓ Ó ~# x¨:\G:{<x@_͓:͓!]~ _͓# .͓!e~ _͓# archive for the files. It may not be ambiguous.$ Can't find any files to get: $ File too long, invalid.$ Can't find .ARC file!$ Can't close destination file.$ Can't rename destination file.$ Disk full.$ Directory full.$ Read error.$ Ambigu ͙|}!\ ͨ !\*=@G:E:{ *"*"!  $6ͨ*|  ͨʹ*ous archive not allowed: $ CP/M 2.x required!$ *$ Directory: $Getting file: $ Archive directory does not exist: $ $|~#2 2\  ͨ6ͨ  <Cͣͳ*"*" * !¬*"**F <ʵ6A#6R#6C#6D#6I#6R#rͣͣ&ͣ&ͣ&ͣ&ͣ&** "* #"  ARCGET - Version 1.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada ARCGET1 is an assembly language replacement for ARCGET, by Rubenstein. The advantages to this version are: o Faster operation (about twi**"! ͛ <ʨ* V MXͣ&!,&)))"! ͑6ͨ <†rͣ&**#))))""*"͙Rͣͳ&*|*  ~ ##^#V#N#F#""""+"\ ce as fast) o FULL Wildcards supported: B:*, A:*, C:AQ*.A?M o Uses only 10% of the memory required by Rubenstein's ARCADD: (2K instead of 20K!) To use, just type ARCGET fspec1 arcname, where fspec1 is the wildcard specification for t  he file(s) you wish to retrieve, and arcname is the source ARC file. If the destination does not exist, it will be created. You may also use the multiple file mode, as follows: ARCGET (fspec1 .... x:fspecN) arcname where fspec1 through fspecN are wildcard destination files, and may include drivespecs. If a destination file is not in the specified archive, no error will result, and that file will be skipped. !9" 1z2 2  } @K CP/M 2.x required!:aK ARCTYPE Version 1.32 Dave Rand 01/01/1983 Use: ARCTYPE (fspec1 fspec2) fspec3 | fspec1 fspec3 Where fspecN can be wildcard, such as B:*, ASSEM???.ASM, C:*.* The fspec3 defines the retrieve archive for the files. It may be ambiguous.!z{5G(>ʀ2 " !" !͌y* " : ʾ* 5G5)" ͌!]~ G!eʹ" }!e K Can't find any files to type: !: _* !" * " * \ * " K Directory: !e!!\j 6Sʭ!" !BC$6* B ?* " * +" }z*  " * +" |(_ : <2 G:>܂K ~# x:\<G: <<x@>:!]~ L# A>.!e~ h# ]|}!\  !\* 5ʨ@G:ʰ:  5* " * "  K Typing file: !* "j!?!^#V!vs* !9"2 2 <2 K Original name: Ký " |s#r#s#r#* +K WKK!!goK Premature EOF on file... aborted.K~#K: f=2 : ͅͅx>==2 : 2 : O: ž!O>=2 yO! ҳ##^#Vzʌy2 z>{/: <2 _!~ɯ=2 *#"* j!?1K"j!?!?* s* sKK~[^#A#" +  jկ2 K 2  ʰ ʰʰÒ!\<!=!_#:\ ~#\<" 6A#6R#6C#6D#6I#6R#K Can't find .ARC file: !K Read error.!sj<* j¬ £K File too long, invalid.!k&)))" !s 6j<K Archive directory does not exist: !* |z * C ~f  ~ f #a #- ^#V#N#F#" " " " +" \ ?2  x " " >"  * ˜ #Š #˜ ~ʦ Ä /COMOBJBADLOGSYSTX#EXEOVLOVRRELCRLIRLLBRARCINTABS  ude drivespecs. The drivespecs, if supplied, are ignored. While a file is listing, the display will pause every MAXLINES lines. MAXLINES can be set by modifying the byte at 103H. If this byte is set to zero, no paging will take place. It is currently set to 23. A file may be skipped by hitting CONTROL X, and the screen may be paused by the use of CONTROL-S. Any files of type OBJ, COM or REL will be ignored, as well as all squeezed files (type .?Q?). With the latest (1.3) version, a ARCTYPE - Version 1.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada ARCTYPE1 is an assembly language replacement for ARCTYPE, by Rubenstein. The advantages to this version are: o Faster operation o Fny squeezed files are automatically usqueezed, and displayed. Since some squeezed files may not be text, just use CTRL-X to skip past them. ULL Wildcards supported: B:*, A:*, C:AQ*.A?M o Uses only 10% of the memory required by Rubenstein's ARCTYPE: (2K instead of 20K!) To use, just type ARCTYPE fspec1 arcname, where fspec1 is the wildcard specification for the source file(s), and arcname is the retrieval ARC file. The retrieve filespec may be ambiguous. You may also use the multiple file mode, as follows: ARCTYPE (fspec1 .... x:fspecN) arcname where fspec1 through fspecN are wildcard source files, and may incl  !9"1 2 } &̓x:] 7̓x :_:\S=_!e! \<†͓̓:_*=!_#:\ ~#¡\<†" " ! "!  $6͈*  ͈ <̓x*  6L#6B#6R#6A#6R#6C#6D#6I#6R#6$#6$#6$#̓F̓xf̓x̓x̓x̓x* *  E* l* " LBR-ARC Version 1.02 Dave Rand 12/02/1983 Use: LBR-ARC fspec [fspec] Where fspec can be  Z!^#VzZ&k))"}ZK T x!3ͼ* "* +" }x s s ~# xˆ:\ʯG:<ʯx@_s:s!]~ _s# ´.s!e~ _s# y|}*"!" " *wildcard, such as B:* C:, ASSEMBLE, C:AQ* a: The second filespec defines the destination drive for the files. If not supplied, current drive is used.$ No LIBRARIES under name: $ File not found. You must have changed disks|g}o"*+}o|g"!"*"**"kWW͠**}o|g"WW&*#"* * #" *)))))* "*)))))* "#–* #" ** Fwx# °*\ ͈͓̓!  '6͈!\  ͈":l2   .$ File too long, invalid.$ Can't find .LBR file! Skipping to next.$ Can't close destination file.$ Can't rename destination file.$ Disk full.$ Directory full.$ Read error.$ CP/M 2.x required!$ Directory: $Copying file: $ +<2Z82[82e8"X8*~8 ~<=Q+:e8<2e8:e8:e8=2e8<#~=+:e8=+:o8=+7"X8:Z8=2Z8e &°+*R6~ ʮ+ ʮ+ ͼ+"R6®+>&2\8,&°+:\8µ+>&32\81G NSQ version 1.11 Jim Lopushinsky 02/16/84 - 22 :˜ Use: NSQ afn [afn afn ...] [destination [drive][user]:]>2  *f{+~Q w#w#6#6 has 'Q' in middle of filetype w!H:Bw: !Hͮ:G' !TT]6́!Q~wHH<  no more directory space*"͌!\ ͳD abnormal EOF on input f " ~2> ͯ > v) > }2= `|< ͻʗ != q #45ʎ ~6b G+~`U Î >ii~6i:= 2= `6 :> ʩ >i ~* w#s#r#q#"K >2? #^#V#N#~#2 {K :? G* # #ile FH?: {![4: +5~w' l\J\<*![́=!la# ́"B2 d͇ ͇ڑ Éy£ʣ: ʬy02 Fɯ2 54~@F2 +: ~<2 =u#: >:F#~ F#xa~ >.F~### y2 * *K y2 }O|GT]+++: w#s#r#: w*K ####"K :? <2?  :? !m 45d h m #[ !p2 2 g2> 2J 4xö ͬʬ G!= : ~!h :>  F#a{ ~#F~#.F  - aborting.> F> _Ʌo$>} ?!~#~ x ~#Á:[' *""!hi6́\<:[' \**! ~#" aborted.: :[' *" e :D " !> 4x G& e!@ ~: := ~: >< 4:E " xa 2E È ͬʬ G!> 4:E xښ Á eæ ͬʬ à : đ‡ : !` d  !y h  :8 =2 >2 2 a >2 !` d * 2 *! )\ѷ)!"**"! *w#"*! :G' ** +}o#"*! ʄHѷ‹!`*"ʮ¬  no more disk space   has an invalid FCB   media change occurred  disk I/O error~#!h : : Nw: /2 :! 4y >2 { ~!h ~2 6 !` 62 *H ))>` "W !"Y !W ~w6#w#w#w6!T 6*T *` > * *` : " !9 }0 :_}o|g|}_  2 ͸$:7 26*62"66̆26û !8Ns#Fr@3I3q#p*|8^#V+*|8##^#V+*8}i3I3"8Ó3~8 "~8!9 *X8%:Z8 *|82@3*8{_{§3s>2 " !9" 1 * }o>"9 "" 1 !vV*M V!"M * #~ 0[#">.[x~ I[#;[*H V))*9 ~[#zY2< 2> >2; ͻͻ!= ʱ#45~6ҢG+~•>&<&#4~v>&~6&:= 2= v:> >&<&>###+:; G:<   [>2 *M |>* &&F#^#V:; O{_zW:<  I[2< 5y2; }[|6: ʡ:D *H *F G:J Os#r#}ˆ zʒʸ}"F "H y2J != 4~Ҹ2> !D ~w:=G> : : !p: { 2 2 { := w#*B +2\ Z  intadr: ds 2 otcadr: ds 2 ottadr: ds 2 ds 40 stack equ $ fotusr: ds 1 outfcb: ds 36 x"V"XHi&)))#"^!a`Aw#~!a"Z!`"\*XA#—A*V~w#¦!^5º#5*ZA~w#¾y2`*\DM*Z*X#:`=2`?Ң*Z*\"Z"\â7+!"] "^ \ !W ` !W := !y 4!D 5: ?*F 6:J O}R7zW{_~wA+~+}j _~K_s#r*F /w#6#"F }!J 4>###!*F >+w+!> ?!> ?!>>-?"R9*+++"8*R9:828*8A:o> -?28282828282828<2828>ů28͝@^9̀@S9 y?>28!8t@> 2S92[92R9y,28£?:828͝@d9:8ʰ?a9̀@S9:R928 28?:8@28*W !:G~#fo% #Gx=>W կ O _PGx!O 4#4#4#4iiRo&))* 4#4#4ɯGO* w#w#w#q# „!O w#w#w#w#!O T  !"M ͻoͻg*M "M !T 4#4#4* Gxxo$շ#}o|g|}!9t@y=7xH " !  " i`)))#"A! 6#+A* +~w7kbA+~wBa* ! Aw#W!53#4553+6#ͨIͨʖ‡:ͨ0_ GyO_+~#<_ß+q#__45_ wIͨ ^^ ›*ʠw#6?#!ʸ45#­a{_ɯw#   p#    .,:;[]=<>|low keyboard abort, 0ffh=don't allow 103h ?memry: $memry: ds 2 outusr: ds 1 dfldsk: ds 1 outdsk: ds 1 oldusr: ds 1 notail: ds 1 drusfl: ds 1 sigdig: ds 1 cmdadr: ds 2 nxtnma: ds 2 topnam: ds 2 inbtad: ds 2 incadr: ds 2 inbadr: ds 2ͨ ^^ ›*ʠw#6?#!ʸ45#­a{_ɯw#   p#    .,:;[]=<>|Iͨ ^^ ›*ʠw#6?#!ʸ45#­a{_ɯw#   p#    .,:;[]=<>|   File squeezer Jim Lopushinsky November 8, 1983 S ha no bee rewritte i assembl language A yo wil see i operate muc faste tha th ol S programqueez subroutine I read th inpu fil again, and writes the squeezed file. Input: Registe H̠ contain th addres o th FC  fo th origina fil (s tha i ca writ th filename in the s S i no 808 compatable. Th progra write ca utiliz th squeeze b searchin SQLI i the link step. Only 2 external refrences are needed: SQINIT Thi i th analysi phase S read th inpu file and analyzes the file for sququeezed file). Output: Registe has the return code: 0 No errors 1 Abnorma EOƠ whe readin th inpu fil second time. SQINIԠ itsel ha externa refrences oeezing. Input: Registe H contain th addres o scratc pa fo SQ Thi are o ra mus b a leas 3072 (0C00h) bytes. Output: Register A has the return code: 0 N whic ar resolve i SQLIB The 3 refrences in SQLIB are: MPBMUL Multi-byte binary multiplication MPBDIV Multi-byte binary division MPLSR Multi-byte logical shift right SQINI require externa refrence fro th co errors 1 Input file is already squeezed 2 Input file is empty 3 Squeeze fil wil b large the th input file. 4 Squeeze tablallin progra fo byt rea an byt write Thes subroutine ar calle fro SQINIԠ an S t inpu unsqueeze characters an t outpu squeeze bytes Th subroutine d no hav t preserv an registers, and must return conte or bit length overflow. Registe H contain th siz (i sectors o th squeezed file. Registe D contain th siz (i sectors o th input file. SQ Thi i th srol with a RET instruction. RDBYTE Thi th byt inpu subroutine On byt o dat i passed back with each call to RDBYTE. Input: none. Output: Register A contains a byte of data for squeezing. Z flag cl  ear (NZ true): byte of data passed. Z flag set (Z true): end of file reached. WRBYTE Thi i th byt outpu subroutine On byt o dat is passed to WRBYTE with each call. Input: Register A contains a squeezed byte of data. Output: none. Th WRBYT subroutin mus perfor it ow erro recover o termination. The main program should do the following: 1. Open the input file 2. Call SQINIT 3. Check for error1l::A#l21l>2Y:1_"4~27##~2R###^#V#^#V#F#N#"9&#"W*9|g}o|g}o####";:1O>q^#V"2*;:6_*4 ~#fo"=!>$qK*2>0q>!q*=>q>'q€:7*=#"=:6_ x¬ return from SQINIT 4. Re-open the input file 5. Open the output file 6. Call SQ 7. Check for error return from SQ 8. Close the output file If there are any questions or comments, I can be reached at 484-6945 ll*;:6_*4 ~#fo"=!>$qK*2>0q>!q*=>q>*q€:7x*=#"=:6_ x+l*N͋>l*P͋Vl*9"L͋nl!~ *L+"L}»͋l͋l*9"L!~ ror return from SQ 8. Close the output file If there are any questions or comments, I can be reached at 484-6945 O͋ ^ *L+"L}*W:S/_UN z]fE:RPYʁ)*W)"W:Y'2Y=i"U!zʒ#È*W{_zW:T/o&#l͋Kl͋K`i#""*Wy/Ox/G {_Jl͋%){_ `i)2 -y2SO:SGOG Hx2T:SOxfG [xɷ# *+++_ ? ͽ0 ™>$0· ¬ ů))# *9"L!"N"P*L|g}o"L*9+}o|  g"H!"F*F"D*D*L"JUAAͅ*L*D}o|g"DAA*F#"F*H͡ *N#"N*D)))))"@*J)))))"B#{*P#"P*@*B Fwx# •|} Bad drive.$ Read/Write Error!$ Loading directory track.$ Sorting directory.$ Writine 'deleted' entries at the end of the directory. Unlike SAPX, SORTDIR does not delete zero length files. As I label my user areas, with zero length files, it would obviously not be beneficial to destroy the labels just to have the directory in ordg directory track.$ Disk Statistics Number of compares : $ Number of exchanges: $ Possible entries : $ Active entries : $ Deleted entries : $ User areas active : $ Disk space used : $ Disk space free : $ Percent full : $ er. Having the directory in alpha order has a number of side effects: programs like SD, DD and the like operate faster, since they do not have preform a sort themselves; MLIST, TYPE-15 and other multiple- file handling programs enjoy the benefit Sortdir Version 3.1 Dave Rand 04/01/84 $ : $ Deleted entries : $ User areas active : $ Disk space used : $ Disk space free : $ Percent full : $ of having the files displayed in alpha order when a wildcard filespec is given; it becomes easier to locate a directory entry when using DU, or doing any operations on the directory itself. SORTDIR gives a report of some useful information, as is seen below. A0>sortdir b: Sortdir Version 3.0 Alpha One Micro-Consulting Ltd. Loading directory track. Sorting directory. <---- This step seldom takes more than Writing directory track. one second.  SORTDIR - Version 3.0 Dave Rand 10232-160 Street Edmonton, Alberta Canada SORTDIR is intended as a utility to ease the use of any CP/M based system. It simply places the directory in alphabetical order, and places all th Disk Statistics Number of compares : 1793 <---- How many compares were needed Number of exchanges: 0 <---- How many exchanges were needed Possible entries : 256 <---- Maximum # of directory entries Active entries : 112 <----   Number currently active Deleted entries : 144 <---- Number available User areas active : 0 1 5 15 <---- User areas 'in use' Disk space used : 894K <---- Used space (all user areas) Disk space free : 92K <---- Fretext or .COM file to prevent anyone from tampering with the file. Any attempt to access or run the file will display the message and refuse access. Refer to .DOC files. NSQ, & USQ are the latest in the Squeeze/Unsqueeze utilities. NSe space Percent full : 89% <---- Pecentage occupation of disk In all, SORTDIR is a fast, useful tool for maintaining directories! Q will "compress" a file resulting in space saving for storage of in transmission time by modem. Refer to .DOC files. SORTDIR will sort the disk directory and place listings for "erased" files at the bottom of the disk directory. Thus "erased" f First Osborne Group (FOG) -FOG/UTL#053 Copyright 1984 by First Osborne Group (FOG) to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribuiles might be reclaimed even if the disk directory has been packed. Refer to .DOC file. ********** AQM files are squeezed assembly language files. They may be unsqueezed using UNSQUEEZE utilities found on FOG/UTL.003, 004, 014, ation for profit or personal gain is strictly forbidden. For information, contact FOG, P.O. Box 3474, Daly City, CA 94015. ********** ARCADD, ARCCOPY, ARCDEL, ARCDIR, ARCGET, ARCTYPE & LBR-ARC are a series of ARCHIVE programs similnd 031. First Osborne Group Utility Disk Library Prepared by Jim Wack, November 1984 ar in function to LU.COM (Library Utility). It will "pack" a series of small files into one large file which in many cases will conserve disk space. Refer to appropriate .DOC files for more info. LOCK, MKEY, & UNLOCK will allow you to "Lock" any $9$#*6?w9+#6 $#6-" =_.:;<> T~# x^:! ~Š#y>#Šq   --> FILE: -FOG/UTL.053 CRC = 00 00 --> FILE: /UTL#053.DOC CRC = 65 60 --> FILE: ARCADD .COM CRC = E1 C1 --> FILE: ARCADD1 .DOC CRC = DD 46 --> FILE: ARCCOPY .COM CRC = 6A 6E --> FILE: ARCCOPY1.DOC CRC = 54 14 --> FILE: ARC of a file can be listed before an error message occurs. If you do not want to limit the number of lines listed, set this byte to zero. 105H=0 (00H) Exclude system files, when set to X'FF', totally ignores system files, and "taDEL .COM CRC = D1 05 --> FILE: ARCDEL .DOC CRC = FD E2 --> FILE: ARCDIR .COM CRC = 6E CB --> FILE: ARCDIR1 .DOC CRC = 54 87 --> FILE: ARCGET .COM CRC = 41 D9 --> FILE: ARCGET1 .DOC CRC = 9A BE --> FILE: ARCTYPE .COM CRC =gged" files. No error message is printed, the file is simply forgotten! If you would like to be able to list system files, just set this byte to X'00'. 106H=255 (FFH) Exclude extensions, when set to X'FF', will exclude files like .CO D6 EE --> FILE: ARCTYPE1.DOC CRC = 0B E6 --> FILE: LBR-ARC .COM CRC = AD 4E --> FILE: LOCK .COM CRC = 6B 39 --> FILE: LOCK .DOC CRC = 71 59 --> FILE: MKEY .COM CRC = BB 59 --> FILE: MKEY .DOC CRC = EB 67 --> FIM, .OBJ, .INT, .ABS and so on. If you would like to list these files (?), just set this byte to X'00'. 107H=255 (FFH) Mask control characters, when set to X'FF', will only allow X'0D', X'0A', X'07', X'09' and X'08'. If you want all contrLE: NSQ .COM CRC = 6E 83 --> FILE: NSQ110 .DOC CRC = 0A 33 --> FILE: SORTDIR .COM CRC = EB E4 --> FILE: SORTDIR3.DOC CRC = 83 BD --> FILE: UNLOCK .COM CRC = 41 C1 --> FILE: USQ .COM CRC = 10 5A --------------------- --> FILE: ARCADD .COM CRC = E1 C1 --> FILE: ARCCOPY .COM CRC = 6A 6E --> FILE: ARCDEL .COM CRC = D1 05 --> FILE: ARCDIR .COM CRC = 6E CB --> FILE: ARCGET .COM CRC = 41 D9 --> FILE: ARCTYPE .COM CRC = D6 EE --> FILE: LBR> SUM OF CRCS = 9F 9F TDIR3.DOC CRC = 83 BD --> FILE: UNLOCK .COM CRC = 41 C1 --> FILE: USQ .COM CRC = 10 5A ----------------------ARC .COM CRC = AD 4E --> FILE: LOCK .COM CRC = 6B 39 --> FILE: MKEY .COM CRC = BB 59 --> FILE: NSQ .COM CRC = 6E 83 --> FILE: SORTDIR .COM CRC = EB E4 --> FILE: UNLOCK .COM CRC = 41 C1 --> FILE: USQ .COM CRC =   10 5A ---------------------> SUM OF CRCS = 25 28 M CRC = 6E 83 --> FILE: SORTDIR .COM CRC = EB E4 --> FILE: UNLOCK .COM CRC = 41 C1 --> FILE: USQ .COM CRC =imum value patched at 108H, the maximum drive and user values are automatically set to 15 (0FH). This allows a SYSOP, for example, to have full access to all drives/users on his system simply by going into a protected user area. Disclaimer a!9"1P *."   USQ Version 1.20 Dave Rand 01/07/19842 2:  Use: USQ afn [afn afn ...] [destination drive:]>2  *!6x :ʗ2_!6~#a{_: : _!l2nd Warning: ---------------------- While this program has been tested, no liablity will be assumed for its operation, or lack thereof. Feel free to use this for personal use, but if you wish to bundle it with other software, or <2m]"!"!X =:] P  Output drive = :\2@ :_͋"*"*~ #pwb"*}š No file(s) found.*""* |g}o|g}o%| Out of memory. Use more specific filenames.*" $$.""* sell it itself, please contact me for more information. Dave Rand 10232-160 Street Edmonton, Alberta Canada T5P 3E9 (403) 484-4114 voice (403) 489-0944 Data (300 baud, up occasionally)  "!X  6 !Gxwgʯ#Ò!"=!\D :2D!PQ6D< No directory space. Aborting."K Files has illegal decode size. Aborting.P "|rs#r#s#r#*+N!‰_iu*͆D<µ Close failed...g  ERROR - Checksum error in file 1P :—1~#_  |}~# **,~#"*""X* 5"*>O**}q#"͆yi**D¼*ڒ*" Disk full. Aborting.go  Premature EOF on fil"#~:\ !"!""~ 7 '23co252Y>2 x:( ͫ(v(,]5\9]t:m !m!Z~Ͷ؆OUw#{_ /:8@[?3!yo0$!Zx_~_wyO!Z0!~e... aborted.g:!=2:C>C4>==2:2:O:\O>=2yO!P k##^#VzJy2z>ʈ{/:\ʞ_\<º: _=!_#:\ ~#\<ºì: G: < xw#{_.&"}!]>? (#2 !~2 #~!9 ! 6#9]9<!  2S͖!4> [vʀɯ2 !* !4: ! OUww##! ~6( *@>:!~ # >.!%~ 5# *!\*Y@G:a:  ~# x S[!5 vʀ99`]!I!B: G~w9!#+++6L~ùA valid keyword must be specified $ùInvalid keyword $ùNo file $óLimit of 32 matching files $ͳͿóFile|#6 †.¶ʶ#*¦6?èw•ʽì#6 ¶#6¿" =_.:;<> ~# x $has system attribute $ͳͿ+ͳempty $9ùNo directory space for operation $ͳͿkólocked $zù------------Aborted $9]ùDisk full - aborting $ ͳÚ: !~( @>:#~ (#>.!~ (#> ]TMPPRLs1 2͉x͏ڢͪʺ!"(0:_{!h6\!O *|?  * "\ ˯<*| _ ==== !~_#y# Qqop&cQD W~G' 3vr]tff9-4 %a3 >N7A$xH#*w:~[W0&.m̐Jv_"w<]uv@o>yV^iw:d>VSM)GalJO2CM1 XZus-XJ!0NuA  acaBH         To reverse the process, give UNLOCK (filename or match) (keyword) - with, of course, the same keyword. The MKEY program is in case you forget your keyword; you give MKEY (filename) and it tells you what it was. Naturally, this means you shouldn't leave copies of MKEY lying around for spooks to use. If copies of MKEY are to be public at all, they should be "locked" (with an unforgettable keyword!). You are not protected from people assiduous enough to disassemble the programs and  ˮͬ ˮ ٮ The programs LOCK, UNLOCK and MKEY are for the protection of those very private files you might leave in a shared system, or that other people might get a chance to copy off one of your disks. Give LOCK (fibreak the code. But they'll have a bit of work to do. Near the end of each of the three listings is a table of "mush" - random bytes used in the coding process. You can customise your copies by altering this table. It lename or filematch) (keyword) to lock one or more (up to 32) files. The keyword can be up to eight characters (no distinction between lower case and capitals). Once a file is locked, any attempt to read it with TYPE, or ED, or a word processor, orwill usually be sufficient to alter the eight bytes at the address "nmush", which are used in coding the keyword. But alter all of it if you wish. Make the same alterations in all three programs. ͯ The lock-unlock system is more flexibl to execute it as a .COM file, will just give the message ==== And if your local spooks get out a debugger such as DDT, or whatever, to look into the file itself, they'll find that the contents have been fairly thoroughly scrambled. e in use (and more secure) than M/PM password facilities. Note that, for your benefit, LOCK alters a .PRL extension to .LRL, and UNLOCK alters it back.    s1P<2|Y,*Y,h͖,,T{\\3!*yo0$!x_~_%$wyO3!*yo0$!x_~_wyO!**#!!!~OUw{_#!~ (/:8@[?#"͗INo file $5͗IFile irregular or not locked $m͗!~͝#z͗ Keyword - $ Don't forget it again! $ _ ==== !~_#y# Qqop&cQD W~G' 3vr]tff9-4 %a3 >N7A$xH#*w:~[W0&.m̐Jv_"w<]uv@o>yV^iw:d>VSM)GalJO2CM1 XZus-XJ!0NuAacaBH;MKEY - Give "mkey (filename)" base equ 0 dmad1 equ base+80h fcb equ base+5ch fcr equ 32 stackp:: dw 0 ;keeps stack ptr pasbuf:: ds 8 start:: ld (stackp),sp ld sp,stac0 call open inc a jp z,nofdis xor a ld (fcb+fcr),a ld de,buf0 call rdsec jp nz,nregds ;if eof ld de,buf0+80h call rdsec jp nz,nregds ;if eof call cpasgt ;gets coded keyword from old and new dmush call dmshmk ;reconstitutes dmush call comp ;ret nz if not correct jp nz,nregds call pasinv ;decode keyword from old and new nmush   call chcvld ;ret c if invalid keyword jp c,nregds call pasdis ;display valid keyword reb:: ld sp,(stackp) jp base ;sr open read fcb open:: ld de,fcb ld c,0fh call base+5 ret ;sr read (fcb) to (de), ret nz if eof rdsec:: ld c,1ah call base+5 ;sm old and new nmush pasinv:: ld ix,pasbuf ld de,4 ;arb start offset ld b,8 ;ct invlp:: ld hl,buf0+50h ld iy,pag1+50h add hl,de add iy,de ld a,(hl) ld c,a and 55h rla xor c sub (iy) ld (ix),a ld a,e add a,3 ;col incr and 7 ld e,a inc ix djet dma ld de,fcb ld c,14h call base+5 ;read sequential or a ret ;nz if eof ;sr get coded keyword from old and new dmush cpasgt:: ld c,51 ;arb start offset ld b,8 ;ct clp:: ld hl,buf0+80h ;new dmush ld a,c add a,l ld l,a jr nc,clp2 inc h ;startnz invlp ret ;sr ret c if invalid keyword char chcvld:: ld hl,pasbuf ld b,8 vldlp:: ld a,(hl) cp ' ' jr z,vldchr cp '/' ret c cp ':' jr c,vldchr cp '@' ret c cp '[' ccf ret c vldchr:: inc hl djnz vldlp xor a ;clear carry ret nofdis:: ld  byte addr clp2:: ld ix,buf0+50h ;new nmush adr ld a,b and 7 ld e,a ld d,0 add ix,de ld a,(hl) ld e,a and 0aah rra xor e dec h sub (hl) inc h ld (ix),a ld a,c add a,23 ;col incr and 7fh ld c,a djnz clp ret ;sr reconstitute mush dmshmkde,nofmsg call string jp reb nofmsg:: db 'No file',0dh,0ah,'$' nregds:: ld de,nregms call string jp reb nregms:: db 'File irregular or not locked' db 0dh,0ah,'$' pasdis:: ld de,pasms1 call string ld hl,pasbuf ld b,8 pdlp:: ld a,(hl) call disp i:: ld c,51 ;arb start pt ld b,80h ;length mlp:: ld hl,pag1+80h ld a,c add a,l ld l,a jr nc,mlp2 inc h mlp2:: ld ix,buf0+50h ;poss keyword ld a,b ;use b value for keyword ptr and 7 ld e,a ld d,0 add ix,de ld a,(ix) add a,(hl) ld e,a and 0aah nc hl djnz pdlp ld de,pasms2 call string ret pasms1:: db 0dh,0ah,'Keyword - $' pasms2:: db 0dh,0ah,0dh,0ah,'Don''t ' db 'forget it again!',0dh,0ah,'$' string:: ld c,9 call base+5 ret disp:: push bc push de push hl ld e,a ld c,2 call base+5 p rra xor e ld (hl),a ld a,c add a,23 ;col incr and 7fh ld c,a djnz mlp ret ;sr compare reconstituted mush comp:: ld hl,pag1+80h ld de,buf0+80h ld b,80h comp2:: ld a,(de) cp (hl) ret nz inc hl inc de djnz comp2 ret ;sr decode keyword froop hl pop de pop bc ret pag1:: .phase base+100h db 0dh,0ah,'==== ',0dh,0ah,1ah ;as a seq of instns, this gives a jump either to ;122h or to 173h fill:: ds base+122h-fill ;foll instn shd be 122h ;173h will be set to jr 122h later !  sendms:: ld hl,base+100h ld a,(hl) cp 1ah jp z,base push bc push de push hl ld e,a ld c,2 call base+5 pop hl pop de pop bc inc hl jr sendms+3 ;next byte 13ah db 0f5h,79h,10h,0afh,23h,09h db 51h,00h,19h,71h,0d9h,6fh,0b8h,0b6h db 70h,26h,0a6h,63h,51h,03h,44h,20h nmush:: db 57h,7eh,0c5h,14h,8fh,47h,0c1h,27h ;adr 150h db 0feh,0eeh,9fh,0edh,09h,0a9h,33h,76h db 0e2h,11h,72h,0d7h,0e3h,5dh,74h,66h db 66h,39h,0fh,2dh,15h,34h,0ch,81h db 25h,61h,33h,09h,12h,3eh,4eh,37h db 96h,0b0h,0ebh,41h,89h,0a0h,24h,78h dmush:: db 48h,0e0h,23h,0afh,2ah,77h,0f6h,86h ;adr 180h db 0c3h,3ah,0d8h,7eh,5bh,7fh,0c1h,0eh db 57h,0f8h,30h,26h,11h,0fh,2eh,0d8h db 08h,6dh,0bah,7fh,8ch,0cch,90h,4ah db 95h,0a5h,0e4h,9fh,76h,5fh,0e0h,01h db 1fh,22h,9ah,77h,3ch,5dh,0a0h,0a7h db 75h,0a7h,0cfh,76h,0ach,40h,6fh,0aah db 3eh,79h,56h,5eh,69h,77h,3ah,64h db 3eh,56h,53h,4dh,01h,29h,47h,0b2h db 61h,85h,6ch,4ah,0a9h,0a2h,0d8h,0f3h db 9fh,4fh,0bah,32h,0c2h,43h,4dh,31h db 8ch,0ach,09h,58h,5ah,0fh,75h,0f7h db 0aah,73h,0a5h,9dh,0f3h,2dh,0beh,58h db 03h,4ah,0d9h,21h,30h,4eh,0d7h,75h db 0a8h,98h,82h,02h,41h,9ch,02h,0eh db 0c4h,61h,63h,61h,10h,0a2h,42h,48h .dephase buf0:: ds 100h ds 20h ;for stack stac0:: end start "  #p S˜[!5 ͉ʓ88hp!H!A: G~w8!#+++6PA valid keyword must be specified $Wrong keyword $No file $Limit of 32 matching files $File $has system attribute $1empty $?No directory space for operation $qunlocked $------------Aborted $8pDisk full - aborting $irregular or not locked or wrong keyword $ \TMPLRLs1 2͜ʀ͢ڪ(ͩ!"(/:_{!h6\!O *|?  * "\ ˯<*| Ù: !~( @C>:C#~ (C#>.C!~ (C#> C_ ==== !~_#y# Qqop&cQD W~G' 3vr]tff9-4 %a3 >N7A$xH#*w:~[W0&.m̐Jv_"w<]"#~:\ !" "!~ 7 :͂24 ͩ»p ͩ»»E9v2X͋:( ;(͉(4p=b8p|:m !m!~؆OUw#{_ /:8@[?3!yo0$!x_~_wyuv@o>yV^iw:d>VSM)GalJO2CM1 XZus-XJ!0NuAacaBHO!0!~w#{_.&"!]>? (#2 !~2 #~!8 ! 6#8p8<!P 2Sͩ!4> [͉ʓɯ2 !p !4: !POUqw##!0 #  $  %  &  '   DISK.DOC FOG/UTL.053 First Osborne Group (FOG) Utilities Disk ARCADD, ARCCOPY, ARCDEL, ARCDIR, ARCGET, ARCTYPE & LBR-ARC are a series of ARCHIVE programs similar in function to LU.COM (Library Utility). It will "pack" a series of small files into one large file which in many cases will conserve disk space. Refer to appropriate .DOC files for more info. LOCK, MKEY, & UNLOCK will allow you to "Lock" any text or .COM file to prevent anyone from tampering with the file. Any attempt to access or run the file will display the message and refuse access. Refer to .DOC files. NSQ, & USQ are the latest in the Squeeze/Unsqueeze utilities. NSQ will "compress" a file resulting in space saving for storage of in transmission time by modem. Refer to .DOC files. SORTDIR will sort the disk directory and place listings for "erased" files at the bottom of the disk directory. Thus "erased" files might be reclaimed even if the disk directory has been packed. Refer to .DOC file. TYPE will display a text file in a paged format. Refer to .DOC file. Jim Wack FOG Utility Librarian September 1984  to .DOC file.