IMD 1.18: 22/01/1996 4:52:14 Micro Cornucopia Kaypro User Group Disk 1 Modem Programs     1-DISK DOCCRC COM CRC DOC CRCKLISTCRC D COM FLS COMBKMDM795 AQM !"#$%&'KMDM795 AQM()*+,-./01234567KMDM795 AQM89:;<=>?@ABCDEFGKMDM795 AQM HIKMDM795 COMkJKLMNOPQRSTUVWKMDM795 DOCXKMDM795 LIBYZ[\]^_`abcdefghKMDM795 LIB ijMODEM7+ COM`klmnopqrstuvMODEM7 COMCwxyz{|}~KAYPRO USERS DISK FROM: MICRO CORNUCOPIA THE SINGLE BOARD SYSTEMS JOURNAL PO BOX 223 BEND, OREGON 97709 KAYPRO DISK #1 MODEM PROGRAMS ------------------------------------------------------------------------ Contributed by Wayne Campeau of Anchor Computer Systems, Seattle Washington MODEMPAT.ASM MODEMPAT.COM This program sets up the SIO (serial port) for whatever baud rate, bits per character, stop bits, and parity you need. Run MODEMPAT.COM before outputting to your printer or whateverMODEM7 DOCSMODEMPATASMCMODEMPATCOM^README TXTSQ/USQ DOCSQ COMjTERM DOC TERM MACUSQ COMO to be compatible. Most data communication by phone is 8 bits/char, 1 stop bit, no parity bits. 300 baud is standard for the slow modems, 1200 baud is becoming more and more available so it is often worthwhile to pick up a fast modem if you are planning to do much data transfer. MODEM7+.COM This is MODEM7.COM with the MODEMPAT added so you can select the correct communications interface each time you enter MODEM7. MODEM7.COM MODEM7.DOC The original MODEM7 configured for the KAYPR  O. You set the baud rate before you enter this version of MODEM7. ------------------------------------------------------------------------- From James Brown Grier Associate Professor at Northern Illinois University KMDM795.COM KMDM795.LIB KMDM795.AQM KMDM795.DOC This is a superset of MODEM7.COM. This program lets you set baud rate on the fly. However, it is not setup for changing the bits/char, the stop, or parity bits. Try it, this is also public domain so you can pass it arth file - ! ~T #M M 2 2 2 2 ! >2 3o: : @ ***No CRC Files found***$> ʉ ʉw#: <2 P6: .6@ Can not parse string ! ~ʽT #ñM ! > 6 #6^#6! ~T #! 4M #x] #e w~ T #>2 @ - s M@ File not found ! 4 >2 o: G: „: G: „@ *Match* 2 ! 4@ <-- is, was --> : ) > T : ) M 2 ! 4<2 ~# @ Not a space between CRC values<2 G-CATALOG???de by entering CNTL E (to leave terminal mode and display menu) R PROG.BAS (to begin receiving "PROG.BAS") When the transfer is complete, you can enter T to get back into terminal mode and look for more files or sign off etc. ENJOY! ------------------------------------------------------------- RROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2h2|2   ~$#~# x  : F} *}= ">͇1 ].”#””͡”››tK››͸›* =: =͔="  ʳ ª~#.  ¿~  #~  .+~#0:0~#!A.O.Gy~#0M0 K MMɷ:m2 FSÄCRCKLIST$$$››tK›, › **}|!"*{z*~]*"Ü  DISK FULL: CRCFILE$!"*~#CRC.COM 5.0 6/18/82CRCKFILE???!9" 1 M @ CRC Ver 5.0 CTL-S pauses, CTL-C aborts :] O@ ++Searching for CRCKLIST file++@ Now searching for "CRCKFILE" file++ !  1 .) F!  ͡]͸! ͔0CRCKLIST???CRCKFILE???!9" M à*,*.}|ډ!".*,{z{** u*.".G*.",!".***,}>*.#".ɯ22)! ",". <  NO FILECRC FILE$!   >. @ Checking wi match - : ̓ : J M @ Quantity of lines failed parse test - : ̓ : ~ M @ Quantity of file(s) not found - : ̓ * d͔  ͔ 0T  Җ Wyʩ 0T 0ztiild computer) SQ.COM USQ.COM SQ/USQ.DOC FLS.COM These programs squeeze and unsqueeze files, any kind of files. Use these to reduce the time required to transfer data across the phone lines. You'll find that many bulletin boards provide squeezed files almost entirely. ------------------------------------------------------------------- Accessing an RCPM To receive files from most RCPMs or bulletin boards, enter: XMODEM S PROG.BAS then from MODEM7 you get out of (T)erminal mo*#"ɯ2i2}! "!"]]2 s : ~# ++FILE NOT FOUND++$: F*}’">͇†]<  CANNOT CLOSE CRCFILE$CRCKLISTCRCSK FULL: CRCFILE$  w# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ E   Using CRC Type CRC to verify all the files on this disk. Type CRC *.* F to generate CRC's for an entire disk and create a CRC file (CRCKLIST.CRC) for checking the CRC's of a copy of the disk etc. Omitting the F will suppress creation of a CRCKLIST.CRC file. *.* can be replaced with an unambiguous file name for checking just one file. C 4Ø:!4:!5(  ! I3= : [= t:\a:\=_: :] t ?]\ : ҃! 6?Î : 2   ]Q  ?\\ : DM, Q ! "= *3 ##)*= "; */ &# "! *3 #"#  !! "% >!1 . 2' \: 2 : ʩ: ƀo&"* ~ʛ*# +"# ** DMY қ** DM  *; q#p* " . ** #DM*; -e**  *; w* #" )*= *; s#r*; "; : 2 !S 6!"V * "n >!S d*S &T ) ^#V"K O!l ^#V"M :S =2S M K  a*K "G * .DOC CRC = E5 81 --> FILE: 1-DISK .DOC CRC = 88 1B --> FILE: KMDM795 .COM CRC = F6 30 --> FILE: KMDM795 .DOC CRC = BC 4F --> FILE: TERM .DOC CRC = A1 9B --> FILE: TERM .MAC CRC = B7 E5*( * " 3*1 #" " " *5 " > # R : B * +" ! +s#r( ! 6: " * ~2 * #" * +" > ʶ : 2 Ғ * +" : <2 O>ҳ ! 6* #" * ~2 p ̓: AOK = * Ͱ= * ͷ= * Ͱ= *# ͷ= * Ͱ= . g S -A >>!  ~?l W >#^ : /!:' —  ʑ #‹  W ʢ #™ i`N#FogDM!>))덑o|g =¼ DM!>)) = ^#V) ^#V|g}o M "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*= ^#V"Q *I )*= *G )*= N#Fq#p*I )*= *Q s#r*G #"G *I +"I K I  G M   !M G  :S <2S O!T *G s#r*S &l ) *M s#r*I "M ^I K  X:S <2S O!T *K s#r*S &l ) *I s#r*G "K û!" "    #* #" )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*=  Hit Space: KK : k Used: /k Not used: k *% DMf : remain on 1 !9" ! J> # ->! . *ͪe> # < * v K  K  K !B r+s+p+qA ?  p*A *? :]$Ž l]Q !]6 !E 6!C 6 :C *C &l ~2D U¼:E 2 :D S:E 2:D F:E 2:D V:E 2:D P:E 2 :D N2E ! _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) #  --> FILE: KMDM795 .LIB CRC = 37 D5 --> FILE: MODEMPAT.ASM CRC = C6 40 --> FILE: SQ .COM CRC = 95 B0 --> FILE: USQ .COM CRC = FE 42 --> FILE: SQ/USQ .DOC CRC = AB B1 --> FILE: D .COM CRC = 66 48 --> FILE: KMDM795 .AQM CRC = 8F 66 --> FILE: MODEM7 .DOC CRC = C7 BA --> FILE: MODEM7 .COM CRC = 9C C6 --> FILE: FLS .COM CRC = 79 B4 --> FILE: MODEMPAT.COM CRC = B9 B8 --> FILE: MODEM7+ .COM CRC = 05 F6 --> FILE: CRC .COM CRC = B2 07 --> FILE: CRC ^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% DMf kK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! ':/ : = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !" (   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *&  *K͞+!!)'+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! !, !$ s#r͐?#n}:> !$ ^#Vr+s͐?ns!$ ^#Vr+s6:!) n& ?!& s#r!( 6!( n}ʧ ͐$!& ^#Vr+sng|g}os{ ʟ !$ ^#Vr+s!( 5d !$ ^#Vr+s6.!( 6!( n} ͐$!& ^#Vr+sng|g}os{ !$ ^#Vr+s!( 5ü ͐$6!, !Y D !* ^#Vr+sý ͐*|= ͐?!] !J !;9%s %s is bad afn %s %s not found - ignored Á Ñä!9DMw}ʻ * x `is{ ¸ * x `is !{ `is{ ~ `in} ! `in}  `i6 w} ! !{ T#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+" !ͪ`iw#w͐ҹ͡! s#rz†! 6 #6͐! ͐s{ ­͐! 6ù`i^#Vr+s_! n}! ͭ! n}LͰ!91.0 06/07/81Parameter list s*͐ ͐s#r! ~#fo͐ ~#fo)w#w8! ^#Vr+s`i^#Vr+s\!9Can't open %s 2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77`in& !9" ÈäÑ!9DMw}ʐ ! n} O *!  *! n& #|z ! !  w&|g}o| !  |ʰ ! +++|°  ! n} ! ! ! n&! File output error; disk full? Èä^ç!9DM*##s*#s*s! ~#fo͐ ~#fo)*s#r! 6#6`i6#6͐͐ ~#foDw}|D! ~#fo͐)~#fon}<ʩ|U+>-! ~#fo͐)~#fo#n}* ! ~#fo͐)~#fo# #|! ~#fo͐)builder - 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 (singly) from console input. Drive names and -options are passed thru. Ambiguous file names are expanded. CR or EOF to stop. *P ÿqÈÑ!9DM͐?n}-{ ͐?#n}:Œ ͐?##n}Œ ͐?!F D = ͐?`iG #|µ ͐?!J !J = !* w#w!!M ͐*| `i!M `i!M !) s!) n} M͐|͐+++|'!͐##^#Vr+szQ͐^#Vr+sn&!͐͐~#fo`is#r!ڎ͐##^#Vr+s͐##͐?+s#r͐͐s#r͐^#Vr+sn&!9 Ñ!9DM͐+|! n&͐++|%! n&!͐+++|D! n&!͐++++||! n} i! !! n&!͐##^#Vr+szʭ͐^#Vr+s! ns&!͐͐~#fo!͐##6#6͐͐s#r͐!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15͞)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>~#fo#!M!*6!\! ~#fo͐)~#fo|R*n&|g}os|*##4! ~#fo͐)~#fo#*###s#r! ~#fo͐)~#fo#n}! ~#fo͐)!hs#r! ~#fo͐)*s#r*#n&|g}os! ~#fo͐)~#fo#n} !u!! ~#fo͐)~#fo# *! ~#fo͐)~#fo# #|w! ~#fo͐)~#fo#!!*#4w}͐! s#r͐͐ ~#fo! ~#fo͐)! ~#fo͐#)~#fos#r! ^#Vr+sÑ͐ ^#Vr+s`i^#Vr+s*^#Vr+  ^#Vr+s! ns&D!9DM͐!͐s#rzH!͐##w#w͐~#fo!9DM`iw#w! ~#fo͐n! ~#fo͐n}¸! ~#fo`i^#Vr+sn}µ!l! ~#fo͐n! ~#fo͐nѯgW!9È!9DM͐͐s#rz!͐͐s#r͐##6#6͐~#foKù!9DM͐e!͐~#foHÂü !9DM͐ҝ!ú͐##~#fo¶!ú͐##~#fo`is#r͐͐͐~#foy͐!*|*uB*~#"*s*uB#"u*+"7,2q*&:q):ʀ=ʀ=r:qo&ÑçD7*͋\!*͎#7*|DM** ><~# x ><~+ x|} ]!7:,* :*5 }|2q f \ :qwW ! {w7*!9& 6C#6O#6M§ *|½ !\& !\&*| !!l&!~#fo!> + #~ ## a+s`ins ! ^#Vr+s`ins͐6!98!9DM! ^#Vr+sn`is{ʍ`in} n͐! 5͐`in&5#|Š!Ó@!Ó!9â !9DM͐n}! ^#Vr+sn&͟ê!9DM͐͐ $͐^#Vr+s͐ ͐0͐7s!&o͐ ͐͐ ͉͐`is͐ ͐͐ )͐`in&#&o!9!9DM! n&0ͯڣ! n&9ͯíx!9DM`iw#w͐~#fon&ͪ}͐ ?͐^#Vr+snѯg`is#rû͐v KMDM795.ASMi  !"$#&%'()+*,-.0/213546789:;o<=>?@ACBDEFGIHJKLMNOPQRSUTVWXYZ[]\^_bac`gehfdfq^w^"I|$^}P=%-n =WJUi6)HͫC.=󲿏,Mú͐+?`is#r͐##~#fo|ʓ!͐͐͐|͐##~#fo͐s#r͐~#fo͐s#r!!͐~#foú͐##6#6͐͐s#r!ú!9xç !h9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{#`in}% ! ! s#r! 6#6! s! s! s͐n}-b! ^#Vr+s! 4͐n}0r! 4͐n&}ʏ! Ò!! s#r! ^#Vr+sn`is{.! ! s#r! 4! ^#Vr+sn`is`in&}DUBXKOTCʚS{ !p3!!*w#!:**+!*!ѷ! , FNxg>Goy!$!!9B!9DM! n& |7! n&<! n&!9DM! n&aͯm! n&zͯ7*~# x x+*&!7:O*o`  !\&!7*!&*!&!, !\&!TELk7'x Èä7*^#V#z/+V+^+:*!X!!$Broken pipe 7:)~:,"s!"u*|ʼ**s! ~¼6*u*+"*"*u#"uÈ7:)~:,"s!"u~EH^T"o'eN0gSz~E bs斺Fq94yq^}ԋqX4k9ws{4uk~\RrG :VPTT(Lz{uOIK宬P U[H P%-[)rGʿ;=%-Ong+ 3BڐU4"BTy2 1ѬnaNEUCcͽ]c=Y+jܻv*Z iJEV(T_;4ە=ؓKRT25FgnNERT( أ My4S\=z-o]%;2K>ϼL1wZ0 ǝyI֘ygjd 6"7wv62F_$ o[gQ]sqQD+y{oKծRy\V /{a/2_ frk_֯9׼!zE2{o?Y֘YJRgY>>/# ܿ)RLժ]JuR4TS;KM \(A \ܨ?T*we+Ec_)$Kjjucuۤ>?uk"ԹQ=E*ZKN5jjucyI}~z EQ{#;TJ5)RH-=ėM9Dj^_Ku~2,g!\~E9~af-êQPBVf]/F+ ԋFnEUR0/h9lj09N6j7p+(򷒕4ZY,jEntyaFۤ9EaHs [JοJBHJc%بCcVRM_%MVV/+(jQHR-\@5׃\\R\m7G! YA(_5wTRSlb9YЄRP?֭<:rՇ9 kcUUTVQo,wZT/E˿,whB)lݣr#uOIK[!"m>:Z0P5hެ^ *|^$ׂ=:R79_زe4Ao`2i3͗MrCzj?x6>Z0h7gHz&&/(9~>~Mm!R)j^Qroޏ&x-psԯgirhBoU{!הm~dgcje/_ T-/Bt+\RmN\ׂe7)򑜅^N^sR\B TI\cU0#|-Dbd5^^sR'Z0P,2I,|r*}"ׂ]M|$O^zԜ#_ v7)o>yߒe|-vq"Z>545[jN \vk@He9/$k]%&+(_x#GI^Z]SJ2[)k䮽 U S}*#6]Ja^Jo(D*UnaqJe.Y' *ܬԮ?TRVƚYw*(u[Av*򷒕]{T*;]U8 U[lIOtk^ӯd a*ܿPXP;TrNV%,[揭{}wWS8/7'\{rORG{4Wa~Ju= ]%N0Ec P%1d]%N\aPTPڜa}{ƷwWS8=7Ylr"p)?vQjbB/*1 swhkJ2o2أ5_U"~nE=?TP¥_E{LGY+/*w G8aƚ4Jz篂RvTkiXSI88/Bt 3?#Ѽj~K/5/Bt?^FNx?Ԇ!:+Y aD!k< jCFRaj2ˆBy?Ԇ{7[ܡ jGE3nnbF"avnެ0By?Ԇ'gTP5az(dfp+ ﴄm~r^e>CdsFFNx?ԆԮ?T(s˒ے=Ps޵SJmJSH2g%%{4T>5FgnNERT( أ M宜,-i;ʜ}?O5uíP6mR+򗝿-ieJ2~1Z=By?Ԇ;J!S*b&4򗖴H2~1_R& :VPirgRT& YctVPTT(LRЊ=T.G_jQ@|fQuj[s@h_bUo7쑍~2,7m}> \} vkD! X\@޾Qȅ\mE! j[Y\gra?|^ȅ] Ws//Btv*Ia9z;pWK&yն>W5Jݺ.:!:}JG2(vԊ=QT+į9d*s7o>G19m}>p&yͫ9ė!:}JuY]Ch_bP=%-w)٘ZZTfGAib9yx}~azR-<_ #yT BP驹z.<{a/_&{ɭ=!l9%Rj7.<#E=!Lx2s//Bteu55׃5hXh ZA>+V}V''_ *7Y'GFyǾy$k@57Y'GF)Z]}|-ZMVQ2u>% ?Z0Vd}uNz|syׂAJ6wѼғc^:_G U"y3<_'YZuk@UZ]|dC$)Z0h"CI|*)Z0h"uU5^"yc|-Dlnΐ,M7 !ٮQ2rM9 9ۺG/W3^ϋ^ua`$5gOgm}7q3%k0;a%4?!_&2_ _͗~w͝\3E:{-o뻾ospVna>4)%_7e?L_UbS827e&c5^ &6_UbS8Mnky>7m}/*1{45XPP ,)ubNx} rR*,Z@lW`њJZ^hs)bͽ]yY'jD):7LbM!,"D-m3+YT(/P*ÚJZ\0أ5KJĝ‘a^{4Wa~暷M\QhRʍ {d~_%MVV$ Za^6)RqEQR\ʍ ?d~'b'Y( s&E5(4)RqF=ZVRuG,jmRdಎbq Rd΍  圧̟83reG䵺(̀e䣱b0P,|4V"JWS\}z-ͩc*s5j0^'m~WKD19x}FsuHsY 3h̘gA-K0akȸ0sƌ9:,!u/b  y 7g0xOsu5Ǒ 9U-mct] _߻/,-iX!6nn70G cSͽ[ !- HwKw9X`Vsmn`>^'QsuXۿ s61^'7/qN͟8l 1VC.pᮾ csH>/0ak+ca>N9:\}C֘=>M%E>tBl+4&VcsuUy9 otk“VcsKvܚћ/9Gcţ3iDs}S5$ Uc!kNsYer>z9Y 8rY}4_߻m/,-iX!6nn70G cSͽ[ !/}vsƊKUR$ܻa,09N6nn70oX}DqB.w$K,ЅxRspt;Y`R>XqFk³^Mvܼ昗w~quN _uZ Ѕa&^:_ZrR7ۭ91:poC!C7lbN9Gcţ3iĤuNY|ly[ۖC@.wKw2] 7넇[Frk?5%}pe!#>9Usuj!j0^'6js}>!k&>M$ozϮ]:G.yͩe&j!a΁>W5J-+&>M~0k!5\@s߿V5+&>M\sb9cAcs0i19pVQq0{+>9/T;<.4漜f9:xaC'[8pWK&C3GVH9V}^6h^ͦG}};K!!(fUmo@V ߵaᡝJ=]aӷ w}eoaMѲV+iJZiA/ᄏ¾\ g]vZwX)NN.Bз,,;Wnx_xNOW%^]!UT¾k.k|߆rC^X0Jwo_55͆]IF)d6څӍ]|eouN+R$_avzavzaN/D-q_sY+n(w6Bf8N/]}Lr.s0 ?ʼgGkk͗dgj:Q2`?]-%g׃.䣱 R5 WG.<ͩt|4V2G fs=OϦ=rh!/Ws%KSfq)S(}abaȗqcT0)6`RŽBSf=سY'Ŏ0bFr쏔0/n,90`RYx;:#\VK5Ǽ4Kk3\o~%l<yqVKsK+~qǙ\lJMǙ/Y-Ig"19m Ecs@56\@Ir+j󒹲zo5\@Ir+v9^Yx͟9}a#7Ҝ*X9j0Nͩ/u9j#5tḯ^ !<5t昗}q)$E>:!M!W&y <|S,9Jocwx#ғyYzF«0{45hxt#^9Usȅ:9y܏csyۤ9emRdsy{/55zȝiT;Sꊍ3酩@0꯹l:ӺJvvva6h]%l/k.k|6;clFݴGL/L55gKATSV;}*^0,_55db ,M;} 7K///_aÂR=Z[3[nK_i*q\ l ]oNOW%~#6]/okßE)(u+E6څ@7hYƷņ_*BkW劣>BNA7Rq[|eoߐ[ןPoN/=nBЫvB/o߰a/o߱a/_f__k.k|??~7r_ȯeot qws_ͯ;)$jsMxh^ϼ~7~}4-5`urȅ?Z9J_Xl"\T 7Ǒ TqeR-sLr6`qyJ<\T ȅ/,s6 G.01Ʌ ^N8r0S5$a,Fs~suf?9:' ~sȅ:9漜08r"D㙣e&B9\:)v!:p\!؄aގ{8pH: %9\;usLr6`uG.LZ/F9ū/H:1ɅD\!D昛/^4U.ʅ+DC:9!"j#M㞧_ȚiݶL\!DXu/)uXy9˵ݶLG.ySxj~1#ki^\A+qF/דM2JG.FTq˒\   I}~9 jG.Fs(}aC su0{4νTҾib9' Qsu0{4νTgO0y5\0mR\2)2Ǒ TQ2oȅ7Ҝ9J_Xlb?(H`ŵ9:czL'Q2_2Id4Yͧ3{䣱1Ʌ:98raIys!xsȅ^''jA=^ٔͧ?OW_snxDcsyۤHe56"0Z]}s61^'yUN\`_|Ps)y8rM4j9MV\csP6)RqX nI.MI9\XRMI9\xS,ͩeDx\䣱ӘC@.T49\8:TQ2`Cioc~!5hfCs6Ds#C. il5dL/i9䒐 R|)=/,su{%ovkR>8{ _dxsA>b2W4\9r ̱1)xo0CLΐ,vkpof?^7K!5Ol6C9[Cu/b{D5h8 I9:,s\L!q2nf-1Ȯ3\砖%a\`Oj "9[CC. i\`Oj9A+Q1o? {6) 5dZ9Gc19e o6m^bDHs\L!b+DcsPq W4U.i\0moۜϋ5ĸ0su4ףu0akq3ksY 3Qǻo]~Rs׳)=)9O?l? R7fc֨c!T*u';k?gax=ҳYa6U.\!|@e#!>7yYY\|aR$VCs6DsQC7qJ0moۼ_E19i)(uګJ2Rޡj53z-=U8l O"k1\@isuf?9m~yGq2DLcfֻcs0/r4o6m^w5dzwsƌ9:, {6[RU!fֻ|4fߒԲs76JU3jѨJU9[C+Uq99.&=i\ suH昗+W7G4\ 5pFԍ9J_X󝳆.xqmј 0sZ`\q 9/Gő a}^s昗FNx  /shΆh  yLB2 ﯺݚr c^1oYNḷ۱SNz5359:czr csP},9& bs~WPa~W ő a}Q2`q]sZR/wJdyvk}恩ۣ8ry`5 v[zֲW=ݚmkO2?a}^=6SBh 02?+zDD!ko~'jX14Mr~Cak5\0mR\ʼH/g!3^Œ[sULr/ki^Y>19МHgx!c5G gQhq{9:|9m~ߍ>/G_<4g/%}uΓ,|rG6^ۚߣ/ד_;ɌyWO&h^Yг苇9.&q1A49.&B9[CYn΁z4yk^GoͬC^Evkf֕[{%OWݚcsͬy9:7"G.L"kw 昗FJ4`/N9:|1/ UӈLŃ9|9F|l苇5\@sǧ+7{T*֤)I ^ro<{|Xe>DD19wl̂J:u:BjJGMK2+Yx45ccTi)TSMA79s9:\cs0Md*<G7 aɕS\}zͧ?Oƹ9:dx%(_Nq5\I[dirDkC2ҟIJI~/(Mt2Yy|I'͇ ?C'{Z55'E>5Ǒ csquM M^?8l:@2~o}s6Q}rQV\icoc~7h6)Rq}1/9yW{D!CΎb99)0#j "iN,8Qsu㲿%! Efs\"19(h)׸193G6{2j#إiF(}acM vis.Yw {2?0/o!^H*a̦ f9ۺGI6n7)=%?`/,sMo0nReR>2Ǒ cܺݓq4G MK|i%%9H`<\\Qu%qfrvLsMsȅpsQe֐q-ܫ.HV%,ÛFF$7q4/,s6.yvs S^RM.MㅡyG.)TAuq)9UsPCps5d &\եy6go<\\QɆĭ9=O)9\`ae71إiA+~osoЇ9:"_K$뜐G[spV6v0VF?6:uvk "9:!vsu"'zf2*9[C2F_wHs!_x{FLӼ0|dSzn^!0Ǒ gQosW!<+ 952ݚH6ϓ̋9GR!n2F_dkؿ9lb~Zȅ¨G9H!cs0g>G?-  re)x}5\0mR\ʼQ?RYŌ׷o6m^~渘 BRsU7_/9\ Eqj7r/ #I,|rkZ!}@ȺyJdC^iAaFۤ9NDqz(9ėGqB˜wlV9O?ٜU5G wx#o0C@.x8m~‡Qs+U !2\砖%$Qsu[R9юqFg&L҈]/-i&L9:qYjc^4S\2K>/=R7Yjc5` {E!Gex|l1/8|笡 M\r%I7moۼtsaYc4rfJzֺR_ob\&9rtn~o2o95\@sǧ+7{T*;]:ZKSQ7=>M\sb9Be~/>csՇ9dħ+PZwQCKUTPY7=>M\sby?-oD҃]9:Mk\昗ps&"0͛Y5 &62WW$}m>QsƊGgu"~Ȧro$)zu~qi0O`Hsq5\Z]}፼Vc?u`^Oȅz)6yO͟M }>o5G vK|C7Ml7hxt\̦טb"9XTqBFsua;ݚ{ sYY\m|ipoMI3u^E^ؚcs !}^E^ͧ?C'rF o$y%I/}^ؚ|4V(WkLq5G SlN5nI/5t[sƊ_Ivz>.19KsY3oۜ/O䣱"/;'O^7\ <.q 90moۼFã8l 1nfm΁z4#ezuKȅͩe&|w.su0]B)hBs^7=>M2E޹s&|w.suopF%_c^ ܺWFC|pk^, ٔ>/qb̺r9_䝫5h7?oW7OTD9\hќ9J_Xl'saY;~SH5Mhګh;o<{|Xe^}9Bu69|e9Ǔ$lyMTyx긫esu79}~^D0\@/? }~e~yeD19)s\syJh1\?w`^ yx\6"/p)="/+ɦtFK!=81Ǒ ͬ+p&+v[s,QJĽ¿#a# ^yo$_5d7)z()VA>ua)guX{Iٳ4{$_5ĸ́{ly!pi;90moۜ?$jcț#Y>/B6rvs&?W9[C"f;0VYyA<qBϛhyܼ$)ϖw}|4V ?6g{caoc~wDL0|h^M ̋Cjw4~|-5W3^ϳH3\12/fd|9mo<<.g{G.4nyi|k&rFD19FrԯgiY FsƋ+Ucs<<.5\0`"<._i19|9Gcc>yx\kD19KQvsu2i#O`Hs(}acn"<.g|q99:71`"<.5! \m~+M䣱W9:qiA5!WsY3moo>y}~}8ra 7 ɬ\Q9X?!ͩziicsp>F^뱟Z0/'{t-ȅz)6I$anQ½6$E9|}~f9Gc:nΪfQtݚ#lNv۔G6}5\FqW!lyy[sD{3-$lya2K|g&|gR> }1#"/5f8rEs9znlќ9J_Xl"\c2\# s+ "ja}^ΟsƊOVW1^7\ <.q 94gC]}#c ܲFeyimD\LxY>7Dnl:븷[Gɫj_$Wkky窚aDqB3'мc#fO>1/ !p29ė>/0`# ՒPQ9/Ȧ ךob_ؿ^&yo#(H`xadSzk͗g{r_/7[Yq1#u ך䣱 su!  3.fd{r_/6\E^G.hN/,sLOcR>X97C19KsFcs?!Y-EayiAx\n# *R| ]G.hNwKdE^f5G vۢ9edxckR>X11`ksf0pW_so̭?犚bwX'0Q#ٔͧ?o7?Qr^"ϓշݚ*jmy59a1/5!X\М 7S\rvHs&" Lq;'O^e&"s4Ǒ -S5G obӘdunAFN͟\ۦͧ?o!_0QsƊkLȣo>ys4Ǒ -S5G M^o7\@sɒے?Ro<{|Xe~fx=jxq*ܲ Ѽ9:K~.ܲȫk>N+ry5SP5hxsur!<.9i7mQ*sO"ka$js#T9[C'5Tn7)1194\\QshΆh9;js6!yVL1/hD<5lأ ך/CΎMH sK#B%C0?W9x$*'wXa>4y!5Id4м6la.~.aQshΆh9;js6!yVL1/hDK9\9p/94Xc/0ss5l5_09?=j#YWnM>/uHȓ昗7l>?>rf~QsuϼH9:^?eg cs >}qBTQ- #In[s6 vy`ۭ9\טbsosvs!D& mY1Esun`YUPdATS;Bj/&ViˆȅҜ9J_X cDFsƊg}~}"ǥ9\hќ9J_XlϹq iNmn9|}~!2?!I|5%%~-]o<{|Xn\QN{MNݚC*on /ey}k^?9[CY筞ͬS=5Rvy-n19\f֡rDm|##rU}r5Ǒ -SŽ9JI~Nq5G MTOxs}>!k|'KoKZNJVibyuۣܲ Ѽ9^o7\Iy7 {6O䣱b~pe l%Gj5\`[Y}#EWR||48w##2Y ۭ9:Vo>y[sKcܺ5yF!n~Vߚ#ioc~惓i 7넇{sdx\6dg? ok00S5G >osu\!|W39x$xrIٳ4FEjcs0(5Ә5ĸ9[Cͬk  m~^7˨94gC4)~kc2\k`yiDDs61z<.#QW9 8l 1nf]3M/fFWY|gR> qmoc~9_l#M6!Ja?ĩGS\dz||4faA-K0G w!fԲsKC49m%%9X sF.YoXRbcI{dnͱ½E^j9[C+UXR☃Np'9JJݓ/q2rIHW|(Urux s,QJ=^IBmbn2'Y?/xCs6DS|'~:A+&X\Rh ܼl;,=*搓 ќL5akȘRs%!q_EQE^VvsYWnVa~nz7&KoKZsR;hBTnRܡ&bju׎zOqRjRj~T/TR ꯂb? 5,dSlJ=%-Y/EVX7ڷOV󯒕Jާ|-M!wZR-T+(hF>P)R8_S>ErRZTno]`IkZRjRZGGRM)i)䞂eQ7];BRlo>?9.&B$>/zx z'q}ʇF7|gnR|a&#p'/|^9r S\=G_<=Ɠcwx#}? QRs/{oyGDq W_914G6w#Gޣ9YR[ҚI5ZT5YZYTlܚ;,X,{; V+jmLw\/#W^9h&"e&昗+aLsMsA/sТ9Us!Dz75)6\`Әcs >v1\@s_1ߍ|qҔ EƳǧU}~=jѨvܑKlJ on7?H=%z0O O)W2|qzŸ9\?!ͩ⮾S|'0$(}a}A9Gc|྘|d9|}~y3<.s/1Ǒ awlt#&/CS4G B6YdzI:A>+Ō'55'C!Dz׏9GcųO㝓qz>S<_Ӽ9#%v/I:gUa#^s^u#uݚC{|)n}_Kn1/v{4уs&k 19>qVg9[C+U}~أ :n7\砿1`Oecs{odSz7|nDz7)xCcD)vs0CS5G M}d< a,5Vs :n7\砿1`Oecs{odSz7|nDz7$9|}~|?3$j#^AuqBxsbI.lYw,sLr6obեs763|4^3~=KϬ }~fQsFcsC0'219z7`Ϗ|CΎgDg9:S}e&8CqBTQ2`}~ݼG19io9LJVro2\sun~oۘ}~=j#Z4j9^}~գsaYc4rM="/Gfۭ9Gqoz9ūWSvy[suH$VnUٔE!f G_csP0mo|뇹8r^?Ug99GcơO1akȸ9:,w,sM܍>Jm3KBTk*'SLBTbF/ڡf+Ec͝gk~9\hќ*~cߖ9J_Xm"lOx!N^yzib9\xOpWӟE>s,t:r\E4t:!Dzț8%O6gn΁>W5+gGZTgU #7:K{DG.ާ|od{"9(\!ų|^ 7`}~]X޼Y-97)={saY[rPjZRjR+7VcsG70#_¢8r>]}#O^s̱Ƶ#W!r嵺z/s6Gwϛ8%/W_͟9:\}CV׎zOqRjR+7VcsG70#_G! ;jnys\ե9\hќ9J_XlOX03ZD19?-=!D0V=SB9:01{|[r2_*T(SM6B/ʿ-I\(Պ=Ь\&5QFG.hN/,s6'>kD19io9~S?\9ʼyG.09GCU /su䛅sOc'> sȅ>?n~߽0C zL1^H>s?!|})٧F0Krt}~3"j#^sc^٧9:4Ǒ ag99\?!ͩe712G '09Us0Cds9\hќ9J_XsaY[r!YфB%%~o%++ӘCVRqҔgaK+;',-i;)Zʕ! \6m5\ <.1\m~?QsƊ1\ <.0mo<<.E٣8rEs(}aC91\@s@XhBsq1Ah#w oғ3~sfak>R<囚c΁>W5*su.rz9 tI0b9:\}C-*s\h"'QsƊC19Kscs8r!9x1$s4G1o oFA>+n7G r՜9Gc*suOsWrFA+&ǥ948M4/,s Xͩa~oۘyx\Ο5)xcso6mϨ9:Os9:qiR>X3\ <.  {6/yKsȅ,>*n͓Ng^$NI1o0ghFkBlz!9_dߐ^n4ɬOW_JNWzO2I^/Bų~Kۜ4|5i֜/+ɚI%lo>?5ha,0ӯ5/,ܛ\s2a,ާ|yg{9|8rEs(}aC>?9:\}C֘=.!w{4U渘 B8o^pW(=9C͡9"!Wa΁|05'gHzjMM1\@s7N9:Rdfno9k=R|윅^sYq1s}>!k|Ŗ~c9H`wg?Ozd“YK/b\qF/0QuG.=)=C|e|4]]e0\砿1`Oecs{odSzK՗Ggx\&_?-ZYTl TRrW*XRIJuɿ;jގP*Ք⏚;4֬أQXyz j#^sாғ3~D  1VN19of:\gsO[=Әa~U"C>RB%qRے͢Mm'1 v_X7_/d9Xht5z= E+A>u܎{h 3rl9:C0'2򮖑CWaA;)M|^9}~| eѨvsus&Q9:}~^︧O6g{LwsL1i&59\hќ9J_XlOxËcsՇ9dʕ3l*ܣȪƳǧU }~6#XQs9Xx1ha,5Vs  ͫo5hq U,\suY5`ec^koxȅͩe&yV\cs0i19csՇ9d5NRk|*5^Qszw,szrv,sK~41G8rEs(}aCV]0cs0Z0z#ii>êKQsu^gaYc4wо_ER4l*ꤧRأ ƳǧmͫoQFG.hN/,s6s}>!k&ߔ"\&VC@\n~oۘYu#j#Z4j9&Ϫ%jAkocs57Ǽ4||ե9[#\qkq :n7\砿1OqA>+cs.}DFA>unAcXu#䣱o~19Ksu01{|ە{4*!cY3ysEq1ADm "9GcaH19e 8l 76h̸%19e i\Q2`]7ˏ9XlҘcs:[sʕ٫RM&V+Yr_.Û'jJU9䒐`Oj;9H`Ґ5YIyLӼAo<#*z o҃9ns!  oe~&jXq9Xx9UsyuÜ5G M!ƲfsH7q2T%|4f$sZ`exs6mÛ#j#59S5ĸRh)Q9S#G"yn#›׍94Xc!yݘc^f7+4i3͗g{DYQz0G摽>eDqBxS1G }|0e֐\DsEq1Ah "9.&A>3CeA-K0akȸ9GcƑ]g=7)=)|Uӈ-5o"p2qIBs@nQ|\n۪/|H^ /ܑbV|Y>!*sEs'odt0|di,v>x|dx^pyGjC. rI s~nt&{<>BҷC. wM^J!h$Ds%!C. rIHK<|Y<+|0GD|rN7K9 Ç91o#GI||}<搳cf,yɯ=kMKR$scI0go2ǒ v[藺\LxXRbnߚbJcI{}|!EcI{ y 5ĸRh>ryKJW|(XR}ܥi9J7K9 Ç9H xȼ#(Y>AuLpWf2ga0l\B9.&B9:%g:9k}cIiR>2Ȩ9:qߒMe9r fMk\oK~8rEs(}aCȥ?9:\}C.!w{4GST$_?x48uR7=>M\sb9Gcmt9C7$Ea,kL9{-Md/2l! dog~oۘ淹^渘 B4DxsF7GRnq RsH7/( s\hoc~毯5Ǒ SlN5oYw ?ٔ[spo'a>/I/n!/+nL)K5akȸ9GcơO1\砖%Cei΁>W5^p*Z>,~T(RR;'Vcs57W4\`_WpHsu3Ǽ4_s&9:Ɯ~8l 76h9:, {6sfhR7K6!"OfSz)<.锥'O!k&reګwogOXe@gy>QsYA-K0U.i\Q2o"qb\J4\)V!g4oBDs9Xoj^78l 15Ә#G"ynoc~hx.nAx\cs:[sǧOVSHb&4wUPx4m~FfR{r'QUPj{)E*~Sך{ܣe+WIcm)Fv7Y JA/;B)/_nM%-,أQl꤄k7 *N;٣ MVER4Ed+WTwb&o~d5ܫHVRPC8+hTҔ{TXX/_nSx5v)T*XR?'T`_TSP[ۼ(^ &6\@Irs&E5.'j "9\hVe&Hx|KJ,sA/sތ5dܾ--'Y,]Ws搓 wOs|HΐusɆh#b?= Vd(}aMds sj]{gXeG}sLrC'HOn^j9+qy_d7K9 Ç9Xs >/L|H^c,csR㮖l4IJԍyo􉚃9Xhf!f qsujY94XMcl=!k|UE]{T_r=^~8rEs(}aocsC^ytd^2%2(0G6F9[CͬA>3gA-K0ocs:[s߹C~BJ宽 y5Ǒ Mrv,sԼn! >eG"yn֐q*sR>=RsH70moۼ5Ǒ 4jyi#iiј7Y}HG/'̱F$C@.\n~o2oyZ=j#޵]}#Vc?k0/j0G/ux^뱟 כOfG.09NyWHf+R#9 3E^y7)=7GsNOKd7)=VcZ]9BaFۤ9Εye!:omH,h9ǹRzo+ܑQrs4f/6m˵QspQ2G4Ǒ cSF2_"Yd?9JZosku=# ϋmP6)rs6mK9x$q2f$9x$>aQrIHsH|~޾!4Gg_r9\x(}aC \R$y_6 34ۭ9\мmR|4fL3\砖%Ce719x9dSϹC~{%Tګi!k|垚P7ν֬k UqSQgO E"7 7,bFAol>.<5ydVq2nf*%}^G/'S9:,G<ͬ+ F7K9 Ç9x$w!*ܛ9x$YW& wBYLͳ9x\6nyͨ9Gc_:SuN>x|s9GcŪY5#bcekјqSlpWoxO1fç9[Cͬ19e [20 w/0o"pWP3\u5+gWA%M]?4֬\m~d_JosRGA>3}wxO1csYcsPpdJ͡yn19?.}ȡo}s6A9xMȡ!g4oDm9;js&HxW 4G6'S\=j#.Bt?^!Htj0`d02\@Is+󮾑X Yg5^S ?Y|ҳ#oRsz>/^z"9Qsu4o)׸q D\!s撳=יYKJLfqB5j9 kn#>TQ2oR8rAS5G MB ܜyWpHs\LqHsuX"y!k5U.\!/,s76˨9.&B9\TQ2` s 5j9|0Ǒ r՜9J_XlRxŒ9r 渘 DB /#j  ܎{M2"D#ŒIsr94Xc0mR\n04o)׸*Ce04o^WvsPvٯмc#ŒIsowN͟,Ѕ8/f*5u]\]:kg.<Ǫ3S7Y ΛIY5akȸuvsؐc\Cn^q94gCņ4Ǽ45G4akqF}A>u\Q?rk̟9&@!(/}vs&5O;}vsݶn0Gs[ۖ! 5O}vۼ\cG1/nn[n7o\cDnn[n7hxtnn[n7G 9U-m'"j wKwr9Bƹor ^М rvMksux#I*/yƚ? q6e/j#5>X3ǒ_s9g\q WP*ioc~7n.̈&}AcgaŌm.EvaFD渘 o$ Yg΁waŌuUYgR>X]}#Ozvb+Dn9諛csu]s\"͹5F4Ǽ4ULb%55ǒ_ra_1ot2WzF&}?WyrIœ}^"_C|%[0/ ]x~S-=oӂ#j#5؜9J_XM̟c+dSz794X o%S5G1ob5ha,0\@sǧObEZT&ECSPjugOcY;6fAeT(SSƬqӔ,(su01{|+Z*i4ꯂbƳǧUHf|d,whBHK*YgzL2+b~ߘ/j/z/$/yǾ9Gcţ3a,4AF6A?4yٜU[nnwo7G Mͩ/9C7}`0xOs[&쾰B39Xhf {6̓X"昗i!3Ǽ4f7`s_M̱=sK_s&X"6Ǽ469s_<%R|9.&B9Gc_19czʅ+Dcs >v1hү93m}k.k&v)(u^]SB5wUPIMVq4qΉU8l O"k1\@isȅF3k{6$5Ǒ ͬ+5Ǽ45o"ϪrsƊu3G a}^s ʣ 7g0xOso6m_d5Ǒ !/,sMsu01{|h J2?o[nn[n7akq3B|4H}1#KjaU %WQO)Qsu~޾減!YY Ҥ0*ȭ91;z׫C֋xMqW 9J cGydin}R틤) 9r!Q/F6m> /c^T"n~^&N)ەRW[sKCqo5F5؜9J_XMߘ8rEs(}aC N<|4=7_/Y蜄9[C9 UsƊU曯sEA$^М rvMl^eѨ྘>/"/5ftNB!ͬ+8l 7s,IB5jXX}diؿBm&u/fyLd( c^▅G^H3\k>s6~pa,6$0Jy6sМ i~pE99A+Qe&}^ElPU:\ggK3\8eI}J)=/C|=uz]5)c^r_/>lPUᮖMbXwwˋyL͓V#ņ4lHsQC@.$ U蜄*j΁>W5fOcތIF!#!k197zֺR)o<{|4ʜ0:QsSL5Po;'Vcs57W4\`Ә*i3Wx5-I:-sF9_sMsKkia9m~׋b+DcsՇ9d_q W4ǒDsuo;re]j&`~s5{\\Qs9J_XlBa3l \2oD1G1oQsƌ0\e m~#j\\}P5h~cs0g#5؜9J_XMߘ䣱o/٢9UsТ9UsȅU>pe,bc5akȸRhјq,sujY9x$X9\3e9P\d]0G1osR>=Ҩ9G#*5' sؐМ !!gGmo|Eq1ADm "9.&A/^ GY9:,W *9r6G1oOW4hxvsuA>+>9:czʅ+Da~oۘؿ^D\!D渘 Bb|0e׋bs6}W q 9r o6mQs\LQbi "DQuڦoW *9r6G  {6޾Qs\LQbi "D5bs6}W q 9m~3s5Ǽ4ZnqOq yJ9Wx9o[sWQs昗Z4GklЈo6m.,̈b+DbDHs\L!5꘾]e֐1}|0Qs%QCs69D5]e$jsX5)X4G oBYaROR A$^ /sup))x=?i! N)m~ߕok:+fXXwh7Ωd2EأQ-͍P=%-۷*Tb~WmUTFVוߕTb~WmK?{45ܫȿ,(ܡ_ߖN*lo=*1++fXXwh7ΩdrR;jmJrWSwgE`E%w%(ߕ?T*w^keIRȽgGCSPTR bOIKܩ@%w%VMh;4dU_IJuk;ZTf `CTo/:S+ReONEEGݪHJV[S++(Plo9jTb~WmUPq !V!ZBx]SQtS$V+u5kBl݅'wXK^cAË9[CY?Y>/gᣗ)'csͬ9\:bFʮ?/9C׳^a,46akqawa29JR[sÛ:)=F/׷ :o^}xsR 34N() yǙ9:|9\TqW 9J>=3<./,mF|RvkDx\6nfh2ݚC@.iiǽesV55Oœ}^"wKwrm. cF19i直HzֺR_obƳǧwN21WG.Hfs{:##s0U/,s&dȯ8eߑRY8sߘus}>!k&^j5LP&^_%FU|&V|4f,sZ;rM_ PI\U}`:7oB)goc~zu 9_ly9 O?! lyyxu!Id48l 1nfmcsp25̧'Qs̺r;)_^]\Cnyi|wM2\a>}^G.4Nn\CC\#{2dKȋ[sK_)dx/u|ݚMn[el=>s{%!j^y  $RܩdlmʬP҄RLJV?VE6Sͩ⏂RoS !ꖴƹhjJ ̱Ch祦hVzq"v!*mo)*1+F$ےTPŚt.*Y)evTCkm Rvaq Qi;P] 7J%w%TX'".Dq5 ԹZ[vT+۪J7hJJM]T޵GUWQ'ѹ{vao w#]د*`za*7ߕTb~Wm {Bw6_ܥSMP+YXsR4%ZkOZ-*1+FG<}3}ƍx?O|>`695'CFٔ+LBXշ59[CU⑘}~1U.o6m\rkm%x95'CFͫY;Zs۩8)QPۯ9dħU9:=6\@sjC):k7=>9d΋$}>S.w*X& Rzw*9_o<{|s:'}VE zܡf+TRST ʂkdUmji!k|__IOJ宽 *{gleA۵q6BjdCJ%+kO"Y{riISnS,{6NVFZ)uK5fOcYޡjɺڒm&STqR:RF_;4kK5fOc~CK&}J,(5r^? GKG۩JV&V7:ka~C7ߘsaY;4I "[)NEPT(ƳǧU9/C5Ǒ T>Q2`R}csՇ9Rcs@5ĸ0zFQr ]xUg֐qF}A>u\Q?rcs@癃|4V2G iNw$͚󅐽0Cݚc2 syvk00SŽݖ&W]ؚC@.>o{/g!dqq&uȪ<;%2N^!75ty>d9J!:uHg!yq&"j<}as_߻m9do MhR((uN;4o<{|45)fҧkeQq*XmR{G}ӘC&)ZYTlMBGgO_sdԿh;[J}ӘCoLm"+YrO2,x45y2sP{dR=ˬPݩH/K7=>9doiBGG J!|:_*yZ>/ci!k|MPI מ"{ƚ7=>M|Xe~ȕm.Bt?9J_fC,G.H9:Al!k|3SUh_7=>M2Ǒ ub7\ ؿ9do&}ƚ|*s0jiA=sL,whBekw7=>M2+j#F_j(}aC ^F_9\8:nA=sLZ=EV(*ix46eOFq ca9a#NS3ͤϡ*J=R*ۜFD䣱Әcs0g#)vsu،CfgPWbܣ)˟](7=>M2Ǒ 19b3gYJWbܣ)˟](7=>9do "\E8R*b͝TRPiMVuOMni!k|JWK渘 渘 69G+5)xGbYǜ)劚V<4)xV|1)xV,cR>e?|b_V}Sd 嬜lGdd g`wv{oBOfs1 1^u|__S,x|⃛ O{ 9ty2,'5"E:$[8-gd }lDdluH~ /Lx2 LмҳRM.=UyїQsQ^\&Tm fSzKψv15!\R#g 撧A<:WP*ioc~(^ mn4Agu&sЅlJŒI^q1A" s撳OsuK>q1Ah#gsEs9rA4U.\! {6ͧ3`d3s( r_>󷒕J%-_jo#7=>M2y:ȅQs!/Tsu0uOJB+eoKZYRL_򯒶Jݺ}*ۜQOG.Rw4G M2Ji΁>W5̤ϡ*loiV(T_;4bQPx45/hiV(T_;4٥U8r9:Al!k&V漌R=eFq(y1G M2J4saY;N9BVPJXbF(٥wGJRQӾibm(Dq(Uvis!/T٥i19wKP ZA%4M*VMhRAv*򷒕]{T*(XQ|!k&V漌Re8r"D(}aMb~csՇ YyZ2(,R*jMVz5lK+%P4EUSm51{|4u=>;]{Tiݣ Rתh-/RƳǧ1 (kW$wUPu&4'K^RJ7L;4kfR"o;o<{|sosƚ!O+ TRVT(ܣ ?UCcm~ӘCיYhI*;]:ф{wԬ)|j+tl+i7=>9do{LlgRo%+§)7ں#jM2*i x45#>;B J{STRPTwh(7=>9do'>?{ 5Z.JXSI˿JZƳǧOcY;XRٺGZAePP{ښw6ΝVeBV5Ti!k|*ޡfJ!YRTZ)T:E;lUܕ{4*h{wTkg.J{dAѶx45߆]&w(w{w**6?k*٪P=?%EK!{=o<{|soOEEg.J e$NvJPj~ħU8raŧ19b3gYICCkEsuګRL5[i*sp,9J_X8r9|ٜaA=sL 5+w*򯒦P++/_N2oƳǧU lΈcsf_7>9%\rGWASȽ?kRBw"*i &V쫏9:\}C֘=>MԮ?꽍P*sƌ'e=)uɆs19e XR㻾MMHnr^$?gĖm~|4^jwLd16)Ϭ Yo>y2 aU9.&q#1cR>Xh9rA4G4hX49N2*ۜ<Ψ8r74j9|qwnlyПg΁>W /HBXgYc4i!k|+$KJM*p)r T~+/vYI%x45TZBUT/TV([VA&/'#*ޡ掚?kVRiA>u;"I/wN0Ǒ ;o䙃NqB˜/,s6QR.s98 /rEA3><\Q#Tm^uaF*a,\ZR(H`/HsɆ4o֧rvLs&yJA>+9CΎrq&jW7dox#3PmbOIKJ&VC@.ros^8Cߍ>Wu;I{;IJgOcY2̤OWIQx45K{4W;4TS(o<{|46"DG197w3XRKYQr&4wT*(=NE*(R/vW551{|4u+IT7[8kkګi!)5-TP{d>iʬPrW(vrٵR!k_#HT)MV7_ESLֽ֖䮽 &>M2\瀳GsaY>ʿ;9X[SH{TrP{$JV&>M2Ǒ 9:Al!k|3  hA-K0Ǽ4Uz /ٮЅ-ܺPR+W/ F w`ٮʦzb+DRsƊ_܅3] )uUsupw>Rs\"[vXR.̸ߐRWH?%WZs=]cx\6\`ӘӜ9J_XMR3 UsuokcsՇ9dojMϮ]:w)&VR3 (19wB)|1w))R,Zo215d<ť9:LӘcs0iq2DLS9"h>rť9:B.syo2O<3 !k|O~c9|*3 !k|Xecs,2}}}c9|^c΁>Ɨo2OL_ߘ3 opo2!pIsu\5C1\`_}ވcsՇ9doAv*򷒕]{T*YPux45+'JedT|'v)TRͿ߿whY7=>9dħwN2/,sՇm 5d<&9̣KGfֹF!ͬ199?suHfָIlf]%Yȅf֕1/o~!/s$jI$/2\oF?i֐q3ksƌCbcA-K0 *u>/yKs&^_>/g+!k| *)N+gO! Wyx#\2j΁>W5ʂXsZ;U) TP)]; Uh~c9/?o?D19c s6}193\9:RY8saYc4Wx^RUh_ŚM};'VC@.<q{6W│9:\}C֘=>M*lLmƳǧU`eAaFۤ9eAaFۤ9N9x$u)wȬKyBrI_YzFN.enC%0mo\5hx2]sujY9X:1\@~0Ǒ R> /sƌ;2csP! W)U"8r74j9ॿ9:\}C֘=>MմVJHֽ֖.:Y{q$f-c^C77u#A>3LsZ`%5k7u#渘 w}1/!ϑ /s\"q1A4\`_Ϝ1{s}>!k&{TS?jZ ɒa19yc^C7˘sOcјq/,s6KgjsaY[mI+T/x4 ۜ$TsaY[mI+T/;[b/gO0G28rajS9J_Xl9G.2 1nI9X8ecsQsՇm>J5\@s_o2Ǒ {Le#{LCS& Usu،C/. ߝ{gO0O$T99b3gY eR4֬Pݩȿ߿whPTPx4 |i8rajӘe&x#q’4d#%i19zsՇm>J4Qsu0={4jE7Vȅ%iQ2o4$T19ƗXe~Qu0mh٥wGJRQӾib9(.M5Ǒ o2O7&3 !k|ǜXe:4\@YeY;UQO19grC3>1Ji΁>w!TOc΁>w7VC'FvispQ2oΐsu\5!Xe :73$"#50G M`su\5o2O7aKx"3 !k|y9Xegrv oK5h#xOs(}aC7KO8jrF驛%}^qsPn`0JT{tcsP3 UsH'`:QrN4_g5\-)ebyY nֽ&>0>OnosQsu\5}|c9|"Fsu\5o2OqE3G M [W5Ǽ4U ^HsA/sƊ0G`jc!\9:$T! Wy$ (:\}CJ{STګRG"Ys5Uo2Ǒ ᒟuAu̱6ǒ5nalsK]eR>eebXW5\`_|ڜKD /s19of*Dsu0Vꯒښ,(uex4 <[Qs\LqHsu01{|4WpHs7o$j~csJF7|ϑsaY˴R *ÚBT4C֘=>9djCa*UGTqFlJ wTs hYV;4`v!-zkYc4i)(undo2?o?AkyW!a& 9rcs5]}# sujYq 1 ?ԲHu"y}[m#&5TFLx=9C1/S|'3\k>s6:܏G&yI" 77gHzM' a*昗F;pO͟lJO*s&B[nW|d/a#&5Tw o.S昗FJn$/#õ!>nR>zeJ]#Cɰ>/0h /H g9nmR>Xq 72ϓeJ]шhY0ru..{I*V5_ :^M9Jֹ4h8B%wxas\LQwXz|4^jodz|$^7\砖%7gHzjWPwadmI.Yȵ!>b&BH$çxIsk~' o$Ʉ19e Rn~qۼUMw'T٥iQ2`ϑ8r]faI9X`acs.MCBr}a~KӐPȅQ4(}aocsՇ9d/4M*VMh~c9\`ae0 7\@s_^F~c90 csՇ9dV5hԿh;[J宽 *,(ib9yxQs`9J_Xl9so0W7\`_}E69\>ͩe/>0Ǒ ͬUn)C\#}^F`^Oc^C ^}q&yF,;9[Cͬ|4f sZЇ9Gcţ3,uN:|a,FTqoa}^K^mdv7uܚ#>9Us7f΁z48l 1}sH'3\`_}6mGOG.FT1/љg&xi19gr/B=gr\C0>!ucs,27Vnn[f_19grCuв9Gc*RNes0Id4Jqc5\\SO5\CM):9.&q$f8l 1\Ga,Zច\GW|po+n_uΓݚ㿭{ׯHB2ok~漌ϑQsux#IC@.>oۜ9js}>!k|+WNMNkN;4֬\&9 {6ͥlz!벺4\`_s>o#0_h>i0Hޓ7HsuCsՇmDD19_# s&CasaYwTRSʐT*~S %}+EcTkP*ZRBXencsՇ9d/QRE^k~cyxch{sz1 <~08r!\# sA/spQBmm>Ju5Ǒ T>Q2`ϑ8ra sL R}FC@.>oQψ9J_XMLP5\@sgVRJ)ib9 ը9:\}CNߖTRo<{|Xem>J WG.RWe&x#q,S,s0 ?2\`jsՇm>J WD  )7Ǒ ͬUn=7rkd IsK_s6KO9x$cs ?x 34B2|5\ ~po_j>d 9:|4V<:oiN,s5jf19\f!,:CȮx<}^ſ#뗯!u/b  y {6yi)csՇ9doɕUPYXP\&9r}a~u^Ku~!_rԯ<躯o~s\Gq1Ah<}a΁>W5/<_;S+/J_(uk*we~+T[o2h̸]XRɣ 9Jy8l 1 3%e!di2ϗq25{I_YWHHy4;GF!1G ~W>94Co[7o kYo=ėG zN%gHz&BoD39xsq3/5T*VŪX!#!k1U*V*<9xׂA۸X}dir$n'd n<9x[2*)[ w%<Ҝj4w#kpnG z>/?5z4ے5W5;{i/CJ& ZrWg.J{UT4\@secgO19`!jA$ Usuf?96\YlsA/sH'3GLsƊUucR>82)6Gk 1^7 30g!aD!kdq~7o8W=_s}f!W> pGj+^ד,_!>C|I%e`0`ƓٔC|ٔsJm~k^3M5A>3fsZЇp\q}2d6*aa/T_G1:ʰaVersion for: PMMI S-100 MODEM Starting at Port E0H aVersion for: Kaypro II Computer >>D>>>>:>>> > %>>A=Amrad 1-703-734-1387B=Ben Bronson 1-312-955-4493C=CBBS Pasadena 1-213-799-1632D=PMMI 1-703-379-0303E=Tech. CBBS 1-313-846-6127F=Ron Fowler 1-313-729-1905RG=Gasnet NASA gCߋˬr!WQshΆ;+/BtJ/Gɚi19ך/G/dZ0[S\}z0lМ QTyy4搳c _%0`!W !Wm~y4Q྘rvI)}?x25hxvܳ#ņF/0h4Ocِk\yc!qQӘCs6$!W^E9m~k GDZ#ņ4lHc!͡9w9XlHshΆ- {69C# #ņ4hse4Qr,Mrԯ%0\砖%cs0i194r}a~om~泐k5)1= V!}ՌC<܍ad(b7/La^W9 QdʀF7G2ݜ/"Sa}2wKwy3'QdʀvwЮRO2 ¼(2e0aͬk"So`.kAkmE^4|-Ți* _Lf%[flJO ykL1Iok~]>7D\uzErZ yp #,Fa^ _]ׂ]LׂA|^ 7Z0hfޑ8^ SkeЧ`N<)r +5}ׂA-ׂA/r4QsL"W]'Ys #jaʣ$kbC9rhp絺\Cn~g \\yVc?jY]ku=305}.m݅\ϪKo&)z)65 hQ[O8MY^H^FsJd Mݚkqo>/)>W/վHj^\<57/^n„K3,tzc 1-301-344-9156H=Dave Hardy 1-313-846-6127I=Wayne Hammerly 1-301-953-3753J=RBBS Pasadena 1-213-356-1034K=David Kozinn 1-216-334-4604L=Program Store 1-202-337-4694M=Kelly Smith 1-805-527-9321N=SuperBrain Sys 1-617-862-0781O=R.L.Plouffe 1-703-524-2549P=K.Petersen 1-313-759-6569RQ=Bruce Ratoff 1-201-272-1874R=Mark Pulver 1-312-789-0499S= T= U= V= W= ng!׹М v/'Ol=|vkI.mi00ad3~=K<ۭ9%~Wsr6L!#[sQn}?\USݚC71 ΅{YX#<ck0g-o=/+_GoFG.xae&Nasyza~2:M䣱193hq{9Gcŧ1?)bs0g9;js&NsJ߀m>~5\`>0\@s^?j5ESd=o<{|4ib9\?!9sQspae&x9a3\AB՜9: h^ ͬ+G7`̺f֝ YWa:h~hWDsnBoD39xsq3/5T*VŪX!#!k1U*V   X= Y= Z= !9"_71_7/ MODEM 7.95 - 12/04/82 pb>2.6/2͔:c6>2d6»>2d6:/6G:xC.D) ^HʀK++2f62g6:/6E>2f6 L >2g6 T Sʄ R ͫ)^:] 4>2.6/2UK a7a7!8"l6>2.6:c626>2d6i>2d6TV_ -G‰: ʉ>-:e6>2e6ʨ:x-:x-÷::x-:ʆ: i::ʭ:::i6/2i6:::V:]ʇHw:36)>ͧ#}]:6<26 <~ G~ >.G5:36:yͧKʇ!\Z :36~/Checksum error ͉~>ͧK7>2j626!w"6M!\7j2:f¸*6\ q"6!64ø!65¬!w"6:6A>@26!66!o6N!p6 6 !o6F#I~ #I~ "6+#I~ ):6<26#I~ ;)6 *67~ b#U#~ b"6!7p \ȇ!o ~¥#~+] q!e~w#~w\!\l q!u6B#6A#6Kl!l6\:\< S / ++File transfer unsuccessful++ S / ++ Transfer cancelled ++ 6# 6 #] 6#f / Enter file name to be transferred - C/R TO QUIT: n601:n6!c j2c c ! ~ T _# ͏ (G:G :O: yO  :9 J:f6G:g69 :G {9 +T T +T >2h62:;6² >26:j6ě Һ >B2;6>ͧ:] ʟP\ @>2X69:h6XSe >ͧe :2h6/ Sending # *V6r/ (͖/H)>ͧ:V6ͧ:V6/ͧ>2a6p!~ͧ,F2a6yͧ͡zͧ{ͧ EG:36ʖx:ͣ/H Recv'd, not ACK :X6<2X6= :36ʭͺ7C Can't send sector -- Aborting $:36ʖ/ Timeout on ACK Ö:36T_1_7K>ͧK> ͧ/ Routine cancelled >B2;6*V6#"V6}:;6ʖ\;>2DV/ ** Memory buffer :t/open ** :/closed ** :Qÿ%.1͏¤> -҆Ù*I͏~#(ññVÆT_G:7?7>2e6V%47:i6/Printer is on /Printer is off (G:g6?:f6FxG͎> V: VÙi+iGG͎:f6vx(> i: i:f6™> d:i6ʟX:xw#"l6 µ>:GͿ:::=>(͠ 2͠ 2 !8 :w#G2h:P>2!\ :\2!\ \Ä!\ \!\ \<72=Ɓo& ] 2h2|~# x>2X62Y6:36/ Awaiting # *V6#r/ (͖/H)} KڿWd7G:36Tx:ͣ/H recv'd, not SOH KT:h6>p:k6>p>Cͧ:X6<2X6 :36ʌͺ>C ++ Unable to receive block - Aborting ++ $:36/ ++ Timeout ++ :X6&or:T:X6:k6:h6/22:;6 >26͏( >B2;6:] ʟ. qKͼ:36c :;6c /File open, ready to receive :h6>n >Cͧ:36ʭ :h6• /CRC in effect í /Checksum in effect ڿ @í >:36 /Awaiting name NAK P>ͧ!65 *6\ q"6>ͧ7 y26!]~ͧ:36~1)K[1# >ͧ:36:QKʈ>uͧ:36{/Checksum error P>ͧ>ͧ!\Z :36ʴ/Awaiting file name ͉ڴ7y26!]K:36/Time out receiving filename \*}"_6!"}ɯ2h\<5CCan't open file$:36 5\2Z6y2]6!7"[6\*[6!o"[6:]6<2]6:]6O7\&! 2]6!7"[6ͧC Error writing file $++:VxG:q\\V7:ʀ%82Y6+yO:46ʟ:66¤:a6ʤ:56ʽ:66:a6yO͏(:36/Awaiting initial NAK K :w#G>(:b6@:, ͭ \ , G:X w#"l6 , >:G, , :b6@*l6:u :x :=i/ Memory save buffer full i:ʭ  ʺ x­ +6#}l&)>o8 a7 +| a7!a7X !\a7 q!c X !lX n :p6 e Ͱ ͺ » / ++File does not exist++ /Type "R" to return to modem Type "A" to re-enter name: _iG:A0 RS e     1 / ++File transfer completed++h62:36/++ Switching to Checksum mode ++ ++ Sender may not be CRC capable ++ :Y6b7:36T/ :Y6 ʔ/++ Framing error ++ :Y6ʷ/++ Overrun error ++ :Y6/++ Parity error ++ T:X6&or:ɯ2k6KڿWdWKڿWd/::36T/ ++ Bad sector # in Hdr Tz2U6>2a6p!KڿWdw,K:h6ʍQ2a6KڿWd:U6G:V6<KڿWdͲ|:36T/ ++ CRC error ++:36T/ ++ Checksum error ++ >ͧ:36&  C :36-/CRC request received 2h6:::6F:d6R:96:d6 C::d6C*"X"c"M:K:&2D<2)2,<2;2><2A]2/6 !06 Oµ2c6ÿA¿>2c66Û#¥ͫ)^:;6e:36> !>w# !]> ~ #x~ >./ / Transferred :\26!\X :62\!H6U6 q:6‰ / All transfers completed :16/ Press RETURN to disconnect  Œ/ Disconnected /[U>2k62j62.6/2:76^:U!l\q2|rt baud rate : F#/TCC - Toggle Checksum/CRC mode on receive : {#/TBR - Toggle backspace to rub conversion :#/TLC - Toggle 1) local command immediate 2) local command after : : $/TLF - Toggle send linefeed after carriage return :^$/TXO - Toggle XOFF testing in terminal mode file output è$/CAL - Dial number DSC - Disconnect BYE - Disconnect and reboot / The following are terminal text buffer commands: DEL - Delete memory buffer andde E - Terminal mode with echo L - Terminal mode with local echo For capturing text use T(or E or L) FILENAME.TYP and Start & Stop toggles described on subsequent screen. R - Receive CP/M file using Christensen Protocol S - Send CP/M file using Christensen Protocol Command is: R(or S) FILENAME.TYP R and S can use the following subcommands: B - Bulk transfer using wildcards (e.g. *.*) Q - Quiet mode (no messages to console) T - Return t#.1TXOt.:)1NUMa/:.)1SET.1NOLN):.6E/:6226D*l6U1WRT/1DEL.:ʏ)1DSC)1BYE)1CALڏ)> 2r6Ý):p6! 1/ڥ)zûͫ)(/++ Invalid Command ++ // << Disconnected >> Æ/ Goodbye... C@* 26b3:6_(:.6*/ Insert disk for drive :t6 O*AAҥ)_G/ Hit return when ready_ ]*: :u6 ʽ*0«*:v6 G>ʫ*x&G ʽ*X:(/++ Terminal mode file open ++ ++ Use WRT or DEL2h - - - ->(-ͣ>)-_> G> GOa{_ | |r{0-|ͣ}ͣͬ ڵ0G:;6<>2X6/ Multiple errors encountered. Type Q to quit, R to retry: _:iRQº/ctrl-@G~<-#0 >>G:;6>Q236*_7:~#qn6!\j2͔:]EHLG:xʞCTSRµ:;6/ ++ Bad Option ++ :m / Re-enter PRIMARY option and file name file NOL - Return to terminal mode - no loss of data in buffer WRT - Write memory buffer to disk file // Local Commands while in Terminal Mode : - Exit to command mode :&:$ - Disconnect :" - Send break :# - Change baud rate :7&: - Transmit logon :Y&: - Toggle printer > G: - Start copy into buffer : - Stop copy into buffer Start & Stop may be toggled as often as desired. A ":" at start of line indicates bo terminal mode after transfer V - View bytes transferred on console The single letter commands may also be used on the command line when the program is initially executed. // Three Letter Commands CPM - Exit from this program to CP/M DIR - List directory and space free (may specify drive) ERA - Erase file (may specify drive) LOG - Change default drive + user no. (specify drive + user) and reset disks. e.g. LOG A0, LOG B (user # unchanged) TIM - Set serial po before LOG command ++ (n6!\j2:] ʥ)\<_+/++ File not found ++ (\/File erased (/Enter speed from 0 (slowest) to 9 (fastest): Tʬ+_G/,0 ҥ)G> 2+(/Terminal mode file output delay is 0.:G G ,>0Gxo&r/ seconds per character / /Use 0-5 to give baud rate where:, 0=300, 1=1200, 2=2400, 3=4800, 4=96000, and 5=19.2k Baud. Enter value: Tʩ,_G/,0ҥ)2,("- -/Rate for the S mode time-to-send message is  only: n601z:m %>2>2.6>2.6:/ Enter New Baudrate: !e6_ ]:0O:OwOG#O!"O*yO}o|gҖ|g}!o‚"yy*T]*|>:.6^/ ** There may be text in the memory buffer ** ** It will be lost unless NOL or WRT commands are used ** :o:G}oM{K H>GG!H6U6 q!<606 q>2/2j6(!0/ Single Letter Commands H - Display this information ? - Display current settings T - Terminal mouffer is open. XOFF automatically used to stop input when writing full buffer to disk, XON sent to resume. : - Transfer ASCII file to remote ::' - Send local control character to remote ( - Next character will be used for local control / Default Drive: AG  M( >1G0G::.6z(0/ bytes of buffer free /COMMAND (H for Help): n601:p61CPM[1LOG*1DIR*1ERA!+1?=01TIM9,1TCC+-1TBRn-1TLCҺ-1TLF  set to -/Modem speed is 5:G:: ʥ):/2?-(V-/CRC mode set /Checksum mode set : ʥ): /2 ͂-(ʝ-/Backspace is rub /Backspace is backspace :ʥ):/2-(/Use ::- before local command  to send local command to remote : ʥ): /2 7.(/Linefeed : S./NOT /sent after carriage return :ʥ):/2͈.(:/XOFF testing :­./NOT /used in terminal mode file output :ʥ)N(:.6E/:b7 E/a7 >2.6/2>3w#3:3_@w# . !3w#!3~*E3#73H3Z3~*V3#J3Z36?#Z3n6!\j2!4X :l24:m ̺442525444~3~3#3qq/ . >2544:5ʡ3:5<25:ij4>25á3/NO FILE:4'4=_##~2 5#~25##^#V"5*5#V4W+}g4zQ4M4i`: 5w4)=r4:4…4<@24/ DRIVE HAS r/K BYTES FREE /| >? !4w#4!m4 q_!;MACROS LIBRARY FOR CP/M ROUTINE SIMULATION 11/15/82 ;CONTAINS: ; 1) INBUF - DUPLICATES READ BUFFER ROUTINE ; SAME AS CP/M FUNCTION 10, BUT DOES ; NOT USE CTRL-C (REASON FOR ROUTINE). ; DOES ALLOW CONTROLS U, R, E, AND H (BACKSPACE). ; OUTPUTS BELL IF INPUT GREATER THAN BUFFER ; 2) CMDLINE - PARSES A CP/M BUFFER INTO FORMAT SAME AS ; CP/M COMMAND LINE. ; 3) INLNCOMP - COMPARES STRINGS FOLLOWING CALL TO 'ILCOMP' ; TO STRING ADDRESSED BY DE REGS. ; 4) MFACCESS - M!a7X !8"l6(:.6E/:b7 E/*l6Ϳ >2.6/2!a7X !8"l6(/++ No File Open ++ (!0/ Library of Phone Numbers of Remote Systems !07/##q/##q/ /ë/> > > >$ 7::(F#//7/HIT any KEY to CONTINUET0_!0:,0Y> G > G50!0/ Current Settings :?-:x0,: ͂-7.-/Terminal mode file buffer is :.6ʵ0/in/active Unused portion of buffer is 0/ bytes ͈.+:(ͿG*l67 KMDM795 is the public domain MODEM795 program modified to run on the KAYPRO II computer. A few modifications were added, including the ability to set different baud rates using the TIM instruction. Possibilities are 300, 1200, 2400, 4800, 9600, and 19,200 bits/sec. The higher speeds may be useful if you have the KAYPRO wired directly to another computer. For example, I run high speeds with my OSBORNE I, and my dealer is running 19,200 between a KAYPRO and XEROX 820. /FILE OPEN - *_6r/ (͖/ HEX) RECORDS SEND TIME: :_!5~*_65&r/ MINS, !5:_~55555&r/ SECS AT 5/USE CTL-X TO CANCEL  1J3&!O)|5g}o5G\l&5}o|g>o!6:_ /0 BAUD 30$120$240$480$960$19,20$ADOQRSVTL01ADOQRSVTL01B778ULTI-FILE FILE ACCESS ROUTINE FROM ; CP/M USERS GROUP. ; 5) SENDTIME - SHOWS THE APPOROXIMATE TIME TO SEND A FILE ; FOR SEVERAL DIFFERENT BAUD RATES. ; 6) PRTBAUD - SHOWS BAUD RATES SET FOR TIME TO SEND FILE ; MESSAGE ; 7) DIRLIST - LISTS DIRECTORY, AND GIVES FREE SPACE ; ON REQUESTED DRIVE. INBUF MACRO ;NO PARAMETERS USED. LOCAL START,INBUFO,INBUFA,DELETE,NODEL,ALERT LOCAL INBUFLT,CLEAR,CLEARL,INBUFR,RETYPE,BKSPC,PCRLF LOCAL CONIN,CONOUT,CONIN1,CONOUT1,NOUCASE,CTLRLP ?>oxgrSRTEHL~,1$1#1>#&17#2կ2 1{1{1ʱ111 >1G#4+~#1pxU2#>1#G~wښ1+xF6 ʡ1ʟ1>14>1>U2> U2>U2>1>#U2> U2> U241G>#U2> U2> U2x>1U21>1>U25>1> U2> U2>1> U2> U2F##> w#2C2!2;2a72{72_*M2*a2* O2#^#6 3!3 2 ʢ2 !3 2 ²2â2 2 3!3 2 !3#53 536# > 3>3 > 3 There are three screens of help information, which you will see how to obtain. A known bug is that the time to send figures are not correct. Perhaps someone could fix this; the necessary routines are in the LIB file. Brown Grier (312) 690-0359   LOCAL CONSTAT,CONST1,CONINLP PUSH PSW PUSH H PUSH B PUSH D ;DE REGISTERS MUST BE PUSHED LAST START CALL CLEAR ;CLEAR THE BUFFER AREA POP D ;GET ADDRESS OF BUFFER ON RETRIES PUSH D ;RESTORE STACK XRA A INX D ;ADDRESS COUNT FIELD STAX D ;INITIALIZE WITH A ZERO IN COUNT BYTE INX D XCHG ;ADDRESS FIRST BUFFER BYTE WITH HL INBUFA CALL CONIN CPI 0DH ;IS IT A RETURN? JZ INBUFR ;IF SO, THEN RETURN CPI 7FH ;IS IT A DELETE? JZ DELETE CPI 8 ;CTRL-H WILL BACKSPACE.. JZ DELE INBUFR MVI A,0DH CALL CONOUT MVI A,0AH CALL CONOUT POP D POP B POP H POP PSW RET CLEAR POP D ;ACCOUNTS FOR CALL POP H ;ADDRESS BUFFER IN HL PUSH H ;RESTORE.. PUSH D ;..STACK MOV B,M ;SAVE MAXIMUM IN B INX H ;POINT TO FIRST.. INX H ;..BUFFER BYTE. MVI A,20H CLEARL MOV M,A INX H DCR B JNZ CLEARL RET CONIN PUSH H ! PUSH D ! PUSH B CONINLP CALL CONSTAT ORA A JZ CONINLP CALL CONIN1 CPI 61H ;CHANGE TO UPPER.. JC NOUCASE ;..CASE SINCE CP/M.. CPI NING OF BUFFER. XCHG ;RESTORE BUFFER POINTER TO HL DCX H ;POINT TO LAST BYTE INPUTTED MOV A,B ;GET BACK EITHER 7FH OR 08H MOV B,M ;GET CHARACTER BEING DELETED MVI M,20H ;RESTORE BLANK CPI 8 JZ BKSPC CPI 7FH ; @ 7.5 JZ BKSPC0 ; @ 7.5 JMP INBUFA ;GET NEXT CHARACTER NODEL INR M ;DON'T LEAVE COUNT NEGATIVE XCHG ;RESTORE POINTER TO HL JMP INBUFA BKSPC0 MVI A,08H BKSPC CALL CONOUT ;TRUE ERASE IF 08H MVI A,20H CALL CONOUT MVI A,8 CALL CONOUT JMP INBUFA INBUFO MVI A,'USH H CALL INIT ;FILLS FCBS WITH BLANKS AND NULLS XCHG ;GET START OF COMMAND LINE IN HL. INX H ;ADDRESS # BYTES IN CMD LINE. MOV E,M ;LOAD DE PAIR WITH # BYTES. MVI D,0 INX H DAD D ;POINT TO BYTE AFTER LAST CHAR.. MVI M,0DH ;..IN CMD LINE AND STORE DELIMITER. POP H ;RESTORE HL AND DE. POP D PUSH D PUSH H INX D ;ADDRESS START OF COMMAND. INX D CALL DRIVE NAME1 MVI C,8 ;TRANSFER FIRST FILENAME TO FCB. CALL TRANS CPI 0DH JZ DONE CPI 20H ;IF SPACE, THEN STATE ;..OVER DELETED CHAR. CPI 'U'-40H ;IS IT A CTRL-U JZ INBUFO ;OUTPUT # CR LF AND START OVER CPI 'R'-40H ;CTRL-R RETYPES LINE JZ RETYPE CPI 'E'-40H JZ PCRLF CPI 20H ;NO CONTROL CHARACTERS OTHER.. JC INBUFA ;..THAN ABOVE ALLOWED. MOV B,A ;SAVE INPUTTED CHARACTER XCHG ;SAVE HL IN DE POP H ;GET ADDRESS OF BUFFER IN HL PUSH H ;RESTORE STACK INX H ;ADDRESS COUNT BYTE INR M ;INCREASE COUNT BYTE DCX H ;ADDRESS MAXIMUM MOV A,M ;PUT MAXIMUM IN A INX H ;ADDRESS COUNT CMP7BH ;..DOES THE SAME. JNC NOUCASE ANI 5FH NOUCASE POP B ! POP D ! POP H RET CONIN1 LHLD 1 LXI D,6 DAD D PCHL CONSTAT PUSH H ! PUSH D ! PUSH B CALL CONST1 POP B ! POP D ! POP H RET CONST1 LHLD 1 LXI D,3 DAD D PCHL CONOUT PUSH H ! PUSH D ! PUSH B ! PUSH PSW CALL CONOUT1 POP PSW ! POP B ! POP D ! POP H RET CONOUT1 LHLD 1 LXI D,9 DAD D MOV C,A PCHL ENDM CMDLINE MACRO ;NO PARAMETERS USED ;LOADS A COMMAND LINE ADDRESSED BY DE REGISTERS (MAX # CHARACTERS #' CALL CONOUT MVI A,0DH CALL CONOUT MVI A,0AH CALL CONOUT JMP START RETYPE POP D PUSH D INX D ;POINT TO CURRENT NUMBER.. LDAX D ;..OF CHARACTERS. MOV B,A MVI A,'#' CALL CONOUT MVI A,0DH CALL CONOUT MVI A,0AH CALL CONOUT MOV A,B ;TEST IF ZERO INPUT ORA A JZ INBUFA CTLRLP INX D LDAX D CALL CONOUT DCR B JNZ CTLRLP JMP INBUFA ALERT MVI A,7 CALL CONOUT DCR M XCHG JMP INBUFA PCRLF MVI A,0DH CALL CONOUT MVI A,0AH CALL CONOUT JMP INBUFA RT OF.. JZ NAME2 ;..SECOND FILENAME. TYPE1 POP H ;FILETYPE MUST BE AFTER.. PUSH H ;..EIGHTH BYTE OF NAME. LXI B,9 DAD B MVI C,3 ;TRANSFER TYPE OF FIRST FILE CALL TRANS CPI 0DH JZ DONE NAME2 LDAX D ;EAT MULTIPLE SPACES.. CPI 20H ;..BETWEEN NAMES. JNZ NAME2C INX D JMP NAME2 LDAX D CPI 0DH ;TEST IF FIRST NAME.. JZ DONE ;..ONLY AND THEN SPACE. NAME2C POP H ;SECOND NAME STARTS IN 16TH BYTE. PUSH H ;POINT HL TO THIS BYTE. LXI B,16 DAD B CALL DRIVE MVI C,8  M ;COMPARE COUNT TO MAXIMUM JC ALERT ;IF MAXIMUM, RING BELL AND WAIT FOR CR XCHG ;RESTORE BUFFER POINTER TO HL MOV M,B ;PUT INPUTTED CHARACTER IN BUFFER MOV A,B ;OUTPUT IT CALL CONOUT INX H ;BUMP POINTER JMP INBUFA ;GET NEXT CHARACTER DELETE XCHG ;SAVE BUFFER POINTER IN DE POP H ;ADDRESS BEGINNING OF BUFFER PUSH H ;RESTORE STACK INX H ;ADDRESS COUNT FIELD MOV B,A ;SAVE DELETE CHAR - 7FH OR 08H MOV A,M SUI 1 ;DECREASE COUNT MOV M,A JC NODEL ;DON'T DELETE PAST BEGIIN LINE ;IN DE, NUMBER OF CHARS IN LINE IN DE+1, LINE STARTS IN DE+2) INTO FCB ;ADDRESSED BY HL REGISTERS. THE FCB SHOULD BE AT LEAST 33 BYTES IN LENGTH. ;THE COMMAND LINE BUFFER MUST HAVE A MAXIMUM LENGTH OF AT LEAST ONE MORE ;THAN THE GREATEST NUMBER OF CHARACTERS THAT WILL BE NEEDED. LOCAL CMDLINE, DEFDR, DONE, DRIVE, FILL1, FILL, FILL2, INIT, INITL1 LOCAL INITL2, INITL3, INITL4, NAME1, NAME2, SCAN, TRANS, TSTNAM LOCAL TSTTYP, TSTTYPL, TYPE1, TYPE2, NAME2C PUSH PSW PUSH B PUSH D P  CALL TRANS CPI 0DH JZ DONE TYPE2 POP H ;SECOND TYPE STARTS IN 25TH BYTE. PUSH H LXI B,25 DAD B MVI C,3 CALL TRANS DONE POP H PUSH H INX H ;POINT TO FIRST CHAR OF FIRST NAME IN FCB. CALL SCAN ;CHECK FOR * (AMBIGUOUS NAMES). POP H PUSH H LXI B,17 ;POINT TO FIRST CHAR OF SECOND NAME IN FCB. DAD B CALL SCAN POP H POP D POP B POP PSW RET ; =============>>> SUBROUTINES <<=============== INIT PUSH H ;INITIALIZES FCB WITH 1 NULL (FOR FIRST DRIVE),.. PUSH B  INX H INX D JMP ILCOMPL NOTSAME MVI A,0 ;IF NOT SAME, FINISH THRU.. NSLP INX H ;..STRING SO RETURN WILL.. CMP M ;..GO TO INSTRUCTION AFTER.. JNZ NSLP ;..STRING AND NOT REMAINDER OF STRING. STC SAME POP D INX H ;AVOIDS A NOP INSTRUCTION.. XTHL ;..WHEN RETURNING. RET ENDM MFACCESS MACRO ;NO PARAMETERS USED LOCAL MOVE, CPM, MFNAME, MFN01, MFN02, MFFIX1, MFREQ LOCAL MFCUR, MOVER, SRCHF, SRCHN, STDMA, BDOS, FCB, FCBEXT LOCAL FCBRNO ;MFFLG1 IS NOT SET LOCAL BECAUSE IT CE C-REG IS LESS THAN ZERO, KEEP READING.. MOV M,A ;..CMD LINE BUT DO NOT TRANSFER TO FCB. INX H JMP TRANS SCAN MVI B,8 ;SCAN FILE NAME ADDRESSED BY HL. TSTNAM MOV A,M CPI '*' ;IF '*' FOUND, FILL IN REST OF FIELD.. JZ FILL1 ;..WITH '?' FOR AMBIGUOUS NAME. INX H DCR B JNZ TSTNAM JMP TSTTYP FILL1 CALL FILL TSTTYP MVI B,3 ;SCAN AND FILL TYPE FIELD FOR NAME.. TSTTYPL MOV A,M ;..SPECIFIED ABOVE. CPI '*' JZ FILL2 INX H DCR B RZ JMP TSTTYPL FILL2 CALL FILL RET FILL CALL BDOS POP H POP D POP B ENDM ; ;------------------------------------------------ ; ; MULTI-FILE ACCESS SUBROUTINE ; ;THE ROUTINE IS COMMENTED IN PSEUDO CODE, ;EACH PSEUDO CODE STATEMENT IS IN <<...>> ; MFNAME: ;<> CPM STDMA,80H XRA A ! STA FCBEXT ;<> LDA MFFLG1 ! ORA A ! JNZ MFN01 ; <> MVI A,1 ! STA MFFLG1 ; <> MOVE FCB,MFREQ,12 ;SAVE ORIG REQ LDA FCB ! STA MFCUR ;SAVE DISK IN CURR FCB  ;..11 BLANKS, 4 NULLS, 1 NULL (FOR 2ND DRIVE),.. MVI M,0 ;..11 BLANKS, AND 4 NULLS. INX H MVI B,11 MVI A,20H CALL INITFILL MVI B,5 MVI A,0 CALL INITFILL MVI B,11 MVI A,20H CALL INITFILL MVI B,4 MVI A,0 CALL INITFILL POP B POP H RET INITFILL MOV M,A INX H DCR B JNZ INITFILL RET DRIVE INX D ;CHECK 2ND BYTE OF FILENAME. IF IT.. LDAX D ;..IS A ":", THEN DRIVE WAS SPECIFIED. DCX D CPI ':' JNZ DEFDR ;ELSE ZERO FOR DEFAULT DRIVE ('INIT' PUT ZERO) LDAXMUST BE RESET ;IN MAIN MODEM PROGRAM ON AN ABORT ; ; MUST BE ASSEMBLED BY "MAC" ; ;MULTI-FILE ACCESS SUBROUTINE. ALLOWS PROCESSING ;OF MULTIPLE FILES (I.E. *.ASM) FROM DISK. THIS ;ROUTINE BUILDS THE PROPER NAME IN THE FCB EACH ;TIME IT IS CALLED. THIS COMMAND WOULD BE USED ;IN SUCH PROGRAMS AS MODEM TRANSFER, TAPE SAVE, ;ETC IN WHICH YOU WANT TO PROCESS SINGLE OR ;MULTIPLE FILES. ; ;THE FCB WILL BE SET UP WITH THE NEXT NAME, READY TO ;DO NORMAL PROCESSING (OPEN, READ, ETC.) WHEN ROUTINE  MVI M,'?' ;ROUTINE TRANSFERS '?'. INX H DCR B JNZ FILL RET ENDM INLNCOMP MACRO ;NO PARAMETERS USED ;IN-LINE COMPARE. COMPARES STRING ADDRESSED BY DE-REG TO STRING ;AFTER CALL (ENDS WITH ZERO). RETURN WITH CARRY SET MEANS STRINGS ;NOT THE SAME. ALL REGISTERS EXCEPT A-REG ARE UNAFFECTED. LOCAL ILCOMPL, SAME, NOTSAME, NSLP XTHL ;POINT HL TO 1ST CHAR. PUSH D ILCOMPL MOV A,M ;HL POINTS TO IN-LINE STRING. ORA A ;END OF STRING IF ZERO. JZ SAME LDAX D CMP M JNZ NOTSAME  ; <> MOVE MFREQ,FCB,12 CPM SRCHF,FCB ;<> JMP MFN02 MFN01: ; <> MOVE MFCUR,FCB,12 CPM SRCHF,FCB ; <> MOVE MFREQ,FCB,12 CPM SRCHN,FCB ;<> MFN02: ;<> INR A ! STC ! JNZ MFFIX1 ! STA MFFLG1 ! RET ;FIX BY M.Z. MFFIX1: ;<> DCR A ! ANI 3 ! ADD A ADD A ! ADD A ! ADD A ! ADD A ADI 81H ! MOV L,A ! MVI H,0 PUSH H ;SAVE NAME POINTER MOVE ,MFCUR+1,11 ;<> POP H ! MOVE ,FCB+1,11 ;<> XRA A ! STA FCBEXT ! STA FCBRNO ;FIX BY M.Z. ;<> RET ; ;MULTI-FILE ACCESS WORK AREA ; MFFLG1 DB 0 ;1ST TIME SW MFREQ DS 12 ;REQ NAME MFCUR DS 12 ;CURR NAME ;------------------------------------------------ ; ;MOVE SUBROUTINE ; MOVER MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ; ;EQUATES USED BY MULTI-ACCESS SUBROUTINE ; SRCHF EQU 17 SRCHN EQU 18 STDMA EQU 26 ;FIX BY M.Z. BDOS EQU 5 FCB EQFTHL MOV A,L RAR MOV L,A ORA A ;CLEAR THE CARRY MOV A,H RAR MOV H,A RNC MVI A,80H ORA L MOV L,A RET ENDM PRTBAUD MACRO LOCAL BAUDLST LXI H,BAUDLST MVI D,0 LDA MSPEED ;GET BAUD RATE CODE ADD A ;X2 ADD A ;X4 MOV E,A DAD D ;POINT TO CORRECT RATE XCHG MVI C,PRINT CALL BDOS CALL ILPRT DB '0 baud',CR,LF,0 RET BAUDLST DB ' 30$' DB '120$' DB '240$' DB '480$' DB '960$' DB '19,20$' ENDM DIRLIST MACRO LOCAL DIRLP,PRTNAME,MULTIPLIER POP H ;GET REMAINDER CALL MULHA ;MULTIPLY THE H X A CALL SHFTHL CALL SHFTHL CALL SHFTHL CALL SHFTHL MVI H,0 CALL DECOUT ;PRINT THE SECONDS PORTION CALL ILPRT DB ' secs at ',0 CALL BAUDPRT CALL ILPRT DB 'Use CTL-X to Cancel',CR,LF,0 RET BTABLE DB 5,13,19,25,29,49,0 ;RECORDS/MIN FOR 110-1200 BAUD SECTBL DB 192,74,51,38,33,20,0 ;----> DIVHL-A: DIVIDES HL BY VALUE IN A, ; UPON EXIT: L=QUOTIENT,H=REMAINDER DIVHLA PUSH B MVI B,8 ;SHIFT FACTOR TO B MO'.',' ',' ', 0 ;8 SPACES, PERIOD, 3 SPACES, 1 SPACE MVI A,0FFH STA NAMEGD NEXTSR LXI D,SRCHFCB MVI C,SRCHN ;DO NEXT SEARCH CALL BDOS CPI 0FFH JZ DIRDONE PUSH PSW LDA NAMEGD ORA A JZ DIRLP LDA NAMECT INR A STA NAMECT ANI 03H ORA A CZ CRLF CNZ FENCE MVI A,0 STA NAMEGD JMP DIRLP NOFILE CALL ILPRT DB 'NO FILE',0 ;DETERMINE STORAGE REMAINING DIRDONE LDA SRCHFCB ORA A JZ DEFLT DCR A MOV E,A MVI C,SELDSK CALL BDOS DEFLT MVI C,GETPARM ;current disk U 5CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 ENDM SENDTIME MACRO ;NO PARAMETERS USED ; SHOWS THE TIME TO SEND A FILE AT VARIOUS BAUD RATES LOCAL BTABLE,SECTBL,DIRHLA,DIV2,DIV3 LOCAL MULHA,MULLP,SHFTHL CALL ILPRT ;PRINT: DB 'File Open - ',0 LHLD RCNT ; GET RECORD COUNT. CALL DECOUT ;PRINT DECIMAL NUMBER OF SECTORS CALL ILPRT DB ' (',0 CALL DHXOUT ;NOW PRINT SIZE IN HEX. CALL ILPRT DB ' Hex) Records',CR,LF DB 'Send Time: ',0 LDA MSPEED ;NOFILE,DIRDONE,QSTMARK,QSTLP,PRNTNAME,NEXTSR LOCAL MOVENAME,GETADD,SRCHFCB,NAMECT,PRNTHD,DRNAME LOCAL FENCE,GSPBYT,GSPLUP,NOTFRE,ENDALC,FREKLP,PRTFREE LXI D,CMDBUF ;PUT COMMAND LINE IN FCB LXI H,5CH CALL CPMLINE LXI H,SRCHFCB CALL INITFCBS LDA 6CH ;GET DRIVE # STA SRCHFCB LDA 6DH CPI 20H ;IF BLANK GET ALL NAMES PUSH PSW CZ QSTMARK POP PSW CNZ MOVENAME ;ELSE MOVE NAME INTO FCB LXI D,80H MVI C,STDMA CALL BDOS XRA A STA NAMEGD STA NAMECT ;CR AFTER 4 NAMES LXI D,SV C,A ;DIVISOR TO C DIV2 XRA A ;CLEAR CARRY FLAG AND ACCUMULATOR DAD H MOV A,H SUB C JM DIV3 ;DONT BORROW ON NEG RESULTS MOV H,A MOV A,L ORI 1 ;BORROW 1 MOV L,A DIV3 DCR B JNZ DIV2 POP B RET ;----> MULHA: MULTIPLY THE VALUE IN 'H' BY THE VALUE IN 'A' ; RETURN WITH ANSWER IN 'HL' MULHA MOV B,A ;PUT LOOP COUNT IN B MVI D,0 MOV E,H MOV L,H MVI H,0 MULLP DCR B RZ DAD D JMP MULLP RET ; SHIFT 'HL' REGISTER PAIR ONE BIT TO THE RIGHT SHparameter block CALL BDOS INX H ! INX H MOV A,M ;get block shift factor STA BSHIFTF INX H ;bump to block mask MOV A,M ;get it STA BMASK INX H ! INX H MOV E,M ;get max block number INX H MOV D,M XCHG SHLD BMAX ;put it away MVI C,GETALC ;address of cp/m allocation vector CALL BDOS XCHG ;get its length LHLD BMAX INX H LXI B,0 ;initialize block count to zero GSPBYT PUSH D ;save allocation address LDAX D MVI E,8 ;set to process 8 blocks GSPLUP RAL ;test bit JC NOTFGET THE SPEED INDICATOR LXI D,0 MOV E,A ;SET UP FOR TABLE ACCESS LXI H,BTABLE ;POINT TO BAUD FACTOR TABLE DAD D ;INDEX TO PROPER FACTOR MOV A,M ;FACTOR IN A LHLD RCNT ;GET # OF SECTORS CALL DIVHLA ;DIVIDE HL BY VALUE IN A (SECTORS/MIN) PUSH H MVI H,0 CALL DECOUT ;PRINT THE MINUTES PORTION CALL ILPRT DB ' mins, ',0 LXI H,SECTBL ;POINT TO DIVISORS FOR SECONDS LXI D,0 ; CALCULATION LDA MSPEED ;GET INDEX FOR BAUD RATE MOV E,A DAD D ;INDEX INTO TABLE MOV A,M ;GET RCHFCB MVI C,SRCHF ;DO FIRST SEARCH CALL BDOS CPI 0FFH JZ NOFILE PUSH PSW DIRLP POP PSW CALL GETADD LXI D,15 ;OFFSET FOR RECORD COUNT DAD D MOV A,M ORA A JZ NEXTSR ;NO LIST IF FILE IS ZERO LENGTH LXI D,-5 DAD D ;POINT TO $SYS ATTRIB BYTE MOV A,M ANI 80H JNZ NEXTSR ;NO LIST IF $SYS FILE LXI D,-10 DAD D ;POINT TO BEGINNING OF NAME INX H ;POINT TO FIRST LETTER LXI D,PRNTNAME MVI B,8 CALL MOVE INX D MVI B,3 CALL MOVE CALL ILPRT PRNTNAME DB ' ',  RE INX B NOTFRE MOV D,A ;save bits DCX H MOV A,L ORA H JZ ENDALC ;quit if out of blocks MOV A,D ;restore bits DCR E ;count down 8 bits JNZ GSPLUP ;do another bit POP D ;bump to next count.. INX D ;..of allocation vector. JMP GSPBYT ;process it ENDALC POP D ;clear alloc vector pointer from stack MOV L,C ;copy block to hl MOV H,B LDA BSHIFTF ;get block shift factor SUI 3 ;convert from sectors to thousands (k) JZ PRTFREE ;skip shifts if 1k blocks FREKLP DAD H ;multiply bloc 224-6409Q= R= S= T=Tech CBBS 1-313-846-6127U= V=Vanc BC CBBS 1-604-687-2640W= X= Y= Z= !9""1"ͺ MODEM7 as of 12/18/80 Originally Written by Ward Christensen Revised by Jim Willing . $ ͆>2!/2͸:!X>2:!G:xC M drive BMASK DS 1 ;sec/blk - 1 BSHIFTF DS 1 ;number of shifts to multiply by sec/blk ENDM   :!; >2":!ğ C >B2!>:] cPGj ͪ2!ͭX K >j :!’ >2"ͳ ҝ >B2!:] ã u Ͳ$:! :! ͳFILE OPEN, READY TO RECEIVE Xͪy pyͼ:! ͳAWAITING NAME NAK Po>!"58 *"\ ""? >7 !]~:!~ U #G >:!Qʬ >u:!ʟ ͳCHECKSUM ERROR Po>@ >!\ :! ͳAWAITING FILE NAME ͈  7!]# :! ks by k per block DCR A JNZ FREKLP PRTFREE PUSH H LDA SRCHFCB ;IF NO DRIVE, GET ORA A ;LOGGED IN DRIVE JNZ PRNTHD MVI C,CURDSK CALL BDOS INR A PRNTHD ADI 'A'-1 STA DRNAME CALL ILPRT DB CR,LF,'Drive ' DRNAME DB ' has ',0 POP H CALL DECOUT ;in modem7, # of free bytes in hl. CALL ILPRT FREEMSG DB 'K bytes free',CR,LF,0 RET ;SUBROUTINES FENCE CALL ILPRT DB '| ',0 RET QSTMARK MVI A,'?' ;IF BLANK IN FCB, PUT IN 11 ?'s MVI B,11 LXI H,SRCHFCB+1 QSTLP MOV M,A >2!:!ET,S Rx Dʜ:!k:] J>2!/2kͲͽ""!+"}">2!ʷ'ʜkG:xʝ̯ʷ´:!ʷ:/2÷  kk:w#"}"G:x >::= kk> F2F2u͇!+@:w#@:w#> :S V i xV6#}l&)>o+ͱ"ͱ+|Š"!"!\" !!l:! `jjͳ ++FILE*prrsA=Atlanta CBBS 1-404-394-4220B=Chicago CBBS 1-312-545-8086C=Calamity Clif 1-312-234-9257D=Detroit CP/M* 1-313-588-7054E=Eight BBS 1-408-296-5799F= G= H= I= J= K= L= M= N= O=Oregon CBBS 646-5510P=Portland ABBS TIME OUT RECEIVING FILENAME \ ʆ G w:!~>#}\ :!yʆ !\ :!} ͳCHECKSUM ERROR ͈ } >Wm7>2!2" !*""Q !\"͋ :f¼ *"\ ""!"4ü !"5° !*"":"A>@2"!"6!!N!! 6 !!F#M ~  #M ~  ""+#M ~ - :"<2"#M ~ ? - 6 *""~ f #Y #~ f ""!"p \ȇ!o ~© #~+] !e~w#~w\!\l !u6B#6A#6Kl!l6\:\ INX H DCR B JNZ QSTLP RET MOVENAME LXI H,6DH LXI D,SRCHFCB+1 MVI B,11 CALL MOVE ;MOVE IN MAIN PROGRAM RET GETADD ANI 03H ;GET MOD4 FOR CP/M 1.4 ADD A ! ADD A ! ADD A ;ADD 32 ADD A ! ADD A MOV E,A MVI D,0 LXI H,80H ;ADD DMA OFFSET DAD D RET ;PARAMETERS USED GETALC EQU 27 ;cp/m function for allocation vector address GETPARM EQU 31 ;current disk parameters address ;UNINITIALIZED STORAGE SRCHFCB DS 33 NAMEGD DS 1 NAMECT DS 1 BMAX DS 2 ;highest block number on DOES NOT EXIST++ ͳTYPE "R" TO RETURN TO MODEM TYPE "A" TO RE-ENTER NAME: '1ARsʏʶ|ʏrͳ ++FILE TRANSFER COMPLETED++ ͳ ++FILE TRANSFER UNSUCCESSFUL++ ͳ ++ TRANSFER CANCELLED ++ 6# 6 # 6#ͳ ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: !T!!͋!~͛ʕ'# œ  ͳ ++FILE TRANSFER UNSUCC  'G:x ̯  < 2h: T >2 !\  :\2 ! \ \È ! \ \! \ \<7‘ 2 =Ɓo&  ] 2h2|w#~w\!\l ~# x ɯ2!:!ͳAWAITING #:!<:ڣm7G:!*:!Bx:ͳH RCD, NOT SOH B>:!<2! :!i:!oQ ͼ++ UNABLE TO RECEIVE BLOCK -- ABORTING ++ $:!ʱ:!Bͳ++ TIMEOUT ++ :!:BڣWڣ/:!:!Bͳ++ BAD SY!!~l!!#͉ͳ WAITING FOR DIAL TONE >!d ͳ ++NO DIAL TONE AFTER 10 SECONDS++ 7 !."͙͐͐ ʢy> > > >$ "ͳENTER NUMBER OR LIBRARY LETTER - TYPE C/R WHEN FINISHED, CTRL-X CANCELS WHILE DIALING: !T:!ʲ!!A~7 Q*!.{L~X BX:!_!!~[" ʲ͸'ʲ#͘X:*!͘>'$ʝ$¥͉0:> O:'$$>!$>!$ >:!:!:!-:!2:!2O 6 :!U:!oͳAWAITING INITIAL NAK Wmmo*" "+":: 2"<2 2<2%2(<2+]2! !! 6ÿ#!:!2!:!L:!%!]ͳ TRANSFERRED :\2"!\:"2\!!!:" x >2!2!/2:!h:!ʈͳ ALL TRANSFERS COMPLETED :!ͳ ++PRESS RETURN TO DISCONNECT++  ͳ ++DISCONNECTED++ ͉:!k::!N :! Command: !T!7CPM7DIR7RET>*}"k:O7DSCҜ7WRT7XPR7DEL:ʆ7CALچ>2!Ô:!!2&:͉ͳ ++DISCONNECTED++ ̓ :" "ͱ>2!/2!":!:" *}"n͇ͨ>2!/2!":/2F#1'7SRTE~PH#9>#J7#/կ? ʟʟ bG#4+~# pxv#b#G~wڽ+xF6 xvb4bv> v>vb>#v> v> vXG>#v> v> vxbECTOR # IN HDR Bz2!>2!!ڣw,"Q2!ڣQ:!G:!s:!ʚͳSEND # :!:>:!:!/>2!!~,·2!y9mG:!x:ͳH RCD, NOT ACK :!<2! :!:!Q7CAN'T SEND SECTOR -- ABORTING $:!ͳTIMEOUT ON ACK :!c:!'1"p>}> ͳROUTINE CANCELLED >B2!:!<2!:!\<ͳFILES EXISTS -- TYPE 'Y' TO ERASE: '1Y\!͘͘$'* 7Ü>?*>!>*͘>]! ͉:-³ͳ No answer after time-out. Redial? (Y/N/C): '1NYʳCY/2-2͘Yͳ Connection established - Select options: >!!\͋͸:]EMG:x!CTʓSQR8:!Qͳ ++Bad Option++ W:m ͳ Re-enter PRIMARY option and file name only: !T:m ©>2>2!/>2!:ͳEnter New Baudrate: !e6' 0:wO#!!!!! N :e > 2eN'4>_,>*:!>?:!>!-B%B!:e >4:e>4e! d0ڟ:ҟ0DM)) )oƒ${hd|/W}/_! =ږxy++ INVALID BAUD RATE ++$!l\2|2h    >(:>)_> > Oa{_C L0:!Z<ɯ2!ͳMULTIPLE ERRORS ENCOUNTERED. TYPE Q TO QUIT, R TO RETRY: '1RQQ~#ô ͳ:!>Q2!m~#:ȯ2-vb>v5b> v> vb> v> vF##> w#8dB\aX{X_*n*͂* O #^#6 0 B   B    0 B  B #V  V 6# > ) >)  > ) >) w#) :@ _@w# . B w#B ~*f #X i { ~*w #k { 6?#{ !!\͋!z!:l2z!:m +!9!T!2!z!!E!~ !~ !# ͳ | :!ͳ No file specified \<ERROR - CAN'T MAKE FILE DIRECTORY MUST BE FULL $\<‚CAN'T OPEN FILE$:!Ž:!ͳFILE OPEN - EXTENT LENGTH: :k:>H\<CAN'T CLOSE FILE$:!=2!*!"!:!7"\/=>++ FILE READ ERROR ++$! yD>2!y2!!""!*!!"!:!<2!:!O"\¤! y2!!""!ERROR WRITING FILE $:xG:W 7O:!! >2 /2!:ͳ WRT - Write file to disk (from terminal mode) DEL - Erase present file (from terminal mode) RET - Return to terminal mode with no loss of data :ͳDSC - Disconnect CAL - Dial number ͳXPR - Toggle expert mode (Menu on/off) DIR - List directory (may specify drive) CPM - Exit to CP/M S - Send CP/M file R - Receive CP/M file T - Terminal mode (optional file name) E - Terminal mode with echo ͳ DEFAULT DRIVE: Aͳ  <2!z!'! ͳNOT FOUND>? !{!w#2!!m{! _!:z!`!@g!A2u!ͳ DRIVE 6?#{ !!\͋!z!:l2z!:mADOQRSVTTADOQRSVTB""ͳINVALID OPTION # ͳ | :!<2!z!'! ͳNOT FOUND>? !{!w#2!!m{! _!:z!`! ++BAD LIBRARY NUMBER CALLED++ $ʐ ڐ >û ʺ =_~/w/w{ʮ Ү ͍=ʺ YP× "!pCE" *!##F+N+~o>g~ *** KAYPRO-II MODEM PROGRAM *** VERS. 2.0 Anchor Computer Systems 323 1st. Ave. So. Seattle, WA 98104 (206) 621-9307 Voice (206) 621-8665 Data 0. 300 1. 600 2. 1200 3. 2400 4. 4800 5. 9600 6. 19.2K Choose one of the above BAUD RATES:(0-6) Any other key wilA $@ ! !!HB!DHII @  ! $  B @A $!BI "@$" "$I$I! @ !D$BB$"I$  $!D$$I$I$$"A$$I  @I I$ @"H @ @@BHABIA $ @@ !/ a #   # ʶʭ # 2@m R zI =C =: zzʶʭʕz Ÿ zO=! 3U;prrsA=Atlanta CBBS 1-404-394-4220B=Chicago CBBS 1-312-545-8086C=Calamity Clif 1-312-234-9257D=Detroit CP/M* 1-313-588-7054E=Eight BBS 1-408-296-5799F= G= H= I= J= K= L= M= N= O=Oregon CBBS 646-5510P=Portland ABBS !/o>g{!z!<33 @ BAI $@$B$@$$@!$D  I $I $$$$ BA"$ BHB$$ !$$B$! B! $$" " A! H BBBHBBHAHD!I I I$$! $@B $!B "I   H "DI!HI $ !l set 300 BAUD. WHAT IS YOUR SELECTION ?$ Choose one of the following WORD LENGTHS: 0. 8 BITS 1. 7 BITS 2. 6 BITS 3. 5 BITS WHAT IS YOUR SELECTION?$ Choose from the following STOP BITS: 0. 1 STOP BIT 1. 1.5 STOP BITS 2. 2 STOP BITS WHAT IS YOUR SELECTION?$ # 2@m R zI =C =: zzʶʭʕz Ÿ zO=! 3U ! 3! 3UW͒H! 3ü! 3\, ! 3\! zl z=1  3 !+ ͤ͵ ͵ !. ͤ!  ! O 3͍A,,A3͍10*(**4*ͬ**;*b*͂*2/>*J*V*j*͂*2/r*͂*2/z*͂*2/+ >- ". . ʃ*0*ڡ*0_:/!/+>>>:/!/+G:/!/+>:/!/+>:/!/+>> 224-6409Q= R= S= T=Tech CBBS 1-313-846-6127U= V=Vanc BC CBBS 1-604-687-2640W= X= Y= Z= !9""1"ͺ MODEM7 as of 12/18/80 Originally Written by Ward Christensen Revised by Jim Willing for WRAM Computer Corp. $ ͆>2!/2͸:!X>2:!G:xC M B"!AI$I$I$ I$A$ I$@D! $"$ HDIDBHIBAI@AHHH"H@@D$$I ABI$I$HB@I$@$I$J $$IB@* I$$I"HI$$ @ $!$I!"@! $AI$$! "B $ "H@"! $ HD@DH"$@!$$ H  ! @AA@H@HBD@@BI@$ $HBD!B HI$$$"$ D$"HIHBI$I$DH@"Choose from the following PAIRITY SELECTIONS: 0. NO PAIRITY 1. EVEN PAIRITY 2. ODD PAIRITY WHAT IS YOUR SELECTION?$ ȨADXL@CA>#yh͐ !J!6-B5͐A]]_!Y^#V]8]03]]]]]!]]j]]ů2[\ͯ>2M!!""!]:J!͠=]g" ]g" =g"=]> 2]]g*^*'**1g=-1g!  >2!:!ET,S Rx Dʜ:!k:] J>2!/2kͲͽ""!+"}">2!ʷ'ʜkG:xʝ̯ʷ´:!ʷ:/2÷  kk:w#"}"G:x >::= kk> F2F2u͇!+@:w#@:w#> :S V i xV6#}l&)>o+ͱ"ͱ+|Š"!"!\" !!l:! `jjͳ ++FILEECTOR # IN HDR Bz2!>2!!ڣw,"Q2!ڣQ:!G:!s:!ʚͳSEND # :!:>:!:!/>2!!~,·2!y9mG:!x:ͳH RCD, NOT ACK :!<2! :!:!Q7CAN'T SEND SECTOR -- ABORTING $:!ͳTIMEOUT ON ACK :!c:!'1"p>}> ͳROUTINE CANCELLED >B2!:!<2!:!\<ͳFILES EXISTS -- TYPE 'Y' TO ERASE: '1Y\TIME OUT RECEIVING FILENAME \ ʆ G w:!~>#}\ :!yʆ !\ :!} ͳCHECKSUM ERROR ͈ } >Wm7>2!2" !*""Q !\"͋ :f¼ *"\ ""!"4ü !"5° !*"":"A>@2"!"6!!N!! 6 !!F#M ~  #M ~  ""+#M ~ - :"<2"#M ~ ? - 6 *""~ f #Y #~ f ""!"p \ȇ!o ~© #~+] !e~w#~w\!\l !u6B#6A#6Kl!l6\:\ N :e > 2eN'4>_,>*:!>?:!>!-B%B!:e >4:e>4e! d0ڟ:ҟ0DM)) )oƒ${hd|/W}/_! =ږxy++ INVALID BAUD RATE ++$!l\2|2h    >(:>)_> > Oa{_C L0:!Z<ɯ2!ͳMULTIPLE ERRORS ENCOUNTERED. TYPE Q TO QUIT, R TO RETRY: '1RQQ~#ô ͳ:!>Q2!m~#:ȯ2- DOES NOT EXIST++ ͳTYPE "R" TO RETURN TO MODEM TYPE "A" TO RE-ENTER NAME: '1ARsʏʶ|ʏrͳ ++FILE TRANSFER COMPLETED++ ͳ ++FILE TRANSFER UNSUCCESSFUL++ ͳ ++ TRANSFER CANCELLED ++ 6# 6 # 6#ͳ ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: !T!!͋!~͛ʕ'# œ  ͳ ++FILE TRANSFER UNSUCC  'G:x ̯ͳ No file specified \<ERROR - CAN'T MAKE FILE DIRECTORY MUST BE FULL $\<‚CAN'T OPEN FILE$:!Ž:!ͳFILE OPEN - EXTENT LENGTH: :k:>H\<CAN'T CLOSE FILE$:!=2!*!"!:!7"\/=>++ FILE READ ERROR ++$! yD>2!y2!!""!*!!"!:!<2!:!O"\¤! y2!!""!ERROR WRITING FILE $:xG:W 7O:!< 2h: T >2 !\  :\2 ! \ \È ! \ \! \ \<7‘ 2 =Ɓo&  ] 2h2|w#~w\!\l ~# x ɯ2!:!ͳAWAITING #:!<:ڣm7G:!*:!Bx:ͳH RCD, NOT SOH B>:!<2! :!i:!oQ ͼ++ UNABLE TO RECEIVE BLOCK -- ABORTING ++ $:!ʱ:!Bͳ++ TIMEOUT ++ :!:BڣWڣ/:!:!Bͳ++ BAD SY!!~l!!#͉ͳ WAITING FOR DIAL TONE >!d ͳ ++NO DIAL TONE AFTER 10 SECONDS++ 7 !."͙͐͐ ʢy> > > >$ "ͳENTER NUMBER OR LIBRARY LETTER - TYPE C/R WHEN FINISHED, CTRL-X CANCELS WHILE DIALING: !T:!ʲ!!A~7 Q*!.{L~X BX:!_!!~[" ʲ͸'ʲ#͘X:*!͘>'$ʝ$¥͉0:> O:'$$>!$>!$ >  :!; >2":!ğ C >B2!>:] cPGj ͪ2!ͭX K >j :!’ >2"ͳ ҝ >B2!:] ã u Ͳ$:! :! ͳFILE OPEN, READY TO RECEIVE Xͪy pyͼ:! ͳAWAITING NAME NAK Po>!"58 *"\ ""? >7 !]~:!~ U #G >:!Qʬ >u:!ʟ ͳCHECKSUM ERROR Po>@ >!\ :! ͳAWAITING FILE NAME ͈  7!]# :! :!:!:!-:!2:!2O 6 :!U:!oͳAWAITING INITIAL NAK Wmmo*" "+":: 2"<2 2<2%2(<2+]2! !! 6ÿ#!:!2!:!L:!%!]ͳ TRANSFERRED :\2"!\:"2\!!!:" x >2!2!/2:!h:!ʈͳ ALL TRANSFERS COMPLETED :!ͳ ++PRESS RETURN TO DISCONNECT++  ͳ ++DISCONNECTED++ ͉:!k::!N :!  !͘͘$'* 7Ü>?*>!>*͘>]! ͉:-³ͳ No answer after time-out. Redial? (Y/N/C): '1NYʳCY/2-2͘Yͳ Connection established - Select options: >!!\͋͸:]EMG:x!CTʓSQR8:!Qͳ ++Bad Option++ W:m ͳ Re-enter PRIMARY option and file name only: !T:m ©>2>2!/>2!:ͳEnter New Baudrate: !e6' 0:wO#!!!!!vb>v5b> v> vb> v> vF##> w#8dB\aX{X_*n*͂* O #^#6 0 B   B    0 B  B #V  V 6# > ) >)  > ) >) w#) :@ _@w# . B w#B ~*f #X i { ~*w #k { 6?#{ !!\͋!z!:l2z!:m +!9!T!2!z!!E!~ !~ !# ͳ | :!colon (:) will be printed at the beginning of each line when memory save is active. The colon will not be transmitted over the modem nor will it be saved in memory. If a file is not specified, then memory save can not be activated. If the memory buffer is full (the buffer is from the top of the program to the bottom of BDOS), the contents are automatically written to disk (but the file is not yet closed). ! >2 /2!:ͳ WRT - Write file to disk (from terminal mode) DEL - Erase present file (from terminal mode) RET - Return to terminal mode with no loss of data :ͳDSC - Disconnect CAL - Dial number ͳXPR - Toggle expert mode (Menu on/off) DIR - List directory (may specify drive) CPM - Exit to CP/M S - Send CP/M file R - Receive CP/M file T - Terminal mode (optional file name) E - Terminal mode with echo ͳ DEFAULT DRIVE: Aͳ CP/M MODEM PROGRAM DOCUMENTATION by Mark M. Zeiger and James K. Mills and Gary Grossoehme for WRAM Computer Corp. 8/28/82 This program uses the file transfer routines written by Ward Christensen in his CP/M file transfer program (V2.0 as of 8/6/79) and is compatable with his program in single file transfer mode. Multi-file transfers are only possible between two systems running the program described below. This program has two functions: <2!z!'! ͳNOT FOUND>? !{!w#2!!m{! _!:z!`!@g!A2u!ͳ DRIVE 6?#{ !!\͋!z!:l2z!:mADOQRSVTTADOQRSVTB""ͳINVALID OPTION # ͳ | :!<2!z!'! ͳNOT FOUND>? !{!w#2!!m{! _!:z!`! ++BAD LIBRARY NUMBER CALLED++ $Communications may then continue with the buffer reinitialized. The computer with which you are communicating must accept the X-ON and X-OFF (Control-Q and Control-S) conventions or data will be lost. When communications are over, use Control-E to exit from the Terminal mode and enter the Menu. The file to which you are writing must then be closed by using the 'WRT' command. If this is not done, all data will be l Command: !T!7CPM7DIR7RET>*}"k:O7DSCҜ7WRT7XPR7DEL:ʆ7CALچ>2!Ô:!!2&:͉ͳ ++DISCONNECTED++ ̓ :" "ͱ>2!/2!":!:" *}"n͇ͨ>2!/2!":/2F#1'7SRTE~PH#9>#J7#/կ? ʟʟ bG#4+~# pxv#b#G~wڽ+xF6 xvb4bv> v>vb>#v> v> vXG>#v> v> vxb 1. Communication 2. Program transfer COMMUNICATIONS The program may emulate a terminal or echo data back to sender (act as a computer). Terminal Mode - 'T' Option The terminal mode may be called with or without a file name. If a file is specified (it should be a new file), then anything received by the modem may be saved in memory and later written on disk. The save feature is toggled ON/OFF by Control-Y. A   ost. I decided not to close the file automatically since there will be times when you leave terminal mode and then decide to re-enter. This may be done while in the Menu by using the 'RET' command. You may re-enter Terminal mode and save in the same file as many times as you wish as long as you have not closed the file with the 'WRT' command. While in Terminal mode, Control-T will put you in File Transfer mode.nning of the program (106H) that will create a backup file if a file on the disk has the same name as the file being received in multi-file transfer (see MODEM.SET). If this byte is set to 0FFH, a backup file will be created. If it is zero the file on the disk will be deleted before the new file is received. If you are running CP/M 2 and a file on the disk is designated R/O or SYS, a backup will be created whether the byte at 10rminal mode. Remember that if you are operating a remote computer using a timesharing program (such as Ward Christensen's "BYE"), the remote should be instructed to send or receive in the quiet (Q) mode as a secondary option. Examples of commands for sending and receiving are listed below. Multi-file transfers Using the B (batch) secondary option, more than one file and ambiguous filenames may be transferretifile transfers may only be done from the menu. It may not be specified when the MODEM program is called. In other words A>MODEM SAB *.COM will result in an INVALID OPTION error message. Return to Menu - 'M' option When asked to select an option, 'M' returns to Menu. The MENU If the Modem program is entered with no option, the Menu is called. The Menu gives the choice of selecting the standard options as defined This will allow you to send the contents of an ASCII file over the modem. This routine does no error checking and there are no protocols specified between this program and the receiving computer other than that it should be ready to receive data via the modem. Control-X will cancel the transfer. Computer mode - 'E' Option This mode echos data received by other computer. Only one computer may be in this mode at on6H is set or not. Be careful - if you are running CP/M 1 and the drive on which you are receiving has an R/O file with the same name created by CP/M 2, the R/O file can not be accessed (found, changed, erased, etc.) by CP/M 1. You will therefore have two files with the same name when you are running CP/M 2. To fix this problem, use CP/M 1 to change the name of the file that is not R/O. Then use CP/M 2 to do what you want withd. To send files, use the primary option "S" and the secondary option "B" (along with any other secondary options and baudrate). To receive the files being sent, use the "R" primary option and the "B" secondary option. Files may not be named since filenames are sent by the sending program, but a disk drive may be specified (or else the files are written to the default drive). Backup option There is a byte at the begi by Ward Christensen (T, E, R, and S). The Terminal mode has been greatly expanded as described above. The "R" and "S" commands must be called with a filename or you will be required to enter the primary command (S or R) and the filename again (but NOT the secondary options). If you want multi-file transfers, then the "R" option does not need a filename. RET - You may also enter terminal mode using the 'RET' command, but e time. There is no save feature in this mode. Useful if you wish to communicate with somebody running the terminal portion of the program. File transfer - 'S' and 'R' Options These features are the same as in the CP/M Modem program written by Ward Christensen except that upon completion of the transfer, control returns to the Menu unless the secondary 'T' option has been selected. In the latter case, control returns to Te the R/O file. Examples: The sender enters SBT B:*.COM to send all the COM files on disk B. Also specified was terminal mode when done. The receiver enters RB to receive all the files being sent on the default drive. The sender enters the command SB ASM.COM *.HEX B:M*.* which will send ASM.COM from the default drive, all the HEX files from the default drive, and all the files starting with "M" from the B drive. Mul   no data will be saved since a file may not be named with 'RET'. Use the 'RET' command to RE-ENTER Terminal mode after it has first been entered with the 'T' option. If this is done, you will still be able to save the communications if you were doing so before you exitted the terminal mode. WRT - The 'WRT' command must be used after leaving Terminal mode. This writes the last buffer to disk and closes the file. Failure  transfer. SBQ *.COM Send two files from two different drives SB A:fn1.ft1 B:fn2.ft2 Receive files being sent by above on drive A. RB A: Terminal mode, save communication in file, originate mode (in terminal must type CTRL-Y to start save, in menu must type "WRT" to close file) TO fn.ft Any problemsor bus) R - receive a CP/M file (must name file unless B sec opt used) T - terminal mode (specify file if memory save wanted) E - terminal mode with echo M - return to menu X - used only when program is called to initially toggle menu off Secondary options B - multi-file mode for sending and receiving files T - return to terminal mode after transfer (memory save off) R - view what is received in file transfer ; ; KAYMODEM PATCH ; ; ALLOWS USER TO SPECIFY: ; baud rate, word length, stop bits, pairity ; for the Z-80 SIO/DART ; ; WRITTEN: 03/01/83 ; BY: Wayne E. Campeau ; FOR: Anchor Computer Systems ; ; USE: This program is to be patched into the MODEM7 program ; available frome either the CP/M Users Group or the ; Special Interest Group (SIG). ; Some simple changes need to be made for the program to ; run alone (Remove the REENTRY patch). ; ;-------------------------------------to use the 'WRT' command results in loss of all data and a file of length zero. DEL - The 'DEL' command erases the most recent file accessed in Terminal mode. Useful if you decide after communications that you don't want to save information just gathered. CPM - The 'CPM' command reboots and returns to CP/M. XPR - The 'XPR' command is a toggle which causes the menu to be printed or not printed. Initially the menu is on unless the gs, please call me: Or latest revisor: Mark M. Zeiger James K. Mills 198-01B 67th Ave. 824 Jordan Place Flushing, N.Y. 11365 Rockford, IL 61108 (212) 454-6985 (815) 398-0579 or WRAM Computer Corp. (503) 244-2168 S - view what is being sent in file transfer V - view what is being sent or received in file transfer T - Terminal mode (used with remotely controlled computer) EXAMPLES (fn = filename, ft = filetype) Send file. S fn.ft Receive file on B drive, view what is being received, return to terminal mode RRT B:fn.ft Send all COM files, no messages on console, same way as last ------------------------------------ WBOOT EQU 0000H ;DEFINE WARM BOOT ADDRESS BDOS EQU 0005H ;DEFINE BDOS ENTRY POINT LOADPT EQU 0100H ;DEFINE CP/M LOAD POINT REENTRY EQU LOADPT+0036H ;DEFINE PROGRAM RE-ENTRY POINT INTO MODEM7 ;------------------------------------------------------------------------- ; CP/M DOS CALL NUMBERS CONIN EQU 1 ;DEFINE CONSOLE INPUT CALL CONOUT EQU 2 ;DEFINE CONSOLE OUTPUT CALL DIRIO EQU 6 ;DEFINE DIRECT CONSOLE I/O CALL PMSG EQU 9 ;DEFINE PRINT MESSAGE DOS program is called with the "X" option (ie. A>MODEM X ). DIR - The 'DIR' command lists the directory of a CP/M disk. A drive may be specified (ie. DIR B:) or the default drive will be listed. After the directory is listed, the menu will not be printed whether XPR mode is on or off. If XPR mode is on and you wish to see the menu, hit return. LISTING OF COMMANDS AND OPTIONS Primary options S - send a CP/M file (must specify file/   COMMAND ;-------------------------------------------------------------------------- ; CHARACTER DEFFINITIONS CNTRL$C EQU 3 ;DEFINE CTRL-C CHAR (^C) CR EQU 13 ;CARRIAGE RETURN LF EQU 10 ;LINE FEED ESC EQU 27 ;ESCAPE CHAR (^[) ;------------------------------------------------------------------------ ; PORT DEFFINITIONS SIO$CONTROL EQU 6 ;SIO STATUS/COMMAND PORT BAUD$PORT EQU 0 ;BAUD RATE CONTROLER PORT ;======================================================================== ;URN PRINT$STOPS: LXI D,STOP$MSG MVI C,PMSG JMP BDOS ;PRINT THE STOP-BITS PROMPT & RETURN PRINT$PAIRITY: LXI D,PAIRITY$MSG MVI C,PMSG JMP BDOS ;PRINT THE PAIRITY PROMPT & RETURN GET$SEL: PUSH B ;SAVE THE MAX NUMBER OF SELECTIONS WAIT: MVI C,DIRIO MVI E,0FFH ;SET FOR INPUT CALL BDOS ; ORA A ;CHECK FOR CHAR READY JZ WAIT ;IF NOT READY THEN WAIT POP B ;GET THE MAX VALUE. INR B ;INC THE MAX VALUE. ANI 7FH ;STRIP THE PAIRITY BIT. CPI CNTRL$C ;IS IT A BREAUD: CALL PRINT$BAUD ;PRINT THE BAUD-RATE PROMPT MVI B,6 ;SET THE MAX NUMBER OF SELECTIONS CALL GET$SEL ;GET THE USERS SELECTION STA BAUD$RATE ;SET THE BAUD RATE RET CONFIG: CALL BITS$MENU ; CALL STOP$MENU ; CALL PAIRITY$MENU ; RET ; BITS$MENU: CALL PRINT$BITS ;PRINT THE WORD LENGTH PROMPT MVI B,3 ;SET THE MAX NUMBER OF SELECTIONS CALL GET$SEL ;GET THE USERS SELECTION STA WORD$LENGTH ;SET THE WORD LENGTH RET ; STOP$MENU: CALL PRINT$STOPS ;PRINT THE STOP BITS PROMP LDA PAIRITY ;GET THE PAIRITY MODE.. LXI H,PAIRITY$TBL ; CALL LOOKUP ; ORA B ;OR THE COMMAND WORDS FOR STOP BITS AND ;PAIRITY MODE TOGETHER. OUT SIO$CONTROL ;NOW SEND THE COMBINED COMMAND WORD. ; MVI A,3 ;ADDRESS REG. 3 OUT SIO$CONTROL ; LDA WORD$LENGTH ;LOAD THE Rx WORD LENGTH LXI H,BITS$TBL2 ; CALL LOOKUP ; OUT SIO$CONTROL ; ; MVI A,5 ;ADDRESS REG. 5 OUT SIO$CONTROL ; LDA WORD$LENGTH ;LOAD THE Tx WORD LENGTH LXI H,BITS$TBL1 ; CALL LOOKUP ; OUT SIO$CONT BEGINING OF PROGRAM ORG LOADPT ;ORG AT THE START OF THE PROGRAM JMP PATCH ; ;========================================================================= ; MAIN BODY OF PROGRAM IS BEYOND THE END OF THE MODEM7 PROGRAM ORG LOADPT+2900H ;ORG AT THE END OF THE PROGRAM ;(DELETE FOR STAND ALONE) PATCH: ; LXI SP,STACK ;DEFINE OUR OWN TEMP. STACK CALL CLS ;CLEAR THE SCREEN CALL BAUD ;GET THE BAUD RATE CALL CLS ;CLEAR THE SCREEN CALL CONFIG ;GET THE CHANNEL CONFIG CALL PROGK? JZ WBOOT ;YEP, ABORT. SBI '0' ;SUBTRACT ASCII OFFSET OF '0' JM DEFAULT ;IF UNDER-FLOW THE USE DEFAULT (0) ;ELSE, CMP B ;COMPARE THE CHAR TO IT JC ECHO$SEL ;IF CHAR <= MAX THEN ECHO THE SELECTION & RET ;ELSE, DEFAULT: XRA A ;SET A=0 ECHO$SEL: PUSH PSW ;SAVE THE ANSWER ADI '0' ;ADD THE ASCII OFFSET OF '0' TO MAKE CHAR PRINTABLE MVI C,DIRIO ;SET THE BDOS FUNCTION MOV E,A ;PUT THE CHAR IN E. CALL BDOS ;PRINT IT POP PSW ;RESTORE THE CHAR. RET ;RETURN ;--T MVI B,2 ;SET THE MAX NUMBER OF SELECTIONS CALL GET$SEL ;GET THE USERS SELECTION STA STOP$BITS ;SET THE STOP BITS RET ; PAIRITY$MENU: CALL PRINT$PAIRITY ;PRINT THE PAIRITY PROMPT MVI B,2 ;SET THE MAX NUMBER OF SELECTIONS CALL GET$SEL ;GET THE USERS SELECTION STA PAIRITY ;SET THE PAIRITY RET ; PRINT$BAUD: LXI D,BAUD$MSG MVI C,PMSG JMP BDOS ;PRINT THE BAUD-RATE PROMPT & RETURN PRINT$BITS: LXI D,BIT$MSG MVI C,PMSG JMP BDOS ;PRINT THE WORD LENGTH PROMPT & RETROL ; ; MVI A,1 ;ADDRESS REG. 1 OUT SIO$CONTROL ; MVI A,00000010B ;ENABLE Tx. OUT SIO$CONTROL ; RET ; LOOKUP: ADD L MOV L,A MVI A,0 ADC H MOV H,A MOV A,M RET ;------------------------------------------------------------------------- BAUD$MSG: DB ' *** KAYPRO-II MODEM PROGRAM *** VERS. 2.0', CR,LF DB CR,LF DB ' Anchor Computer Systems', CR,LF DB ' 323 1st. Ave. So.', CR,LF DB ' Seattle, WA 98104', CR,RAM ;PROGRAM THE CHANNEL CALL CLS ;CLEAR THE SCREEN XRA A ;CLEAR A. JMP REENTRY ;JUMP BACK INTO THE MODEM7 PROGRAM ;(CHANGE TO A JMP WBOOT FOR STAND ALONE) ;========================================================================== ; SUBROUTINES CLS: ;CLEAR THE SCREEN MVI C,DIRIO ; MVI E,ESC ;LEAD-IN CALL BDOS ; ; MVI C,DIRIO ; MVI E,'*' ; CALL BDOS ;CLEAR CODE RET ;RETURN ;------------------------------------------------------------------------- BA----------------------------------------------------------------------- PROGRAM: ;PROGRAM THE I/O CHANNEL LDA BAUD$RATE ; LXI H,BAUD$TBL ; CALL LOOKUP ; OUT BAUD$PORT ; MVI A,18H ;LOAD RESET CODE OUT SIO$CONTROL ;RESET THE SIO CHANNEL MVI A,10H ;LOAD RESET STATUS INTERUPTS CODE OUT SIO$CONTROL ;RESET THEM ; MVI A,4 ;ADDRESS REG. 4 OUT SIO$CONTROL ; LDA STOP$BITS ;GET THE NUMBER OF STOP BITS, LXI H,STOPS$TBL ; CALL LOOKUP ; MOV B,A ;SAVE FOR LOGICAL OR.. ;   LF DB CR,LF DB ' (206) 621-9307 Voice', CR,LF DB ' (206) 621-8665 Data', CR,LF DB CR,LF DB ' 0. 300', CR,LF DB ' 1. 600', CR,LF DB ' 2. 1200', CR,LF DB ' 3. 2400', CR,LF DB ' 4. 4800', CR,LF DB ' 5. 9600', CR,LF DB ' 6. 19.2K', CR,LF DB CR,LF DB ' Choose one of the above BAUD RATES:(0-6)', CR CR,LF DB ' 1. EVEN PAIRITY', CR,LF DB ' 2. ODD PAIRITY', CR,LF DB CR,LF DB ' WHAT IS YOUR SELECTION?' DB '$' ;--------------------------------------------------------------------------- ; SIO CONTROL-WORD TABLES BAUD$TBL: DB 5,6,7,10,12,14,15 BITS$TBL1: DB 11101000B,11001000B,10101000B,10001000B ;REG 5 BITS$TBL2: DB 11000001B,01000001B,10000001B,00000001B ;REG 3 STOPS$TBL: DB 01000100B,01011000B,01001100B ;REG 4 PAIRIT*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \,LF DB CR,LF DB ' Any other key will set 300 BAUD.', CR,LF DB CR,LF DB ' WHAT IS YOUR SELECTION ?' DB '$' BIT$MSG: DB CR,LF DB ' Choose one of the following WORD LENGTHS:', CR,LF DB CR,LF DB ' 0. 8 BITS', CR,LF DB ' 1. 7 BITS', CR,LF DB ' 2. 6 BITS', CR,LF DB ' 3. 5 BITS', CR,LF DB CR,LF DB ' WHAT IS YOUR SELECTION*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \Y$TBL: DB 01000000B,01000011B,01000001B ;REG 4 ; SELECTIONS MADE BY USER BAUD$RATE: DB 0 ; WORD$LENGTH: DB 0 ; STOP$BITS: DB 0 ; PAIRITY: DB 0 ; ;--------------------------------------------------------------------------- DS 100H ;RESERVE SOME STACK SPACE STACK EQU $ ;SET STACK HERE END LOADPT ; *    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \?' DB '$' STOP$MSG: DB CR,LF DB ' Choose from the following STOP BITS:', CR,LF DB CR,LF DB ' 0. 1 STOP BIT ', CR,LF DB ' 1. 1.5 STOP BITS', CR,LF DB ' 2. 2 STOP BITS', CR,LF DB CR,LF DB ' WHAT IS YOUR SELECTION?' DB '$' PAIRITY$MSG: DB CR,LF DB ' Choose from the following PAIRITY SELECTIONS:', CR,LF DB CR,LF DB ' 0. NO PAIRITY', *    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \  *    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \  *    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \l set 300 BAUD. WHAT IS YOUR SELECTION ?$ Choose one of the following WORD LENGTHS: 0. 8 BITS 1. 7 BITS 2. 6 BITS 3. 5 BITS WHAT IS YOUR SELECTION?$ Choose from the following STOP BITS: 0. 1 STOP BIT 1. 1.5 STOP BITS 2. 2 STOP BITS WHAT IS YOUR SELECTION?$ *    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \10*(**4*ͬ**6*b*͂*2/>*J*V*j*͂*2/r*͂*2/z*͂*2/+ >- ". . ʃ*0*ڡ*0_:/!/+>>>:/!/+G:/!/+>:/!/+>:/!/+>>*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \Choose from the following PAIRITY SELECTIONS: 0. NO PAIRITY 1. EVEN PAIRITY 2. ODD PAIRITY WHAT IS YOUR SELECTION?$ ȨADXL@CA*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \*    B7ǫ F  ? b  aC S q  4 R pp2h: T >2 !\  :\2 ! \o>g~ *** KAYPRO-II MODEM PROGRAM *** VERS. 2.0 Anchor Computer Systems 323 1st. Ave. So. Seattle, WA 98104 (206) 621-9307 Voice (206) 621-8665 Data 0. 300 1. 600 2. 1200 3. 2400 4. 4800 5. 9600 6. 19.2K Choose one of the above BAUD RATES:(0-6) Any other key wil!  The files named .CPM are actually .COM files for CP/M. If you copy the files to a CP/M system without using 22DISK, just rename all *.CPM to .COM  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 redirection or piping of the console input and output streams built into these programs provides most of the flexibility.  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 crammed 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 on drive A: and send the results to drive D: A>fls c: b:*.AQM d: *.!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15͞)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>*K͞+655O'+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}/oTQT |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" 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 burried in the COM files in the form of library routines provided with the BDS C package (available from Lifeboat). T#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"2>! ! !ͧ!c !ͧ>2>>:2>>2>`i6#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}`ͭ!9This 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, 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?. The overall effect is to be able to issue a single command which will#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77"  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 output 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}} ! 6!q*6}o!:!!:!:!|!*6}o*6!s#r*6w#w*6*6tempin.$$$tempin.$$$tempout.$$$! 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Ê! `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}<|ʹ+>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͐)">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! ~#fok">~#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++* `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##6Q `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ͩ #|~#fo! ͱ! ~#fo! ʹͷ*)L!ͺ#|>ͽ>22O!"0O! 9*** rescaling ***, l*"Ó"!9DM! ~#fo!vf! ~#fo*>f! ~#fo#n}:¸! ~#fo##s#r! ~#fo! ~#fon&i! ^#Vr+sn}¸*)Lͩ!*)L! 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!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͐#)~#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 ! s#r! ~#fo`i^#Vr+ss#r! ~#fo###! ~#fos#r! ~#fo! ~#fos#r! ~#fo! ~#fok">~#fo! ~#fok">~#fos#r! ~#fo##! ~#fok">##n&! ~#fok">##n&Ns! ~#fo+!! ~#foK`! ~#fo~#fo")L! 9! ! ~#fo!S!ͬ >!  ! ~#foͯ #|Z ! ~#fo!s!ͬ ! Ͳ >!">!ͦ ͵ ! ͸ ! Ͳ ! ~#fo!  ͻ !ͦ ! ! ~#foͩ #| ! ~#fo!!ͬ ,͵ ! ; ! s#rz!  ! ~#fo #|! ~#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}! 6! ~#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|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#  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! !ôî`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! s#rz '!͐͐s#r͐##6#6͐~#fo@'2!9DM͐Z'!͐~#fo='w'2à13!9DM͐+|—'! n&n'͐++|µ'! n&!q'͐+++|'! n&!q'͐++++| (! n} '! !q'! n&!q'͐##^#Vr+sz=(͐^#Vr+s! ns&!͐͐~#fot'g(!͐##6#6͐͐s#r͐^#Vr+s! ns&ô(3Å33!9DM͐(!)͐##~#fo(!)͐##~#fo! ~#fo"`is#r`i~#fo#|.#*>`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 %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&'%͐),MVr+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.! 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}&/!s#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! ~#fo!9!9DM! n! nѯgWͩ= ! n&B ! n&!9DM! ~#fok">~#fo! ~#fok">~#foҋ !&! ~#fok">~#fo! ~#fok">~#fo ! ~#fok">##n! ~#fok">##nѯgW !&!&`is#r͐͐͐~#foͫ(͐5)!)͐+?`is#r͐##~#fo|)!͐͐͐ͮ(͐##~#fo͐s#r͐~#fo͐s#r!!͐~#foͱ()͐##6#6͐͐s#r!)!9*à1A4!9DM͐|*)*͐+++|/*!)*͐##^#Vr+szY*͐^#Vr+sn&*!͐͐~#fo)`is#r!ږ*͐##^#Vr+s*͐##͐?+s#r͐͐s#r͐^#Vr+sn&*!9!9DM`iw#w! ~#fo͐~#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&%|ͣ&+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͐͐& ^#Vr+s!&/! ^#Vr+s6 .2!>!"r+ó1!9DM*!>};!R!!!">2!>! ~#fo!">*>>a!>p!>m!>z!!>2!>!!!">! ~#fo!">*>¶!*>Ҷ!*>#">Å!*>>!>!>!>!!*>">>2!>*>>2!>!>2!>*>">>2!>*>!"!!!Bug - bad state 6"ä+Û%ó1!9DM! ~#fo! ~#fo-"! ~#foz"!|"!0"!3"Write error in putw() ß"k'Û%ó1!9DM! ~#fo! ~#fo͖"#|"!"!͙"!͜"Write error in putc() ")!9DMn! ~#fo͐n}=+! ~#fo`i^#Vr+sn}:+!i+*! ~#fo͐n! ~#fo͐nѯgWi+!9x+2!9DM͐n}ʢ+! ^#Vr+sn&u+À+ê+k'!9DM͐͐)ͧ+|+͉͐͐ͧ+|+͐!,,001h1!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! ^#$   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!, !\&!TELk762÷4Û%ó17*^#V#z>2+V+^+I2*-2!g2!0232Broken pipe 7,2q*&:q):ʱ2=ʱ2=r:qo&2ö1u27*ͼ2\!*Ϳ2#  3 > .............. 0dh Cursor Positioning - -------------------- Escape Sequence (ESC+"=") .... 1bh,3dh Cursor Rows .................. 0-23 Cursor Columns ............... 0-79 Positioning Sequence: In MBASIC ... PRINT chr$(27)+"="+chr$(20+row)+chr$(20+col); Line Insert/Delete - -------------------- Line Insert (ESC+"E") ........ 1bh,45h Line Delete (ESC+"R") ;This is the TERM.COM program distributed with the Kaypro ;computer. It was dissambled and commented to make it ;easier to change the communication protocol. As ;distributed the program was set for 8 bit, no parity. ;Some systems (eg., IBM's) use other protocols ;(eg., 7 bit, even parity). Code has been included to ;set the baud rate if you desire. ; ; ;Note: It is not unusual to see strange characters ;on the screen during communications. These are ;communication control codes, normally non-pr _ 37:)~:,"s!"u*|*uʃ3*~#Z3"*s*uƒ3#"u*+"G37*|DM**3ڴ3><3~# x¨3 ><3~+ x3|}3Ü57:,*3:*3}|2q /4%4:qw 4! {w7:)~:,"s!"u*|ʗ4**sœ4! ~—46*u*+"*"*u#"uc47*!9& 6C#6O#6M4*|4!\&5!\........ 1bh,52h Clear to End of Screen/Line - ----------------------------- Clear EOL (Ctl-X) ............ 18h Clear EOS (Ctl-W) ............ 17h Set Greek or ASCII - -------------------- Set ASCII (ESC+"A") .......... 1bh,41h Set Greek (ESC+"G") .......... 1bh,47h After Setting Greek, lower case letters will print as the Greek Alphabet. 11/14/82 def  Ctrl-S pauses, Ctrl-C Aborts, Ctrl-X skips to next file Listing file KPROTERM.TXT The following is a list of the KPRO II "Terminal" attributes and control sequences. Cursor Control - ---------------- cursor left (bs) ............. 08h cursor right ................. 0ch cursor down (lf) ............. 0ah cursor up .................... 0bh home cursor .................. 1eh clear screen & home cursor ... 1ah carriage returninting, ;that the Kaypro displays as greek characters unless ;you turn them off (ESC,"A"). ; ; Brown Grier ; 312 690-0359 ; ; ASEG L0000 EQU 00H L0005 EQU 05H ; ORG 100H ; CALL L0154 ;Home cursor, clear screen CALL L016F ;Print sign on message to screen ; ;Initialize the RS232 port (# output bytes in B, Start location in HL) ; LD C,6 LD A,(L03D1) ;03D1H LD B,A LD HL,L03D2 ;03D2H OTIR ; ;Set Baud rate to 300 ; LD A,5 OUT &*|5!!l&!~#foF5> +=5#~+5##5a{ !pr5!*w#S5:**j5*!ѷ! , FNxg>Goy5$ B>.Fc|zݏR'cI~9z9kнB qf~wǁ/$~I{1+.$wǁ/$~I{1+ňwǁ/$~I{%  (00H),A ; ;Console monitor routine for initialization message to user ; L0111: ;0111H LD E,0FFH ;Console input LD C,6 CALL L0005 ;5 OR A ;Anything there ? JR Z,L0111 ;No, look again CP 1BH ;Is it ESC JR NZ,L0120 ;No, continue RET ;Yes, return to CPM L0120: ;0120H CP 0DH ;Is it CR ? JR Z,L0129 ;Yes, start program JR L0111 ;loop back to check console again ; ;Start of program ; L0129: ; CALL L0154 ;Home cursor, Clear screen CALL L0360 ;Outout messasge about hster 05 DB 00101000B ;7 bit, Transmit enable END ; ; ;Alternately, for use with some modems, the last ;line might read ; ; DB 10101010B ;DTE, 7 bit, Transmit enable, RTS ; int message on screen LD C,9 LD DE,L0178 ;Address of message start CALL L0005 ;5 RET ; ;Initialization messages to user ; L0178: ;Initial message DB 0AH,0DH,'Grier',27H,'s Experimental Terminal ' DB 'Emulator',0AH,0DH,0AH,0DH DB 'Press either to ' DB 'start using the terminal ' DB 'or',0AH,0DH,'press ' DB 'to return to CP/M: $' ; ; L0360: ;Subroutine to output short message about ending LD C,9 LD DE,L0369 ;0369H CALL L0005 ;5 RET ; ; L0369: ;Ending me!a{   `OE!y6$ -7rBo&))T])))!y!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15͞)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>ow to terminate ; ;Real program start ; L012F: ;Read RS232 and send out to screen IN A,(06H) ;Read status register BIT 0,A ;Anything there ? JR Z,L0144 ;No, check console IN A,(04H) ;Yes, get it AND 7FH ;Strip parity CP 4 ;Is it EOT (Control D) ? JP Z,L0000 ;Yes, Warm Boot LD E,A ;No, output to screen LD C,2 CALL L0005 ;5 L0144: ;Read console and send out RS232 CALL L015C ;Check console input JR Z,L012F ;Nothing there, check line LD C,A ;Something there, so CALL*K͞+) (35'+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}/ossage DB 0AH,0DH,'Press and ' DB ' at the same time when ' DB 'done ',0AH DB 0DH,'and the program will ' DB 'exit to CP/M.',0AH,0DH,0AH DB '$' ; ;Port initialization vector ; L03D1: ;Output file to initialize RS232 DB 09H ;# Bytes to output L03D2: DB 00011000B ;reset DB 04H ;Register 04 DB 01000111B ;x16 clock, 1 stop bit, even parity DB 01H ;Register 01 DB 00000000B ;For safety, reset it (?) DB 03H ;Register 03 DB 10000001B ;7 bit, Read Enable DB 05H ;RegiT#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"21>:21>21`i6#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ͭ!9 L0165 ;Send it out JR L012F ;Return to check RS232 for input ; ;End of Main Program--Start of Subroutines ; L0154: ;Subroutine to home cursor and clear screen LD E,1AH LD C,2 CALL L0005 ;5 RET L015C: ;Subroutine to do console input LD E,0FFH LD C,6 CALL L0005 ;5 AND A RET L0165: ;Subroutine to transmit out RS232 IN A,(06H) ;Read status BIT 2,A ;Buffer empty ? JR Z,L0165 ;No, wait till it is LD A,C ;Yes, send character OUT (04H),A RET L016F: ;Subroutine to pr#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77&  1.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 output 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 ! ~#͐! 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 `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 - checksum 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͐͐s#rz!͐##w#w͐~#fo,Á!9DM͐)`is#rzr͐)! s#rzr͐?͐x!x!9Í$1%!9DM͐|¤̈́f͐+++|»!͇f͐##^#Vr+sz͐^#Vr+sn&f!͐͐~#fo͊`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!͐fo##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 accept 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! !-! 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!(`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~#f ~#foҹ*)}ù! ~#fo͐)~#fon}dâ! ~#fo͐)~#fo#n}c! )! ~#fo͐)~#fo#ͪ#|¯! ~#fo͐)~#fo#!!ͭͰ>2)!! ~#fo͐)~#foͳ|*)&|g}o}2)!)4! ~#fo͐)~#fo#")! ~#fo͐)~#fo#n}O! ~#fo͐)!s#r! ~#fo͐)")d*)&|g}o}2)! ~#fo͐)~#fo#n}!!ͭͰ! ~#fo͐)~#fo#Ͷ!-! ~#fo͐)~#fo#͹#|! ~#fo͐)~#fo#! !ͭͰ!)4*)}y͐s#r͐##6#6͐~#fo5$%!9DM͐+|U! n&,͐++|s! n&!/͐+++|’! n&!/͐++++|! n} ·! !/! n&!/͐##^#Vr+sz͐^#Vr+s! ns&!͐͐~#fo2%!͐##6#6͐͐s#r͐^#Vr+s! ns&r%@&Ñ&!9DM͐ҍ!ê͐##~#fo¦!ê͐##~#fo`is#r͐͐͐~#foi͐!ê͐+?`! ) !"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 ! s#rzʜ!' ~#fo*05Ҝ! ~#fo|g}o! s! n& Y! n&~ҍ! n} v y ʄ ʄÇÙ!' ^#Vr+sÍ! 6.! n&/ *25}ʬ! / j! ! 5 #|! !! X`i2 ! s#rz2*1! ~#fo"1o|q`i~#fo#`is#r`i~#fo+!1`i~#fo`is#r`i~#fo@!9Rs!!y9DM! `iL͐`iOw!9ÆL"!9DM! n&̓|ʭ! n&ò! n&þ{"!9DM`iw#w! 6#6͐ n! s{ ! n} ! ^#Vr+s! n}-! 6#6! ^#Vr+s! ^#Vr+sn! sͻ|_͐ ?! nѯg`is#r͐͐?o!9Áê"L"!9DM! n&{|ͣ®! n&~|ͣûs"!y9DM! `i͵`i͸!9$!9DM͐!͐'  is#r͐##~#fo|ʃ!͐͐͐l͐##~#fo͐s#r͐~#fo͐s#r!!͐~#fooê͐##6#6͐͐s#r!ê!9ù&!9DM͐!͐~#foͶ!9DM`iw#w! ~#fo͐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}-7*!9& 6C#6O#6M.'*|D'!\&V'!\&*|V'!!l&!~#foʎ'> +ͅ'#~s'##g'a{ !p'!*w#›':**ʲ'*!ѷ! , FNxg>Goy($G""# #!9DM͐͐ a#͐^#Vr+s͐ N#͐0V#͐7s!&ì#͐ ͐͐ ͉͐#`is͐ ͐͐ )͐#`in&#&ì#!9û#{"!9DM`iw#w͐~#fon&͸#}$͐ ?͐^#Vr+snѯg`is#r#͐$!97:O*o`  !\&!7*!m$&*!}$&m$!, !\&!TELk7î$&I+$7*^#V#z¶$+V+^+$*ͥ$!$!ͨ$ë$Broken pipe 7,2q*! ^#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 ! 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! !&:q):)%=)%=r:qo&7:)~:,"s!"u*|ʇ%**sŒ%! ~‡%6*u*+"*"*u#"uS%ð%.$$7*ͪ%\!*ͭ%7:)~:,"s!"u*|*u>&*~#&"*s*u>&#"u*+"&7*|DM**͋&o&><&~+ x&|}×&'7:,*͔&:*ʹ&}|2q &&:qw&! {w# 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`is{="`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&