XDIR COMK ERASE COM SQ/USQ DOCSQ/USQ HIS=SQ COMj !"#$%RENAME COM&'(USQ COMO)*+,-./012TYPESQ DOC3 Z Abort to CP/M Command? !> > F"  Error -- Invalid Command ɷlOff On :/2:/2: /2  Attribute (A=All, S=System, N=Non-System, R=Read/Only)? > > n"  -- Error -- Invalid Attri:!+~Ap2~$&2;#_A2 Ϳ**#",##)o!&",#*0#oo$.o".#",#)o)o)o*,#|}҇*|  XDIR ERROR: Insufficient Memory for XDIR Buffers Check Value = zH ͱ 26#!#:32@#:42<#:Type  H Horizontal Listing is :^ N Change Name of XDIR II (Currently Set to !9) O Change Option Char (Currently Set to :) P Change CRT/Printer Line Counts Lines/CRT Screen = :o& Lines/PrinTYPESQ COM?456789:;PPIP COM:<=>?@ABCPROTECT COMDEFDU/MAP2 DOC lmMODEM COM4pqrstuv-IACDISK001IACDISK DOC noXMODEM COM{|}#ͱB ERROR: You cannot set User Number from CP/M 1.x#~?u͖ u ERROR: Invalid User Number26# Writing Directory Listing to File !  >27##~+N27#/28###}"Ny#~#+ -- XDIR II CoG~#í ~" pG~2;#####^#Vxx#~#K9" !pis}͇>2527:6/26>2725>2527:/2#:<#/2<##27#/2=##>2>##:/2#:@#/2@##[##~> >O> #~>~ter Page = :o& Q Quit and Update !9 to Disk S File Scan is :4^ U Sort Files with User Number : ”FirstÜLast Y Toggle Status of !9 (Currently Set to :BSystem) Directory) Ð3/ DIRXDIR CM XDIR II by Richard Conn Nosey, aren't you? !9"$#1$> !&~#¢.$"0#>2~$2>#2=#27#28#26#2[#!5!#͆!\#͆!#͆!#~o,6!#~# !~MISAMENU$$$nfiguration -- Cmd Function A File Selection Attributes: System - :5^ Non-System - :7^ Read/Only - :6^ B Brief Mode is :^ F Printer Form Feed is :^ G Alphabetize by File :3Name bute !B~Owy~w Enter Number of Lines on CRT (Decimal Input): *2 ҂  Error -- Value Must be 10 or more  Enter Number of Lines on Printer (Decimal Input): *2  Error -- Value must be 10 or more  Are you sure y> [#>ͺG͈ͺͱ%G͈ͺͱ%G͗\͡ͱ%\͡ͱ%\Ͱyͱqͱvyͱ}ͱ:6#??:6#?C_O:7# :[# Additional Files, Horizontal Listing -- 2|"*Q#"K#|h*.#~^:|">2|"#+D:|" ++ End of File Scan ++32<#*Q#"K#|*.# ¹>2<#>_zW¥%+~#͒%:M#=2M#>.8 8ͱ4 :A2A8 Change Complete -- Returning to CP/M Names of Files in Set Files Buffer -- !&~3# Ü !#:ʾ :6#w 6?# >?>N!#6!#6# `o> o&~2{"!#o|g>2}$y' ͞0>,2}$2> }do|gE 4}doy[y02}$g:}$N> } ͞0W>2}$zd͞ ͞0W>2}$zÅڨ àWy»:}$ʻ> 2}$y0zGxx  A0`o&~:5:7:6*::;#A>:> *W#H*S#T*U#"K#*.#T]ʖ V:{"Š͆f"M#*M#f͆ Logging Selected File Names to Disk!!#5͆*Q#"K#| No Files were Selected -- Logginou want to abort to CP/M (Y/N/=N)? YO New Option Character (Single-Character Input)? 2 Option Character Changed :3/23:4/24:/2 New File Name of XDIR II (8 Chars Max, =No Change)? %>P !%~= #_6Consistent*2#~#~*4##͆*2#^#V*4#͆"4#*2#^#V!#͆*2###"2# y¸*0#DM+) +) Nq#Nq*0#DM+) +) N#F^#V`i:@#: ˜ # : : # : ~O#!"C#*>2M# ~O #*U#|DM*.#*0#s#r#! x1*U#"$*$|g}oʧ"$"$*$#"$*U#}|H*$"$*$*$}o|g"$\|\*$"$o\*$*$Tt*U#DM*0#"2#*.#"4#*2#*4# y XDIR INTERNAL ERROR -- Pointer Table Not 6?!#6?!"U#"Q#"W#"S##6 # "":~$I _>2~$*U#|T:8#_ :7#ʨ  |   É   !%"9#!}"~#ʞ LÒ > L> L"[*Q#"O#!"A#y*O#| }o|g }x :O: *U#"K#|*.#*W##"W# F:{">*S##"S#ͱP:6#?P ]#?hO~z#X:>#Ã:># ~G:5Ÿ:7 ~G:6ʴ͆*U##"U# F:{"*Q##"Q#*K#+"K#|:[#!A> g No Names>2&d &*.# ͆ >d >27#*U#"K#*.## V:{"gu>.Lu> L> L>3~#Lu ++ File Scanner ++ Missing Files, Horizontal Listing -- 2|"!&~͑:<#:|">2|"#+ :|"9~ . ͏# % >   Change Complete  No Change to XDIR II File Name  Rewriting 2D!9 on Disk 8¦ 8 ͱʴ 88 File Error -- Returning to CP/M!&~# $|O!U#|"K#*.# /V:{"/*"P*C#"C#""*"P*C#"C#] b/b: >?f:6#?~͒> #>.> P*A#"A#> ~ʻ>R> #~>S> *O#+"O#|~#}o|g }:[#3:> 0:?#0G> ):~$A_:7#+:=#œ*$#ɯ2[#27#28#+3:ʜ, Horizontalê, Vertical:@#TypeNameͱ:6#?wAllͱͱͱ !x *.#"E#%= "G#. "I#:<#:8#0*E#:R*E#m"E#%%:k*G#m"G#%%:„*I#m"I#:[#H> H:7#H*I#".#Oý :>+*"^p*Q#*A#yķyL> > >  Z0] ]Gy|O||||O-y Error -- Invalid Digitã Error -- Value Out of Range 0-255 -- Reenter: +_:[#:2?#:2?# LXI SP,STACK MVI C,GVERS ;GET CP/M VERSION NR CALL BDOS MOV A,H ;COMBINE THE TWO BYTE... ORA L ;...VERSION NR FOR A FLAG STA VER2FL ;SAVE IT ; ;Set up local jumps to BIOS LHLD BASE+1 ;WARM BOOT POINTER LXI D,3 ;READY FOR ADD DAD D SHL to Continue A>BCFGHLa NPSUW{AcN]RWSQABuF G H}N O3 P Qd S UY Z AN}RsSim> = Write to Disk (see /P) /WN = Write File Names Only Please Set Top of Form Type "A" or ^C to Abort,ly Page Break -- Hit Any Key to Continue or ^C to Abort - U - Filename.Typ Size K -------- --- ------ RS RS -- -- U Filename.Typ U Filename.Typ U Filename.Typ U Filename.Typ - ------------ - ------------ - -----Write to Disk (see /P) /WN = Write File Names Only Please Set Top of Form Type "A" or ^C to Abort,ified, all entries NOT matching are selected /P = Print on LST: Delimited text is optional as header /S = Scan Set Files Buffer Return the file names in the Set Files Buffer not on disk and the file names on   y:?#G:?#)2?#%)2?#> > *9#6#}8_ R*9#w#"9#}!%"9#͆  ͆  ~0گ үOxG#Øx | |##~2&##~2'###^#V"(##^#V"*#*.;^"*##~ to Continue A>BCFGHLa NPSUW{AcN]RWSQABuF G H}N O3 P Qd S UY Z AN}RsSim> = Write to Disk (see /P) /WN = Write File Names Only Please Set Top of Form Type "A" or ^C to Abort, to Continue A>BCFGHLa NPSUW{AcN]RWSQABuF G H}N O3 P Qd S UY Z AN}RsSim> = Write to Disk (see /P) /WN = Write File Names Only Please Set Top of Form Type "A" or ^C to Abort,------- - ------------ None ERROR -- Invalid Attribute Specified Entries & Files - K Bytes Remaining File Data: Files - K Bytes Displayed Directory Empty No Matching Entries in Directory Invalid Drive Specification XD ; ;Define ASCII characters ; CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED TAB EQU 09H ;TAB BS EQU 08H ;BACKSPACE ; ORG BASE+100H ; JMP PASTCK ;JUMP OVER CLOCK BYTE AND I.D. ; CLOCK DB 1 ;<---PUT NON-ZERO HERE FOR 4 MHZ CLOCK ; PASTCKdisk in addition to those in the Set Files Buffer /Un = Set User Number (0 <= n <= 31); /U?=All /W = Write to Disk (see /P) /WN = Write File Names Only Please Set Top of Form Type "A" or ^C to Abort,2&##~2'##^"(#*(##,W+}=z'#i`:&#M)=H ^###~))))!'#o&:'#/ow#~#†a_XDIR II Version 5.1 User Number: Listing by File , File Attributes: System Non-System Read/On to Continue A>BCFGHLa NPSUW{AcN]RWSQABuF G H}N O3 P Qd S UY Z AN}RsSim> = Write to Disk (see /P) /WN = Write File Names Only Please Set Top of Form Type "A" or ^C to Abort,ffer /G = Group Directory If default is to group by file type, group by file name, etc. /H = Toggle Horizontal/Vertical Listing Format /L = List the names of the files in the Set Files Buffer /N = Negate Selection If wild card is specIR 5.1 Command -- XDIR x:filename.typ /o Options are -- /Ax, x->A,N,R,S = Attribute: List All, Non-System, R/O, or System Files /B = Toggle Brief (Minimum Information) Mode /C = Change XDIR defaults /F = Enter files into the Set Files Bu!9"1xERASE Version 2.0:] -/Px ERASE Command -- ERASE x:filename.typ /o Only filename.typ is required, and wild cards (?,*) are permitted. /o is optional, and valid options are - /I -- Inspect Mode (Give user option to delete) of the console input and output streams built into these programs provides most of the flexibility. s accept simple parameters either on the command line or from the console (interactive mode). Using the redirection or pipingf the file type. USQ.COM: Unsqueezes files created by SQ, creating an exact replica of the original under the original name. FLS.COM: Produces parameter lists for SQ and USQ. Its main purpose is to expand wild card names, especially *.?Q?. TQuit Erase (Y/N/Q)? üx ++ QUIT -- Returning to CP/M ++K> _zWʔ:*ƒx File is R/O͠QYʃÇʔx ++ Erased ++:+<2+  D~q#¾&x ++ :+xNo :+x Files Erasedth options which cause it to read its parameters from its "console" input, which is really redirected to come from the temporary file. This DOES run under plain old vanilla CP/M! Many of the smarts are buried in the COM files in the form of librar y:%> qɯ2%y0q> q> q qqqq q q>^q@q*. mO*. a{ɷ> qɯ2%y0q> q> q qqqq q q>^q@q*. mO*.  /R -- Erase R/O Files without prompting user /S -- Include System Files*!~o|g#62(2*2)2+!~ʢ#/o~IʒRʚS->2)o>2(o>2*o!~#~# ʫG~:xAx Invalid Drive SpecificationK_4!e~?d onto a diskette. The latter is especially inportant in the case of a distribution diskette for a large program product. Example: Unsqueeze all squeezed ASM files on drive B and send the results to drive C: Also unsqueeze all squeezed TXT files ohe overall effect is to be able to issue a single command which will produce many squeezed or unsqueezed files from and to various diskettes. Squeezed files can be transmitted faster over data links and cassette tapes and more of them can be cramme ++x File Erased ++ |28 >2%8%2%8z‡:,9 {=ʇ҇<2$8gku%z‡:8{M( ܇:,9 M({2c8͊-ñ ‡:9O͝A"s2qQQ´:q>2u"v~*s:q'O ##*vy routines provided with the BDS C package. You will find much more documentation in the DOC. In general, these programs accept simple parameters either on the command line or from the console (interactive mode). Using the redirection or piping Squeeze / Unsqueeze --------------------------------------- The Squeeze/Unsqueeze system on this diskette consists of three executable programs: SQ.COM: Squeezes files and creates a new one with similar name but with a Q in the second letter ow4:).!e~w#~?w4!e~?.w4K!@]͒CO} o|~]:)]õ&#;>.q;:(E͠QYEx ++ NOT Erased ++õx -- Erase (Y/N/Q=Quit)? `ͅqYNQx Error -- Type Y for Yes, N for No, or Q for n drive A: and send the results to drive D: A>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 wi"s:qG# ?8#~8*s 8"sD:q=2q  :q??????????? +*!~~# ʼ 3 ʩ ʮʮʲÃà Ãyʃ ÃyG>GO> qÃ2%>2%d 0q "v|:u=2u   8:q<2q~#8y2r T]zzGH͈ _\> _zW#:rʿ   # Nwy#2qJ  >? Development History Of a File Compression Utility by Richard Greenlaw 251 Colony Ct. Gahanna, Ohio 43230 May 18, 1981 Revised June 6, 1981 Introduction: The file compression system consists of tw rugged workout. Text files are compressed 33% to 46% depending on the richness and distribution of the alphabet. V0, for which listings have not survived, took 5:10 (five minutes, 10 seconds) to squeeze itself! This was improved to 4:23 by the frequency distribution and builds the decoding and encoding structures. Then wrt_head in file TR2.C writes control information and the decoding structure to the output file. In the second pass, encoded bytes consisting of bits and pieces of bit sctions and the BDS-C run-time package. SQDIO.C and USQDIO.H provide i/o redirection and pipe simulation and are just the BDS dio package renamed to produce distinct CRL files corresponding to the different addresses of external variables withly, those versions used a dummy function for get_cnr, the repeated value encoder, although the actual code was present. This was to simplify debugging and because USQ did not yet have the inverse of that translation. The benchmark for comparisons ctually used is single user 2MHz 8080 without interrupts. The BDS C compiler supports a subset of C. It does not support register variables, long integers or floats. That leads to complexity in collecting and processing the frequencies of occuro programs, SQ and USQ, meaning squeeze and unsqueeze. They are written in the C language for the BDS C compiler. The executable files are SQ.COM and USQ.COM, which are self sufficient to run under the CP/M operating system and consist of 8080 machncreased execution speed, although the conveniences of operating on lists of files, automatic name generation for squeezed files, and output drive specifiers were also added in the later versions. Early versions called the following chain of funtrings are generated by function gethuff in file TR2.C and are simply written to the output by squeeze. Development History of SQ There have been seven operational pre release versions of SQ. The motive for change in each case was primarily i which they are compiled. The SQ program builds a squeezed file by applying two transformations: First, byte values which are repeated consecutively three or more times are reduced to the value, the token DLE (delimiter), and a count. The was not consistent because files were lost at two points. In effect, the current SQ.COM squeezed itself! It typically acheived 6-7% compression on a machine code file of 8K to 10K bytes. Of course machine code is not a practical case, but it is aance of the various byte values being encoded. Outline of SQ The interesting work begins in function squeeze in file SQ.C. In the first pass, init_huff in file TR2.C reads the input through the first encoder, getcnr, in file TR1.C, collects the ine code. SQ.COM is compiled from files SQ.C, SQDIO.C, TR1.C, TR2.C, IO.C, SQ.H, DIO.H and SQCOM.H. USQ.COM is compiled from files USQ.C, USQDIO.C, UTR.C, USQ.H and (again) DIO.H and SQCOM.H. Both COM files also include standard library functions to get a byte of encoded data: gethuff, getbit, get_cnr, getc_crc and getc. It wrote through putce and putc. That's a lot of function calling. In addittion, gethuff and getbit were passed pointers to functions to identify get_cnr. Actual requiring reading the input file twice. The squeezed file contains various information to allow the USQ program to decode it and recreate the original file exactly. The environment: The programs should be nearly portable. The CP/M system apenalty is that occurrances of DLE are encoded as DLE, zero. Second, the Huffman algorithm encodes each resulting byte value or endfile as a bit string having length inversely proportional to its frequency of occurrance. This is a complex processoptimizer option of the compiler, which simply generates in-line code rather than subroutine calls for all local and external variable accesses. It was further improved to 4:18 (and restored to its original length) by the -e compiler option whicCS JZ VIEWEND MOV A,M CPI 1AH JZ VIEWEOF ANI 7FH CPI 7EH JNC VIEWHX ;SHOW RUBOUT AND TILDE AS HEX CPI ' ' JNC VIEWPR CPI CR JZ VIEWPR CPI LF JZ VIEWPR CPI TAB JZ VIEWPR VIEWHX MOV A,M ;NOT ASCII...PRINT AS CALL BHEX e rigorous to fit them into unsigned integers (16 bits). This redesign paved the way for a relatively simple method of processing the code strings several bits at a time, rather than singly in an eight pass loop to form an output byte. At thicalling getbit eight times and packing the bits. This is the obvious method because the Huffman translation produces variable length bit strings, not a byte for a byte. V1 introduced the variable codebyte to the getbit function. It was rotated eaant of V5. The overall performance improvement ratio, scaled for the one major change in the benchmark workload (but not taking credit for the enabling of the repeated character encoding) was about 4.5 : 1, or a reduction of 78%. The true improv slight loss of ground to 1:30, but more productive work. V0 through V4 worked from Huffman code bit strings of indefinite length accessed through an array of pointers. Each string was byte alligned (unlike the final encoded data). V5 was a h specifies the origin of the external variable area to allow direct addressing. (The BDS linker resolves only function names - externals are actually like FORTRAN COMMON and are normally accessed relative to a pointer kept in RAM!). Subsequent im second variant, changing the variable cbitsrem to a char from an integer saved another 5%. V6 restructures the gethuff of V5, replacing the while loop with a custom (goto) loop with the exit condition tested only in a special case. The two basis this point the fancy file name processing, etc., were added, increasing the size of SQ.COM from 7680 bytes to 10,112 bytes, an increase of 32% in the work performed by the "benchmark". V5 ran in 1:40, which scales to 1:16, a reduction of 16%. In ach time a bit was removed, so that subsequent calls had to shift it only one bit position. This involved considerable change. Timing is uncertain now. V2 continued to improve the getbit function by customizing the three basic cases and providingement was probably a factor of 5. DONE A0>aking credit for the enabling of the repeated character encoding) was about 4.5 : 1, or a reduction of 78%. The true improvcomplete redesign of the storage and retreival of the array of code strings. I had finally succeeded in proving that the maximum length code string would fit in the same space as the sum of all frequency counts, so scaling in init_huff was made morprovements came mostly from recoding the key routine. Copies of gethuff and its partner getbit are attached for versions V1 through V6 and the complete listings (20 pages) for V6 are included. In V0 through V2, gethuff forms an output byte by c cases also do only the work necessary to their cases. Also, squeeze in SQ.C calls putc directly and does its own check for write failure, saving one layer of function calls. It ran in 1:29 (scales to 1:08), a reduction of 6% from the second varin in 1:27 (on a slightly smaller file), another 14% reduction. V4 removed the pointers to functions mentioned earlier and substituted direct calls. However, at this point the real translation for repeated values was enabled. The net result was a seperate returns from each to avoid unnecessary work. The changes of V1 and V2 reduced run time to 1:41, a whopping 61% reduction! V3 incooperated getbit into gethuff. This wasn't difficult because getbit was called only once by gethuff. It ra*K͞+655O'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z|ʹ+>1o! ~#fo͐)~#fo#n}0L! 6! ~#fo͐)~#fo#w#||! ~#fo͐)~#fo#!!z}>26!! ~#fo͐)~#fò|¶*6&|g}o}26!64! ~#fo͐)~#fo#"6! ~#fo͐)~#fo#n}! ~#fo͐)t drives and input file names. Empty to quit. *D % &Û%:&ã !9DM! ~#fon}-j *>}͝}2>2 ! ~#fo#n}: ! ~#fon&5 | ! ~#fo##n} ! ~#fo!; 8 ! ~#fon}2>2 ! ~#fo!M !; 2 ! ~#fo`is#r`i~#fon}8 `i~#fon}+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77 ~#fo!!ͬ # !ͦ ! Ͳ !  !  Ͳ !9 %s -> %s: Can't open %s for input pass 1 Can't create %s analyzing, squeezing, Can't open %s for input pass 2 ERROR - write failure in %s done.)à1ó1!9DM*6}! 66#6`i~#fo! ~#foB! ~#fo`i~#fo)~#foͪ`i^#Vr+s! ~#fo! !ͧ!/ !ͧ`iw#w`i~#fo͡! s#rzœ! 6 #6`i~#fo! ! ~#fos{ `i~#fo! 6`i^#Vr+ss! n}! ͪ! n}`ͭ!9ɷ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}/o6Q `i^#Vr+sÆ ! ! > ! ! ~#foA !9 Output drive =%s ERROR - Ignoring %s Ambiguous name %s ignored %s ignored ( already squeezed?).QQQ &Ü&Û%&:'!ßcNk'è(!9DM! ~#fo! ~#fo!Gͦ ! ! ~#foͩ #|* `i~#fon}?, ! ~#fo!b !; 2 `i^#Vr+s ! 6!>! > ! ~#fo#n}:i ! ~#fo##q ! ~#fo! > ! `is#r`i~#fon} `i~#fon}. `i~#fo#n}· `i~#fo6 `i~#fo##n}q Q ! ~#fo!} !; 2 `i~#fo###6`i~#fo##!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15`is{ ! 6`is2!`is{2`in}A!k`in} c`i6 *6}c! !`in&k!9ÉÜ&Û%ó1*ö1&!9DM{26{26{26! ~#fo͐ ~#fo)"6! 6#6`i6#6͐͐ ~#fo҆*6}Æ! ~#fo͐)~#fon}<1.5 08/29/81File 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 outpu#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r ! ~#fo!S!ͬ >!  ! ~#foͯ #|Z ! ~#fo!s!ͬ ! Ͳ >!">!ͦ ͵ ! ͸ ! Ͳ ! ~#fo!  ͻ !ͦ ! ! ~#foͩ #| ! ~#fo!!ͬ ,͵ ! ; ! s#rz!  ! ~#fo #|!T#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"2>! ! !ͧ!c !ͧ>2>>:2>>2>`i)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>!s#r! ~#fo͐)"61*6&|g}o}26! ~#fo͐)~#fo#n}\!!z}! ~#fo͐)~#fo#̓!:! ~#fo͐)~#fo#͆#|! ~#fo͐)~#fo#!!z}!64*6}F͐! s#r͐͐ ~#fo'! ~#fo͐)!#fo!9!9DM! n! nѯgWͩ= ! n&B ! n&!9DM! ~#fok">~#fo! ~#fok">~#foҋ !&! ~#fok">~#fo! ~#fok">~#fo ! ~#fok">##n! ~#fok">##nѯgW !&!&k">~#fo! s#r! ~#fo! ~#foa! ~#fo|a! ~#fok">! ~#fos#r! 6! ^#Vr+s! n}+! ~#fo! w#w! ~#fo! ~#fok">~#fo! ~#fo͉s#r! ^#Vr+sÒ! 9ý!9DM! ~#fo++! s#r~#fo#|#! ~#fo^#Vr+s`i~#foͨ!  6#6!  ~#fo#|T!Oͫ!  ~#foͮ!  ~#fo͉s#rͨ! s#r! s#r! ~#fo! ~#fok">~#fo|! ~#fok">##6! ^#Vr+s)! ! ~#fos#r! ^#Vr+sÊ! ! !ôî`i~#fo#|`*.O! ~#fo}/o|/g|g}o".O`i~#fo! ~#fo#?#|`!ô! ~#fo#|ʮ*.O! ~#fo|g}o".O! ~#fo! ~#fo#?#|®!ô!ô!9H ý!9DM! ~#fo?#`is#r! ~#fo! ~#fo)~#fo! |g}os! n*2OѯgWs*0OU>22O! n}M!R`in&Ï! ~#foQ"0O#|q!"0O*0O),M~#fo"3O*0O+Ln}22Of!9!9DM`iw#w`i~#fo`i~#fok">w#w`i~#fok">##6`i~#fok">###6#6`i~#fok ~#fo͐#)~#fos#r! ^#Vr+s͐ ^#Vr+s`i^#Vr+s*6++"6l͐ ͐s#r! ~#fo͐ ~#fo)w#wz! ^#Vr+s`i^#Vr+s!9Can't open %s ~#fo! ~#fok">~#fos#r! ~#fo##! ~#fok">##n&! ~#fok">##n&Ns! ~#fo+!! ~#foK`! ~#fo~#fo")L! 9!`is#r`i~#fo|?! ~#fo+`i~#fo! ~#fo`i^#Vr+s!9Qý !9DM`i6#6! ~#fo! ~#fo~#fo! s#r! ~#fo! ~#fo! ^#Vr+s)~#fos#r! ~#fo+!! ~#foK! ~#fo~#fo! s#r`i~#fok">! s#r! ~#fo~#fo! ͱ! ~#fo! ʹͷ*)L!ͺ#|>ͽ>22O!"0O! 9*** rescaling ***, l*"Ó"!9DM! ~#fo!vf! ~#fo*>f! ~#fo#n}:¸! ~#fo##s#r! ~#fo! ~#fon&i! ^#Vr+sn}¸*)Lͩ!*)Ls#r`i~#fo! ~#fo `i~#fo! ~#foq! ~#fo`i~#fo#)~#fo! ~#fo`i~#fo)~#fo|q`i^#Vr+s! ~#fo`i~#fo)~#fo! ~#fo| ! ~#fo! ~#fo)! ~#fo`i~#fo)~#fos#r! ~#fo`i~#fo)! ~#fos#r! ~#fo`i~#fo! ~">6#6`i^#Vr+sæ!9!9DM! s#r! s#r! s#r! ~#fo! ~#fok">~#fo! ~#fo! ~#foғ! ^#Vr+s! ~#fo! ~#fok">~#fos#r! ^#Vr+sC! ~#fo#! s#r! 6! w#w! ~#foo! ~#fo} ! 6!q*6}o!:!!:!:!|!*6}o*6!s#r*6w#w*6*6tempin.$$$tempin.$$$tempout.$$$9DM`iw#w`i~#fo3`i~#fo+L6`i^#Vr+s !9B<!9DM! ~#fok">###~#fo`is#r! ~#fok">~#fo! s#r`i~#fo#|! ~#fo#|! ~#fo+L! ~#fos! ~#fo),M*.O! ~#fo|g}os#r! ~#fo! ~#fo! ~#fof! ~#fo! ~#fof! ^#Vr+s`i^#Vr+s1! 9T !!9DM`i6! 6*2O! nѯgW! n}‹`in&Ï`in*3O! ng|g}os*3O! nѯg"3O*2O! nѯgW}22O`in&Ï*2O&+`in*3O! ng! s#r! ~#fo! ~#fof! w#w*)L`is#r! ~#fo! ~#foE`i~#fok">###~#fo! s#r`i~#fok">~#fo! s#r! ~#foͩҫ! ~#fo#ü*)L! ~#fo! s#r! ~#foͩ! ~#fo#*)L! ~#fo! s#r>2!>!"r+ó1!9DM*!>};!R!!!">2!>! ~#fo!">*>>a!>p!>m!>z!!>2!>!!!">! ~#fo!">*>¶!*>Ҷ!*>#">Å!*>>!>!>!>!!*>">>2!>*>>2!>!>2!>*>">>29DM! n&aͯ(0! n&zͯ20,0!9DM͐͐ ҂0͐^#Vr+s͐ o0͐0w0͐7s!&0͐ ͐͐ ͉͐/0`is͐ ͐͐ )͐/0`in&#&0!9!9DM! n&0ͯ1! n&9ͯ4!9DM͐|*)*͐+++|/*!)*͐##^#Vr+szY*͐^#Vr+sn&*!͐͐~#fo)`is#r!ږ*͐##^#Vr+s*͐##͐?+s#r͐͐s#r͐^#Vr+sn&*!9!9DM`iw#w! ~#fo͐%5u $ &!9DM*>}3%*)L!<% $`iw#w͐$͐k">~#fo|ʼ$͐k">~#fo͐k">###~#fo͐k">##n&͐k">~#fo͐!W% $`i^#Vr+s2$!u% $`iw#w͐3%͐+Ln&'%͐),M n}.! 6#6! ^#Vr+s~#fo! s#r͐n}u.͐|u.! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s+.͐6! ! s#r! n}.! ^#Vr+s!.! ^#Vr+s! n}.!0.! sÑ.͐! ^#Vr+sns{.! ^#Vr+s.! n}&/!!q'͐##^#Vr+sz=(͐^#Vr+s! ns&!͐͐~#fot'g(!͐##6#6͐͐s#r͐^#Vr+s! ns&ô(3Å33!9DM͐(!)͐##~#fo(!)͐##~#fo!>*>!"!!!Bug - bad state 6"ä+Û%ó1!9DM! ~#fo! ~#fo-"! ~#foz"!|"!0"!3"Write error in putw() ß"k'Û%ó1!9DM! ~#fo! ~#fo͖"#|"!"!͙"!͜"Write error in putc() ")!9DM1h1!h9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{U/`in}%?/! ! s#r! 6#6! s! s! s͐n}-”,! ^#Vr+s! 4͐n}0¤,! 4͐n&+},! +,!! s#r! ^#Vr+sn`is{. -! +! s#r! 4! ^#n! ~#fo͐n}=+! ~#fo`i^#Vr+sn}:+!i+*! ~#fo͐n! ~#fo͐nѯgWi+!9x+2!9DM͐n}ʢ+! ^#Vr+sn&u+À+ê+k'!9DM͐͐)ͧ+|+͉͐͐ͧ+|+͐!,,00~#fo͐+Ln&͐͐!% $`i^#Vr+s$!9 Encoding tree - root=%3d %3d w=%5u d=%3d l=%3d r=%3d Huffman codes %3d %4X l=%2d c=%4x ä%+d/!y9DM! `i͞%͐`i͡%%!9%//!9DM! n&%|ͣ&! n&͒ ^#Vr+s!&/! ^#Vr+s6 .`i~#fo">`i~#fo7#!9I#r+ &!9DM*>}#!#C#`iw#w͐Һ#͐|’#͐!#F#͐k">~#fo!$F#`i^#Vr+sg#!$C#!9 Counts after 1st algorithm and maybe scaling %4X Vr+sn`is`in&,}D8-Ut-X}-Oʆ-C-S-)/͐~#fo|t-! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 Ì-! 6Ì-! 6! ~#fo! n&! ^#Vr+s~#fo! +ѯgs#ru.! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+su.!s#rz '!͐͐s#r͐##6#6͐~#fo@'2!9DM͐Z'!͐~#fo='w'2à13!9DM͐+|—'! n&n'͐++|µ'! n&!q'͐+++|'! n&!q'͐++++| (! n} '! !q'! n&%|ͣ&+r+!y9DM! `i&`i&!9!9DM͐`is#r͐n}d&! ^#Vr+sL&! ^#Vr+s͐ns! ^#Vr+sn}d&͐Ó&!9â&u2!9DM͐!͐͟&s#rz&!͐##w#w͐~#fo&ù2!9DM͐͐& 10!9DM`iw#w͐~#fon&1}X1͐ ?͐^#Vr+snѯg`is#r1͐_1!9n1/!9DM! n&k1|ʕ1! n&Ú1! n&7:O*o`  !\&!7*!1&*!2&1!,on File Exists -- Skipping File in Error is: ! C |!   ~~w#I!   ~w#_!  # ~#x   | !  ~#¥  !     _~# RENAME afn1=afn2 /I <-- Inspect mode RENAME afn1=afn2 /S <-- Include System Files Note: /I and /S Options may be combined Examples: RENAME *.MAC=*.ASM <-- Rename *.ASM to *.MAC RENAME *.MAC=*.* /I <-- Rename *.* to *.MAC with inspection RENA|2q /4%4:qw 4! {w7:)~:,"s!"u*|ʗ4**sœ4! ~—46*u*+"*"*u#"uc47*!9& 6C#6O#6M4*|4!\&5!\* " * " * * [ y RENAME ERROR -- Pointer Table Not Consistent@* ~#~ *   * ^#V*  " * ^#V!  * ##" y * DM+) +) Nq#Nq* DM+) +) N#F^#V`i# ~O#* * #] TYPERET ; ;FILTER OUT CONTROL CHARACTERS TO ;PREVENT GARBAGE DURING VIEW OF FILE ; TYPE2 CPI ' ' JNC TYPEQ CPI CR JZ TYPEQ CPI LF JNZ TYPENCR TYPEQ LDA QFLAG ORA A VCONOUT CZ $-$ ;ADDR FILLED IN BY 'INIT' ;UPDATE COLUMN USED IN TAB EXPA !\&!TELk762÷4Û%ó17*^#V#z>2+V+^+I2*-2!g2!0232Broken pipe 7,2q*&:q):ʱ2=ʱ2=r:qo&2ö1u27*ͼ2\!*Ϳ2#  3 >* |S No Files Selected -- Aborting Selected FCB: ! C@ T]W* $." v@!l6#>   !~#ʟ=€m.u Format Error -- Missing =@~#. ȷ*~#>?~#`o&~e* "ME *.OBJ=*.COM /I/S <-- Rename *.COM to *.OBJ with both I and S@#~/gc#~SbIc>2 g>2 C#6p:]/ʎ ʎ:m/ʎ ʎ ERROR -- File Name not specified Error FCB: !\C>=!lC@!l    ! " !"  &*|5!!l&!~#foF5> +=5#~+5##5a{ !pr5!*w#S5:**j5*!ѷ! , FNxg>Goy5$> ? ~#= Rename ! C from Cb z#V>.V~#V: ʫ -- Ok (Y/N)?  YʫN Type Y or N -- Ok (Y/N)? {#    !   ͽ9 ͒ ERROR -- Rename Destinati!9" 1 RENAME Version 1.1:\2 S=<2 _S: N=_* ɯ2 2 !FxC RENAME is invoked by a command of the form: RENAME afn1=afn2 <-- Rename all matches \ \__ Old File Name \__ New File Name _ 37:)~:,"s!"u*|*uʃ3*~#Z3"*s*uƒ3#"u*+"G37*|DM**3ڴ3><3~# x¨3 ><3~+ x3|}3Ü57:,*3:*3} |*  j   #?3O~3e# ~e: Y ~e  * #" * +" |* |DM* * s#r#!  x…* " * |g}o" " * #" * }|ڜ* " * * }o|g" ڰ|ʰ* " ͼڰ* * ͡* DML $-$ ;ADDR FILLED IN BY 'INIT' POP H POP D POP B RET ; ;CONSOLE OUT WITH TAB EXPANSION ; TYPE PUSH B PUSH D PUSH H MOV C,A ;FOR OUTPUT ROUTINE CPI TAB JNZ TYPE2 TYPETAB MVI A,' ' CALL TYPE LDA TABCOL ANI 7 JNZ TYPETAB JMP F MVI A,CR CALL TYPE MVI A,LF JMP TYPE ; UPCASE CPI 60H RC ANI 5FH ;MAKE UPPER CASE RET ; CONST PUSH B PUSH D PUSH H VCONST CALL $-$ ;ADDR FILLED IN BY 'INIT' POP H POP D POP B RET ; CONIN PUSH B PUSH D PUSH H VCONIN CALa{_~# w# x   | !  ~#¥  !     _~# t ambiguous name %sA Iïø&Áoò)fó!9DM`i!- ~#fo #|z !- ~#fo!z! q!' w#w!"1 `i# vʸ !- ~#fo!! j`i# ! s#r"5! s#r! ~#fo`i& s! ^#Vr+sn} ! 6!1)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>urr drive.' DB CR,LF DB '=sss search for ASCII sss from curr sector.' DB CR,LF DB ' Caution: upper/lower case matters.' DB CR,LF DB ' Use for hex: <3b> for ";";' DB CR,LF DB ' To find "IN 0" use: =<0> or' tput drives and input file names. Empty to quit. *J ÀøIxò !9DM! ~#fon}- ! ~#fo#n&8 F͝}225}ʏ ! ^#Vr+s!"05! ~#fo#n} ! ~#fo#; "05| ! ~#fo#! !> ö ! ~#fo#n}:O ! ~#fon&A |5 ! ~#+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77POP H RET ; ;HELP ; 09/27/81 DELETED "type any char to continue". ; (I find ^S an adequate means, ; with "type any char.." if you ; DO USE ^S it takes it as the ; "any char" and instead of stopping ; IT GOES. ) ; HELP CALL ILPRT Di6#6`i~#fo! ~#foC! ~#fo`i~#fo)~#foͪ`i^#Vr+s! ~#fo! !ͧ!2 !ͧ`iw#w`i~#fo͡! s#rz! 6 #6`i~#fo! ! ~#fos{ `i~#fo! 6`i^#Vr+st! n}! ͪ! n}aͭ!9T#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"21>:21>21`*K͞+) (35'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|zfo##n}2 !"05! ~#fo! D ! ~#fon}21ö O ! ~#fo! !> ö ! ~#fo`is#r`i~#fon}ʩ `i~#fon}*ʃ `i~#fon}? ! ~#fo! !> ö `i^#Vr+s] ! ~#foG !9 BAD COUNT %s Output drive =%s ERROR - Ignoring %s Can't accep!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15B 'Operands in brackets [...] are optional' DB CR,LF DB 'Numeric values: ''n'' are decimal, ''x'' hex' DB CR,LF,CR,LF DB '+[n] step in [n] sectors;' DB CR,LF DB '-[n] step out [n] sectors' DB CR,LF DB '# print disk parameters for c1.5 08/02/81File 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 ou#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r7||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! ) !"5! ) ! !- ~#fo!, `i# ! s#r! ~#fo|^ ! ~#fox !- ~#fo!! j!"1!"1!  w#w!  ~#fo! ~#fo !  ~#fo))1`i# s#r!  ~#fo))1##`i# s#r!  ^#Vr+sÌ *05|ʯ! / `i2 ͐~#fo2%!͐##6#6͐͐s#r͐^#Vr+s! ns&r%@&Ñ&!9DM͐ҍ!ê͐##~#fo¦!ê͐##~#fo`is#r͐͐͐~#foi͐!ê͐+?`(`i~#fo" 5* 5#|!0u"5* 5TT! ~#fo"5|F!TT*5++"5* 5T!9cÁ!9DM`iw#w*5#"5! ~#fo`"5#|!@!"5`i~#fo))1*5|g}o)~#fo`is#r`i~#fo))1*5"5|g}o)~#fo`is#r`i~#fcksum error in %s Á$+$!9DM*)}P! )`is{ M! )`ise!`is{e`in}t!Þ`in} –`i6 *)}–! !`in&Þ!9üI+$.$!9DM{2){2){2)! ~#fo͐ ~#fo)")! 6#6`i6#6͐͐`is#r!"͐##^#Vr+sf͐##͐?+s#r͐͐s#r͐^#Vr+sn&f!9!9DM͐`is#r͐n}ʙ! ^#Vr+sÁ! ^#Vr+s͐ns! ^#Vr+sn}™͐!9ç%!9DM͐͐s#rz!͐pecifierCan't create %s /ó.$)fC$â$*)}@! )! *)}ʢ!-!#!-&!-!!)*)}ʢ*)!s#r*)w#w*)*),tempin.$$$tempin.$$$tempout.$$$dâ! ~#fo͐)~#fo#n}c! )! ~#fo͐)~#fo#ͪ#|¯! ~#fo͐)~#fo#!!ͭͰ>2)!! ~#fo͐)~#foͳ|*)&|g}o}2)!)4! ~#fo͐)͐s#r͐##6#6͐~#fo5$%!9DM͐+|U! n&,͐++|s! n&!/͐+++|’! n&!/͐++++|! n} ·! !/! n&!/͐##^#Vr+sz͐^#Vr+s! ns&!! !-! n&#|0!!*)&|g}o|E! |e!+++|e! n} }! !! n&!File output error; disk full? !"5!c"5]!9DM*5*5+"5* 5TT! ~#fo`is#r!! ! ~#fo8 #|/! !! X! ~#fo*1X! !! ! ; ! > `i> !)9Can't open %s %s is not a squeezed file %s -> %s: %s has invalid decode tree size Can't create %s Write error in %s ERROR - ches#rz!͐##w#w͐~#fo,Á!9DM͐)`is#rzr͐)! s#rzr͐?͐x!x!9Í$1%!9DM͐|¤̈́f͐+++|»!͇f͐##^#Vr+sz͐^#Vr+sn&f!͐͐~#fo͊͐! s#r͐͐ ~#foZ! ~#fo͐)! ~#fo͐#)~#fos#r! ^#Vr+s ͐ ^#Vr+s`i^#Vr+s*)++")ß͐ ͐s#r! ~#fo͐ ~#fo)w#wí! ^#Vr+s`i^#Vr+s!9Can't open %s &*~#&"*s*u>&#"u*+"&7*|DM**͋&o&><&~+ x&|}×&'7:,*͔&:*ʹ&}|2q &&:qw&! {w# ! 6! ~#fo! n&! ^#Vr+s~#fo! vѯ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! !and line, separated by spaces. The output to the console is "filtered" (like MLIST) to eliminate control characters other than CR, LF, TAB, or FORMFEED. The source code file TYPESQ.C is compiled the same way as USQ. See SQBUILD.DOC for instructions`is#r#͐$!97:O*o`  !\&!7*!m$&*!}$&m$!, !\&!TELk7î$&I+$7*^#V#z¶$+V+^+$*ͥ$!$!ͨ$ë$Broken pipe 7,2q*n! ~#fo͐n}>! ~#fo`i^#Vr+sn};!j! ~#fo͐n! ~#fo͐nѯgWj!9 #{"õ#À!h9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{!`in}%½!! ! s#r! 6#6! s! s! s͐n}-oy($G##g'a{ !p'!*w#›':**ʲ'*!ѷ! , FNxg>G7*!9& 6C#6O#6M.'*|D'!\&V'!\&*|V'!!l&!~#foʎ'> +ͅ'#~s'##g'a{ !p'!*w#›':**ʲ'*!ѷ! , FNxg>G s#r! n}J!! ^#Vr+s!J!! ^#Vr+s! n}A!!0D!! s!͐! ^#Vr+sns{s!! ^#Vr+sJ!! n}ʤ!! ^#Vr+s!Ҥ!! ^#Vr+s6 }!ú!! ^#Vr+s`ins!! ^#Vr+s`insñ͐6!9!)!9DM! ^#Vr+sn`. TYPESQ is based on USQ by Richard Greenlaw, and was written by Bob Mathias, with suggestions from Keith Petersen.  CR, LF, TAB, or FORMFEED. The source code file TYPESQ.C is compiled the same way as USQ. See SQBUILD.DOC for instructions&:q):)%=)%=r:qo&7:)~:,"s!"u*|ʇ%**sŒ%! ~‡%6*u*+"*"*u#"uS%ð%.$$7*ͪ%\!*ͭ%7:)~:,"s!"u! ^#Vr+s! 4͐n}0"! 4͐n&y}?! |B!! s#r! ^#Vr+sn`is{.Š! |! s#r! 4! ^#Vr+sn`is`in&}DʶUXO CJ S{ ç!͐~#fo|! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 ! 6 TYPESQ.DOC as of 7/6/81 by Bob Mathias and Keith Petersen, W8SDZ TYPESQ.COM is a program primarily for use on remote CP/M systems to allow typing "squeezed" files. It does not accept wild cards, but will accept multiple file names on the comm""# #!9DM͐͐ a#͐^#Vr+s͐ N#͐0V#͐7s!&ì#͐ ͐͐ ͉͐#`is͐ ͐͐ )͐#`in&#&ì#!9û#{"!9DM`iw#w͐~#fon&͸#}$͐ ?͐^#Vr+snѯgis{="`in} "͐! !͐`in&!#|:"!C"!!C"!9!9DM! n&aͯw"! n&zͯ!9DM! n&0ͯڦ"! n&9ͯ!9DM! n&Aͯ"! n&Zͯ"!9DM͐n} #! ^#Vr+sn&*K͞+&c 0:'+FÎr7 :2!q: ʊ *M8 ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|zion/pipe specifier! ! ~#fo`i~#fo)~#fo# !.! ~#fo`i~#fo)~#fo# #| ! ~#fo`i~#fo)~#fo#!ÒCan't create %s ! !&4*&}:`i~#fo! s#r! ~#fo! ~#fo~#fo! ~#fo! ~#fo)! ~#fo! ~#fo#)ãáêPFóè!9DM!) , `i!* ~#fo #|o !* ~#fo!W f Can't open %s * !"6  `i vʾ !* ~#fo! õ %s is not a squeezed file # `i ! s#r":! s#r! ~#fo`i s! ^#Vr+sn} !+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#.¶66*>?w#> w#.7:77#fo~#fo)"&! 6#6`i6#6`i~#fo! ~#fo~#fo҆*&}BÆ! ~#fo`i~#fo)~#fon}o! ~#fo`i~#fo)~#fo#n}‘! &! ~#fo`i~#fo)~#fo# #|! ~#fo`i~#fo)~#fo#!Can't open %s ! >2&! ' ͪîͭ!9i; !9DM! ~#fo#n}:g ! ~#fon&ͺ|: ! ~#fo##n}7 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}/or!  ~#fo))6##`i s#r!  ^#Vr+s `i ! s#rz *6! ~#fo"6! ~#fo|g}o! s#r! ~#foҍ ! ~#fo ! ~#fo  ! ~#fo  ! ~#fo  ! ~#fo  ! ~#fo , ! ~#fo*6# ! !  E 6!6!  !":!  ! !* ~#fo!3 ? %s -> %s: !L O `i ! s#r! ~#fo| ! ~#foں !* ~#fo! ñ %s has invalid decode tree size # !"6!"6!  w#w!  ~#fo! ~#fo, !  ~#fo))6`i s#!a{   `OE!y6$ -7rBo&))T])))!yg!>3͹(>3>@2:;u *1;";.04:/;2/;";|¶!}§!=/04ʽ!ª!=004>G>)3!#'͇&)*͹( EMPIN.$$$! ~#fo`i~#fo)~#fo |>*&&|g}o}2&ä!&4! ~#fo`i~#fo)~#fo#"&! ~#fo`i~#fo)~#fo#n}ʼ! ~#fo`i~#fo)!â.TEMPOUT.$$$s#r! ~#fo`i~#fo)"&*&&|g}o}2&! ~#fo`i~#fo)~#fo#n} !Bad redirect! ~#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 ;#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2rRROR - checksum error in %s `i !&9? P!9DM*&}p ! &6 `is{ m ! &6 `isÅ !9 `is{… < `in}” !þ `in} ¶ `i6 *&}¶ ! !9 `in&þ !9 ãÑ!9DM{2&{2&{2&! ~#fo! ~>"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;{#|?†ð3 ÷;Ï!9DM! ~#fo! ͤ>26>:26>26`i6#6`i~#fo! ~#fo! ~#fo1!&,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;!~#fos#r! ^#Vr+sú! ~#fo^#Vr+s`i^#Vr+s*&++"&l! ~#fo! ~#fos#r! ~#fo! ~#fo~#fo)w#wz! ^#Vr+s`i^#Vr+s!9Øè*&}ʩ! &͒!útempin.$$$͕ !9DM*&}V! n} !.! !.! )~:,"s!"u*|*ua *~#8 "*s*ua #"u*+"% *s¬! ~§6*u*+"*"*u#"us# 7*\!*7:is{.0! 7! s#r! 4! ^#Vr+sn`is`in&:}D\UʘXʡOʪCS!9͐~#fo|! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 ð! 6ð! 6! ~#fo! n&! ^#Vr+s~#fo! 1ѯgs#rÙ! ^#Vr+s!`is#r`i~#fo!#`i~#fo`is#r`i~#fo2!9D.t!y9DM! `i>`iA!9ræ!9DM! n&l|ͣŸ! n&o|ͣé !9DM! ~#fo!͐ͦs#rz!! ~#fo##w#w! ~#fo~#foP!9`in&#&!9!9DM! n&0ͯC! n&9ͯM!9DM`iw#w͐~#fon&J}ʚ͐ ?͐^#Vr+snѯg`is#r[͐á!9ð!9DM! n&ͭ|! n&! n&7:O*o`  !\o~#fo!9DM͐+|5! n& ͐++|S! n&!͐+++|r! n&!! ~#fo##^#Vr+szʫ! ~#fo^#Vr+s! ns&!! ~#fo! ~#fo~#fo!! ~#fo##6#6! ~#fo! ~#fn&#|A!4File output error; disk full? !*&&|g}o|V! |v!+++|v! n} Ž! !! n&!!":!c":ùO!9DM*:*:+":* :FF! ~#foͶ`is#r!`i~#fo"+s! n}6! ^#Vr+s!6! ^#Vr+s6 L! ^#Vr+s`insb! ^#Vr+s`insl͐6!9z!9DM͐n}ʤ! ^#Vr+sn&wÂ!9DM! n&Aͯ! n&Zͯ!9DM! n&aͯ! n&zͯ ^#Vr+s~#fos! ^#Vr+sÙ! n}4! 6#6! ^#Vr+s~#fo! s#r͐n}ʙ͐|ʙ! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+sO͐6! ! s#r! n}! ^#Vr+s!! ^#Vr+s6 õ͐! ^#Vr+sns{! ^#VrDM͐`is#rzA͐! s#rzA͐?͐G!G!9\3 Q!9DM͐|sS=͐+++|Š!V=! ~#fo##^#Vr+szʼ! ~#fo^#Vr+sn&=!! ~#fo! ~#fo~#foY`is#r!!=! ~#fo##6&!7,2q*&:q):I=I=r:qo&7:)~:,"s!"u*|ʧ**s¬! ~§6*u*+"*"*u#"us# 7*\!*7:os#r! ~#fo^#Vr+s! ns&=nGê!i9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{e`in}%O! ! s#r! 6#6! s! s͐n}-! ^#Vr+s! 4͐n&4}! 7!! s#r! ^#Vr+sn` :* :#|!0u":* :FF! ~#foͶ":|8!FF*:++":* :F!9UP!9DM`iw#w*:#":Ҿ! ~#foR":#|!2!":`i~#fo))6*:|g}o)~#fo`is#r`i~#fo))6*:":|g}o)~#fo`is#r`i~#fo|c`i~#fo#  !9DM! ^#Vr+sn`is{_`in} @͐! ͐`in&#|\!e!e!9tn!9DM͐͐ ͐^#Vr+s͐ ұ͐0ù͐7s!&͐ ͐͐ ͉͐q`is͐ ͐͐ )͐q!9DM`iw#w! ~#fo͐n! ~#fo͐n}\! ~#fo`i^#Vr+sn}Y!È! ~#fo͐n! ~#fo͐nѯgWÈ!9Ú!9DM͔͐! ~#fo͐͗s#rz!! ~#fo! ~#fos#r! ~#fo##6#6! ~#f#6! ~#fo! ~#fos#r! ~#fo^#Vr+sn&=!9!9DM͐`is#r͐n}p! ^#Vr+sX! ^#Vr+s͐ns! ^#Vr+sn}p͐ß!9î!9DM! ~#fo~#foͫ.!y9DM! `i͐`i!9:\:] *  PIP v2.2 mod B $!6 ::!“*"  !N# 6$ ͩ Repeating: $_R͡< 2 :_. All disks made R/W.$*"NP:/OUT:SPACE)(INP:/OUT:SPACE)ͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ ͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 *$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 :   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q* COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q   "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! ͟/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2m!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$=6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]HHͯ :^!w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>*M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N! or CAfrom-thru,byte D[ff,tt] Dump (hex+ASCII) Fn.t Find file F Find next extent of file Gnn CP/M Allocation Group nn H[ff,tt] hex dump L Log in drive Lx Log in drive x M[nn] Map [from group nn] N New disk P To!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ or curr drive. =sss search for ASCII sss from curr sector. Caution: upper/lower case matters. Use for hex: <3b> for ";"; To find "IN 0" use: =<0> or for "(tab)H,0(CR)(LF)" use: =<9>H,0 < save curr:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&6> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*ȱ:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !ent sector into mem. buff. > restore saved sector ? give help A[ff,tt] ASCII dump C Change: CHaddr,byte,byte... (hex) or CAaddr,data... (Ascii) Allowed for imbedded hex. or CHfrom-thru,byte e.g. ch0-7f,e52*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇gDM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!r+s+p+q*~$7*>*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\!9" 1 PROTECT Version 1.0:\2 >=<2 _ |† ERROR -- PROT must run under CP/M 2.x: ʁ=_* ɯ2 2 !Fx PROT is invoked by a command of the form: PROT afn keys <-- Set unconditional PROT afn keys /I 2 :]/ h ERROR -- File Name not specifieds ERROR -- Invalid Key specifieds!m~/x > / m! " !" \ʤ/—* | No Files Selected -- Abortings T]* $." ͮ)s1! x5RRC 043C 1D DCR E 043D C22104 JNZ SLEEPLP 0440 C30602 JMP PROMPT ; ;CHECK FOR CONTROL-C OR S ; 0443 CDAA0F CTLCS CALL CONST 0446 B7 ORA A 0447 C24D04 JNZ GETC 04SYS: N -- Ok (Y/N)?  YNN Type Y or N -- Ok (Y/N)? #  & /  ! ͂####͂ ~w ʐ~w#‚ Keys (1/2/3/4/R/S/A=Abort)? ! > /   !  ~# A >-- Inspect mode PROT afn /S <-- Set individual where "keys" may be any combination of: R S 1 2 3 4 to indicate R/O, SYS, or Tag Bits 1, 2, 3, or 4 Any bit not specified is cleared (R/W, DIR, etc) Examples: PROT *.COM RS <-- Set *.COM to R/A 7B MOV A,E ;ANY? 041B B7 ORA A 041C C22104 JNZ SLEEPLP 041F 1E0A MVI E,10 0421 01401F SLEEPLP LXI B,8000 ;APPROX .1 SEC @ 2MHz 0424 3A0301 LDA CLOCK 0427 B7 ORA A 0428 CA2E04 JZ SLEEP2 042B 0183A4A18 PRINTFF LDA PFLAG 040F EE01 XRI 1 0411 324A18 STA PFLAG 0414 C30602 JMP PROMPT ; ;SLEEP ROUTINE, IN TENTHS OF A SEC ; 0417 CD400E SLEEP CALL HEXIN ;GET COUNT IF ANY 041S  A  6  'w>  #`o&~ʝ* " |* _ ͢X ]#?~O~~Ý#i ~ & * #" * +" |* |DM* * s#r#!  x½* " * |g}o3" " * #" * }|* " 4A F601 ORI 1 ;NO CHAR, RETN NZ 044C C9 RET 044D CDB40F GETC CALL CONIN 0450 E61F ANI 1FH ;ALLOW ASCII 0452 FE13 CPI 'S'-40H 0454 CCB40F CZ CONIN 0457 FE03 CPI 'C'-40H 0459 C9 RET ;0 SET IF CTL-_~#  a{_~#& w#/ ^#V   3   ů2[\ͨ = ͚ "  ͚ " =͚ "= > 2 ͚ "=͚ = *}o_: O SYS PROT *.COM 1R <-- Set *.COM to R/O DIR with Tag Bit 1 Set PROT *.COM /I <-- Set *.COM to R/W DIR with user inspection PROT *.COM /S <-- Set *.COM to user-selected attributes on individual basiss#~/ʖ#~SIÖ>2 03E LXI B,16000 ;APPROX .1 SEC @ 4 MHz 042E 0B SLEEP2 DCX B 042F 78 MOV A,B 0430 B1 ORA C 0431 C22E04 JNZ SLEEP2 0434 D5 PUSH D 0435 CD4304 CALL CTLCS 0438 D1 POP D 0439 CAF401 JZ PROMP+) N#F^#V`i# ~O#* * : c File: ̈́ Set to ͣ z7 File: ̈́͗N zc#͗>.͗~#—! 2 ~# ʹ>2 ­:  Tags: ! ͗ R/~#R>W>O~S DIR * * }o|g" |* " * * * DM* " * " * * Wʔ yL PROTECT ERROR -- Pointer Table Not Consistents* ~#~ *  & * ^#V* & " * ^#V! & * ##" yD* DM+) +) Nq#Nq* DM+) 19137AB3CA06021B1B9A :1003E000EB2247187CB5EBC20602C3F7013A64184A :1003F000B7CAB902CD810E7BFE20D2B9027AB7C24C :10040000B9020E20E5CD0500E1C306023A4A18EE16 :1004100001324A18C30602CD400E7BB7C221041E2A :100420000A01401F3A0301B7CA2E0401803E0B782F :10043000POP D 0508 C1 POP B 0509 218000 LXI H,80H 050C 19 DAD D 050D EB XCHG 050E 0B DCX B 050F 78 MOV A,B 0510 B1 ORA C 0511 C2E404 JNZ RDIRLP 0514 018000 LXI B,BASE+80H 0517 CDB310 ;RESET TRACK AND SECTOR 04AB EB XCHG ; TO DIRECTORY 04AC CD2310 CALL SETTRK ; ON EVERY 04AF 110100 LXI D,1 ; LOGIN 04B2 CD3B10 CALL SETSEC ; CHANGE 04B5 2A5318 LHLD PHYSEC ;THIS LOGIC WILL TELL 04B8 7C MOV A07003DBADAC7029E :1004F000CDB3102A4F18EBCD23102A5118EBCD3B6A :1005000010CDB610CDD20BD1C121800019EB0B78E4 :10051000B1C2E404018000CDB310E1C9CDFD09CD25 :10052000C5040E003AEF18CDAC173AF018CDAC1751 :100530000600CD400EE57BB2CA3D05424BCD8E0D87 :100540003E2DMA ADDR 04E4 C5 RDIRLP PUSH B 04E5 D5 PUSH D 04E6 42 MOV B,D 04E7 4B MOV C,E 04E8 3A0700 LDA BDOS+2 ;CHECK MEM AVAIL 04EB 3D DCR A 04EC BA CMP D 04ED DAC702 JC MEMFUL 04F0 CDB310 0492 CAB902 JZ WHAT ;SELECT ERROR 0495 5E MOV E,M ;GET THE SECTOR TABLE PNTR 0496 23 INX H 0497 56 MOV D,M 0498 23 INX H 0499 EB XCHG 049A 226518 SHLD SECTBL 049D 210800 LXI H,8 ;OFFSET TO B1C22E04D5CD4304D1CAF4011DC221049A :10044000C30602CDAA0FB7C24D04F601C9CDB40F41 :10045000E61FFE13CCB40FFE03C90E19CD05004FE5 :10046000C38104CDFD09CD6C04C306027E110000DA :10047000FE0DCAC104FE3BCAC104CDA40F23D64160 :100480004FE579325F18CD00003A6418B7CAA50 ;READ IN THE DISK DIRECTORY ; 04C5 E5 READDIR PUSH H 04C6 CDCD06 CALL NOWRITE ;POSITIONING LOST 04C9 2AF318 LHLD SYSTRK 04CC 224F18 SHLD CURTRK 04CF 210100 LXI H,1 04D2 225118 SHLD CURSEC 04D5 2AA,H ; IF FIRST SEC 04B9 B5 ORA L ; IS PHYSICAL 0 04BA 325E18 STA FIRST0 04BD CD7109 CALL CALCSUB 04C0 E1 POP H ; 04C1 CDCD06 LGNODK CALL NOWRITE 04C4 C9 RET ; HE DPH ; 0463 CDFD09 LOGIN CALL NOCONT 0466 CD6C04 CALL DOLOG 0469 C30602 JMP PROMPT ; 046C 7E DOLOG MOV A,M ;DISK REQ? 046D 110000 LXI D,0 0470 FE0D CPI CR 0472 CAC104 JZ LGNO CALL SETDMA 04F3 2A4F18 LHLD CURTRK 04F6 EB XCHG 04F7 CD2310 CALL SETTRK 04FA 2A5118 LHLD CURSEC 04FD EB XCHG 04FE CD3B10 CALL SETSEC 0501 CDB610 CALL READ 0504 CDD20B CALL NEXTSEC 0507 D1 DPBPTR 04A0 19 DAD D 04A1 7E MOV A,M ;PICK UP DPB POINTER 04A2 23 INX H ; TO USE 04A3 66 MOV H,M ; AS PARAMETER 04A4 6F MOV L,A ; TO LOGIT 04A5 CDDF17 SELSKP CALL LOGIT 04A8 2AF318 LHLD SYSTRK469 :100490007CB5CAB9025E235623EB226518210800F9 :1004A000197E23666FCDDF172AF318EBCD231011C9 :1004B0000100CD3B102A53187CB5325E18CD71096E :1004C000E1CDCD06C9E5CDCD062AF318224F18217E :1004D00001002251182AED1823CDA417CDA41744EA :1004E0004D11F519C5D5424B3ED18 LHLD DRM ;GET DIR SIZE FROM DPB 04D8 23 INX H ;MAKE 1-RELATIVE 04D9 CDA417 CALL ROTRHL 04DC CDA417 CALL ROTRHL ;DIVIDE BY 4 (4 NAMES/SECTOR) 04DF 44 MOV B,H 04E0 4D MOV C,L 04E1 11F519 LXI D,DIRECT ;R LATER WHERE WE ARE 0486 CD0000 VSELDK CALL $-$ ;ADDR FILLED IN BY 'INIT' 0489 3A6418 LDA VER2FL 048C B7 ORA A ;IF NOT CP/M 2.x ... 048D CAA504 JZ SELSKP ;..THEN SKIP THIS JUNK 0490 7C MOV A,H 0491 B5 ORA L DK 0475 FE3B CPI ';' 0477 CAC104 JZ LGNODK 047A CDA40F CALL UPCASE 047D 23 INX H 047E D641 SUI 'A' 0480 4F MOV C,A 0481 E5 SELECT PUSH H 0482 79 MOV A,C 0483 325F18 STA DRIVE ;REMEMBE CALL SETDMA 051A E1 POP H 051B C9 RET ; ;MAP THE DIRECTORY ; 051C CDFD09 MAP CALL NOCONT ;CAN'T CONTINUE "F" COMMAND 051F CDC504 CALL READDIR ;READ IN DIRECTORY 0522 0E0LENGTH IN B ; 05FD 7E MAPN2 MOV A,M 05FE E67F ANI 7FH ;STRIP POSSIBLE 2.x ATTRIBUTE BIT 0600 23 INX H 0601 FE20 CPI ' ' ;PRINTABLE? 0603 DA0B06 JC MAPN2H ;..NO, IN HEX 0606 FE7E CPI 7EH ;7E 09 JMP POSGRP2 ;..WHICH POPS INBUF AND CONTINUES ; ;PRINT FILE NAME POINTED TO BY HL ; 058B CDD30D MAPNAME CALL SPACE 058E 7C MOV A,H 058F B5 ORA L ;NONE? 0590 CAD205 JZ ; 053D CD8E0D MAPDF CALL HEXB 0540 3E2D MVI A,'-' 0542 CDBE0F CALL TYPE 0545 CD1906 CALL GETGRP ;GET GRP(C) TO HL 0548 03 MAPCONT INX B ;NEXT GRP # 0549 E5 PUSH H 054A 2AEB18 LHLD DSM ;GET HIGHEST C5 3E20 MVI A,' ' 05C7 C2CC05 JNZ MAPNSP2 05CA 3E29 MVI A,')' 05CC CDBE0F MAPNSP2 CALL TYPE ;")" IF ERASED FILE 05CF C3EA05 JMP FLIP ; 05D2 CDDD0D NONAME CALL ILPRT 05D5 202020202B DB ' ++FREE++ MAPDIFF DCX B 056F CD8E0D CALL HEXB 0572 03 INX B 0573 EB XCHG 0574 CD8B05 CALL MAPNAME 0577 C33D05 JMP MAPDF ; ;END OF MAP ; 057A 0B MAPEND DCX B ;GET LAST0 MVI C,0 ;INIT START GRP # 0524 3AEF18 LDA AL0 ;READ DIR GRP BITS 0527 CDAC17 CALL COLECT ;COLLECT COUNT OF DIR GRPS.. 052A 3AF018 LDA AL1 ;..IN REGISTER C 052D CDAC17 CALL COLECT 0530 0600 MVI B,0 ;BC NOW HAS A DEFAU MOV A,M 05A2 CD9A0D CALL HEX ;SHOW USER NUMBER 05A5 CDD30D CALL SPACE 05A8 23 INX H ;SKIP USER BYTE 05A9 C5 PUSH B 05AA 0608 MVI B,8 05AC CDFD05 CALL MAPN2 05AF 3E2E MVI A,'.' 05B1 CDBE0F CALL NONAME 0593 7E MOV A,M ;SEE IF ALLOC 0594 FEE5 CPI 0E5H ;FREE? 0596 3E20 MVI A,' ' 0598 C29D05 JNZ MAPNSP1 059B 3E28 MVI A,'(' 059D CDBE0F MAPNSP1 CALL TYPE 05A0 E5 PUSH H ;SAVE POINTER 05A1 7E GRP # 054D 23 INX H ;PLUS 1 FOR COMPARISON 054E 7D MOV A,L ;WHEN BC REACHES DSM+1.. 054F B9 CMP C ;..THEN WE HAVE EXCEEDED.. 0550 C25505 JNZ MAPC1 ;..THE DISK CAPACITY.. 0553 7C MOV A,H 0554 B8 CMP B ',0 05EA 3A4918 FLIP LDA TWOUP 05ED EE01 XRI 1 05EF 324918 STA TWOUP 05F2 CA9A0F JZ CRLF 05F5 3E3A DELIM MVI A,':' 05F7 CDBE0F CALL TYPE 05FA C3D30D JMP SPACE ; ;PRINT NAME, 057B CD8E0D CALL HEXB 057E CD8B05 CALL MAPNAME ; ;END OF MAP - REPOSITION TO PREVIOUS GROUP ; 0581 CD9A0F MAPEND2 CALL CRLF 0584 2A4B18 LHLD GROUP 0587 EB XCHG 0588 C3BALT START GRP # 0532 CD400E CALL HEXIN 0535 E5 PUSH H ;SAVE INBUF PTR 0536 7B MOV A,E ;GET START 0537 B2 ORA D ;NOTHING? 0538 CA3D05 JZ MAPDF ;..YES, DFLT 053B 42 MOV B,D 053C 4B MOV C,E TYPE 05B4 0603 MVI B,3 05B6 CDFD05 CALL MAPN2 05B9 C1 POP B 05BA CDD30D CALL SPACE 05BD 7E MOV A,M ;GET EXT 05BE CD9A0D CALL HEX 05C1 E1 POP H 05C2 7E MOV A,M 05C3 FEE5 CPI 0E5H 05 MOV A,D 0565 BC CMP H 0566 C26E05 JNZ MAPDIFF 0569 7B MOV A,E 056A BD CMP L 056B CA4805 JZ MAPCONT ;SAME, CONTINUE ; ;DIFFERENT FILE ENCOUNTERED ; 056E 0B 0555 E1 MAPC1 POP H 0556 CA7A05 JZ MAPEND ;..AND WE ARE DONE 0559 E5 PUSH H 055A CD1906 CALL GETGRP ;GET ANOTHER 055D D1 POP D ;SEE IF SAME 055E CD4304 CALL CTLCS 0561 CA8105 JZ MAPEND2 0564 7A IS LEADIN ON SOME CRTS 0608 DA1106 JC MAPN2A 060B CD7E0D MAPN2H CALL BHEX 060E C31406 JMP MAPN2Z ; 0611 CDBE0F MAPN2A CALL TYPE 0614 05 MAPN2Z DCR B 0615 C2FD05 JNZ MAPN2 0618 C9 RET MOVE 0697 E1 POP H 0698 C30602 JMP PROMPT ; 069B AF NOSAVE XRA A 069C 325D18 STA QFLAG 069F CDDD0D CALL ILPRT 06A2 2B2B4E4F20 DB '++NO "<" SAVE COMMAND ISSUED' 06BE 0D0A00 DB CR,LF,0 06C1 C3F :1005A000E57ECD9A0DCDD30D23C50608CDFD053EC4 :1005B0002ECDBE0F0603CDFD05C1CDD30D7ECD9A48 :1005C0000DE17EFEE53E20C2CC053E29CDBE0FC327 :1005D000EA05CDDD0D202020202B2B465245452B52 :1005E0002B2020202020202020003A4918EE013224 :1005F0004918CA9A0F3E3ACDBE0F JZ GETGNF 062F E60F ANI 0FH 0631 5F MOV E,A 0632 23 INX H 0633 7E MOV A,M 0634 B3 ORA E 0635 CA4F06 JZ GETGNF 0638 1E10 MVI E,16 ;FIRST SET FOR 8-BIT GRPS 063A 3AEC18 LDA DSM+1 063D B7676 0680 MVI B,128 0678 CDC406 CALL MOVE 067B 3E01 MVI A,1 ;..SHOW 067D 324E18 STA SAVEFLG ;..SAVED EXISTS 0680 E1 POP H 0681 C30602 JMP PROMPT ; ;RESTORE THE CURRENT SECTOR ; ;Group is not allocated to any file 0662 210000 LXI H,0 ;SAY SO 0665 C9 RET ; ;GOT THE FILE ; 0666 E1 GETGOT POP H 0667 C9 RET ; ;FIND WHICH FILE GROUP (BC) BELONGS TO ; 0619 2AED18 GETGRP LHLD DRM ;MAX DIR ENTRY # 061C 23 INX H ;MAKE 1-RELATIVE 061D 225618 SHLD FILECT 0620 21F519 LXI H,DIRECT 0623 E5 GE19EB2A56182B2256187CB5EBC234 :100660002306210000C9E1C93A5C18B7CAFC10E5AD :1006700021800011F5180680CDC4063E01324E18C7 :10068000E1C306023A4E18B7CA9B06E521F51811D8 :1006900080000680CDC406E1C30602AF325D18CDEE :1006A000DD0D2B2B4E4F20223C222053415645205E :C3D30D7EE67F8F :1006000023FE20DA0B06FE7EDA1106CD7E0DC31422 :1006100006CDBE0F05C2FD05C92AED1823225618C6 :1006200021F519E57E110E00197EFEE5CA4F06E69A :100630000F5F237EB3CA4F061E103AEC18B7CA43A9 :10064000061E085723CD9017CA66061DC24406E150 :10065000112000 ORA A 063E CA4306 JZ SMALGRP 0641 1E08 MVI E,8 ;NOPE, BIG GROUPS 0643 57 SMALGRP MOV D,A ;SAVE GRP SIZE INDICATOR 0644 23 GETGL2 INX H ;POINTING INTO DM FIELD 0645 CD9017 CALL GRPCMP ;COMPARE BC GRP # AGAINST ; 0684 3A4E18 RESTORE LDA SAVEFLG 0687 B7 ORA A 0688 CA9B06 JZ NOSAVE ;NONE TO SAVE 068B E5 PUSH H 068C 21F518 LXI H,SAVEBUF 068F 118000 LXI D,BASE+80H 0692 0680 MVI B,128 0694 CDC406 CALLDCDBE0FCD190603E52AEB18237DB94C :10055000C255057CB8E1CA7A05E5CD1906D1CD436F :1005600004CA81057ABCC26E057BBDCA48050BCDA5 :100570008E0D03EBCD8B05C33D050BCD8E0DCD8BC5 :1005800005CD9A0F2A4B18EBC3BA09CDD30D7CB514 :10059000CAD2057EFEE53E20C29D053E28CDBE0F97TGLP PUSH H ;SAVE POINTER TO NAME 0624 7E MOV A,M ;PICK UP DN BYTE 0625 110E00 LXI D,14 ;NOW GET RECORD COUNT 0628 19 DAD D ; S2 PORTION .. 0629 7E MOV A,M ; IS 0 IN CP/M 1.4 062A FEE5 CPI 0E5H 062C CA4F06 ; ;SAVE THE CURRENT SECTOR ; 0668 3A5C18 SAVE LDA WRFLG 066B B7 ORA A 066C CAFC10 JZ BADW ;NONE TO SAVE 066F E5 PUSH H 0670 218000 LXI H,BASE+80H 0673 11F518 LXI D,SAVEBUF 0 0654 EB XCHG 0655 2A5618 LHLD FILECT ;THERE IS LIMIT TO EVERYTHING 0658 2B DCX H 0659 225618 SHLD FILECT 065C 7C MOV A,H 065D B5 ORA L 065E EB XCHG ;RE-ALIGN 065F C22306 JNZ GETGLP 1 DM FLD 0648 CA6606 JZ GETGOT ;JUMP IF FOUND ONE 064B 1D DCR E ;ELSE COUNT DOWN 064C C24406 JNZ GETGL2 ;GO TEST SOME MORE 064F E1 GETGNF POP H ;NOT THIS ONE! 0650 112000 LXI D,32 ;SO GO TO NEXT 0653 19 DAD D 701 JMP PROMPTR ; ;MOVE (HL) TO (DE) LENGTH IN B ; 06C4 7E MOVE MOV A,M 06C5 12 STAX D 06C6 23 INX H 06C7 13 INX D 06C8 05 DCR B 06C9 C2C406 JNZ M7C0000B2A5118EBCD3B102A4F18EBCD2310CD3F :1007D000B610D1C38107CDDD0D0D0A092B2B454F76 :1007E000462B2B0D0A00E1CD9A0FC36B093A5C181A :1007F000B7C25908AF325D18CDDD0D2B2B43616EAA :1008000027742064756D702C206E6F20736563747F :100810006F7220726561642E0D0A00AF32 MOV A,E ;GET VALUE 0733 D1 POP D 0734 C2B902 JNZ WHAT ;ERROR 0737 C9 RET ; ;READ A BYTE AT A TIME ; 0738 E5 RDBYTE PUSH H 0739 3A5A18 LDA FTSW ;FIRST READ? STRING ; 06E1 CDFD09 SEARCH CALL NOCONT 06E4 E5 PUSH H ;SAVE STRING POINTER 06E5 CD3807 SRCHL CALL RDBYTE ;GET A BYTE 06E8 47 MOV B,A ;SAVE IT 06E9 7E MOV A,M ;CHECK NEXT MATCH CHAR. 06EA FE3C 8CDDD0D3DE0 :1007100020415420003A4318E67FCD9A0DCD9A0F20 :10072000C36B097EFE3CC0237EFE3CC8D5CD400E87 :10073000FE3E7BD1C2B902C9E53A5A18B7C24B078F :100740002A43187DB7FA6607CDD20BAF325A182A62 :100750005118EBCD3B102A4F18EBCD2310CDB6101E :10076000CD7109218 CALL CRLF 0720 C36B09 JMP CALCGRP ; ;GET VALUE FROM INPUT BUFFER ; 0723 7E GETVAL MOV A,M 0724 FE3C CPI '<' ;HEX ESCAPE? 0726 C0 RNZ ;NO, RETURN ;"<<"OVE 06CC C9 RET ; 06CD AF NOWRITE XRA A ;GET 0 06CE 325C18 STA WRFLG ;CAN'T WRITE NOW 06D1 C9 RET ; ;NO MATCH IN SEARCH, TRY NEXT CHAR ; 06D2 E1 48 CDD20B CALL NEXTSEC 074B AF READ1 XRA A 074C 325A18 STA FTSW ;NOT FIRST READ 074F 2A5118 LHLD CURSEC 0752 EB XCHG 0753 CD3B10 CALL SETSEC 0756 2A4F18 LHLD CURTRK 0759 EB XCHG 075A CD2310 CAL073C B7 ORA A 073D C24B07 JNZ READ1 0740 2A4318 LHLD BUFAD 0743 7D MOV A,L 0744 B7 ORA A ;IN BUFFER? 0745 FA6607 JM NORD ;YES, SKIP READ ; ;HAVE TO READ ; 07 CPI '<' ;WILL IT BE HEX? 06EC 78 MOV A,B ;RESTORE DISK CHAR 06ED CAF206 JZ SRCHL1 06F0 E67F ANI 7FH ;NEXT CHAR IS ASCII...STRIP BIT 7 06F2 F5 SRCHL1 PUSH PSW 06F3 CD2307 CALL GETVAL ;GET SEARCH VALUE 06F6 47 0007E23224318E1C9CDFD0906 :100770003A5C18B7CAF407CD810EE57BB7C2810792 :100780001C218000CD4304CAE6077EFE1ACAD607A4 :10079000E67FFE7ED2AB07FE20D2B207FE0DCAB2C4 :1007A00007FE0ACAB207FE09CAB2077ECD7E0DC394 :1007B000B507CDBE0F2CC284071DCAE607D5CDD222 :100 MEANS ONE "<" 0727 23 INX H 0728 7E MOV A,M 0729 FE3C CPI '<' 072B C8 RZ ;GOT HEX 072C D5 PUSH D 072D CD400E CALL HEXIN ;GET VALUE 0730 FE3E CPI '>' ;PROPER DELIM? 0732 7B SRNOMAT POP H 06D3 CD4304 CALL CTLCS ;ABORT? 06D6 C2E106 JNZ SEARCH ; NO 06D9 217519 LXI H,INBUF ;YES 06DC 360D MVI M,CR 06DE C36B09 JMP CALCGRP ;SHOW WHERE STOPPED ; ;SEARCH FOR CHARACTER 1006B000434F4D4D414E44204953535545440D0A37 :1006C00000C3F7017E12231305C2C406C9AF325C12 :1006D00018C9E1CD4304C2E106217519360DC36B7B :1006E00009CDFD09E5CD3807477EFE3C78CAF20604 :1006F000E67FF5CD230747F1B8C2D206237EFE0D73 :10070000CA0807FE3BC2E506AF325D16 JNZ SRCHL ;GOT MATCH 0708 AF SREQU XRA A 0709 325D18 STA QFLAG 070C CDDD0D CALL ILPRT 070F 3D20415420 DB '= AT ',0 0715 3A4318 LDA BUFAD 0718 E67F ANI 7FH 071A CD9A0D CALL HEX 071D CD9A0F MOV B,A 06F7 F1 POP PSW 06F8 B8 CMP B ;MATCH? 06F9 C2D206 JNZ SRNOMAT ;NO MATCH 06FC 23 INX H 06FD 7E MOV A,M ;DONE? 06FE FE0D CPI CR 0700 CA0807 JZ SREQU 0703 FE3B CPI ';' 0705 C2E50L SETTRK 075D CDB610 CALL READ 0760 CD7109 CALL CALCSUB 0763 218000 LXI H,BASE+80H 0766 7E NORD MOV A,M 0767 23 INX H 0768 224318 SHLD BUFAD 076B E1 POP H 076C C9 RET ; 9C381 :10093000B902CD810EE52A6018CDB817E1DA7F1033 :10094000CD2310CDCD063E01325B18C36B09CD819E :100950000E7AB3CAB902E52AE618CDB817E1DAB9BA :1009600002CD3B10CDB610AF325B18CD7109C3FE7E :100970000BE52AF318EB2A4F18CDB817EB2AE61827 :10098000CDBF17EB2A51182CR,LF,0 081B AF EXPL XRA A 081C 325D18 STA QFLAG 081F CDDD0D CALL ILPRT 0822 5573652047 DB 'Use G command following F,',CR,LF 083E 6F72205220 DB 'or R or S following T',CR,LF,0 0856 C3F701 JMP PROMPTR ; 085E607 JZ VIEWEND 078A 7E MOV A,M 078B FE1A CPI 1AH 078D CAD607 JZ VIEWEOF 0790 E67F ANI 7FH 0792 FE7E CPI 7EH 0794 D2AB07 JNC VIEWHX ;SHOW RUBOUT AND TILDE AS HEX 0797 FE20 CPI ' ' 0799 D2B207 08FE3BCA800823CD010E04 :10088000E560697DE67FCD9A0DCDD30DCDD30D3AD0 :10089000E518FE41CAC708E57ECD9A0D7DE603FE48 :1008A00003CCD30D7DE607FE07CCD30D7BBDCAB8C4 :1008B00008237DE60FC29808CD4304CAF4013AE547 :1008C00018FE48CAFF08E1CDD80D7EE67FFE20DA8B :1008D0 JMP VIEWLP ; 07D6 CDDD0D VIEWEOF CALL ILPRT 07D9 0D0A092B2B DB CR,LF,TAB,'++EOF++',CR,LF,0 07E6 E1 VIEWEND POP H 07E7 CD9A0F CALL CRLF 07EA C36B09 JMP CALCGRP ; ;DUMP IN HE ;VIEW THE FILE IN ASCII STARTING AT ;CURRENT SECTOR, STEPPING THRU THE DISK ; 076D CDFD09 VIEW CALL NOCONT 0770 3A5C18 LDA WRFLG 0773 B7 ORA A 0774 CAF407 JZ BADDMP 0777 CD810E CAFH 086A C38008 JMP DUMP1 ; 086D CD010E DUMPNDF CALL DISP 0870 42 MOV B,D 0871 4B MOV C,E 0872 FE0D CPI CR 0874 CA8008 JZ DUMP1 0877 FE3B CPI ';' 0879 CA8008 JZ DUMP1 087C 23 9 7E DUMPOK MOV A,M 085A FE3B CPI ';' 085C CA6408 JZ DUMPDF ;DFLT 085F FE0D CPI CR 0861 C26D08 JNZ DUMPNDF ; ;USE DEFAULT 0864 018000 DUMPDF LXI B,BASE+80H 0867 11FF00 LXI D,0FJNC VIEWPR 079C FE0D CPI CR 079E CAB207 JZ VIEWPR 07A1 FE0A CPI LF 07A3 CAB207 JZ VIEWPR 07A6 FE09 CPI TAB 07A8 CAB207 JZ VIEWPR 07AB 7E VIEWHX MOV A,M ;NOT ASCII...PRINT AS 07AC CD7E0D CALL BHE00D708FE7EDAD9083E2ECDBE0F7BBDCAE812 :1008E00008237DE60FC2CA08CDD80DCD9A0FD5CD0D :1008F0004304D1CAF7017BBDC28308E1C30602C12C :10090000CD9A0F7BBDC28308E1C30602CDFD09F578 :100910007EFE3BCA1B09FE0DC21F09F1C3FE0BF18F :10092000FE54CA3209FE53CA4E09FE47CAA20X OR ASCII ; 07ED 3A5C18 DUMP LDA WRFLG 07F0 B7 ORA A 07F1 C25908 JNZ DUMPOK 07F4 AF BADDMP XRA A 07F5 325D18 STA QFLAG 07F8 CDDD0D CALL ILPRT 07FB 2B2B43616E DB '++Can''t dump, no sector read.',LL DECIN ;GET SECTOR COUNT 077A E5 PUSH H 077B 7B MOV A,E 077C B7 ORA A 077D C28107 JNZ VIEWLP 0780 1C INR E ;DFLT=1 0781 218000 VIEWLP LXI H,BASE+80H ;TO DATA 0784 CD4304 VIEWCHR CALL CTLCS 0787 CA5D18CDD3 :10082000DD0D557365204720636F6D6D616E64202B :10083000666F6C6C6F77696E6720462C0D0A6F725D :100840002052206F72205320666F6C6C6F77696E38 :100850006720540D0A00C3F7017EFE3BCA6408FE00 :100860000DC26D0801800011FF00C38008CD010E8C :10087000424BFE0DCA80 NEXTSEC 07C1 2A5118 LHLD CURSEC 07C4 EB XCHG 07C5 CD3B10 CALL SETSEC 07C8 2A4F18 LHLD CURTRK 07CB EB XCHG 07CC CD2310 CALL SETTRK 07CF CDB610 CALL READ 07D2 D1 POP D ;RESTORE COUNT 07D3 C38107X 07AF C3B507 JMP VIEWNP ; 07B2 CDBE0F VIEWPR CALL TYPE 07B5 2C VIEWNP INR L 07B6 C28407 JNZ VIEWCHR 07B9 1D DCR E 07BA CAE607 JZ VIEWEND 07BD D5 PUSH D ;SAVE COUNT 07BE CDD20B CALL INX H ;SKIP ',' 087D CD010E CALL DISP ; ;BC = start, DE = end ; 0880 E5 DUMP1 PUSH H ;SAVE COMMAND POINTER 0881 60 MOV H,B 0882 69 MOV L,C 0883 7D DUMPLP MOV XCHG 0984 2A5118 LHLD CURSEC 0987 2B DCX H 0988 19 DAD D 0989 3AE918 LDA BLM 098C 47 MOV B,A 098D 7D MOV A,L 098E A0 ANA B 098F 324D18 STA GRPDISP 0992 3AE818 LDA BSH 0995 47 18 C21F09 JNZ POSOK 091B F1 POSINQ POP PSW 091C C3FE0B JMP INQ ; 091F F1 POSOK POP PSW 0920 FE54 CPI 'T' 0922 CA3209 JZ POSTRKD 0925 FE53 CPI 'S' 0927 CA4E09 JZ POSSECD 092A FE47 MOV A,E 08AD BD CMP L 08AE CAB808 JZ DPOP 08B1 23 INX H 08B2 7D MOV A,L 08B3 E60F ANI 0FH 08B5 C29808 JNZ DHEX 08B8 CD4304 DPOP CALL CTLCS 08BB CAF401 JZ PROMPRC 08BE 3AE518 LDA DUMTYPE SEC 0964 CDB610 CALL READ 0967 AF XRA A 0968 325B18 STA NOTPOS ;POSITIONED OK ; 096B CD7109 CALCGRP CALL CALCSUB 096E C3FE0B JMP INQ ; ;CALCULATE GROUP FROM TRACK AND SECTO8 JNZ DUMPLP 08FB E1 POP H 08FC C30602 JMP PROMPT ; 08FF C1 DNOAS POP B 0900 CD9A0F CALL CRLF 0903 7B MOV A,E 0904 BD CMP L 0905 C28308 JNZ DUMPLP 0908 E1 POP H 0909 A,L 0884 E67F ANI 7FH 0886 CD9A0D CALL HEX 0889 CDD30D CALL SPACE 088C CDD30D CALL SPACE 088F 3AE518 LDA DUMTYPE 0892 FE41 CPI 'A' 0894 CAC708 JZ DUMPAS 0897 E5 PUSH H ;SAVE START 0898 7E DHC OUTLIM 0940 CD2310 CALL SETTRK 0943 CDCD06 CALL NOWRITE ;TRACK DOESN'T READ 0946 3E01 MVI A,1 0948 325B18 STA NOTPOS ;SHOW NOT POSITIONED 094B C36B09 JMP CALCGRP ; 094E CD810E POSSECD CALL DECIN 095 CPI 'G' 092C CAA209 JZ POSGRPH 092F C3B902 JMP WHAT ; 0932 CD810E POSTRKD CALL DECIN 0935 E5 POSTRK PUSH H 0936 2A6018 LHLD MAXTRK 0939 CDB817 CALL SUBDE 093C E1 POP H 093D DA7F10 J 08C1 FE48 CPI 'H' 08C3 CAFF08 JZ DNOAS ;HEX ONLY 08C6 E1 POP H ;GET START ADDR 08C7 CDD80D DUMPAS CALL ASTER 08CA 7E DCHR MOV A,M 08CB E67F ANI 7FH 08CD FE20 CPI ' ' 08CF DAD708 JC DPER 08D2 FE7ER ; 0971 E5 CALCSUB PUSH H 0972 2AF318 LHLD SYSTRK 0975 EB XCHG 0976 2A4F18 LHLD CURTRK 0979 CDB817 CALL SUBDE 097C EB XCHG 097D 2AE618 LHLD SPT 0980 CDBF17 CALL MULT 0983 EB C30602 JMP PROMPT ; ;POSITION ; 090C CDFD09 POS CALL NOCONT 090F F5 PUSH PSW 0910 7E MOV A,M 0911 FE3B CPI ';' 0913 CA1B09 JZ POSINQ 0916 FE0D CPI CR 09EX MOV A,M 0899 CD9A0D CALL HEX 089C 7D MOV A,L 089D E603 ANI 3 089F FE03 CPI 3 08A1 CCD30D CZ SPACE 08A4 7D MOV A,L 08A5 E607 ANI 7 08A7 FE07 CPI 7 08A9 CCD30D CZ SPACE 08AC 7B 1 7A MOV A,D 0952 B3 ORA E 0953 CAB902 JZ WHAT ;DON'T ALLOW SECTOR 0 0956 E5 POSSEC PUSH H 0957 2AE618 LHLD SPT 095A CDB817 CALL SUBDE 095D E1 POP H 095E DAB902 JC WHAT 0961 CD3B10 CALL SET 08E5 C2CA08 JNZ DCHR 08E8 CDD80D DEND CALL ASTER 08EB CD9A0F CALL CRLF 08EE D5 PUSH D 08EF CD4304 CALL CTLCS 08F2 D1 POP D 08F3 CAF701 JZ PROMPTR 08F6 7B MOV A,E 08F7 BD CMP L 08F8 C2830 CPI 7EH 08D4 DAD908 JC DOK 08D7 3E2E DPER MVI A,'.' 08D9 CDBE0F DOK CALL TYPE 08DC 7B MOV A,E 08DD BD CMP L 08DE CAE808 JZ DEND 08E1 23 INX H 08E2 7D MOV A,L 08E3 E60F ANI 0FH MOV B,A 0996 CDA417 CALCLOP CALL ROTRHL 0999 05 DCR B 099A C29609 JNZ CALCLOP 099D 224B18 SHLD GROUP 09A0 E1 POP H 09A1 C9 RET ; 09A2 CD400E POSGRPH CALL HEXIN 09A5 E5 PO INX D 0A6A 05 DCR B 0A6B C2580A JNZ PFMATLP ; ;GOT NAME ; 0A6E CD7109 CALL CALCSUB ;COMPUTE GROUP 0A71 CD040C CALL INQSUB ;SHOW WHICH ONE 0A74 7D MOV A,L ;GET DISP 0A07 FE0D CPI CR 0A09 CAB50A JZ PFCONT ;NO NAME 0A0C FE3B CPI ';' ;NEXT COMMAND? 0A0E CAB50A JZ PFCONT 0A11 115C00 LXI D,FCB 0A14 AF XRA A ;LOGGED IN DISK 0A15 12 STAX D 0A16 13 INX D 0A17 H 09CC C3FE0B JMP INQ ; 09CF 62 GTKSEC MOV H,D 09D0 6B MOV L,E 09D1 3AE818 LDA BSH 09D4 29 GLOOP DAD H 09D5 3D DCR A 09D6 C2D409 JNZ GLOOP 09D9 3A4D18 LDA GRPDISP 09DC 85 D LXI D,FCB+1 ;TO NAME 0A55 23 INX H ;SKIP DISK BYTE ; ;SEE IF THIS NAME MATCHES ; 0A56 060B MVI B,11 ;NAME LENGTH 0A58 1A PFMATLP LDAX D ;GET NAME CHAR 0A59 FE3F CPI '?' COMMAND LOST POSITIONING. ; 09FD E5 NOCONT PUSH H 09FE 210000 LXI H,0 0A01 22E318 SHLD FCONT 0A04 E1 POP H 0A05 C9 RET ; ;POSITION TO FILENAME BY "MANUALLY" READINSGRP PUSH H 09A6 2AEB18 LHLD DSM 09A9 CDB817 CALL SUBDE 09AC E1 POP H 09AD DA7F10 JC OUTLIM 09B0 EB XCHG 09B1 224B18 SHLD GROUP 09B4 EB XCHG 09B5 AF XRA A 09B6 324D18 STA GRPDISP 09B9 8 SHLD CURSEC ; NEXTSEC B4 USING 0A2E 2AED18 LHLD DRM ;# OF DIR ENTRIES-1 0A31 23 INX H ; EXACT # 0A32 22E118 SHLD NUMENT ;# OF DIR ENTRIES 0A35 018000 LXI B,80H+BASE 0A38 CDB310 CALL SETDMA 0A3B CDD20B PFRD CALL 0608 MVI B,8 0A19 CDFC0A CALL MVNAME 0A1C 0603 MVI B,3 0A1E CDFC0A CALL MVNAME 0A21 E5 PUSH H 0A22 2AF318 LHLD SYSTRK ;TO 0A25 224F18 SHLD CURTRK ; DIR 0A28 210000 LXI H,0 ;INIT TO 0, CALLS 0A2B 22511 ADD L ;CAN'T CARRY 09DD 6F MOV L,A ; ;Divide by nr of sectors, quotient=track, remainder=sector ; 09DE EB XCHG 09DF 2AE618 LHLD SPT 09E2 CD9C17 CALL NEG 09E5 EB 0A5B CA680A JZ PFMAT ;MATCH ANY 0A5E BE CMP M ;MATCH EXACTLY? 0A5F CA680A JZ PFMAT 0A62 F680 ORI 80H ;TRY MATCH WITH HI BIT 0A64 BE CMP M 0A65 C2E20A JNZ PFNMAT ; NO 0A68 23 PFMAT INX H 0A69 13 G ;THE DIRECTORY. THIS OVERCOMES THE 2.2 PROBLEM ;OF BEING UNABLE TO DETECT WHAT SECTOR WAS ;FOUND AFTER "SEARCH FIRST" BDOS FUNCTION ; 0A06 7E POSFIL MOV A,M ;GET CHAR AFTER 'F'E5 PUSH H 09BA CDCF09 POSGRP2 CALL GTKSEC 09BD CD2310 CALL SETTRK 09C0 EB XCHG 09C1 CD3B10 CALL SETSEC 09C4 CDB610 CALL READ 09C7 AF XRA A 09C8 325B18 STA NOTPOS ;NOW POSITIONED 09CB E1 POPNEXTSEC 0A3E 2A4F18 LHLD CURTRK 0A41 EB XCHG 0A42 CD2310 CALL SETTRK 0A45 2A5118 LHLD CURSEC 0A48 EB XCHG 0A49 CD3B10 CALL SETSEC 0A4C CDB610 CALL READ 0A4F 218000 LXI H,80H+BASE 0A52 115D00 PFNR 09F5 2AF318 LHLD SYSTRK 09F8 09 DAD B 09F9 EB XCHG 09FA E1 POP H 09FB 23 INX H 09FC C9 RET ; ;ZAP ABILITY TO DO "F" (FIND NEXT) BECAUSE ANOTHER ;DISK XCHG 09E6 010000 LXI B,0 ; 09E9 03 DIVLP INX B 09EA 19 DAD D 09EB DAE909 JC DIVLP 09EE 0B DCX B 09EF EB XCHG 09F0 2AE618 LHLD SPT 09F3 19 DAD D 09F4 E5 PUSH H B193AE918477DA03231 :100990004D183AE81847CDA41705C29609224B18FE :1009A000E1C9CD400EE52AEB18CDB817E1DA7F108A :1009B000EB224B18EBAF324D18E5CDCF09CD23100C :1009C000EBCD3B10CDB610AF325B18E1C3FE0B622E :1009D0006B3AE818293DC2D4093A4D18856FEB2AC5 :1009E000E 0B39 FE2E CPI '.' ; AFTER '*' 0B3B C0 RNZ ; IN "*.*" 0B3C 23 INX H 0B3D C9 RET ; 0B3E CDFD09 PLUS CALL NOCONT 0B41 110100 LXI D,1 ;DFLT TO 1 SECT 0B44 7E MOV A,M ;GET NEXT CHAR NMAT XCHG ;SAVE BUFF POINTER 0AE3 2AE118 LHLD NUMENT ;GET # DIR ENTRIES 0AE6 2B DCX H 0AE7 22E118 SHLD NUMENT 0AEA 7C MOV A,H 0AEB B5 ORA L 0AEC CA900A JZ PFNOTF ;NOT FOUND 0AEF EB XCHG ;BUFF BACK204E4F5420464F63 :100AA000554E440D0A00E1CDCD06CDFD093E013283 :100AB0005B18C30602E52AE3187CB5C2E20AE1CD61 :100AC000DD0D2B2B43616E277420636F6E74696E8E :100AD0007565204620636F6D6D616E640D0A00C3FD :100AE000F701EB2AE1182B22E1187CB5CA900AEB3A :100AF0007DE6Z MVNAME 0B1D 7E MOV A,M 0B1E FE0D CPI CR 0B20 C8 RZ 0B21 FE3B CPI ';' 0B23 C8 RZ 0B24 23 INX H 0B25 FE2E CPI '.' 0B27 C8 RZ 0B28 C3B902 JMP WHAT ; 0B2B 3E201 0AAF 325B18 STA NOTPOS 0AB2 C30602 JMP PROMPT ; ;CONTINUING FIND ; 0AB5 E5 PFCONT PUSH H 0AB6 2AE318 LHLD FCONT 0AB9 7C MOV A,H 0ABA B5 ORA L 0ABB C2E20A 618CD9C17EB0100000319DAE9090BEBBF :1009F0002AE61819E52AF31809EBE123C9E52100D5 :100A00000022E318E1C97EFE0DCAB50AFE3BCAB555 :100A10000A115C00AF12130608CDFC0A0603CDFCD8 :100A20000AE52AF318224F182100002251182AED56 :100A3000182322E118018000CDB310CDD20B2A4FCTOR ; 0AFC 7E MVNAME MOV A,M 0AFD 23 INX H ;IN CASE HAVE TO SKIP 0AFE FE2E CPI '.' ; '.' 0B00 CA2B0B JZ PADSP 0B03 FE2A CPI '*' ; OR '*' 0B05 CA300B JZ PADQ ;FILL W/"?" 0B08 2B DCX TO HL 0AF0 7D MOV A,L ;GET DISPLACEMENT 0AF1 E6E0 ANI 0E0H ;BACK TO START OF ENTRY 0AF3 C620 ADI 32 ;ONE ENTRY 0AF5 6F MOV L,A 0AF6 D2520A JNC PFNRD ;NO READ, STILL IN SECTOR 0AF9 C33B0A JMP PFRD ;TO NEXT SELACEMENT 0A75 E6E0 ANI 0E0H ;TO START OF NAME 0A77 6F MOV L,A 0A78 22E318 SHLD FCONT ;SAVE FOR "F"IND NEXT 0A7B 112000 LXI D,32 ;DUMP LENGTH 0A7E EB XCHG 0A7F 19 DAD D ;SET UP FOR DUMP 0A80 EB XCH PADSP MVI A,' ' 0B2D C3320B JMP PAD ; 0B30 3E3F PADQ MVI A,'?' ; 0B32 12 PAD STAX D 0B33 13 INX D 0B34 05 DCR B 0B35 C2320B JNZ PAD 0B38 7E MOV A,M ;SKIP '.' JNZ PFNMAT 0ABE E1 POP H 0ABF CDDD0D CALL ILPRT 0AC2 2B2B43616E DB '++Can''t continue F command',CR,LF,0 0ADF C3F701 JMP PROMPTR ; ;NO MATCH, GET NEXT CHAR ; 0AE2 EB PF2C :100A400018EBCD23102A5118EBCD3B10CDB6102159 :100A50008000115D0023060B1AFE3FCA680ABECA59 :100A6000680AF680BEC2E20A231305C2580ACD7195 :100A700009CD040C7DE6E06F22E318112000EB198C :100A8000EBAF325B183E4432E518325C18C3830882 :100A9000CDDD0D2B2B46494C45H ; 0B09 FE0D CPI CR 0B0B CA2B0B JZ PADSP 0B0E FE3B CPI ';' 0B10 CA2B0B JZ PADSP 0B13 CDA40F CALL UPCASE 0B16 12 STAX D 0B17 23 INX H 0B18 13 INX D 0B19 05 DCR B 0B1A C2FC0A JN ;NOT FOUND ; 0A90 CDDD0D PFNOTF CALL ILPRT 0A93 2B2B46494C DB '++FILE NOT FOUND',CR,LF,0 0AA6 E1 POP H ;GET CMD BUFF PTR 0AA7 CDCD06 CALL NOWRITE 0AAA CDFD09 CALL NOCONT 0AAD 3E01 MVI A,G 0A81 AF XRA A 0A82 325B18 STA NOTPOS ;SHOW NOW POSITIONED 0A85 3E44 MVI A,'D' 0A87 32E518 STA DUMTYPE 0A8A 325C18 STA WRFLG ;ALLOW REWRITE 0A8D C38308 JMP DUMPLP ;DUMPLP POPS H (CMD BUF ADDR) ; 0B45 FE0D CPI CR ;CR? 0B47 CA570B JZ PLUSGO ;..YES, DFLT TO 1 0B4A FE3B CPI ';' 0B4C CA570B JZ PLUSGO 0B4F CD810E CALL DECIN ;GET DECIMAL # 0B52 7A MOV A,D 0B53 B3 ORA E 0B54 CAB902 JZ WHAT 0B57 C; if a disk is readable) or "=xxx" (which scans ; forward for a match) by "definition" shouldn't ; "wrap and run forever". ; 0BEE DAA80B JC BOUNDS ; 0BF1 EB XCHG 0B :100B5000810E7AB3CAB902CDD20B1B7AB3C2570B3E :100B6000E52A5118EBCD3B102A4F18EBCD2310E1AD :100B7000CDB610C36B09CDFD091101007EFE0DCA73 :100B80008F0BFE3BCA8F0BCD810E7AB3CAB902E53B :100B90002A51182B7CB5C2C50B2A4F187CB5C2BE92 :100BA0000B2A511823225118CDDD09 JMP CALCGRP ; 0B76 CDFD09 MINUS CALL NOCONT 0B79 110100 LXI D,1 ;SET DFLT 0B7C 7E MOV A,M ;GET CHAR 0B7D FE0D CPI CR ;CR? 0B7F CA8F0B JZ MINGO ;..YES, DFLT=1 0B82 FE3B CPI ';' 0B84 CA8F0B CHG 0BE8 2A6018 LHLD MAXTRK 0BEB CDB817 CALL SUBDE ; ;07/31/81 Delete wrap to start (hangs on my system, ; hangs on Micromation). ...but mostly because ; the "front" of the diB DCX D 0BCA 7A MOV A,D 0BCB B3 ORA E 0BCC C28F0B JNZ MINGO 0BCF C3600B JMP PLUSMI ; ;Go to next sector ; 0BD2 E5 NEXTSEC PUSH H 0BD3 D5 PUSH D DD20B PLUSGO CALL NEXTSEC 0B5A 1B DCX D ;MORE TO GO? 0B5B 7A MOV A,D 0B5C B3 ORA E 0B5D C2570B JNZ PLUSGO ;..YES ; ;OK, INCREMENTED TO SECTOR. SETUP AND READ ; 0B62E52AF318EB2A4F18CDB817DA01 :100C1000300CCDDD0D473D002A4B18444DCD8E0DD7 :100C20003E3ACDBE0F3A4D18CD9A0D3E2CCDBE0F9B :100C3000CDDD0D20543D002A4F18CDB10DCDDD0D79 :100C40002C20533D002A5118CDB10DCDDD0D2C20A7 :100C500050533D002A5318CDB10DCD9A0FE1C97EF6 :1D4F7574206F7B :100BB0006620626F756E64730D0A00C3F7012B2205 :100BC0004F182AE618225118E11B7AB3C28F0BC3C3 :100BD000600BE5D52A511823EB2AE618CDB817EBA0 :100BE000D2F80B2A4F1823EB2A6018CDB817DAA8D1 :100BF0000BEB224F18210100225118D1E1C9CD047D :100C00000CC3060 JZ MINGO 0B87 CD810E CALL DECIN ;..NO, GET ## 0B8A 7A MOV A,D 0B8B B3 ORA E 0B8C CAB902 JZ WHAT 0B8F E5 MINGO PUSH H 0B90 2A5118 LHLD CURSEC 0B93 2B DCX H 0B94 7C MOV A,H 0B95 B5 sk has n-o-t-h-i-n-g to ; do with the "back" of the disk, so why wrap? ; ; A less "emotional" and more "practical reason, ; is that commands such as "q+;/" (used to check E0C6206FD2520AC33B0A7E23FE2E5B :100B0000CA2B0BFE2ACA300B2BFE0DCA2B0BFE3B49 :100B1000CA2B0BCDA40F12231305C2FC0A7EFE0DB7 :100B2000C8FE3BC823FE2EC8C3B9023E20C3320B09 :100B30003E3F121305C2320B7EFE2EC023C9CDFDEF :100B4000091101007EFE0DCA570BFE3BCA570BCDA3 0 E5 PLUSMI PUSH H 0B61 2A5118 LHLD CURSEC 0B64 EB XCHG 0B65 CD3B10 CALL SETSEC 0B68 2A4F18 LHLD CURTRK 0B6B EB XCHG 0B6C CD2310 CALL SETTRK 0B6F E1 POP H 0B70 CDB610 CALL READ 0B73 C36B00BD4 2A5118 LHLD CURSEC 0BD7 23 INX H 0BD8 EB XCHG 0BD9 2AE618 LHLD SPT 0BDC CDB817 CALL SUBDE 0BDF EB XCHG 0BE0 D2F80B JNC NEXTOK 0BE3 2A4F18 LHLD CURTRK 0BE6 23 INX H 0BE7 EB XLL ILPRT 0BAB 4F7574206F DB 'Out of bounds',CR,LF,0 0BBB C3F701 JMP PROMPTR ; 0BBE 2B SEASH DCX H 0BBF 224F18 SHLD CURTRK 0BC2 2AE618 LHLD SPT 0BC5 225118 MINOK SHLD CURSEC 0BC8 E1 POP H 0BC9 1 ORA L 0B96 C2C50B JNZ MINOK 0B99 2A4F18 LHLD CURTRK 0B9C 7C MOV A,H 0B9D B5 ORA L 0B9E C2BE0B JNZ SEASH 0BA1 2A5118 LHLD CURSEC 0BA4 23 INX H 0BA5 225118 SHLD CURSEC 0BA8 CDDD0D BOUNDS CAF2 224F18 SHLD CURTRK 0BF5 210100 LXI H,1 ; 0BF8 225118 NEXTOK SHLD CURSEC 0BFB D1 POP D 0BFC E1 POP H 0BFD C9 RET ; ;TELL WHAT GROUP, DISPLACEMENT, TRACK, SECT700075700D0A00C30602CDF510C30602F53EDC :100D80003CCDBE0FF1CD9A0D3E3ECDBE0FC93AEC23 :100D900018B7CA990D78CD9A0D79F51F1F1F1FCD71 :100DA000A30DF1E60FFE0ADAAC0DC607C630C3BECE :100DB0000FC5D5E501F6FF11FFFF0913DABA0D01E2 :100DC0000A0009EB7CB5C4B10D7BC630CDBCHANGE ASCII 0C8C 7E CHGALP MOV A,M 0C8D FE0D CPI CR 0C8F CAEE01 JZ PROMPTC 0C92 FE3B CPI ';' 0C94 CAEE01 JZ PROMPTC 0C97 1A LDAX D 0C98 FE20 CPI ' ' 0C9A DAA50C JC CHGAHX 0C9D FE7E CPI 7 MOV B,H 0C1C 4D MOV C,L 0C1D CD8E0D CALL HEXB 0C20 3E3A MVI A,':' 0C22 CDBE0F CALL TYPE 0C25 3A4D18 LDA GRPDISP 0C28 CD9A0D CALL HEX 0C2B 3E2C MVI A,',' 0C2D CDBE0F CALL TYPE 0C30 CDDD0D NCAEE012A8A :100CC000DF181CC28C0C7EFE0DCAEE01FE3BCAEE84 :100CD00001C3B902237EFE0DCAEE01FE3BCAEE013E :100CE000FE2CCAD40CD5224518CD400E7BD1F51A66 :100CF000CD9A0DF11279B7CA010DBBCAEE012A4592 :100D0000181CC2D50C7EFE0DCAEE01FE3BCAEE01D8 :100D1000C3B9023A5BJNZ CHGNTH ;NO THRU 0C71 D5 PUSH D ;SAVE FROM 0C72 CD010E CALL DISP ;GET THRU 0C75 23 INX H ;SKIP END DELIM 0C76 42 MOV B,D 0C77 4B MOV C,E ;BC = THRU 0C78 D1 POP D ;GET FROM 0C79 C3810C JMP CHGOR, PHYSICAL SECTOR ; 0BFE CD040C INQ CALL INQSUB 0C01 C30602 JMP PROMPT ; ;POSITION INQUIRY SUBROUTINE ;EXECUTED VIA: G S OR T (WITH NO OPERANDS) ; 0C04 E5 CALL GETVAL ;ASCII OR 0CB4 12 STAX D ;UPDATE CHAR 0CB5 23 INX H ;TO NEXT INPUT CHAR ;See if 'THRU' requested 0CB6 79 MOV A,C 0CB7 B7 ORA A 0CB8 CAC20C JZ CHGANTH 0CBB BB CMPEH 0C9F D2A50C JNC CHGAHX 0CA2 C3AB0C JMP CHGA2 ; 0CA5 CD7E0D CHGAHX CALL BHEX 0CA8 C3AE0C JMP CHGA3 ; 0CAB CDBE0F CHGA2 CALL TYPE 0CAE 22DF18 CHGA3 SHLD BACK ;IN CASE "THRU" 0CB1 CD2307 OGRP CALL ILPRT 0C33 20543D00 DB ' T=',0 0C37 2A4F18 LHLD CURTRK 0C3A CDB10D CALL DEC 0C3D CDDD0D CALL ILPRT 0C40 2C20533D00 DB ', S=',0 0C45 2A5118 LHLD CURSEC 0C48 CDB10D CALL DEC 0C4B CDDD0D CALL ILPRT 0C4E 2C18B7C2200DCDB610C30602A4 :100D2000AF325D18CDDD0D2B2B43616E2774207221 :100D3000656164202D206E6F7420706F7369746913 :100D40006F6E65640D0A506F736974696F6E20620F :100D5000793A0D0A09547261636B207468656E20DC :100D6000536563746F722C206F720D0A0947726F9E :100DAH ; 0C7C FE2C CHGNTH CPI ',' 0C7E C2B902 JNZ WHAT ; 0C81 F1 CHGAH POP PSW 0C82 FE48 CPI 'H' 0C84 CAD50C JZ CHGHEX 0C87 FE41 CPI 'A' 0C89 C2B902 JNZ WHAT ; INQSUB PUSH H 0C05 2AF318 LHLD SYSTRK 0C08 EB XCHG 0C09 2A4F18 LHLD CURTRK 0C0C CDB817 CALL SUBDE 0C0F DA300C JC NOGRP 0C12 CDDD0D CALL ILPRT 0C15 473D00 DB 'G=',0 0C18 2A4B18 LHLD GROUP 0C1B 44 00C6000CDA40FF523CD010E23010000FE2DC27C83 :100C70000CD5CD010E23424BD1C3810CFE2CC2B941 :100C800002F1FE48CAD50CFE41C2B9027EFE0DCA71 :100C9000EE01FE3BCAEE011AFE20DAA50CFE7ED262 :100CA000A50CC3AB0CCD7E0DC3AE0CCDBE0F22DFA9 :100CB00018CD2307122379B7CAC20CBB0C63 F5 PUSH PSW ;SAVE "H" OR "A" 0C64 23 INX H 0C65 CD010E CALL DISP ;GET, VALIDATE DISP TO DE 0C68 23 INX H 0C69 010000 LXI B,0 ;SHOW NO 'THRU' ADDR 0C6C FE2D CPI '-' ;TEST DELIM FR. DISP 0C6E C27C0C 2050533D DB ', PS=',0 0C54 2A5318 LHLD PHYSEC 0C57 CDB10D CALL DEC 0C5A CD9A0F CALL CRLF 0C5D E1 POP H 0C5E C9 RET ; 0C5F 7E CHG MOV A,M ;GET TYPE (HEX, ASCII) 0C60 CDA40F CALL UPCASE E ;DONE?.. 0CBC CAEE01 JZ PROMPTC ;..YES 0CBF 2ADF18 LHLD BACK 0CC2 1C CHGANTH INR E 0CC3 C28C0C JNZ CHGALP 0CC6 7E MOV A,M 0CC7 FE0D CPI CR 0CC9 CAEE01 JZ PROMPTC 0CCC FE3B CPI ';' 0CCE CAEE01 D FE03 CPI 3 ;ABORT? 0DEF CAF701 JZ PROMPTR 0DF2 C3F80D JMP ILPNX ; 0DF5 CDBE0F ILPOK CALL TYPE 0DF8 23 ILPNX INX H 0DF9 7E MOV A,M 0DFA B7 ORA A 0DFB C2DE0D JNZ ILPLP 0DFE 23 B7 ORA A 0D92 CA990D JZ HEXX 0D95 78 MOV A,B 0D96 CD9A0D CALL HEX 0D99 79 HEXX MOV A,C 0D9A F5 HEX PUSH PSW 0D9B 1F RAR 0D9C 1F RAR 0D9D 1F RAR 0D9E 1F RAR 0D9F CDA30 VALUE 0CED D1 POP D ;..ADDR 0CEE F5 PUSH PSW ;SAVE VALUE 0CEF 1A LDAX D ;GET OLD 0CF0 CD9A0D CALL HEX ;ECHO IN HEX 0CF3 F1 POP PSW ;GET NEW 0CF4 12 STAX D ;SAVE NEW 0CF5 79 MOV A,C ;SEE IF POP D 0DD1 C1 POP B 0DD2 C9 RET ; 0DD3 3E20 SPACE MVI A,' ' 0DD5 C3BE0F JMP TYPE ; 0DD8 3E2A ASTER MVI A,'*' 0DDA C3BE0F JMP TYPE ; ;Inl by:',CR,LF 0D54 0954726163 DB 9,'Track then Sector, or',CR,LF 0D6C 0947726F75 DB 9,'Group',CR,LF,0 0D75 C30602 JMP PROMPT ; 0D78 CDF510 DOWRITE CALL WRITE 0D7B C30602 JMP PROMPT ; 0D7E F5 BHE JZ PROMPTC 0CD1 C3B902 JMP WHAT ; ;CHANGE HEX ; 0CD4 23 CHGHCOM INX H ; 0CD5 7E CHGHEX MOV A,M 0CD6 FE0D CPI CR 0CD8 CAEE01 JZ PROMPTC 0CDB FE3Bput routine ; 0DB1 C5 DEC PUSH B 0DB2 D5 PUSH D 0DB3 E5 PUSH H 0DB4 01F6FF LXI B,-10 0DB7 11FFFF LXI D,-1 0DBA 09 DECOU2 DAD B 0DBB 13 INX D 0DBC DABA0D JC DECOU2 0DBF 010D CALL NIBBL 0DA2 F1 POP PSW 0DA3 E60F NIBBL ANI 0FH 0DA5 FE0A CPI 10 0DA7 DAAC0D JC HEXNU 0DAA C607 ADI 7 0DAC C630 HEXNU ADI '0' 0DAE C3BE0F JMP TYPE ; ;Decimal out'THRU' 0CF6 B7 ORA A 0CF7 CA010D JZ CHGHNTH ;..NO. 0CFA BB CMP E ;..YES, DONE? 0CFB CAEE01 JZ PROMPTC 0CFE 2A4518 LHLD HEXAD ;..NO: MORE 0D01 1C CHGHNTH INR E 0D02 C2D50C JNZ CHGHEX 0D05 7E MOVine print routine ; 0DDD E3 ILPRT XTHL 0DDE CD4304 ILPLP CALL CTLCS ;ABORT? 0DE1 CAF401 JZ PROMPRC 0DE4 7E MOV A,M 0DE5 FE01 CPI 1 ;PAUSE? 0DE7 C2F50D JNZ ILPOK 0DEA CDB40F CALL CONIN 0DEX PUSH PSW 0D7F 3E3C MVI A,'<' 0D81 CDBE0F CALL TYPE 0D84 F1 POP PSW 0D85 CD9A0D CALL HEX 0D88 3E3E MVI A,'>' 0D8A CDBE0F CALL TYPE 0D8D C9 RET ; 0D8E 3AEC18 HEXB LDA DSM+1 0D91 CPI ';' 0CDD CAEE01 JZ PROMPTC 0CE0 FE2C CPI ',' ;DELIM? 0CE2 CAD40C JZ CHGHCOM 0CE5 D5 PUSH D 0CE6 224518 SHLD HEXAD ;IN CASE 'THRU' 0CE9 CD400E CALL HEXIN ;POSITIONS TO DELIM 0CEC 7B MOV A,E ;GETA00 LXI B,10 0DC2 09 DAD B 0DC3 EB XCHG 0DC4 7C MOV A,H 0DC5 B5 ORA L 0DC6 C4B10D CNZ DEC 0DC9 7B MOV A,E 0DCA C630 ADI '0' 0DCC CDBE0F CALL TYPE 0DCF E1 POP H 0DD0 D1 DB610 CALL READ 0D1D C30602 JMP PROMPT ; 0D20 AF CANTRD XRA A 0D21 325D18 STA QFLAG ;NOT QUIET 0D24 CDDD0D CALL ILPRT 0D27 2B2B43616E DB '++Can''t read - not positioned',CR,LF