IMD 1.16: 28/05/2007 16:17:32 -FOG/UTL003   \X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ϯ2 Ї!ֶ2:2a{_:ַʖ:ַ>Ľʖ:=2–!B!6#5ʖ:ַĽ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ѷ"͌#>?͌͘ =_.:;<> Oхo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USERS!yO#< Ty#O 3ү21y_͸2y2ͽ:Ϸ˜1͘A͌>>͌92^ :ַ¥.!_~#fow]ԭՎե!v"!çREAD ERRORçNO FILE^:ַ ! ~ 3#0 Wx x р т G ~ # 3x~#B!Y~ɯ2:ַ=!־ý:ַ=!־:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ԯw4!Y~ʆ͌†t=ʆf ^ T ԯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yոpsp2mÆÆf ͧÆFILE EXISTS _: É: :ַʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2֯2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !ֶ Â$$$ SUBSיץ׫ױ"C{2!"E9"1Aگ22!ty)K!G_^#V*Cِ~E ,&-AGMSڛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :ڷE B 2>: ڷb# : ڷy! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ھ Hù H H $O͐: 2 *CN#   x: 2 p&x~+é7د2 H! >w_: ! ھ5ͤNkͱ¦ͱxʊ#Nx: ڷ! ږ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \۷Sۀ*C :qn& ^#V>O^"*}:*)=":O:䡵o"*C *C!ͮ~2~2ͦ:2ͮ:ۯO:w:w |g}o*䯆#  ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ܾ,w͜͸Ͳ!!N#F$**O!~#:Aھ#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sޖ-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌xܯ2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻۯx>2>2ͻ:!Z2:Eڷẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:Eڷ͊:==»y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26ۯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{  s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bھw!>2*C~=2u:B2~2wE:A*Cڶw>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2 4 %-ßð5OjcccccccccccccÄÎ@UAUTOST CRUN2 BUDGET1 CRUN2 LEDGER1 CRUN2 ANNTOT1 3456789     50$5@*-?Oy2:Oy{o{_"!91*>2͚>2ͪ2P2R22y2i&))))Cxj!:2C*S}O|ȯ2Ry2 C:Uy2Vi`n&G>2x21:f2:iO<:j2l>1͟j >!"2`<2>22!"!"!c"@!:(;~(7O8Osborne Computer System 60K CP/M 2.2A >(!!:O2RK:"ȯ2Py2# >2R*"S:V<!R~*5:U< *S#"S2U>K>2Q:":#̪:"2!!:0)2*!P~6(! #ͪ:22*"":22:!>!Q~6:2*":2>_!'" !4>2* j2":= 2"ɯ2": 2~#O !N!V!^=!n=!^=!V=!f=:_^#fkv@IN7lT: :^!~( *~4 h'_!knf^VSR}2:` y :h/2h h:h*Z)>d8 :aȯ:adZ} }d !6w:b +w++N#S͎͎hhN:g > NI @II y2*:, O:*߱:ʭ:@OKh Qh}(2_Kh :ͣ(!~6: OKh Nh ?Kh : >*2)>2)>.2)>2)>2)>2)>2)>2 : >*2)>2)>.2)>2)>2)>2)> 2)>2 :)@(=:~ :)2~((2~:)/Ol(y/2)>"2)>2)>2>2  -FOG/UTL003SQ COMbSQ/UNSQ DOCSQCHNG1 DOC SQCHNGS2DQC SQUEEZERDOC1 LINES COMTYPESQ COM@ !"USQ COMJ#$%&'LINES DOCLIST COMLIST DOCCOMBINE ASM2COMBINE COM(D COM )D DOC*UNLOAD COM+DISK DOC,*K͞+213I'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o  #z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r! ~#fo6! ~#fo`i~#fo)~#foͪ`i^#Vr+s! ~#fo! ͧ! ͭ!*ͭ`iw#w`i~#fo͡! s#rzŽ! 6 #6`i~#fo! ! ~#fos{ ½`i~#fo! 6`i^#Vr+se! n}! ͪ! n}OͰ!91.3 06/15/81+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77File squeezer version %s by Richard Greenlaw 251 Colony Ct. Gahanna, Ohio 43230 Accepts redirection and pipes. Omit other parameters for help and prompt Parameters are from command line or one-at-a-time from standard input and are output drives and i!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15nput file names. Empty to quit. 0 !!/"b !9DM! ~#fo#n}:§ ! ~#fon&$ |ʒ ! ~#fo##n} ! ~#fo! ' ! ~#fon}2: ç ! ~#fo! ' ! ~#fo`is#r`i~#fon} `i~#fon}* `i~#fon}? ! ~#fo!! ' `i^#Vr+sõ ! )>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>6!:! * ! ~#fo#n}:- ! ~#fo##5 ! ~#fo! * ! `is#r`i~#fon} `i~#fon}. `i~#fo#n}{ `i~#fo6 `i~#fo##n}qʗ Qʗ ʬ ÷ ! ~#fo!< ' `i~#fo###6`i~#fo##6Q `i^#Vr+sJ !] ! * ! ! ~#fo- !9 OutpuT#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"2:>:2:>2:`i6#6`i~#fot drive =%s ERROR - Ignoring %s Ambiguous name %s ignored %s ignored ( already squeezed?).QQQà !Ñ""/#xüæ`#Ý$!9DM! ~#fo! ~#fo! e ! ! ~#foh #| ! ~#fo! e !  ! ~#fok #| ! ~#fo!e   ! n !":!"e q ! t ! n ! ~#fo!  w !.e ! ! ~#foh #|x ! ~#fo!:e q ! z ! s#rzʹ !  ! ~#fo} #|¶ !Ze { !qe ! n !  ̀ !  n !9 %s -> %s: Can't open %s f|g}os*1I! nѯg"1I*0I! nѯgW}20I`in&*0I&҃`in*1I! ng|g}os! n*0IѯgWs*.I­>20I! n}¥!ê`in&! ~#foͩ".I#|!".I*.I)*G~#fo"1I*.I)Fn}20Iþ!9!9DM`iw#w`ior input pass 1 Can't create %s analyzing, squeezing, Can't open %s for input pass 2 ERROR - write failure done.ÐfÄ1!9DM{! ~#fo~`is#r`i~#fo#|`i6#6`i~#fok!:! s#r~#fo#|! ~#fo^#Vr+s`i~#fo~#fo]`i~#fok!:w#w`i~#fok!:##6#6`i~#fok!:6#6`i^#Vr+s!9!9DM! s#r! s#r! s#r! ~#fo! ~#fok!:~#fo! ~#fo! ^#Vr+s! ~#fo! ~#fok!:~#fos#r! ^#Vr+́! s#r! s#r! ~#for! ~#fok!:~#fo|d! ^#Vr+s)! ! ~#fos#r! ^#Vr+s! ~#fo! ̈́! ~#fo! ͇͊*'F!͍>20I!".I! 9û !!9DM! ~#fo!vͿ! ~#fo*:Ϳ! ~#fo#n}:sÆ! ~#fo#! s#r! 6! w#w! ~#foҫ! ~#fok!:~#fo! s#r! ~#fo! ~#foҝ! ~#fo|ʝ! ~#fok!:! ~#fos#r! 6! ^#Vr+s#! n}n! ~#fo! w#w! ~#fo! ~#fok!:~#fo! ~#fo! ~#fo##s#r! ~#fo! ~#fon&! ^#Vr+sn}*'FͩS!Z*'F! s#r! ~#fo! ~#foͿ! w#w*'F`is#r! ~#fo! ~#foҝ`i~#fok!:##~#fo! s#r`i~#fok!:~#fo! s#r! ~#foͩ! ~#fo#͉s#r! ^#Vr+s! 9%v!9DM! ~#fo++`is#r`i~#fo|{! ~#fo+`i~#fo! ~#fo"`i^#Vr+sD!9Êv!9DM`i6#6! ~#fo`i~#fok!:##! ~#fo~#fos#r! ~#fo! ~#fo! ^#Vr+s)~#fos#r! ~#fo*'F! ~#fo! s#r! ~#foͩ?! ~#fo#P*'F! ~#fo! s#r! ~#fo! ~#foͿ! ~#fo! ~#foͿ! ^#Vr+s`i^#Vr+sÊ! 9ì!9DM`i6! 6*0I! nѯgW9! n}`in&`in*1I! ng+!! ~#fo͇`i~#fok!:! ~#fo~#fos#r`i~#fok!:`i~#fok!:##~#fok!:~#fo`i~#fok!:~#fok!:~#fos#r! ~#fo`i~#fos#r! ~#fo+!! ~#fo͇`i^#Vr+sÙ! ~#fo~#fo"'F!9!9DM`iw#  w`i~#fo(`i~#fo)F6`i^#Vr+s!971!9DM! ~#fok!:##~#fo`is#r! ~#fok!:~#fo! s#r`i~#fo#|! ~#fo#|! ~#fo)F! ~#fos! ~#fo)*G*,I! ~#fo|g}os#rm`i~#fo#|+*,I! ~#fo6#6͐͐ ~#fo*2}$! ~#fo͐)~#fon}pî! ~#fo͐)~#fo#n}oË! 2! ~#fo͐)~#fo#Ͷ#|»! ~#fo͐)~#fo#!!͹ͼ>22!! ~#fo͐)~#foͿ|*2&|g}o}22!24! }/o|/g|g}o",I`i~#fo! ~#fo#4! ~#fo#|m*,I! ~#fo|g}o",I! ~#fo! ~#fo#4!9|v!9DM! ~#fo?#`is#r! ~#fo! ~#fo)~#fo! s#r`i~#fo! ~#fo`i~#fo! ~#fo?! ~#fo`i~#fo)~#fok~#fo͐)~#fo#"2! ~#fo͐)~#fo#n}[! ~#fo͐)!s#r! ~#fo͐)"2p*2&|g}o}22! ~#fo͐)~#fo#n}›!!͹ͼ! ~#fo͐)~#fo#!6! ~#fo͐)~#fo##|! ~#fo͐)~#fo#!!͹ͼ!:~#fo! ~#fo`i~#fo#)~#fok!:~#fo?`i^#Vr+s! ~#fo`i~#fo)~#fok!:~#fo! ~#fok!:~#fo! ~#fo! ~#fo)! ~#fo`i~#fo)~#fos#r! ~#fo`i~#fo)! ~#fos#r! ~#fo`i~#fo! ~#foy!9>2 :!24*2}…͐! s#r͐͐ ~#fof! ~#fo͐)! ~#fo͐#)~#fos#r! ^#Vr+s͐ ^#Vr+s`i^#Vr+s*2++"2ë͐ ͐s#r! ~#fo͐ ~#fo)w#wù! ^#Vr+s`i^#Vr+s!9Can't open %s 2 :! ~#fo":*:>V>e>b>ot>2 :!!!":! ~#fo":*:«*:ҫ*:#":z*:>º>>>*:":>2 :*:>2 :!>2 :*:":>2 :*:!ction/pipe specifierCan't create %s 5`# '--!9DM*2}ʙ! n} ]!6! )!6! n&)#|„!!,/*2&|g}o|™! 2|ʹ!2+++|¹/! n} ! !2! n&!2File output error; disk full! Bug - bad state +&--!9DM*2}\! 2"`is{ Y! 2"`isq!%`is{q(`in}€!ê`in} ¢`i6 *2}¢! !%`in&ê!9Ñ" '-A'-"!9DM{22{22{22! ~#fo͐ ~#fo)"2! 6#6`i?  /#-`#Ý$-V.*2}) ! 2 ! *2}ʋ !6! !6 !6 ! !  *2}ʋ *2! s#r*2w#w*2*2 tempin.$$$tempin.$$$tempout.$$$ +91#~'1##1a{ !pn1!*w#O1:**f1*!ѷ! , FNxg>Goy1$!9DM! n&0ͯ--! n&9ͯ7--!9DM`iw#w͐~#fon&4-}ʄ-͐ ?͐^#Vr+snѯg`is#rE-͐Ë-!9Ú-ÿ+!9DM! n&͗-|-! n&-! n& 7:O*o` !\&!7*!!.&*!1.&!.!, !\&!TELk7b.ó0 '-7*^#V#zj.+V+^+u.*Y.!.!\._.Broken pipe 7,2q*&:q):.=.=r:qo&.-á.7*.\!*.#7:)~:,"s!"u*|*u/*~#V/"*s*u/#"u*+"C/7*|DM**/ڰ/>fls c: b:*.AQM d: *.TQT |usq The above example simulates a "pipe" indicated by the "|" by sending the "console" output of the fls.com program to a temporary file and then running the sq.com progam with options which cause it to read its parameters from its "console" inThis diskette contains many source files which together form three executable programs: SQ.COM Squeezes files and creates a new one with similar name but with a Q in the second letter of the file type. USQ.COM Unsqueezes files created by SQ, creatput, which is really redirected to come from the temporary file. This DOES run under plain old vanilla CP/M! Many of the smarts are burried in the COM files in the form of library routines provided with the BDS C package (available from Lifeboat).    You will find much more documentation in the DOC files and, especially, in the front of the source (.C) files. In general, these programs accept simple parameters either on the command line or from the console (interactive mode). Using the redirectiold one appears earlier in the directory, so it is used instead of the new one. The DIO package which forms DIO2.C, SQDIO.C and USQDIO.C has been changed to always erase TEMPIN.$$$ as a program exits, even though that program didn't create it. An on or piping of the console input and output streams built into these programs provides most of the flexibility.these programs accept simple parameters either on the command line or from the console (interactive mode). Using the redirectiexplanation: I chose to build a new encoding table for each file because there are so many different tables required for efficient packing. Consider ASM files which are all upper case and C files which are mostly lower case. But some ASM files are botThe first version of USQ forgot to close input files and sometimes exceeded the limit of open files in the BDS C run time package. Both USQ and SQ were changed so that both normal and error exits would close their files properly. This error arose beh or mostly lower case. And English text is usually mixed, but Wordstar files contain illegal ASCII codes for soft spacing. If I allocated codes to all these values there would be very poor compression for some major categories. A lot is saved when cause the original versions only handled one file and relied on the automatic closing at program exit. I also noted some weird situations when using a pipe to connect FLS to USQ or SQ. Sometimes the latter reported a different list of files than was many byte values don't need codes. Even allocating long codes to the oddballs costs something in the length of other codes. And which values deserve the long codes? It varies! Dick Greenlaw requested! The problem occurs when a program is aborted leaving a pipe input file (TEMPIN.$$$) on the current diskette. The next run creates its TEMPIN.$$$ by renaming another file. You can end up with both TEMPIN.$$$ files on the same diskette!!! The   v"CHANGES.DOCM  ! "#&$'(%*),+-./21543067o8:9;=>@<?AC_DBFGJEKILH rQ^fd7,z _obdĚ>_wtoHE/%o]OΜ }ކɛ{_"2;/+g/`$U0K?vbG8#TF􊵾S=Vt}Ɇ=#A_b$3i!o%ꦖ U:k6#K^KvKZ6sD}&ԷZ}#w4CM-+}?*Q5#+K,Tx2Fby̮z4Iw|]K/6#wt|W̎}fӌLBCUt|VOַnjyQ^Wr $Ѻ5D[u8]E_\=CR^z%eov0ټj,^H03iG,,USAGE AND RECOMPILATION DOCUMENTATION FOR: 7/18/81 SQ.COM 1.3 File squeezer USQ.COM 1.4 File unsqueezer FLS.COM 1.1 Ambiguous file name expander DISTRIBUTION RIGHTS: ɠ allo unrestricte non-profi distributio(SSPwdTg$tSKX^P+ذgadFojy#3 3YX. R*?#aghWz;IAU7DvjK**өAM}C;*ut|75150S0}`y#Ըr*4fls c: b:*.aqm d: *.tqt |usq For detailed instructions see USAGE. uc a dictionar files ma shrin a muc a 48% Squeeze file loo lik gibbers an mus b unsqueeze befor the ca b used. Th unsqueezer USQ expand squeeze file int exac duplicate o th origina o provide quick  Thi DOEӠ ru unde plai ol vanill CP/M Man o th smart ar burie i th CO file i th for o librar routine provide wit th BD packag (availabl fro Lifeboat). Th abov exampl simulate "pipe (indicate b unsqueeze displa o th top o (o al of squeeze䠠 files Unsqueezin require onl singl pass. Bot S an US accep batche o wor specifie b list o fil name (wit drive i needed an䠠 miscellaneou options. Tth "|" b sendin th "console outpu o th fls.co progra t temporar fil an the runnin th sq.co progra wit option whic caus i t rea it parameter fro it "console input whic i reall redirecte t com frohey accept these parameters in any of three ways: 1. On the CP/M command line. 2. From the console keyboard. 3. From a file. Th FL progra ca b use (o th sam comman line! t expan paramete list containin wild-car ( th temporar file. THEORY: Th dat i th fil i treate a th byt leve rathe the th wor level an ca contai absolutel anything Th compressio i i tw stages firs repeate byt value ar compresse an the Hu  ffma cod i dynamicall generate t matc th propertie o eac particula file Thi require tw passe ove th source data. Th decodin tabl i include i th squeeze file s squeezin shor file ca actuall lengthe txyz.aqm wil creat fil xyz.as o th drive overwritin th original (Th origina nam i recreate fro informatio store i th squeeze version. Th squeeze versio i no disturbed. Eac fil nam i processe i order an yhem Fixe decodin table ar no use becaus Englis an variou compute language var greatl a t uppe an lowe cas proportion an us o specia characters Muc o th saving come fro no assignin code t unuseo ca lis al th file yo ca fi i command Th fil name give t S an US mus b specific Yo wil lear belo ho t us th FL progra t expan pattern lik *.as (al file o typ asm int lis o specifi name an fee byt values. Mor detaile comment ar include i th sourc files. USAGE TUTORIAL: A usual yo hav t lear ho t tel th program wha t d (i.e. wha parameter t typ afte th progra name) Firs wil introduc th vario the int SQ or USQ. Th abov example le th destinatio driv defaul t th curren logge drive whic wa show i th promp t b A Yo ca chang th destinatio driv a ofte a yo lik i the parameter list. For example, u possibilitie b example Then I will summarize the rules. I th simples cas eithe S o US ca simpl b give on o mor fil name (wit o withou driv names): A>sq xyz.asm A>sq thisfile.doc b:thatfile.doc wil젠 creat A>sq x.asm b: y.asm z.asm c: d:s.asm wil creat x.aq o th curren drive A y.aq an z.aq o th driv an s.aq o th drive Not tha th firs thre original ar o driv an th las on i o driv D Remembe tha eac para squeeze file xyz.aqm thisfile.dqc an thatfile.dqc al o th curren drive A Th origina file ar no disturbed Not tha th name o th squeeze files are generated by rules - you don't specify them. Likewise, A>usq mete i processe i order s yo mus chang th destinatio driv befor yo specif th files to be created on that drive. Eventuall yo wil hav diskette wit man squeeze file o the an yo wil wonde wha i i whic file I t  he weren' squeeze yo woul us th TYP comman t loo a th comment a th beginnin o th files Bu squeeze file jus mak mes o you CR scree whe yo TYP them s hav provide th require featur a previe  comman lin whic cause th progra t b run Fo reason whic wil becom apparen later hav als provide a interactiv mode I ther ar n parameter (excep directe i/ parameters describe later o th comman lin optio t th US program. A>usq -10 x.bas b:y.asm wil no tak th tim t creat unsqueeze files Instea i wil unsqueez th firs 1 line o eac fil an displa the o you console Th displa fro eac fil consiste SѠ an US wil promp wit a asteris an accep parameter fro th consol keyboard Eac paramete mus b followe b RETUR an wil b processe immediately A empt comman (jus RETURN wil caus th progra t exi bac ts of the file names, the data and a formfeed (FF). Also, A>usq - c:xyz.mac wil unsqueez an displa th firs 65,53 line o an file listed That' th bigges numbe yo ca giv it an is intended to display the whole file. Thi CP/M Tr i - i wil hel yo understan wha follows. No let ge int directe i/o whic wil b ne t mos o you bu wil sav yo s muc wor yo wil wonde ho yo eve go alon withou it. Perhap yo frequentl squeez o previe optio als ensure tha th堠 datᠠ i displayable Th parit bi i strippe of (som Wordsta file us i fo forma control an an unusua contro character ar converte t periods You'l se som o thes a unsqueez th sam lis o file an yo woul lik t typ th lis onc an b don wit it Us a edito (o FLS describe below t creat fil wit on paramete pe line Fo exampl cal i commands.lst. Then, A>sq fls c: x.asm y*.asm >temp.$$$ wil simpl pas th firs tw parameter throug t th consol output whic i bein redirecte t fil calle temp.$$$ Bu th thir paramete wil b replace b al th file o th cur the screen to themselves. For example, A>sq out wil sen th progres comment t th fil "out" whic yo ca TYP later Th routin displa o th progra nam an version etc. wil stil g t th console. mor practiren driv whic ar o typ as an have names beginning with y. FLӠ i smar enoug t kno tha lette followe b colo an nothin els i destinatio driv nam intende fo S o USQ I wil als trea an paramete beginnca exampl i t sen tha informatio t th consol an t th file. A>sq fls b: c:*.aqm *.aqm -10 stuff.dqc >t"pipe" I i b fa th mos importan t you Recal tha promise t tel yo ho t us ambiguou fil name suc a *.as (al file o typ as o th curren defaul drive o *.?q (al file havin "q a th secon lette o theemp.$$$ A>usq era temp.$$$ t unsqueez al file o typ aq o drive an an pu th unsqueeze file o driv B an the previe th firs 10 lines of file stuff.dqc. Her i wher th pip come in Th abov thre commai type) Tha las exampl jus happen t mea "al squeeze files" assumin yo don' hav an othe file wit suc sill name (I hope). ɠ hav provide progra calle FLӠ whic i intende primarily for use in pipes. Here is and can be abbreviated as: A>fls b: c:*.aqm *.aqm -10 stuff.dqc |usq Tha littl "| i th pip optio an i cause th FL outpu t b redirecte t temporar fil an whe tha i don i actuall run US fo yo wit th prope   inpu redirection and then erases the temporary file. I tha isn' enough yo ca stil us th o redirectio optio a th en o tha lin t captur th console output from USQ. A>fls b: c:*.aqm *.aqm -10 stuff.dqc |usq >ou bu th interna fil handlin routine al trea lowe cas a uppe case. Whe fil t b writte alread exists i i quietl overwritten. Directe I/O parameters Th firs actio take b thes program i t prot I yo pla you comment carefull yo ca produc singl fil containin a abstrac o a entir librar o squeeze files in one step! A>fls -25 *.?q? |usq >abstract On fina point Anywher yo specif fil nam yo ca specif ces directe i/ parameter fro th CP/ comman line Thes parameter ar optiona an tak th forms: file send most console output to file +file send most console output to fi driv i fron o it Tha applie t redirectio an wel a file t b squeeze an unsqueezed I nam begin wit - (minu sign i wil loo lik a optio t FL unles yo pu driv nam i fron o i (b:-sq.077). USAGE SUMMARle and console |pgm ... send most console output to a temporary file then run PGM.COM and take console input from the temporary file. "..." represent the parameters for PGM. This is called "piping". Y: Th previou sectio graduall presente th variou option b example Thi sectio give condense an mor abstrac descriptio an i intende fo reference I yo couldn' se th fores fo th trees mayb thi wil giv yo  Onl on inpu an on outpu redirectio ca appl t eac program Afte th progra ha arrange fo an directe i/ parameter t b obeye the ar delete fro th paramete lis see b th res o th program. Operationa parameters better view. Th paramete handlin o thes program i straightforward Parameter fal int tw classes directe i/ option an operationa parameters Not tha parameter rea fro file o fro th consol ar no force t uppe caseTh堠 progra the check i ther ar an remainin parameter fro th CP/ comman line I ther are the ar obeyed I an onl i ther ar n remainin parameter o th comman line th progra prompt fo the a th cons  ole I consol inpu ha bee directe t fil on paramete i rea an obeye fro eac lin o th file Otherwise th use follow eac type paramete wit RETUR an a empt comman exit th program. Eac operationa par "count" is a number from 1 to 65535. I th -coun optio I NO i effec the USѠ create unsqueeze version o th liste file o th destinatio drive whic default t th curren logge drive Eac unsqueeze fil iamete i obeye withou lookin ahea t othe parameters s option shoul preced th fil names to which they apply. SQ operational parameters are a list of the following types: drive: set the current destination drive  CR checke agains th CR valu o th origina file whic i par o th squeeze file. Th -coun optio i fo previewin squeeze files I allow yo t ski throug grou o squeeze files peekin a th firs "count l filename file to be squeezed drive:filename " " " " S doe no chang th file bein squeezed New squeeze file ar create o th destinatio driv (default t th curren drive wit name derive fro th origina namine i each Th o outpu redirectio optio coul b use t captur thi informatio i file alon wit th correspondin fil names thu formin a abstrac o th file o disk. Whe th -coun optio i use th CR  bu wit th secon lette o th fil typ (extention change t Q Whe ther i n type QQ i used Th origina nam i save i th squeeze file. USѠ operationa parameter ar lis o th followin types: drive: chec i cancelle an th outpu i force int printabl for b strippin th parit bi an changin mos unprintabl character t periods Th exception ar CR LF TA an FF Th outpu fro eac fil i terminate b a FF PI  set the current destination drive filename file to be squeezed drive:filename " " " " -count Preview (display on the console) the first "count line o eac蠠 file wher ca b use t stri FF an provid formatte printin i desired "Count default t th maximu value 65,535 i cas yo wan t loo a whol file. FL operationa parameters FL i "filter" whic mean i accept inpu fro t  h consol inpu o comman lin an transform th inpu accordin t se o rule t produc consol output That' fin fo gettin familia wit FLS bu t mak i usefu yo "pipe it outpu t th inpu o S o USQ. An FL paramesaveout o th drive Th saveou fil let yo confir th lis o processe file eve i th displa scroll of th scree whil runnin unattended. I summary i/ redirectio parameter (thos prefixe b + < > o | alwate whic i o th form: drive: or -anything i copie t consol outpu unchanged An othe FL operationa paramete i treate a fil nam an i checke agains th director o th appropriat drive I i contain o iy follo th comman t whic the apply bu operationa parameter (destinatio drive -options mus b wit th fil nam list. EXAMPLES: 1 Unsqueez al squeeze file o th curren driv an pu th resultin unsqueeze file o th  i replace b lis o al th file whic fi th pattern I nothin i foun i th director a erro commen i sen t th console eve i norma consol outpu ha bee redirecte t file. IMPORTANT whe usin pip fro FL sam drive. A>fls *.?q? |usq 2 Loo a th firs 1 line o ever squeeze fil o driv B. A>fls -10 b:*.?Q? |usq not tha sinc th fil name fo US cam fro FLS th coun optio ha t com fro ther too. 4 Squeezo an othe inpu redirectio t ge th fil list etc. o whic US o S ar t operat yo mus NO pu an parameter othe tha redirectio followin th progra name The mus b al togethe i th inpu paramete list Example al .AS file o th an drive an pu th squeeze file o th drive. A>fls d: b:*.asm c:*.asm |sq Not tha i d ha no bee firs th squeeze file woul hav gon t th drive. 5 Squeez fil xyz. o th driv an pu: A>fls -10 b:*.cq |usq +saveout i th prope wa t previe th to (firs 1 lines o eac squeeze . fil o th drive Th -1 i passe throug FLӠ t USQ Th result wil b displaye o th consol an save i fil " th result o th drive. A>sq xyz.c 6 Buil paramete lis o al AS file o driv à i fil XX.PA an vie i o th console. A>fls c:*.asm +xx.par 7 Us th abov lis t squeez th file t th drive. A>sq   b: B>a:sq fls b: *.asm *.c |sq >out 10 Previe th firs 2 line o eac squeeze AS͠ fil THE unsqueez the (unles stoppe vi cntl-C). A>fls -24 *.aqm a: *.aqm |usq Not tha specificatio o destinatio driv cancel previewing. h abov thre file diffe fro th officia versio onl b chang t th dioflus functio t ensur TEMPIN.$$ i delete befor anothe fil i rename t tha name (CP/ i stupi enoug t mak tw file o th sam name!). Th pro RECOMPILATION: Thes program ar writte i an th instruction ar fo th BD compiler Th librarie mus hav bee adapte fo directed i/o as described in DIO2.C. Th procedure belo indicat th variou languag sourc file (cedur fo buildin th SQ.CO an USQ.CO file fro thei sourc file follows Not tha hav rename th firs phas o th BD compile t CC.COM Als ɠ wil assum th BD packag i o driv an th SѠ an US relate filfil typ .C require t recompile Thos file contai #includ statement whic caus heade file (fil typ .H t b rea an compiled Th BDSCIO. heade fil contain informatio abou you system includin ho muc spac t ree ar o alon wit BDSCIO. an DIO.H. Eac C comman produce CR fil wit specifi addresse fo externa variables I yo recompil fil wit th sam valu i th - optio yo don' hav t recompil th othe files jus serv fo fil buffers Yo shoul us you ow versio o thi file. Th sourc file DIO2.C SQDIO. an USQDIO. ar identical I yo onl ge one jus us PI t creat th rest The ar separate onl t provid separate CR files whicd th desire C an the repea th entir CLINK. CLINK' - optio print statistics To o memor mean th curren TPA Stac spac i what' lef over Thes program requir stac spac fo loca variables includin som health   i/ buffers Als som function ar recursive I S doesn' hav severa o stac spac i wil probabl g craz an d almos anything. For SQ (note not all use -o): D>cc b:sq.c -o -e3200 D>cc b:sqdio.c -e3200 D>cc b:tr1.c -o -e3200 D>cc probabl les tha hal o thi package an ar designe t operat o larg block o data suc a files. Dick Greenlaw 251 Colony Ct. Gahanna, Ohio 43230 614-475-0172 weekends and evenings b:tr2.c -o -e3200 D>cc b:io.c -o -e3200 D>clink b:sq sqdio tr2 tr1 io -s Th linke wil displa som statistics Chec tha th las cod addres i les tha th star addres o th externa variable (320 i thi example) I not repea  reenlaw 251 Colony Ct. Gahanna, Ohio 43230 614-475-0172 weekends and eveningsth abov wit highe addres i th - options. Fo US (note -e280 ma b enough Not no al use -o): D>cc b:usq.c -o -e2900 D>cc b:usqdio.c -e2900 D>cc b:utr.c -o -e2900 D>clink b:usq usqdio utr -s Check the addresses as described above. For FLS: D>cc b:fls.c D>cc b:dio2.c D>clink b:fls dio2 IN CASE OF TROUBLE: ɠ welcom suggestion an bu reports bu yo mus understan tha som o th idea ge woul involv almos a muc progra developmen a th origina package hav wha wan an ( hope wha mos user want s a no motivate t spen man mor month creatin somethin entirel differen whic jus happen t involv dat compression Th dat compressio routine ar   Print file to List Device P Send file to Punch Device C Copy file to another Disk R Rename file D Delete file X Exit to CP/M B Backup one file in List S Restart on another Drive sp or cr Forward to next file in List :] Ÿ:e Ÿ!] ß???????????2h2|\ ++ Not Found ++À! " ƀo&:\:00w# H: 2  !  ! 6#m ʦ ++ Name Already Exists ++ Ù*  ͼ !   I ++ Not Found ++I*  ͼ     ++   Not Found ++I Deleted*  ͼ " * Ͷ B -"  Ͷ I* Ͷ I List EmptyÀ>>>2 *  ͼ   ! 6#   ++ File Cannot Be Opened ++I2  I!~I_: O3e5nt~|*YQٛ RrUEy[!J.;IzӁ;R:De9ou2J^C}'GMgVHȃ-^nYVY|2%}HTeW|*e{ÑGdvFNe߫O_F*Hw.dGdNSg-\Ob'G.k7;RM'S ?IʝSo I#*  ͼ   ! 6#(2 !!   w ++ Source File Cannot Be Opened ++I Destination Drive ?  A<2 G:  ++ Cannot Select Same Disk as Source ++ Ù  Replace ?  U|nf3):TIݑjtAHy;vGXPoowu8Rّs@w;\cvlաf8 wrNz*謖#N?:*#a:t>v$vrΜ\{5աOjLŽl G/ڽUۅ"TNlvN&ߌUsLLa65Wkh&0yHYgxj$B4GN d˼TK,dnY{&HRF}:Documentation of various original programs written by Ward Christensen ----LINES.COM---- OVERVIEW: Count the number of lines and characters in an ASCII file. USAGE: LINES fn.ft + G$B4_@ =oFgGaޔ [:K8BpNw`OWqّHEk ;/2RB='ɘ(/~w/8Gqt`LLa6t ՚ ɺ dkp Pٝ2v8z%AߔupE]ϯ'P*  _k8z*Hy镩= zKLT"   ++ Disk or Directory Full on Write ++I: ʢ  I ++ Destination Close Error ++I New Drive ?  IA<2\> 2]2ez{}o|g~# ~_#  `_ _ = :  G{z-Y-dmcwG_zʸ׍eݿv5W~8"aNw>h-߸5} 7e.dmJwvdkDe[ujvȏCnnN ZSpD®yOkZ68 *;({t9]MX~!t^pD-_=4^,SP;Le$#Lν>sru6Ԟ.@ut7vFz; < > 7# Nwy# Directory Full on Write ++I: ʢ  I ++ Destination Close Error ++I New Drive ?  IA<2\> 2]2ez{}o|g~# ~_#  `_į5.Hz~I*3:;2`Nٜ΋l[#awWj5;̛(X>h%v$_kFg{!ek vHP%efO}}Cg0h&0y4W Z|Ovoɺ~_O MbFzّeeMb 2&H aQok5vțȎF.v#hw^kFg]PQ   LIST.COM AS OF 04/20/79 $ !9"1!m ^! ^0:0DM)) )o<$<\<ƒ9++OPEN FAILED++$|ʯʙ ƒ+Ã9++LINE # TOO BIG++$ ?*ï9++INVALID STARTING LINE #++$?äi*' *) z{25 #~+::4 :## !] :4 <24  ]o>.oK~#.ʚ!ښo~#.! O> ›y:4 >:4 ? =24  ~ ##>.~#]*D|#\?!~#"D_ *++$|ʯʙ ƒ+Ã9++LINE # TOO BIG++$ ?*ï9++INVALID STARTING LINE #++$? K6 o&]T))):4 6 :4 E :5 E 23 dZ Z0d \G:3 zy23 z> }y0xHELP Version 2.0 $ HELP File Selections are -- $HELP HLPEOI ^C=CP/M $^=Level .=Root $M=Menu S=Start L=Last CR=Next $:T:4 ñͥ*   :4 9 .ʥ^ʱ@G`iX `*, {T~#ʜ ʏ {#~:q{{:$ ʸ_>2$ :% _ >2% a{__  HELP FATAL ERROR -- File Name Contains Wild Card$ HELP FATAL ERROR -- File not Found$ HELP ERROR -- Invalid Response $ HELP ERROR -- EOF on HELP File $ HELP ERROR -- Not Possible to Backup Before Start of Info $ HELP ERROR -- Node Level Limit Rea~#\*1 :& XT*1 ~#I3 S6#I"1 n ~ z {|#a##:. =2. ~w:5 <25 :4 ʨM.ʥ^ʱLS") *' >25  Ë+~:5 ==25 >Documentation of various original programs written by Ward Christensen -----LIST.COM----- OVERVIEW: Lists a file, with an optional starting line number. Doesn't quit until EOF or control-C. Prints an error message if too high a line number was  > >2. >25 !v >A2+ ~:P :+ <2+ >.> a(", "' !") ~w >25 a~ʓ:ʓ i#ͅi:. G|‰~w:. =2. —:5 <25 :4 M.ʥ^ʱLS *' >25 i specified. USAGE: LIST fn.ft To list the file LIST fn.ft nnnn To start at line nnnn LIST.COM does not abort when any key is pressed, as does TYPE. This was done to make it usable over phone lines where when using TYPE an unexpected glitch   could stop a listing and you would have to start all over again. LIST.COM itself checks for control-C (to cancel) and control-S (to suspend output). DEPENDENCIES: NONE 8MfwvX.Bewڕ}Øaǭ^ۘnǡ9ݑj= pQ3u]:ݑj5;/2RDeW+S-m(Pᨖnlk<˝gI zu{Ls;hį5R GuSoWݿv;0ftvE층k&&Kwc0GdNSgMΜc,? vGO˝Ϗ&`\鎞>#2v.w ~user to interactively query the *.HLP files of the system in order to receive information summaries on various aspects of the user's working environment, such as the language systems he is using and certain subsystems available to him. When the  title 'COMBINE.ASM 12/20/79' page 0 ;12/10/78 BY Ward Christensen ;Modified by Bob Van Valzah & Steve Ness on 1/9/78 to allow ;source files on any drive and remove comments preceded by blanks. ; ;Modified by Steve Ness on 12/20/79 to allow filetyuser types 'HELP', a search is done for the files '*.HLP'. The name of each HLP file is displayed to the user followed by this text. If the user desires information on a specific topic and he has a HELP File of that name (ie, CPM.HLP is a HELP pes on source files. ; ;Used to combine multiple small programs into one large assembly file. ; ;command format: ; ; COMBINE output=input1,input2.... ; ;The input files may have a: or b: specified. ;The output file may have A: or B: specified. File on CP/M), he may issue of HELP Command of the form -- HELP d:topic where "d:" is the disk the HELP File resides on (optional) and "topic" is the name of the HELP File (topic.HLP, like CPM.HLP). Please refer to the HELP File "TEST EQU 0 K EQU 1024 ;1K BLKSIZE EQU 12*K ;OUTPUT FILE BLOCKSIZE ; ;(FROM EQU7.LIB...) MF SET 0 ;SHOW MOVE NOT REQUESTED CF SET 0 ;SHOW COMP NOT REQUESTED ; ;DEFINE SOME MACROS TO MAKE THINGS EASIER ; ;DEFINE DATA MOVE MACRO ; MOVE MACRO ?F,?THELP.HLP" for more information. esides on (optional) and "topic" is the name of the HELP File (topic.HLP, like CPM.HLP). Please refer to the HELP File ",?L,?I IF NOT NUL ?F LXI H,?F ENDIF IF NOT NUL ?T LXI D,?T ENDIF IF NOT NUL ?L LXI B,?L ENDIF IF NOT NUL ?I LOCAL ?B,?Z CALL ?Z ?B DB ?I ?Z POP H ;GET TO LXI B,?Z-?B ENDIF CALL MOVER MF SET -1 ;;SHOW EXPANSION ENDM ;COMP  ARE MACRO COMP MACRO ?F,?T,?L,?I IF NOT NUL ?F LXI H,?F ENDIF IF NOT NUL ?T LXI D,?T ENDIF IF NOT NUL ?L LXI B,?L ENDIF IF NOT NUL ?I LOCAL ?B,?Z CALL ?Z ?B DB ?I ?Z POP D ;GET TO LXI B,?Z-?B ENDIF CALL COMPR CF SET -1 ;;SD WRCOUNT INX H SHLD WRCOUNT ;SEE IF TIME TO WRITE BUFFER DAD H ;H=# SECTORS MOV A,H CPI BLKSIZE/128 RNZ ;TIME TO WRITE THE OUTPUT BUFFER ; WRBUFS LXI H,WRBUFF SHLD WRBUFAD XCHG LHLD WRCOUNT DAD H ;H=# SECTORS MOV B,H ;SAVE SECTORHOW EXPANSION ENDM ; ;DEFINE CP/M MACRO - CPM FNC,PARM ; CPM MACRO ?F,?P PUSH B PUSH D PUSH H IF NOT NUL ?F MVI C,?F ENDIF IF NOT NUL ?P LXI D,?P ENDIF CALL BDOS POP H POP D POP B ENDM ; ORG 100H ;INIT LOCAL STACK ;  COUNT MOV A,B ORA A ;0 SECTORS? (POSS AT EOF) JNZ WRBFLP INR B ;FUDGE IN PARTIAL SECTOR WRBFLP CPM SETDMA CPM WRITE,FCB ORA A JNZ WRERR LXI H,80H DAD D XCHG DCR B JNZ WRBFLP LXI H,0 SHLD WRCOUNT RET ; WRERR CALL ERXIT DB LXI H,0 DAD SP SHLD STACK LXI SP,STACK ; ;START OF PROGRAM EXECUTION ; ;MOVE THE COMMAND BUFFER MOVE 80H,HOLD,80H ;FROM,TO,LENGTH ;ERASE THE OUTPUT FILE IF NOT TEST CPM ERASE,FCB CPM MAKE,FCB INR A JZ NOROOM ENDIF ;POSITION TO FI '++WRITE ERROR++$' ; ;READ BYTE FROM INPUT FILE ; RDBYTE LHLD RDBUFAD LDA RDCOUNT ;GET CHAR COUNT ORA A ;TIME TO READ? JP NOREAD ;HAVE TO READ CPM SETDMA,RDBUFF CPM READ,RDFCB ORA A JNZ RDERR CPM SETDMA,80H LXI H,RDBUFF MVI A,0 NRST NAME TO COPY (FOLLOWS =) LXI H,HOLD SKIPEQ INX H MOV A,M CPI '=' JNZ SKIPEQ SHLD NAMEADD ;SAVE POINTER CALL NEXTFL ;PRIME THINGS LOOP CALL WRBYTE CALL RDBYTE JNC LOOP ;DONE - MVI A,1AH CALL WRBYTE LHLD WRCOUNT LXI D,128 DADOREAD INR A STA RDCOUNT ;SAVE CHAR COUNT ;CHECK FOR NEW LINE OR TAB, TO DELETE COMMENTS LDA PREV CPI 9 JZ TESTCOM CPI ' ' JZ TESTCOM CPI 0AH ;LF? JZ TESTCM1 NOCOM MOV A,M ;GET CHAR INX H SHLD RDBUFAD CPI 'Z'-40H ;EOF? JZ NEXTFL  D ;FORCE LAST SECTOR SHLD WRCOUNT ;..WRITE CALL WRBUFS ;WRITE THE BUFFER CPM CLOSE,FCB INR A JNZ EXIT CALL ERXIT DB '++CLOSE ERROR++$' ; ;WRITE BYTE TO OUTPUT FILE ; WRBYTE LHLD WRBUFAD MOV M,A INX H SHLD WRBUFAD ;BUMP COUNT LHLSTA PREV ;SAVE FOR COMMENTS TEST ORA A ;CARRY OFF SHOWN NOT EOF RET ; ;TEST FOR COMMENT TESTCOM MOV A,M CPI ';' JNZ NOCOM ;GOT COMMENT, SKIP IT STA PREV INX H SHLD RDBUFAD SKIPCOM CALL RDBYTE CPI 0DH JNZ SKIPCOM STA PREV RET TES  TCM1 MOV A,M CPI ';' JNZ NOCOM STA PREV INX H SHLD RDBUFAD ;DELETE ENTIRE LINE DELINE CALL RDBYTE CPI 0AH JNZ DELINE JMP RDBYTE ;GET, RET NEXT CHAR ;GOT EOF - GET NEXT FILE RDERR CALL ERXIT DB '++READ ERROR++$' NEXTFL LHLD NAMEADD ;GE OPENERR LXI H,RDFCB+1 MVI B,11 NAMELP MOV A,M CALL TYPE INX H DCR B JNZ NAMELP CALL ERXIT DB ': ++OPEN FAILED++$' NOROOM CALL ERXIT DB '++NO ROOM ON OUTPUT DISK$' ; TYPE MOV E,A CPM WRCON RET ; ;FOLLOWING FROM 'EQU7.LIB'----> ET NAME POINTER MOV A,M ;GET DELIMITER ORA A STC RZ ;RET IF ALL DONE INX H ;SKIP DELIMITER LXI D,RDFCB ;POINT TO NAME xra a ;prepare to use default drive stax d inx d PUSH D ;BLANK THE FCB MVI A,' ' MVI B,11 BLANK STAX D INX D ; ;MOVE, COMPARE SUBROUTINES ; IF MF ;MACRO EXPANSION FLAG SET? MOVER MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ENDIF ; ; IF CF ;MACRO EXPANSION FLAG SET? COMPR LDAX D CMP M RNZ INX D INX H DCX B M DCR B JNZ BLANK POP D inx h ;look ahead for colon, indicating drive mov a,m dcx h ;backup j.i.c. not there cpi ':' ;was a drive specified? jnz moven ;nope - just scan off file name mov a,m ;yup - insert drive name into fcb sui 'A'-1 sOV A,B ORA C JNZ COMPR RET ENDIF ;EXIT WITH ERROR MESSAGE MSGEXIT EQU $ ;EXIT W/"INFORMATIONAL" MSG ERXIT POP D ;GET MSG MVI C,PRINT CALL BDOS ;EXIT, RESTORING STACK AND RETURN EXIT LHLD STACK SPHL RET ;TO CCP PREV DB 0AH ;PREV CHAR ta rdfcb inx h ;move source pointer over drive spec. inx h MOVEN MOV A,M CPI ',' JZ MOVED cpi '.' jz movft ORA A ;ZERO @ END? JZ MOVED STAX D INX H INX D JMP MOVEN movft inx h lxi d,rdfcb+9 ;address filetype of read block jmp FOR COMMENTS TEST WRBUFAD DW WRBUFF ;OUTPUT BUFFER ADDR WRCOUNT DW 0 ;BYTE COUNTER RDBUFAD DW RDBUFF RDDRV DB 0 ;DRIVE NAME TO READ FROM RDFCB DB 0,' ' RDEXT DB 0 DS 19 RDRNO DB 0 RDCOUNT DB 80H ;CHARACTER COUNT IN BUFF DS 40H ;STACK moven ;ALL DONE MOVING MOVED SHLD NAMEADD ;SAVE NAME LIST ADDR XRA A STA RDEXT ;ZERO EXTENT STA RDRNO ;ZERO RECORD # CPM SETDMA,RDBUFF CPM OPEN,RDFCB INR A JZ OPENERR MVI A,80H ;SHOW TIME TO READ STA RDCOUNT CPM SETDMA,80H JMP RDBYTAREA STACK DS 2 ;POINTER TO LIST OF FILENAMES NAMEADD DS 2 ;COPY OF INPUT COMMAND BUFFER (FROM 80H) HOLD DS 128 ;OUTPUT DISK BUFFER ORG ($+255) AND 0FF00H ;TO PAGE RDBUFF DS 128 WRBUFF DS BLKSIZE ;BDOS/CBIOS EQUATES (VERSION 7) RDCON EQU 1 WR  CON EQU 2 PRINT EQU 9 CONST EQU 11 OPEN EQU 15 CLOSE EQU 16 SRCHF EQU 17 SRCHN EQU 18 ERASE EQU 19 READ EQU 20 WRITE EQU 21 MAKE EQU 22 REN EQU 23 SETDMA EQU 26 BDOS EQU 5 FCB EQU 5CH FCB2 EQU 6CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 e: ++ Not Found ++ command line wild card file specification name list is empty, or disk is empty. -or- delete, rename, copy source files not found. (most likely due to from the operator. The following summary describes WASH commands. ::WASH1 :OPERATIONAL NOTES ON WASH ------------------------- Command entries not understood by WASH will cause display of a "?" character followed by re- display of the same c a diskette change) ++ Name Already Exists ++ attempt to rename a file to a name already present on the disk. ++ File Cannot Be Opened ++ output file for view, list, or punch, cannot urrent list position file name. Command entries, other than Backup, will generally execute and then return to the command mode with the next file name from the list displayed. Entry of a carriage return in response to the "New Name ?" prompt ofbe opened for reading. Most probable cause is due to a disk change. ++ Source File Cannot Be Opened ++ source file on a copy operation cannot be found on the disk. Most likely casued by a disk change.  the Rename command or to the "New Drive ?" prompt of the Start Over command will abort the command function and cause display of the next file name in the file name list. :WASH error messages The WASH program contains a liberal number of error *K͞+& 0:'+FÎr7 :2!q: ʊ *M8 ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|zchecking functions not normally seen by the operator unless an error condition arises. These are always displayed with leading and trailing pairs of the plus sign character as: ++ Error Message ++ Some of the error conditions ar7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o  #z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r`i~#fo)~#foͧ`i^#Vr+s! ~#foҫ!5i TYPESQ is used to print files squeezed by SQ.COM.ͪ!tã To run this program, type 'TYPESQ ' ͪîͭ!9Ün !9DM! ~#fo#n}:g ! ~#fon&ͺ|: ! ~#fo##n}7 +w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#.¶66*>?w#> w#.7:77! ~#fo! ! Output drive =%sͽ! ~#fon}26 g ! ~#fo!I ^ ERROR - Ignoring %sͽ ! ~#fo`is#r`i~#fon} `i~#fon}*ʛ `i~#fon}? ! ~#fo! Can't accept ambiguous name %sͽ `i^#Vr+su >2&! ~#fo!9 n!a{   `OE!y6$ -7rBo&))T])))!yg!>3͹(>3>@2:;u *1;";.04:/;2/;";|¶!}§!=/04ʽ!ª!=004>G>)3!#'͇&)*͹( (Ãy!9DM!) , ! !. ~#fo #|q !. ~#fo!Y h Can't open %s ] !"6  ! v !. ~#fo! ù %s is not a squeezed file T ! ! s#r":! s#r! ~#fo! s! ^#Vr+sn1!&,2#%"d/04b(ͨ&&)*͹(}(~7#^#V#/" 1)))S~+2G~`24;29;#~23;~?>o"=2-;#^#V#^#V#"5;^#V"7;:9;ʙ"* ;!:4;@ʪ""7;*K;#w"K;*K;~""/+25:+"K;*K;+"K;!} ! 6!6!  !":!  ! !. ~#fo!; G %s -> %s: !T W ! ! s#r! ~#fo| ! ~#fo !. ~#fo! û %s has invalid decode tree size T !"6!"6! w#w! ~#fo! ~#fo: ! ~#fo))6!>"K;6!/>"M;*K;~*3;*M;s#r#*5;s#r#*7;s#r#*/;s#r#*1;s#r#:9;w#"M;{#*>;*M;s#r#*@;s#r#*B;s#r#*:;s#r#*<;s#r#:D;w#"M;{#|?†ðf ÷n!9DM! ~#fo! ͤ>26>:26>26`i6#6`i~#fo! ~#fo! ~#fo s#r! ~#fo))6##! s#r! ^#Vr+s `iw#w! w#w!  ! s#rzT ! ~#fo|T *6! ~#fo"6! ~#fo|g}o! s#r! ~#foҸ ! ~#fo ! ~#fo  ! ~#fo  ! ~#fo  ! ~#fo  !   ~#fo ! ~#fo& ! 6#6Q Q ! ~#fo Q `i^#Vr+szQ ! 6#6H !  !*9r Ã(!9DM*&}ʣ ! &i `is{   ! &i `isø !l `is{¸ o `in} ! `in} `i6 *&} ! !l `in& !9!9DM*&}ʉ! n} +!.! !.! n&#|t!HgFile output error; disk full? !*&&|g}o|‰! |ʩ!+++|©! n} ! !! n&!!":!c":Â!9DM*:(5+!9DM{2&{2&{2&! ~#fo! ~#fo~#fo)"&! 6#6`i6#6`i~#fo! ~#fo~#foҹ*&}uù! ~#fo`i~#fo)~#fon}<ʤ|t+>â! ~#fo`i~#fo)~#fo#n}!! &! ~#fo`i~#fo)~#fo# #|&! ~#fo`i~#fo)~#f*:+":* :yy! ~#fo`is#r!M`i~#fo" :* :#|D!0u":* :yy! ~#fo":|k!yy*:++":* :y!9ÈÃ!9DM`iw#w*:#":! ~#foͅ":#|!e!":`i~#fo))6*:|g}o)~#fo`is#r `i~#fo))6*o#! Can't open %s !>2&!1=15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/oT#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"2.>:2.>2.`i6#6`i~#fo#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r! ~#fo6! ~#fo`i~#fo)~#foͪ`i^#Vr+s! ~#fo! ͧ! ͭ!*ͭ`iw#w`i~#fo͡! s#rzŽ! 6 #6`i~#fo! ! ~#fos{ ½`i~#fo! 6`i^#Vr+se! n}! ͪ! n}OͰ!91.3 06/15/81+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77File unsqueezer version %s by Richard Greenlaw 251 Colony Ct. Gahanna, Ohio 43230 Accepts redirection and pipes. Omit other parameters for help and prompt Parameters are from command line or one-at-a-time from standard input and are output drives and!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15 input file names. Empty to quit. / ÜX !9DM! ~#fo#n}:¦ ! ~#fon&& |ʑ ! ~#fo##n}Ž ! ~#fo! ) ! ~#fon}2. æ ! ~#fo!# )  ! ~#fo`is#r`i~#fon} `i~#fon}* `i~#fon}? ! ~#fo!8 )  `i^#Vr+sô ! ~  #fo, !9 Output drive =%s ERROR - Ignoring %s Can't accept ambiguous name %s Ü JåÓMÊ!9DM`i!* ~#fo[ #|³ !* ~#fo! ^ !".a d `ig v !* ~#fo! ^ ý `ig ! s#r"2! s#r!>2&!$! ~#fo͐)~#fo|<*&&|g}o}2&L!&4! ~#fo͐)~#fo#"&! ~#fo͐)~#fo#n}ʢ! ~#fo͐)!0s#r! ~#fo͐)"&÷*&&|g}o}2&! ~#fo͐)~#fo#n}!=!! ~#fo͐)~#fo# !* ~#fo`ij s! ^#Vr+sn} ! 6!.! m !"2! m ! !* ~#fo! ^ ! ! p #|ƒ ! !^ ë `ig ! s#r! ~#fo| ! ~#fo !* ~#fo!^ ë !".!".!  w#w!  ~#fo! ~#fo7 !  ~#fo)).! ~#fo͐)~#fo# #|H! ~#fo͐)~#fo#!\!!&4*&}͐! s#r͐͐ ~#foҭ! ~#fo͐)! ~#fo͐#)~#fos#r! ^#Vr+s`͐ ^#Vr+s`i^#Vr+s*&++"&͐ ͐s#r! ~#fo͐ ~#fo)w#w! ^#Vr+s`ig s#r!  ~#fo)).##`ig s#r!  ^#Vr+s `is ! s#rzʊ *.! ~#fo".! ! ~#fov #|‡ ! !5^ ë 7 ! ~#fo*.ʫ ! !H^ ! y ! | `i| !&9Can't open %s %s is not a squeezed file %s -> %s`i^#Vr+sL!9Can't open %s ʷ! ~#fo͐)~#fo#n}¶! &! ~#fo͐)~#fo##|! ~#fo͐)~#fo#!!$!"2!c"2ð!9DM*2>*2+"2* 2çç! ~#fo`is#r!{`i~#fo" 2* 2#|r!0u"2* 2çç! ~#fo"2|™!çç*2++"2* 2ç!9öå!9DM`iw#w*2#"2! ~#foͳ"2#|!Ó!"2`i~#fo))!  .*2|g}o)~#fo`is#rN`i~#fo)).*2"2|g}o)~#fo`is#r`i~#fo|`i~#fo#`is#r`i~#fo~!Ä`i~#fo`is#r`i~#foÓ!9å=!y9DM! `i͟`i͢!9oÞ!9DM! n&|ͣ! n&|ͣ͐!͐+?`is#r͐##~#fo|ʧ!͐͐͐͐͐##~#fo͐s#r͐~#fo͐s#r!!͐~#fo͓͐##6#6͐͐s#r!!9Ï$!9DM͐!͐~#fo À"!9DM͐!͐s#rz4!͐##w#w͐~#foPå!9DM͐M`is#rz͐M! s#rz͐?͐Ü!Ü!9ñfë!"!9DM͐|ͨÊ͐+++|!ͫÊ͐##^#Vr+sz ͐^#Vr+!y9DM! `i ͐`i6!9!9DM`iw#w! ~#fo͐n! ~#fo͐n}™! ~#fo`i^#Vr+sn}–!M! ~#fo͐n! ~#fo͐nѯgW!97 !s!!h9DM! ^#Vr+s~#fo! s#rsn&Ê!͐͐~#foͮ`is#r!F͐##^#Vr+sÊ͐##͐?+s#r͐͐s#r͐^#Vr+sn&Ê!9!9DM͐`is#r͐n}ʽ! ^#Vr+så! ^#Vr+s͐ns! ^#Vr+sn}½͐!9:#!9͐! s#r! ^#Vr+sn`is{.`in}%! ! s#r! 6#6! s! s! s͐n}-m! ^#Vr+s! 4͐n}0}! 4͐n&}ʚ! Ý!! s#r! ^#Vr+sn`is{.! ! s#r! 4! ^#Vr+sn`is`in&}DUMXVDM͐͐s#rz !͐͐s#r͐##6#6͐~#foYmë!k#!9DM͐+|y! n&P͐++|—! n&!S͐+++|¶! n&!S͐++++|! n} ! !S! n&!S͐##^#Vr+szO_CʥS͐~#fo|M! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 e! 6e! 6! ~#fo! n&! ^#Vr+s~#fo! ѯgs#rN! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+sN! n}! 6#6! ^#Vr+s~#fo!͐^#Vr+s! ns&!͐͐~#foVI!͐##6#6͐͐s#r͐^#Vr+s! ns&Ök##$$!9DM͐ұ!͐##~#fo!͐##~#fo`is#r͐͐͐~#fo s#r͐n}N͐|N! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s͐6! ! s#r! n}¥! ^#Vr+s!ҥ! ^#Vr+s! n}ʜ!0ß! sj͐! ^#Vr+sns{! ^#Vr+så! n}! ^#Vr+s!! ^#Vr+s6 "  ! ^#Vr+s`ins+! ^#Vr+s`ins ͐6!9Cm!9DM͐n}m! ^#Vr+sn&@K!9DM! n&Aͯښ! n&Zͯ!9DM! n&aͯ! n&zͯM!9DM! ^#Vr+sn`is{( `in} ͐ ><$~+ x$|}*$w%7:,*'$:*L$}|2q }$s$:qwn$! {w#7*!9& 6C#6O#6M$*|$!\&$!\&*|$!!l&!~#fo! ͐`in&#|% !. !. !9= 7 !9DM͐͐ ҍ ͐^#Vr+s͐ z ͐0 ͐7s!& ͐ ͐͐ ͉͐: `is͐ ͐͐ )͐: `in&#& !9!9DM! n&0ͯ !! !%> +%#~%##$a{ !pM%!*w#.%:**E%*!ѷ! , FNxg>Goy%$n&9ͯ! !9DM`iw#w͐~#fon&!}c!͐ ?͐^#Vr+snѯg`is#r$!͐j!!9y!Þ!9DM! n&v!|ʠ!! n&å!! n&7:O*o`  !\&!7*!"&*!"&"!, !\&!TELk7A"Ò$þ!7*^#V#zI"+V+^+T"*8"!r"!;">"Broken pipe 7,2q*&:q):ʼ"=ʼ"=r:qo&7:)~:,"s!"u*|#**s#! ~#6*u*+"*"*u#"u"C#!À"7*=#\!*@#7:)~:,"s!"u*|*u#*~#¨#"*s*u##"u*+"Õ#7*|DM**$$><#~# x##  !9"1!c\\<:!#~=9"͑͆F>͆*|"|͚\<2:y N N g~#"~ʑ2y~;?2y#"~ [2y~;?2y#"~ tn++READ ERROR++$*~7#>  ¤#~+:»~@2##~,.#û#û"22<>2! ~V#n: ++OPEN FAILED++$n++NO ROOM ON OUTPUT DISK$_~# xc *  oom to contain all the directory extent entries for the destination file. ++ Destination Close Error ++ Destination file on a copy operation cannot be closed most likely due to a full directory. ::WASD.COM AS OF 11/23/78 $ !9"u1u!];ADD  ['!m >\!]lDEL  •'\*++NAME NOT IN TABLE++$!]ͦSET  ½>2w>2yN:] 2xN:\=_ \,> > :w :x :\ !y ~ʴ< ͸ ~#“>, …> > ÃÅ:<2!~#~ ----> NOT FOUND:  >_$  ~# x# x!y~#<+!y~7m ? *!w#?w#U]mD COM \\2wD\!zڜ\<*++DONE++$*++WRITE ERROR++$*++BAD CLO a logical end of file character (01AH) (ctl-z). List (L) File Command --------------------- The contents of the currently displayed file name is output to the CP/M logical List device. Text is normally assumed to beSE, D.COM CLOBBERED!!++$0:w0\ *u? *!w#?w#U]mD C-FOG/UTL003SQ COMSQ/UNSQ DOCSQCHNG1 DOCSQCHNGS2DQCSQUEEZERDOCLINES COMTYPESQ COMUSQ COMLINES DOCLIST COMLIST DOCCOMDocumentation of various original programs written by Ward Christensen -----D.COM----- OVERVIEW: Tells what's different in the directory from when it was last set. USAGE: D Lists what has been added or deleted since last D SET. D SET "BINE ASMCOMBINE COMD COMD DOC :6Mog)))))~y *@M͢?w*8M:6Mog)))))~y *@M͢?wy +*@M͢?I>G =B!26Mùy ":M!@M~#ʾY !^M!"M#"BMR]+!H)!J>ͬ<ͧ"uEf26M:6M:6MRegisters" all current file names into D.COM D ADD fn.ft "Registers" a single name D DEL fn.ft Deletes a single name D.COM usage: For example, if you have a "system" disk, you might like to "keep it clean", but it has a way of filling up, and it's -- The contents of the currently displayed file name is output to the console screen. Text is normally assumed to be ASCII and file not trivial to tell what's different, when just doing a directory listing. If you do a D SET on your disk when it's the way you want it, then a week later, do "D" (no operands) D.COM will tell you what's been added, and what's been erase since the la. Punch (P) File Command ---------------------- The contents of the currently displayed file name output to the CP/M logical Punch device. Text is normally assumed to be ASCII and file punching ceases upon encounteringst setting. DEPENDENCIES: You may NOT rename D.COM to something else because D.COM erases itself ahd writes itself back, in order to not have to use a separate file for the registered names. %   is also updated to reflect the new file name. :**** Miscellaneous Commands. Exit (X) Command ---------------- Command when entered will terminate WASH operation and return system control to the CP/M Console*+HEX~# !\ ͠å** }|ڕ!" *{z҇*h* " : t DISK FULL: OFILE$!" ** #" ɯ22!"!" <  NO DIR SPACE: OFILE$!m0  Command Processor via a warm boot operation. Start (S) over on New Drive Command ----------------------------------- Entry of the Start over command will cause the WASH program to make up a new directory name list in ))))O "Iʊ>:%2>N:N:NNNpI?O:2y_y0:j%:N> %> %*>:%N‘> %> %* }±">%¥<  CANNOT CLOSE OFILE$memory from the drive designator entered by the operator in response to the "New Drive ?" prompt. --- Entry of the Start over command will cause the WASH program to make up a new directory name list in *+~# !\ F ͠ ͻ ͵COM͠ ͖ 8{ Ăy ö*B*D}|ڟ!"D*B{zґ*@‹*D"D]*D"B!"D*@*B}>*D#"Dɯ2+2?!"B"D<  NO IFILE FILE$!\ "D y&  kind of DIR utility. Refer to D.DOC for instructions. Jim Woolley FOG Disk Librarian August, 1982  DISK.DOC -FOG/UTL.003 First Osborne Group (FOG) Utilities Disk This disk contains squeeze/unsqueeze utilities SQ, USQ, and TYPESQ previously found on -FOG.026. For information, refer to the .DOC files SQ/UNSQ, SQUEEZER, SQCHNG1, and SQCHNGS2. The latter is a squeezed file and can be viewed using TYPESQ. Also, see -FOG/UTL.004 for updated versions, including FLS. COMBINE, LINES, and LIST are from -CPMUG.036. COMBINE will merge two or more files into one. LINES will count characters and lines in an ASCII file. LIST, which is not the same as LIST on -FOG/UTL.002, is another program to list a file on the console. Refer to their .DOC files. D, from -CPMUG.040, is a special '