FORTRAN  SYSTEM 100*DQ 00704A -------- DOUBLE-DDISKETTEFROM NORTH * STAR --------DIR.SEC1DIR.SEC2DIR.SEC3DIR.SEC4--------CPM DATADATASEC1DATASEC2DATASEC3DATASEC4-------- N*S F80 COM F80 COMUL80 COMP !"#$%&M80 COM'()*+,-./0123456M80 COM789FORLIB REL:;<=>?@ABCDEFGHIFORLIB RELMJKLMNOPQRSLIB COM%TUVWXCREF80 COMYZ[\DSKDRV MAC]^_`abcdefghijklDSKDRV MACmnoLPTDRV MACpqrINIT MAC:stuvwxyzLUNTB MAC {|DTBF MAC}IOINIT MAC#~Þ ESLAF.EURTITCNUF=RRE=DNE=CERNIAM$TINI$YTENTEGEROU"* " x#w x" "!"2<2 >2Z:%>TxhX>Oxh}̀%>~ I*"Mi* ? d:b: ==:(*"Mi*? ڙ""t:2e2go"]]: : =*+~G:j#O: =ydyd:  ͖ͬT:b*fp? :*:C :(  *~G:/O! O z*~/O "#z:/ ҇Oɯ2s<2f2bY!2"Y!:,"8µ":% !#s!s*hdP!s  -- Bytes: Created: 23-Fe *r F+N DM*jfW*p F+N :OfW:, *f|}!""""> !w#\ X/ 2s>2>2>2 Z"xͩ:e™ : ʥ <ʝ ͬ:(ͅh*x"t++V+^"]s#r>2e]:,ʃ / Ϳ>/xh: n !~wx Xæ%AC͡>2+>S>C>KOC͡>!*f? : O :e? G !"]|2e*]|O >2 ]ͬj*!"~+9""ͣ!:e=z :fz ͬ  *if:(ʞ :,e >/xhü $:3!0ʯ ͬ8U/Î >2Z!"E XZ X !6'u 2sͿ: = :Cn : *CPMIO MACDTBF CRFDTBF RELDTBF PRNPI FORPI RELPI COMGBLEPRECISIONOGICALEALFORLine:ASSI <BACK VBYTEVBLOCCALL pCOMM c CONT DATAS DIMEw DOUBVENCO# ENDF& VEQUI)&EXTE0DECO# FORM4 FUNC6gGOTO 7IF( IINCL: sIMPL=QINTEA VLOGIDVPAUSG PROGHYREADK !RETUL FREALVREWIN VSTOP SUBRPgWRITV !GSPACKDATOINUNSIOLEPRECISIODEILVALENCRNAATIOUDICIGECARAͨRNOUTINE+-*/,)=.EG.EL.EN.TL.TG.QEROX.RODNATON                  X*dDM/o&#b-81 ͚]͚]*!"[<::;W H0010Þ!]6#? A!~4*"`"#!#i`b`#!hb*`b`" "" "!J"!b"=!"!("?!2"!<"!T"A*"!h""""!"!>w#p # w# ~f~# x*ÕFORTRAN-80 Ver. 3.42 Copyright 1978,79,80,81 (C) By Microsof}o|g~#gͩ :(ʍ}!"fA !"f>ͨ8`Á!y[ڭ,O6$+p+q>2>2 :+*:>(2ZE22+ÓT:3 *t F+N *lfW"| ͬkX' >z - :*|*7 ͬ*"*":=*|W ͬ:*"|}2ͬ:} Y> 2:2ͯV!͵V*~+"~|ʒ :!² - *"- ¿ ~- := ~- : ~ : < :* - -   = :- *"*"- =- *"=- }2:= <= >!W!ͲV*+"| :, *!9? ¡ *>/xhX2e*"]"]zBo |G||o ; o |/G}/O!>V U 7>{_zW}o|g=L |g}oɯO_yWͩ3 "*"͆%"qh͆%"*?":,̆%*"LU*͓T:*͓T: ͚>P62+ 2͚>*"͓T>9^d>OD*? }h> a^͖!:eͬ|*<2ss%>=xh̀ ͯ I*]|D:ͬ>2]> X**"dDM! "*"ʅ+w+xy#"^d>X*"w#w*D#s#r#">X*"####"ͤd21ͳʸ!ͬ ø!:=*5* d*####? g~2*5""^* d"\}:C h:=N2:C= *5*7"5"7:C'*7͓T*"7*"9*5͓T:C=ʞ=ʪ===! Z"5!""Ë!7 Ë!"5!7 *5+"5|ð!7 Ë!7A!Ë*7"5|*"7*"9!"!"*7|*9!’ͬÒ:C8`2CXvh!"|ͣ!!": d$:3Z!0Zͬ8U"*"*]*d"*||ʪ*? ¶*|ʕͬ:,2ͨ\:C &*"|:e2:e=**]"]:92e]*|++++F+N*ts#r`i"t]Õ**]t=t:t:Mb* ?e:W͢1H%!:H"*#"">2=2 Z *"*2C!M4:(ʦ!45¢4:C=!"ͨ:C ͬx*D"#"Dͨ2ͩ 3 *t͓T*d|*d|ēTͬ!"]2*>2:bU Xw+: vh*"ͩ"]##>2e2 *"t]:,$"ͨ\2:s:yͬ bay{y 2$ʙAڈ[ڙ0ڒ:ږ<7=:G!s~6xX!^4!~ 2:>/½ͳ\Cc!6  ¬6> ý: ͬ*$>2 >2:32e2*p"*r"*t"* " "]͓T>2 ]ÖT>}X!r5> 2:"kͬ<2"g5> 2ÁG͖!*"qh͖!*"qh͖!*"ä%:=®ͬX 'y:=ͬX'y Xѯͬ{X0_: <y'2=2>2 :x:Z-y+-xڣyZ=XvX's*|*,*"*"2<2 >2ã2sy2>2 !yw+X҈$ʈ>2V: =:*|#|>2: ͬu2x:x22sã! 6:!z4ͤ W :02͂ s >2xڣ:EAD7>2Cx:dͬh>2>2Xz-p+t:,2s:C,XQ,X.,> 22>2*|*,*|,"*":x-! :Cʣ2s WæXڣ>2C: <2s:Nʷ>!z !z,>>~*7"2:C~=~:C*7"~:C^:2*####* d"5 11*###6r1 I!~#z>27ͬ*7""`i"* *? ~++V+^|<*|~w>++++×|<ʽ? *? *`i? * dB~7++V+^͓T: *:e=*]ͅh+DM*t:e=ȯgoɯ!͓T: R7:e=*]:o&-*5":C* ? :C ¯͖T=«:h!~+~wZ*"5*[e~me~me++++:CG~me~me++V+^*7? me###* d"5:2!"`*"*t"**|? ʕ:=%ͬÕ>2*|"͓T!"*]*d"]|Oͬ**d"ͅh*]*+~+DM~+ngh? ҃`ir+s**t""t>2e]"t"3Õ~#d<2͚]>?>%p]!$s:#*[P!#s> p]!9Ld!GH:p]!#~ ~ "p]#͚]2c*#"**"* "G2s2xDQ<: ~fͬU*#"!H~#p]sɯ>X*#|ʛ+* ? ҹ͖TG:*w:+w*+r+s+"d+~2œG+~ʝ*####? X2sɷ22M2go"D͋h:%>2%'H*"]]Xvh:%1* ?e:H"ʖ|H::HX7P7(EFAʓIʓGDLʓ:%*.xhJ–>U>2͢:<>'H<2s7H:<x'H<7ͬ7GgoXHOFT])))0_&y"ͬ:%f*"*é%2O2!:T"! ~4g:o">2 >2Z2>2e]!.N#F͡U !X w+·X:%͕]pO> p]!+~GPIä%!͕ͬ  !~wA'7>'xhX͝%: =ͬm>!6 #=Aɯ2<é%XvhX}hڧAO! X-bk•X}hXAO! ? }h? •:,[)}hX,Q*͓T:e:2]Uhһ $!A_~X}hB!"!I"!D"! L"R}h!F#X}h#$~X*F2sX}h0G=xe=b=x}h>>x>}h>2!{(X/ʏw#}6 !{͆3h2<2z ͳͬiͿZ: ɯ2 2C2og"x"zE 2XOG:2z<2>2y.ʽ: +2222>2=2 <2XãX. ,xxyH2>2>2*|*,*|,"*":x-¦ͬmæ!y4X,!{~,,,w:0,,wXz:y!{~ʬ/2z:!z5m ͕ !{~1  5s ͯVs s ͂ !z>w,4s ͯVs ͂ ͯV>ͳ ͂ = s s s W >2͂ L >2!z4,!g:x-?:o:zg"êE ê!~w+y !w#‹ !~w#› ͯV͕ ͕ ͂ Õ !~w+» µ w# # >w# !"_"a !$! !4! !_g!_$!ɷ~w#)!!_ !"_"a!u!*_*à!j!7u!"a"_%!͍!R!!_ !_%!:%:ͬͩұ!:eͬo͆%242w?*"""O"!:,"!:%2"Ϳ:="2ͯVgow?&": Ͷ™%*w?:,p">!h"<"!44:%""!h"R"!44:%""!h" #!44͝%"O"z:4ʌ"*t?*t?*Ot?*.DMxRʜ"Wª"2:4ʸ"5ø":4ʵ"ͬ!HO͡2L!|2""ͨ\:,"X" #|#ͬ #*#|,$:,$:h%:%͆%%0s#r#:3<233%:,%ͨ\ÓTE X]%0=%!w+Xa%M%ͬn2>2 >2Z͆%: =ͬ͝%v%ͳ=ʒ%==™%:==ͬ͆%ʙ%>22eRELCRFPRNl&:% -i&-[&:Z&2% 2%)-:%@2%!%-y=7. 7!-Z&Q- 7!&-:%!%-!%:%ʁ-%i&> =w--:%–-:%–-:%2% _2͙0:0P0*%##:%2%GZ& ~--w# - #- w#-:%!c&~ .w#.X/:7>3.x./Ox=yT.[A@2Z&X/x A. [&ʝ./H.Tm./T7/Y73.L‡./S7/T7>3.R7/D7R7>3.> ڮ.6 #=.y.2%X/c&x../.y/y/L.2%/O.N.2%.O/2%y1> ͋1> ͋1>͋1*q's'%c1s'%0:%-:%0>1*o&q&%c1q&%0|}n1ƀ)`i1> ͋1> ͋1> ͋1:%-:%¶2 =1!q&>!%1:%-:%/*o&|=1#"o&p&w:&< 02*s)|:2#"s)t)0u)>&=c2!=?2!>_2_!% ҈2 ʆ2<ʆ2~=w4{ 2> ͋1~2à27ȷ!2+@@2> /!2+00DISK FULLADN͡ ͬs>2sͳd#>(xh!4** dxD#~w++++ 0#*"** d"> ~>2#q#=ʓ#ͬs:=$p$:,#*#|C$":($:e$8U:0G:v$O!$*:*j"5#>2C*l#y##"7#"7y*n##*5"2É$!6#ͅh|#oY!6y#!5*#|0$ͬt:@$@$ͬ̀ *"DM** d++Vp+^q">~ͨ\!6#:$:2*"#ͱ$2>~͓T>~!w$*? ʙ$w$:*!6$+6I+0w>2>2 :>(2Z}2>2ÓT*23>(xh:e2!pP?Command error?File not found?Can't enter file~/#+!+,!+,!++Æ,COMSCN ,"Z& ,j,:9,G:8,O*.`,# R,j, `,I,2 ,*+++"%*Z&:%2%*%y/:w+ ʆ,2%2%2%2%2%2%2%2%<2%2%,ů2%.f&-[& ,>2%!%-> 2[&2c&2Z&y,2%,:%2%..R /2%.C/2%2%.M&/2%.I1/2%.X>/>2%.ZJ/2%.P7:%<2%./[v/0v/Ar/:v/[/O!~6Gʨ/#~ ‘/Ã/v+x+#ʢ/~×/2%/2%:%»/00>*/ u+> /:v+!w+"+o>g6 #> w~# / / 0#"+_*++~ #y/#"++~7a.0{_> /> /s'!"q'!%:%c0q&!"o&!%:%ʔ0~0Ͷ0<,Ͷ0< ,!"s)u)!&~0È0 w#¿0w&0u):%-:%<0!2:>¡3@4w#2%.3!3w#¥32%.3!Һ336 #3:%.3!w#3p3242323:3=0432E4!3"3>23*3~@47E4#"3ɆADD ADIANA ģANA ŦANA ANICALL/CM?CMøCMP ¾CMP CPIDAD )DAD +DCX =DCR MVI A.MVI LORA ȵORA ̶ORA PCHPOP PUSH RARARERLßSBB SBB ȞSBISUB SUI"SHLD2STASUB XCHǯXRA XRA īXRA ŮXRA XRI>oͽG>ͽG>ͽG>gͽGU*͓T͚>:37*͓T2>9*͓T=¸6>>ͽG:G>ͽG>>ͽG:G>ͽG6>ͽG͚>:+P6>ͽG>{ͽG>ͽG>zͽG>ͽG>*"]>2e=2 !t?**9*? 9"">/ͽG><ͽGf9*d? >t?*? \9*d*? I9*>t?>t?*d*? &9*? ‘9*d*? {9*>t?>t?*d*? "&9*d*? ¬9*>t?*v9>t?*d*? 9*>t?*? ž9*>t?>ͽG>ͽG>oͽG>ͽG>ͽG>gͽG,7ʚ>=G: =_<:=;T;_<:+=;;;=ʆ:2x:*xW|U:? t:M>#f:###|+++t:}/+ͽG f:,7>T?1<,7=*?:!~:=»:x»:+»::+²:>eͽG>.ͽGG2+>gæ::+==*?;ͬ:s>;=:x=:+2+y@OC͡;º=:!+~Z=0=6P6=D=:D=>}ͽGw=~@!FpOC͡*"Q{=w=i?:0OT>7|=:eʗ=A*"Q>2+@ң=@>wýG>ͽG@>sͽG>#ͽG>rýGO>= >= >G: =(>:!+=x@i?ýG=P62+>ͽG͠>:>P6 >>|ͽGDͽG>gͽG>}ͽG<ͽG>oýG:!+x,;~F>:x,;P62+>|ͽGͽG:G>gͽG>}ͽGͽG:G>oͽG,7*Q*? ’>+"Q2>TͽG>]ýG>ͽG>:2+*Q*? "Q>:e:>>ýG=?: >@2+:>>i?L:0O*Q͡"Q: =4>"w? A:"ÁGw?:c*g"]2go"gX:G:f*ͭA>"t?zA>ͽGͭA>"t?=zA’A>`ͽG>iͽGͭA>"t?*d|ʎA͓T*"]]ÓT>>ͽGGͭA>!t?TA͡zA*"]##">2 =2e!*,7A* *? A* "" !""ÓT2CG2+V+^+++";"xʬBB ڊDʃC ʞCCʒC/DD́GB XB>ͽG>?ýG=kB>=ͽG>ͽG>G=yB>ͽG>G=‚B>ýG=•B>=ͽG>ͽG>G>ͽG>G>ͽG>2+ÒDw?* *? BA*q";͓T4C͖TC!~C* *? ~+FC],7* dE*++r+sme*:LbE=4E@bE=_E=[C*J͓T:eRE>w?_E@>DͽG>MͽG@͓T:2+:eʔE**? ҌE>>ͽG:LG>w?âE>ͽG*i dX2L,7:f*!F!$$">22 2Z>2e*"]]>w?!g>2 2Z>w?*d|͓T:%F:*"]]ÓT:c*Fͬ3FXä%:SCF*h"}A>ýG*:e_F_Fͬ}>2 ]>a^*"]!e6]:!p"fͩ*"*]"*e": 2:2*t"L:,ʄF!KF"f2!6(3A>=xh!b6 !b6}A͓T:+!%GF G:+dDM!"*"x)7w# x7"!"Q*͓T: =*͓T>2i7>9>ͽG*͓T:6: =ʕ7>9>GͽG*͓T>2͚>>ͽG>xͽG6:=p7*͓Ti?>ͽG*͓T>2=9>6!"7A͖!:"7*"""ä%A2" :"8ÁG>)H,8̀%}A>ͽG>2v:,:8:"ʤ% A2vgo9"X>(xh͖!:vZ8if*$8:,B8ͨ\:v"8qhs%͚>:+ʂ8P62+GC͡:%ž8͕]pO!8sG*+V+^+͓T:%8͕]pO!8saP͕?=g§8*:" 2<é%ͬ~ D DB*|*? +;;x=;5;:=#;x=>=½G><ýGx=>,;>ͽG:GP62+x<: F;:>)f:!i;:+ȷ =  2+**? ʴ;*=â;:+=ʒ;ʒ;=P6 **? ʴ;*A? x;=;x==ʚ>==;*A͓TÚ>O?2;ͬ;i?x=A;=M;=S;=D;E:+9!U<:,ͽG,7;>{ͽG>ͽG>oͽG>zͽG>ͽG>gͽG,7:+ˆ=>=P62+:¹<:+ʥ<>P62;s>:,;O~?::e?@@>~ýG@@>~ͽG>#ͽG>fͽG>oýG:O?:>ʽG>>ͽG:G>!*ͽG:%̑OEHH:e@@"C@ͽG*#|ʕ?͖Tʕ?:%dP*]:e@=@?: =?=?:%?:=???**h? ??*|"ͽG*##"?* ?e͕?*"*w?@@>ͽG*F͓T:e@>!w?>*w?>:w?>2w?CxCw!Q5͚>A* *? 4C~*;"qA:eUC*#"i>!ͽG@>ͽGEÒD>ͽGW*J:%OE H H*##"_E*;"ͯ ,7A*;"h6ÌC!D:+9=BNʡU==ʡ1=ʡ>/ͽG><ýG͖TzwD* ~wDwDwD!"Q:eKD>w?`D:+!D>/½G>}ͽG>/ͽG>oͽG>|ͽG>/ͽG>gýG!D,7:2+ ?=>=?>:+XDP62+>ͽG@:+mDP62+>ͽG>ÓD2+:e!rD@@͖T92v* " xW[eA~meme DmexE<* d:+G:vxD:n>9:vE2>2eGGP6%G:+@OC͡%G>}ͽG!h"U*͓T*"]:2e:2 :2*"t] *"*? +G!h""*#">ͽG :+==ŸG:CʚG>ýG>}ͽG>ͽG>ͽG>ͽG>G>ýGG:%H:%H!J4x#G~#GG͕]pOn]sHG:%HxͥOHG*#"XxGX H*****>)H>!g~#*r+sxͽGGGIllegal Statement NumbeStatement Unrecognizable or MisspelleIllegal Statement CompletioIllegal DO NestinIllegal Data ConstanMissing NamIllegal Procedure NamInvalid DATA Constant or Repeat FactoIncorrect Number of DATA ConstantIncorrect Integer ConstanInvalid Statement NumbeNot a Variable NamIllegal Logical Form OperatoData Pool Overflow; Out of MemorLiteral String is too largInvalid Data List Element in I/Unbalanced DO NesIdentifier Too LonIllegal OperatoMismatched ParenthesiConsecutive OperatorImproper Subscript SyntaIllegal Integer QuantitIllegal Hollerith ConstuctioBackwards DO referencIllegal Statement Function NamIllegal Character for SyntaStatement is outf COMMOCOMMON Base LowereNon-COMMON Variable in BLOCK DATEmpty List for Unformatted WRITNon-Integer ExpressioOperand Mode Not Compatible with OperatoMixing of Operand Modes Not AlloweMissing Integer VariablMissing Statement Number on FORMAZero Repeat FactoZero Format ValuFormat Nest Too DeeStatement Number not FORMAT AssociateInvalid Statement Number UsagNo Path to this StatemenMissing Do TerminatioCode Output in BLOCK DATUndefined Labels Have OccurreRETURN in a Main PrograSTATUS Error onPQ>/p]>Lp]:O!~p]+ Q:XHҚ]>Qn](Q08Q *W*!h? _Qͬ:fuQ*|:Rͬ:R*d|„Q:—Q:cʑQ3F×QXE͡2Oh:RQ=Q:*]| :QW:%Q͕]pOn]*:W>2go"]]UhÞQ=R<2:e<!:Gw#Rͬ:e*]|:6RW͕]!Ss*LP!Ss*LP!SsOhڅRR:eR*]|R(QdPQUhaR͕]! Ts2OhڼRʢR¶R:*ʶR(QdPn]jTUhҕR͕]:R!TsOhRR(QdP*]LP͚]UhR͕]:9S!/TsOh20+V+^"]:0U(U: =:(U*"<0U>2: *]*t*2v:0*  jV+^+͓T:e*qU*7v s#r#=UU:0!v=ʺU=~ʛUGßUGʺU!mxڰUUڹU++U7͓T"t"]V+^#s#r*U"U"U"U"U"^#V#>!>!>&2X*KVXV0G:==V=Vx=V= V«V> VxVVëV2s:2>!z„V>NO*? „V2:g͘\22s!V"fͩ:2]:(3 ͬ!g͆%9:+VP6!.N#F͡ :. W*SW!V+V2CW):W! H !͢w#Yͬr> 3Y? MY+? IY <9YSYhX^Y2wX>2bͩE: XdY*:02>2Z!""+"5*! s#r!p s#r!k s#r͆%: =Y:CY*!p s#rs%*! s#r:+Y-Y2s0*+!k s#ry!ZqhÍYͨ\:C͓T8Uu[*"!"*!k N#FfW*"!p N#FfWs#r! ^#V*? ʠZ#"7*5! ^#V"5>2C[\#|ʠZ+"7>2C[\y!Z!h N#F*fW".Z͓T*|I[:e[*#"7*5#|Z*"5Z>2C[\͓T2Z of SequencMissing Integer QuantitInvalid Logical OperatoIllegal Item in Type DeclaratioPremature End Of File on input devicIllegal Mixed Mode OperatioFunction Call with No ParameterStack OverfloIllegal Statement Following Logical IWrong Number of SubscriptFile Not FounToo Many Parentheses, 14 AlloweDuplicate Statement LabeIllegal DO TerminatioBlock Name = Procedure NamArray Name MisusCOMMON Name UsagWrong Number of SubscriptArray Multiply EQUIVALENCEd Within a GrouMultiple EQUIVALENCE o REAInvalid Operand UsagFunction with no ParameteHex Constant OverfloDivision by ZerArray Name ExpecteIllegal Argument to ENCODE/DECODn]:%O|ͥO}ͥOG:%OxͼOxͼO0:p]p]O)))ͼO O`O*͑O>'p]*͑O>"OBP>N#F# #P<33PO=6P6PyP7yͼOP͑O> p]>(p]P>)p]n]:*P**]*͓TQ*]d|>+P>-p]xW͑OÓT: >/p]=P>[p]:O/_!P~ͥO> p]# P~ͥO>]p]Q!~:Q#~p]+~p]:G+~ͥO9S3S(QdP:e3Sn]*]:%'SO3S:OOUhR>2*|WS͚]>%p]P!?p]P!PTs2* W:f›S:cʞS*h͓TWW*Y|XèS Program Unit Length Bytes Data Area Length Bytes Subroutines Referenced: Variables: COMMON Length Labels: Warning(s) Issued Fatal Error(s) Detected :e=*]O<2**t͓TdP͓T>+p]ÑO"*#|+* ? ~2G~2+~O2 ~82~2e+V+^"]+V+^+"tE !w+Ty U*]" +~~2C#~2> !z:W+++W*:dͬ>_:.VX.V+WX*V2sV!>))sW =kWɯogWA>ͿWyڦW>ͿWC HB Hy:GW>ͿW!F H+´WW>W_xWGxGXW/O ~G> p]=#W7XxXx!Y~w#4X:Y1!"Y*]| :\X:%IX*:CX### /> /y2NW:cWøXBILROF*!Xx2gWÓTO* *? * "" ͬqO!gyV[*"**]">*2>2>2 :e*tZ2e=<[*"t"]]Z2Z*5#|p[>2C*"7:2[\*5"2C:0ʳ[*"5*t#"7>2C[\*o#"7>2C[\*l"7>2C[\*5*"5*r#"7>2C[\#|[+"7>2C[\*m#"7>2C[\*j"7>2C[\*5*"5*p#"7>2C[\"7>2C[\͓T*#"7>2C[\*kfW#"7>2C[\͓TI[!"* *5? t\͆\2*7? ͆\2͓T=–\:>ȯ:222s<>)xhXV!#6*[#"[!> 2 :\͕ͬ]]] \ \\ ]*[Pn] ]] ]> 2w ] p]D]#]] p]6]] ] ] _]> w#xPN]]w ¤]ʳ\2P> :|]ñ]:%ʑ]ͱ]:%<‘]/:X> p]> p]#>O]> j]!X ]4~½]5> 4Ë1 ]6] ]]:z] 4I42z2!N:*w:eG:! +w+*]r+s+*tr+s+w+ .^:F^<F^>2: * r+s*]++r+sGs*f? x^!N~‚^4ͩEhX*"z!xw ڗ^5A*f? ~!b4`*d|^:x ^:"^:^ͬ7*f? ^:"^*f!"fA"f́G"H:xo_:b5|ʓa55͘c**? s`:Cab0a b:C=3bebڊapb=ʊaڊavb:1ea:C_!~2C:1!22C:1ʊa!C>w=ʊa* *5? ڊa21pb!1:2wÊadÊa*7* dڢb~ ڢbҢb!O F~wÓad:2:1c*5"7>2C21Êa*####~wÓa:C2z*"x2|:=c:@c:1c dͤd!|4#V"f #e!* X<=8e#ea^*f*? dͬe x>He2*""W"`"\* "^Àe*\*^* d++++*#? ګe++~~e+~e###* d"^ѯ*`X*#s#r"**d? A: eͬf*d|~f*"h? ~fU*d*? fDMe:%fͬA:"Pf*g|Pf"]22go"gX22"x]fh6e`i"^dͬg!9*? ͬ!"d! 6gf:%:eʠfͬ*"dA8͓TX:¾f2*"]!e6]f28:"g*g|gA"]22go"gX2 SBA SBAITNIA TNITNIDIDOMA DOMTAOLF XIFINGIS NGISIMID MIDIELGNS PXE GOLA 01GOLA NIS SOC HNAT TRQS NATA 2NATA KEEPPNISBADNGISDELBDPXEDGOLD01GOLDNISDSOCDTRQSDNATAD2NATADDOMD0I$ 1I$ 2I$ 4I$ 3I$ 1XAMD1NIMD0NIMA 1NIMA 0NIM1N*+""""*" "(go""2222222!("$""&"""!"@">"D"B22!"<?No Start Address?Loading Error?Nothing Loaded?Out of memory?Illegal Polish Exp!!!!!2*!L~4!>2 2:2ͦ ,/C2>2M>G@RSUXYEt )ð$O2HH2G:2:>`0x²" _2:č2N!~w:} d_Oh!__*]WUh _OhG_A_A_**t? £_ Uh$_A*h|d_:Sd_͓T>2 ]:x|_'H*z͓T:x2b*g|o_:"o_A*g"]2go"gXo_:eA_*"!"2**]d|__"ͅhd:_*d|__>2"º_**"*">2e*]*d"]]`A_ͬ> Bd22*"*++++~_!N* "*? ұ`*++++"Ld_*"x D`N`*"**? N`*"͘c:C` a:2`dcc͘c:C a:1 ac21:C a*####>w**####"*++++? &c͘c:C!zb*x":|9c͘c0a2|c* *5*7? Sc>c? cbLdx2Cy2*~212##^#V* "5? ͓T=:<2*####"`c"*5"7:2:122:2`c*5"7> 2Cc*5*##s#rØc*####~wc*5*#####:w#s#r*7":2:221*5*7"5"7!Fwp!FwpG*>রw*>G#N!X~**~d*}d*}d*}d*s#r#*v*t? *"v͓TWÓT*:1G:Cw#:w*s#r}o|g͘\>*| ~f".*",!*/~ d*e#dN#~#^2"!":gͬdf2sf:22!"fRgXEXNXDX/> a^DQ͘\:2X)ʵg(g,g/d=]gdͿ͘\:, ͩ:=ʠg: KF> a^:2͘\ XdbgdͿ:2s:C>*bgög>2S>:N4`>2b2cͩh2 >2e]*"hwXW͸X:SIh!~6 2 *ÓT*:/O "* ? ?ÖT>,xh>(!ͬ~ͬ:o&: 8U:0/!j^#V#<<ʷhN#F#fWähBKfW IM1XAM0XAM1XAMA 0XAMA  NGISIMID MIDIELGNS PXE GOLA 01GOLA NIS SOC HNAT TRQS NATA 2NATA KEEPPNISBADNGISDELBDPXEDGOLD01GOLDNISDSOCDTRQSDNATAD2NATADDOMD0I$ 1I$ 2I$ 4I$ 3I$ 1XAMD1NIMD0NIMA 1NIMA 0NIM1N~w:2S2*|Myȷ<~@B"*Y*|*~ ::w~ G@x d~ h Link-80 3.42 19-Feb-81 Copyright (c) 1981 Microsoft ?Command Error~I#~#  `{ +!~G#~ x+#5~: (̓>*I > I:!o>g6 7ʅʅ  r:+r#P22! X:UGO : "@"D">"B**$""*$*&fBK*$*&c"2 G<2z6#z:O-2 t҇!ykyBKcO! s#r!> s#r!B s#r2 Ժڥ!B s#r! ںs#ryk!> ~#fo!ѵ!$}_|W>2 *>*@5**(:52 I**(W{_*#"&"":GO0ڐ qڐ)))ҏʅҏ)o>g]y +%Overlaying areaDataProgramÃ!! ~#fo!2 2 2 2  (2  s#r G2* *(2 f [ 2ͯ;:P x/Gy/O~w#~w# ͯ"z ҧ _z!y ^#V   3 C `i ^+V!4*# !4f !5f PY;ͮ f s  #rà ͮ lgÛ ͮ ͮ Û ͮ #Û |/g}/oͮ ͮ Û ͮ ͮ Û ͮ ͮ DM!>=ʛ ))! ! ͮ ͮ zU Û ͮ ͮ z? U Û BK}o|gZ :ʁ 2 ҁ |ͱ >]I̓::=">2*"Mo&'  d  >0G /}o|g x0  > xI$MEMRY* * 7~ ~~ <</_**2 |}!6S#6Y#6Mx">*"**2 ʝ ~O~@ʊ +^+Vͩ > ͤ#+~ͤ# p > ͤ#=‰ >~ <</O L  ͨ$V#|ͮ }Ϳ Ϳ Gä#> ͤ#> ä#: )0I) 0I | }I0:̓! ~#foG G G>>IÃRQUESTYS*":ʨ**2 ʨ~_~@ʝ+++~#**BKv"*c+++c2 22:go""F"H2"J<2:**&**(*Mk@w:2+++~ 2q+p:O!>2́}|! s#r2 yk!}l>/I̓~W+++~I+s%2nd COMMON Larger /*"F |2J*2 iz> ~@w7ͷ: >:=>G:=>@w@w+w++:2́: ʍ:=Er+s!F5#w›~+ ͷ6+6++r+s*:2́ͷ: :>@w+6++r+sNz#ͷ:=>Bw+r+s+r+s*#"!~#49ͯ6+w*xG Bɯ2*\>7@jͻ@ڃʪ@ͻҪ@!w™4#6 _>w#Ý!¶"O<2>X>PO! N#F 2: 2LZ&bo: Ez"H*>2K*2 f*>+^+V;":=<2=: * PY7 *@ҭ"@!*"*&!"}2K<2:*"**|G}~O  A+++ +}<=ĺ yy7yM77,7#2 !> _!>?I~#I!rd!x Not Found> I> I>2F2:_<2!F~F! w#! w |!m)!̓*DMð$[Begin execution]::ʲ*"**2 ʲ~`~—@w+++^>GOq ~+c>y6 #=r*"!p [ 2} *"~O_+++y++::̓:2} *>[I G! >G~# ~@ +^+V;*(ͣ!w# ( ~@( +^+V"!= l2!N ?Start symbol - - undefined ~#` ͍ REL7*}2:`ʕ æ :̓ڷ  @ ̓`   *"* >w ͣ : ͱ ! *<ʹ !  Undefined Global(s) Bytes Free 2 ڣ ͯ ~O~>-> > > >/I+^+V+~I F /IG~ i !Ll ~ G+^+V>>IG:?2̃>w! :ȯ2à  ´ ~++GOŸ H+ y >ñ ñ *"! ~#foBK#:=H:J?*|4?9}?#ip#:K?*|]?b}?#f?:=—: ʗͷ0w+p+q+p+q#́B++s0:7>½[?@20x  > 6 #=x2y.0x  ,!~ ,6R#6E#6Ly[N0NAJ:N3[J]J@J\J^J_JO: :2́BK|~_q#Vp;Œͷ:=ʮ́>@w+r+s+@E:2́r+s:=*>/o/g W~"!F ^#V!B ! y :**$2 >*@">*@ډ*i*&*BK*&"&2 cX""""D"B2 ڙ*@*&*2 ҿ!*f*$*BK*@*>*&*$c*@">*&*BK*&*$"&X"""| ~w#~wPY>BKԁ~@\: A~@w+~_q+Ðͷ:=N>Cw+p+q+r+s!ml̓%Mult. Def. Global ~@*+"PY>BKů~+N+F@: :Y&:=zQ |: r#s: |;Çz~ y/O Ox_`Ow#G2+w+w+w+ Nbw+w+"*7 !6j&:Y&†: : 2 **&DM* "* "*BK"&X""@"D* "%*(|}~_!j^#V*"(#&ͯ;~#+<q#pͯ;^q#Vp{'ͯ#~@+^+Vf{r#s;^#V{Ur+s'ͯ~O@wy@+Ns+Fr{'~2ͯ*:w+r+s+p+q+"~+V+^+F+N+*@@ DM!`i G*2 * IG! G*  ̓%%Bad fixup offset entry, will be ignored Value Loc Entry A Entry rel. >>>>v<2=O!&چ! ^#Vڒyڟҷy?ھ2 ?ھy!!$ s#r^#VW!:p#*$!,N#F#~#fo!4^#V  !(~#fo2 Ҫ!:{_{_~ʪ!&^q#Vp!~s#_~rW}ʈ:ʆ#2 cX{_!:6)`i{!:#»*2*(6*""**,*$"*<2 "<¬2 Ҭ2 Ҭ!>,I*&M^#VyBa!F#~#IG>(Ia>)I: Start = External Public = r|(2 ?!2 ?!*!z9!7*"*"*$*e!"g!KP*"!FX*BK*X*&*¨!!Ҩ!O**&X"*&*BK*&X*"FXQ!PY*"*&"&!*&*""BK*&*X"*@*>"@">*"&*"$ !t"~R#~E#~Lp":e"s"w+e"COMHEX"F< $2:ʻ"ʹ"*@*>2 ڻ"!~"8 ~#:":"*;"$">*$yO:*$͎$%*>"%*&"%*"%*@"%=%m=%ͪ%C%m%^%m%ԃ%ܓ%m%Ã%͓%m%ԃ%ܓ%!% N#F#^#V#~#fo|} +x~+ È%xw# Ó%xw# ê%~#fo=%q#p:Y&*(2 ~%jͯ2&:2X&*"2Jͷ6+:X&wͯz2&2X&N&:Y&2&*":X&2Y&*r#s+:X&À&*͹&"2X&2Y&!( p# g&!N#(~# u&r#s#(({ʜ&{ƀ_Ҝ&zʵ&'Ü&ͺ'#('!E('!E(V#^ '''! '&'&z'!E(! ÏCMAC"<2:2<2;2\:2Y:2":2#:2;2$:2}<2;!; w#˜<2W:2]:2^:2;> 2 :: =2:>;2b:<2a:!"c:+"<+"e:*2<2<͑ >>g >>0>w#>!w: ʉ yw# ‰w:h:=2g:͑l:[:ʣTKЯ2[:͔KdIڪ!OC> 2w:NG> NG7+ !"r:2_:=2~<* ;" ;:w:*>$2w:$2t:T :ʃ:t::!y!$ ^#V  F#fh(!^#V ^#V7y! ^#V^#Vz!, s#r Gyx]!4͢s#r#“xʵ|W}_x2*( c2yoxg*"*"*PY2 ":=*!"**&2 D*{OzG*$*>DM7xw# X +x~+ ixw+ v:7=Oʠ: 7¬?Intersecting O*2 <2́:?O: ^2!:{ yi*>*@2 E!*$P  2 ¸*2 P yž*2 P 2 *2 ! ! !# !+ 2 YqbelowaboveOrigin loader memory, move anyway(Y or N)?2 l 2 ܀ V !2 ܀ y :ʓ *ʼ ڝ O2 ¼ y*¼ !@2 !9;;;;;;2 !2 z!=%7! !!V#*|1#2 1#2 1# 2 5#j#z#7#͎#:V#yOV#z#͎#:ľ#< $>ͤ#*}ͤ#|ä#سȯͤ#zƒ#z~#ͤ#Ø#!F:_w{<#2 $"#yO#"#!#͘#j#! ~w+ x !$?Can't save object file{{ _zWR$> X${ _$O>:ͤ#yͮ ͩ Yͮ ~#ͮ z$ͮ B$>:ͤ#Gͮ *ͩ >ͮ ͮ >ä#!A%͵%!G%͵%!J%͵%!P%͵%##$##͵%##$#͵%!%͵%!%͵%*$"%*"''ͺ'z{7E(z w#'0:ww:(!R'#'+#'!H'?Segment , file not foundcan't create fileread errorDisk is full/'!W'/'!f'/'ͺ'!x'/'ͺ'!'E(((¢'(®'E((<ʐ'E(((<ʙ'2(!(#'+#'##2(w# >( V ;=T !;~4#>$Nwy#*u:+~# ʴ T y~y#~"MM y*u:+"u::W:` k "*4Ö*"u: ô:W:ʮ "r:  " :ª@ T 5 :W: 5:W:a``#~! _^#V#N! ; !w:"u:*r:|T :W:a5%!;; Nwy#(!4;"(;!*; q#@5 J a;a::Œ:*;VʀMʀDʀX2;ͷ ACDEMNOPQRUVX!*;~ pNO END STATEMENT ENCOUNTERED IN INPUT FILEö:;.ʐ$ʘ[! Ók 2VW& - . / 0 G H *CIDCRDCDDRDD*DINARND*NISEG"SETZIT3ALLSALL1Cj?CF1M/MA?MCMP2NC2NZOMMONOND1PQ PrPDsPDR2PE*PIrPIsPIRj/PL2POSEG1Z'AAj'AA ADBC"CR CXR ECEFB"EFLEFMEFSEFWIiISJNZSSEGWIiILSE ND NDC NDIF NDM NTRY QUQXjXXXITMXTXTERNALXTAZUB#UBTTL*UI$ITLECHGR@ORRA*RITHL680807Z80%COMMENT&CREF'DEPHASE(LALL;LFCOND)LIST*PASS2+PHASE,PRINTX-RADIX5REQUEST.SALLwG#w#w#w###w#? "p:####p*<͂ >8*n:|>!n OCSymbol table full |}:=i:\:i::i*n:~@iڮ >>H!;F#~H¸ *; G~8 #~ +~w#~w#s#r#* ;s#r~w::# ~V~V#^#V#͂ G* ;x9{V#zV:*; *n:# :_:V*n:~*n:#~wxGê>)y)? O+)O5)OG)OG)yOO)y)yͿ*)ËOGOOGv̒)OGOO)Ϳ*ïů2: 5 (#2:Ϳ*::0̒o::}L(LzQ){)ZԒ::Ēo::=ĒZԒo>)ozAàZԒoz g:: Ē>)Ē?{)::=Ē>)@àZܒ^::rĒgZܒoL::(::Ē>)oZܒĒ>)oZܒ:: Ē::Ē>)OԒOw7::(>){)::̒ ::)oĒ>)gi;w::̒o::Ē>)2:O*y@>*)Ë>)yK͠Ëo::҃ ::d::?͠{):: y::񇇇@Oè #::Ē>)Gà:: o`Ɲ)p::ͨ@{)Ē>:)ËgĒ:: à?o>6)K@{)y)::O::Ē>)yWà::G::>*;#";ª%*(;@;͂ *(;:=ʅ`))0) m0j#"(;Ͷ{::k*;##";:;G5:;G"*(;¿#"(;CͪBêxx6!6**;##~#fo6"6'##"(;"x*ͽCͮRN LOBALkvALTvLTF2FB9FDIFFEFF:FIDN3FNBFTaM)NQNRNC8NCLUDErNDsNDRrNIsNIR"NRNXF1F2FDEFFNDEFRPRPC1C1M2MP2NC2NZ1PQP2PE2POQR1ZQD2:DA DAXrDDsDDRrDIsDIR3*HLDOCALJXI8ACLIBACRO:@OVBVIAMErDEGOPjOPQRRARG*RIsTDRsTIR*UTR UTsUTDsUTIAGECHLOPR"OP UBLICUSHS$USHALARC!EPTZ&ESETR(ETsMETIsEETN IMY*LjLALCZ,LCkLCAroLDMNCNZPPEPOY.RjRARCZ0RCkRCArgRD"STR2STZBB*BIR4BCj7CFZ6ET"ET3"HLD0IMZ8LAPHLZ:R : 7}ɷ[ a { } 5 iͶ*u:+"u:*u:#"u: aR 5 !; q#` !;6#Ͱ  2:a~ w# yʞ Ͱ w Җ w Gy2;xͰ Җ Ö $.@?_// // &i:~< Ͱ & 5 Ͱ 7  G!<:;& ! 2;~!=<  ";^#V!; w#9 !;~J 6!;N z ^#V#^#V#~=z ;G #o #~=º "n:#~+?;!;w#¡ w#s#rO O +>Ò <*p:~*<####~7_"<:;$.?=O# "n:y)O5Ϳ*)Ë5 ,ĶɷÒ@C͒ÒͿ*z^<^͒:;Ē{Y! ^#N! ^#VOԒx){?)O8Ē)Zܒo::à:;L::0::à>):: )>2:’::<=’<2:ů2: 5 (12:Ϳ*y,L::07a::8OͿ*y)Ëڏ:: ?a(g::ĒL>)Oү::Ԓ OͿ*ͻyH)y):;G¤xG * ;* ;͂  ##͞6zC<’xx.(::::6oy & ::à::à>1{)::ul(g::Ē>);::)>F)?{)Zo:: Ē::Ē>)yBOZĒ̒o&::ĒAZo::(::Ē î::Zܒ̒o::̒GxĒ> à::Ē::g:::::ʟԒo#::Ēàg:;:; o::̒ ڷ::Oʧ>)yC͠2;2;Ë::(>")Û::Ē>2)Û:: :: Ē::`Ɲ)͠ËĒBͮx*;++*;#:;G~w#s#r#* ;s#rCͪBͪi:;2;:;ix"Uz H2;*;#~2;*(;<;͂ *(;:=ʪ)0) “0"(;DͶEͶáxͿx0:ͷ:Y::X::W::^::*; :*; :7=<2; 2;<2Z:4:}+2D;a>+2D;:*; a:]:a:,; :`::[:m>C2C;:;Ÿ:^::*; !b:4:a::;Ÿ:=ʟ>H!*; ~#¤:Z::}<=:~<!h:~#0>:g:> !w:~#  > > O:;yHNG>2b::^:/> H!J;w!w*c:#|+:^:Fó*e:#"e::^:|`>-H́!;w>SHF~#HwPX چ|Ą>: MACRO-80 3.4 01-Dec-80 PAGE :*; Q*:#":*:#": ::i:,; i!,;"(;kO! ~*(;w!4;"(; '"!*;:;*;ѯ:;xE* ;* ;͂ "n:" ;HͽA>͎yo>͎CͮBͮy*n:~GW>͎######Fͮ#ƒW>ʞ_x˜GxGžɯxG ±7xx!;~w#4=I>2;T   'D"D(! ~ 2:A ;: :1 &  15 ?*u: #n #n7 ̈́*#~G Īxw+â"u:# ::ʅ*::ʞ7͈ # ʢ*~8x##^#VO#^#V" ;y y??7͈ "n:~8$::Ķ2:##~2:+~+â#~+â#^xOB!V ~PJ2; A ?:;X|" '@ V'$@  O?XOR AND NOT MOD SHL SHR OR EQ NE LT LE GT GE LOW HIGHNUL TYPE :: ::::Aa" ' ɯ*;Ķ!y" ;  s!}!!!!"S""#!!2#=#I#V#\#e###!###### $s"zW{_s"zW{_s"zW{_:;*; |/W}/_*;:;Ĥ|/W}/_:;Os"z!)!s"#+}zW{_!*;:;y!y":;""yO2;̓"!:;y5"2;5"yO:;L"yO# {_zWs"DM!>=o"))]"]" :; *;:; ʛ"y :;O*;" ;*;s"z̶zB"|G|"|"""|/G}/O!>" "7>{_zW}o|g="|g}oɯOs#r2;* ;##$::/%:;/%*; H2; 5 "H%'%G( ( *u:++h% ( o%[% [%5 ,ʅ%;ʅ%ʅ% "u:%y%" G( ( ç%)( ȸŸ%" ʾ% ,5%)5%O:;i)y,5%x "%'ĒO( G" &x)%? " %&x) ,%x)y? %b&%:=W&z*;#";::Ī@&*;:;G]$%:::*;U<2*;%͋y,u&:":=&G2"::#:=ž&2#::#:<2W:&2$:? ͘:$:Ę:":̘!#:&=? 4=2W:<2$:? 5&:":_2>W!%:7~&$:&w!":4? 2:? >2!:b&2!:z’:*; {=ʒҒ<2 :gkb&z’::{X) ܒ:*; X){2a:4T ’:;u)>!;w::"n:H,a):[:¶ *u:+Jʧ)͔K=2[:*u:~#"u:!ҫ) (’( '’T ’'’( )’? :::;)>;!;G~ªw#)pJ* /’T B*/’? #~ª~$w$+" ;>2;!";Y$>2;:;üT u* ̈́*#~d{*~w,S*͒o*wͪn*~8~w#w#w#w"r:Ϳ*:*;2`:Ux¤x 2_:*r:"n: x:;"r:~w|2`:Ϳ*x¤*r:̈́*#~ª~@ w#s#r#* ;s#r-)0+3-6*9/<;+,+ Ķ>>>> > > >!G( Z" z( o2;( p" xu( eo( ;„=xu*u:+G 2;*u:++"u:G "u:|Gg: :|o|DB|} ||BDHOQĶ=OQĶ ?!G B0԰)#&DVH!G 0)T]))_)!G 0԰)))_@!G Gv0 k))))_YHð:!:µ!G 0 ڙܰO: :=ܰ<_PV" Çþ&þ=5 5 :;2;@=`# @! @#;#G og2;2;2;2:2:2:9";*<͂ ]1L ?O2;=yf ^ ^ ͙ y2;ʭx:;­̶í:;OG:;?5 ,©:;ʩ2;>? :;O:;f xG:;O&_y{* ;YG&!!_~x ͶůG|2;͙ y2;: '#:;O ? 2;:;G2;*u:+N{*;2;z̶̶V|=VyWx=zʐ zʐ &ʐ ʐ ʐ Ķ>GG&";z¬  !";";y2;  2;     !:;*;!9!o>g~#fo:;O_yWs"z$#|$#|͢"">O0 Gt#͂ P#t#͂ ?P#t#͂ W_ t#i#t#͂ P#t#͂ 7P#?P#:;#*;> O2;*;\W> O2;*;]Ws"}G_s"}G_s"}5_s"}+_s"}Go{G_s"}?_* ;*;͂ :;_ :*; O $> 2*;J*x 2;xGY$:;Y$* ;* ;͂ :;G* ;" ;::""; :;‡$::H:;$:;ȯ2;T $>G2;<2;2;*;]$$>2;G2;*;]$$>2;G2;*;]$:;J*:;;%o& ^#V*;͂ :W:i2W:!#:'4:":=2X:o'z&o'z/&&::? =&::? &7:W:v'T # ^'i' i'&?&:W:b&! "u:&7'v'"u:xi'd'7'v'~,'#"u:''"u:yd'd'# º'i'Ͷv' <Ē" ' " &' '*u:+#~>(T], (z( '#*u:z̒}O|G:*; T OĒ7 #~@w ~Īwy,'(J;O`(;; *u:+~# }(}(g(g(#"u: (’( '’O[(5 ( )Ē? >2^:? 2^:? 2\:? >2\:? >2]:? 2]:? >2]:? (>(:=/o::? }2=2Y:? >2:H:}<,:":,!:4~=«+!;~4+!J;~4+!X=#;~# V+ V+V+ V+ :+!;p"n:H$!K"< ڒ+"n:~w#~@´,~k+#^#VHk+*; H *;{Hl*u:!"c:"e:!=-w!<>8:b:8!b:44!2-w!=<>8,*:|,́:7=<2;ā2;,!,-!,-*:|N,>,H:7=<>,NǴ:7=<2;ā2;!,-,\,"H*;|t,d,Hͮ:=ʋ,>H;H{HNo Fatal error(s) Warning(s):;GHk+-!,-,REPT/IRP/IRPC/MACROUnterminated -!&--> > :7=<> NG> NG!,w:7=&2<Ç.&.:<.>&y72<*<~T.;I.O+I. 9.x+~I.+.:<*<~ʅ.;z.O+z. l.x+~z.^.<*u:T &..G~# ʥ. ­..Ù.x.G .& .5 "u: . .5 ...Ͱ ´..Ͱ ... ;//͕=*u:+~ 5 5 00!:͂ 41#6 +͇.&̇.:ʇ.! Y1iÇ.!c1h ?Stack overflow, try more P switches b&:*; ʘ1" Q1T :T ͑-1w:y7 1ɯy77!*<*&!ɷG-"<Ͳ/O:*; 2*<-y6+,##^#V6#"y<~(wG-"<Ͳ/ ,5w+2<2< H>*>M>C>UHÃ9*n:#{G#^#V#^#V" ;""n:#~ H>IH!*;"(;k*(;6!*;w~G#^#VHPERELCRFPRN8. 7 /88 / /+8"<7 7> y77:.!1!1?*0%0,0 0 0;0!( 1w+ /"00b&:*; 0: :w0W0PX D0|B0>:ï0)0͛0>)d00͛0=`00D͇0E͇0 >0ï0x͐0x0:ڛ0 ¯00O:گ0>0ͯ0y*0w+"05 *00Ow+ 0 10w+ 0/0w+00000{53( <Ēw+:*; 3GC3/ ʍ3>ʐ3$3" <2< 3 ʆ3:€3ʐ3À3À3 w+C3:<36+w-xĒ"<&i"<3å1>21*<>2<91͑-3 .;.'3"3͇.3G- .33"2<"<͂ V4: NG> NG:*; ? ʒ2w#w6c7s#rh7"<*<6s#r{_*<{6*<w{ʕ7̟7"<{_6z6*<}7}o~Ͱ7{7̟7{_6{ȯw#w*<s#r6*<6q#p*<{8*<"<~{_6{_{78̟7*<*{<:}E:=!=~ bEw#XEͭF:7>ˆExdE7GOx=y©E[A@2=ԭFx ږE =E7GÝETE7GT77GY7ÈELE7GS77GT7>ÈER77GD7R7>ÈE> F6 #=Ey.2=̭F=xF(F7GFy/y7GLAF2 =7GO)FNLF2=:FOWF2=:FRbF2=:FCpF2=2 =:FM{F2=:FI†F2 =:FX“F>2=:FZŸF2 =:FP7: =<2 =:F7G[F0FAF:FðFO!~6GF#~ FFBx+#F~F2=G2w>!7=>J = I!=>!= I:=3E:=MG*=|=2I#"==w:X=<`GI*@|̅I#"@@sG@>X==ʮI!=ŠI!>êI_!= I I H~II7ȷ!!JOC@@J> NG!'JOC{GDISK FULL!-J:>J@PKw#2=.K!KwRSdd4@42.XCC 0S(84%8BDFl|hrk0inʩ`MP $Ub 0+ #DuAh.Fh[  "=,(+H@2. AB-ER@ >Zql%d?Command error?File not found?Can't enter file~NG#OC!CiC!-CiC!=COCCCOMSCNuC"=uCʿC:CG:CO*.µC# §CÿC µCÞC2uC*+++"=*=:=2=*=F:B C2=2 =2=2=2=2=2=2=<2 =2 =ZCů2=dE=GE= *D>2=!=;E> 2=2=2=y,2=TD:=2=dE=:=aD=GE=:=2 = 2 =~D:=@2=!7=;Ey=7dE 7GE=D 7!X=;E:=!=E!7=:=D@==> =DE: =D: =D: =2 = _=:=G{G>*NG B> NG:B!B"Co>g6 #> w~# 7G 7G uG#"C_*C+~ #F#"C+~7ȷ> NG> NG>!">!7=: =îG=!"=!=:=G~GH H> H>H*>>7=ͮH>7=/H:=3E:=8H>=I*===ͮH==/H|}ʹHƀ)`i I> H> H> H: =3E:7=|I#">>#J2=.K!KK6 #K:=.+Kw#+KpQJ-JPK2MJ2NJ:NJ={KQJ-JڐK!QJ"OJ>2NJ*OJ~‹K7ÐK#"OJ!!JOC@@J> NG!'JOC{GDISK FULL!-J:>J@PKw#2=.K!Kw! 02FP,@9I22 c I:pS 2D L$D1L`2D $EYQ`2DUh f$AEU2E5 M$SVV`2DX 5Z$DY`2DEh $C4`2D3h $CD 2DH PP"5K%  pHb [qL ¡@ ;<ͤ@N f0x$# XT!``"|O`V7a#+AwXT ¥@lUdjX S6HHR "b WI*I+H Y |I+H U3]>2W1 $# XV d&1@&Hd(q8Hid(Hfd* &Hd+1p&Ha=df6HkGdf԰6HowdhP&HdiP6Hd1P(Hrar(q:HadQ &HuĈI&HtdݐHrd1&Hd(H~dנ&Hod1&HcUdHcL(љ&Hd(Hrd&Hld1Hcdf1&Hdh&Hhdj`HYd1&Hg`dQT!TE5%I0t)*3@C@}> |z@h4 Dz¢3B!0" 562 P%520I#`A!2<IU$ AA2HIQ$2TUc&AA2 T(52vITS!DDIpt"&5Y2h3@3@h BDd0$MVARGBE4h`$DPHFRDEȐ$DIVF2DX$5> Bm>p> `V>EiQ8c>Ӑ?*iFc1L? RT?@3@:gٰ+4 ڔ 4eW0@+4 k4hC@`f!u2 P5 V2T #2`%X3Iӑc/A!38Ṣ4A%<32I#2AA3TQ92 L,@563Uc)93Dc3 MV2TP0 aQ:QUSL!dDs t"&'3@ a@R-dDD49`t"!@`d"($FA" d(")@@!"j2lSbDE48BDhɸ$MFARDDd(H$DCMP0bDDu#$MURD$s(`$ERRRDDXʸDLOGbDDUˀ$ZAC2DȠ$CC2D4ȸ$XARACBDh$ARGV bDDUQaBk:  HbU/N z{m醢tBiNg z@ҮР^iD LFBHT8@@ 2fi[!l4 uUUz@h!T@43@h! BY4f4f3k̀3@"`04} 03l Qc- 5V3( P.@A!2I+ 2Ic, 9V2 /A1b2 0A1f3c153+1@ H G66hԡ` : uA@>@+$ATRbDd$x $DAC0RD$s($ATIBDdȈ$SAFbDD4 T bDD4U =5BjtĈi H` inʦ@ 6'r@q `V"`CK6,:*(fQ0H*Hq H8h(3U2DEX%X$DIVF2DE@,0@,@hʰ@n@xGh4fA4Ijj3@{h$} 85<*~!`V?a \(fQHg4( HPARDTh$MMFBDdɐ$MU2DYU 2DXI9$SUS bDTDH$DSHFLbDTE8UMN$DRNDAIP2E5( MF$ART`bE$855$MAF Q`RDDu(9H$DPHAIRDEAA$SQF 2DXQ@$DSQR3 bDE(A%<$DONEIUSRDDdh$DF4`bDDs(19L$DM2TBDE 5J$MQMh  $XT hh @4 :t!FVNG*zti h`DgUn Oa`fԀm7f0Ugti(S*@p&kv*ـDFLRRDE$MULFBDhH$DPPFRE5T$iQQӡTE4tt)5Y c tH2 Qc 5YI2 P̣"MpPDD%98t" )@Ɍ2DX$MFMUSdDD)@,r 4z+4zh-*^!6<_U8N/-xi8ʁ3j@CxjH:;`6>@fhɌBD3(ː$ARG22DXȰ$DCOMPRDDdhʀ$DPIbDE($DTANABDU%(`$MFMbDd$x0$NU2E5X$XARACBE8DATAN2QUSTDDQ9P5#QM%:ki)0 Hb 4f 3@h!4zpfѐhzR >a1~JaIZX]eXNWN rS (BB `&s3S(syMZ;qDhtZ1sTfBm(8$MFMbDDc%8$MURDEhh$DFLRRDEɰ$NURDDDhx$DF42E5X$SAFBDDc($DPLX2DYU`2DU( FDBLEXPGG"*t"GC"*8Y4a`+68Y4 B2hʬ@W!U8Y` ! N0Z~&r~&ZH~$$} vc0QTRTBDd$MMFBD38x$DSQR2RDDX$MAFBDD( $DIVF2DXɀ$DPLXbDD3(ɰ$SUbDED$cP$MUbDDs(ʘ$ERR2D49QRSaTDԔXt&@0$ATIbDDH$NUQPV `bDDU5`j`0*HQ HgUĈ*(q` HdhqHf(qҐ Ha*ѓ HHdQ HqĈiq HnĈH1 Hqd0Hd1Hĉ*HpHċ*H(sIdD$d)t"#&)@p±@>\$+@z@h<<Hq*2c"@ 2 T#M!J28c$ 2f P$9I522T QI RDEŘY 1A1fjx P H"4Pmf 0D4(8\/!Ѡhr@$2D $DPHFBE5hȀ$DP Py@Y aYdtxB3@YE*XD&̺a*&<&l( rh3@rhjH3@̀{b +8XTTE Bq@ OL.rl.r $GO.ð Q (fՠ%ʟz!(cJ08~ `\dYtͽ@ ï`NVmpop G@,ͭL;.f 63h0 d  FT" g G^" ""4f( "\" u Ff" *Q`HKFHWdhSSS!DI0t 3@PVh~   4`Y RDdC( $SAFBE`$DB02D(Ș$FLRBD#$XARRE4# PSRS`bDԔU5%8j))10 Hh# Q&2 SPV! pPSPV `bD5a 2@ CGR å@H(Yb# `2  #%` 2>P'`A=N2J P̣%A=L2d Tc&52|P)`aJ2I gQѠRDTti@0B 㸄qc  :IQѣ! 9VpTV 2DT($EB3MT*=Y*8Yʑ1Zz@ >-.Ve?fhh@>?IQ,aЀ$AC3BDC$EBBDT#8X$EB4BDT#X$EXPBBDd5ȸ$FLR0RDs(P$MARRD#$MB0BD$ɐ$PHABE4iӑQ2D($NUMC n BD38!"j 4t& I!"j2ltX&G|"jw&G]"jw&#F[q"j c%3@ a@@K/ a$FATBD38p$EXP1RDdX0$ABBE($DB00BD)T!E5%It)*3@C꜀Q.G#՚5X4`Yf =aQ0#hBDdHx$AC3BE$DB01RD# $FR22D(P$PPABD($ERRRSaDԔ`t&@h`d $A1" jJr d& B1"J2J PV aD`t&@h`d $A1" j d& B1"J2J PV bD5`MAX0G@"j t &GA1"j 4Whrh@t,2 Uc  2 x&[Th"#Ef 3@Śj4z 3iՀmx*0+Cɔ9`h#CKT3lIAC@!"2 d($FR" d\")FH@)"jd($ I!"2bd(( K)"d)FS!"*eH(&,NPUSTD)@=_4eTfVŵJ 4fT< w*< q qy :L}V :x0f 4 vH0lIAFQ@" e FG1" r dd"!FA@!"*d"FT!"*d# FD!"2e&V)"Jyd )FR"dX, FU!" t NUSbDDA%<$FONEAMAX1G@* j t  A1" j 4Wh 3@ a$ATIBD3p$RATBD(Ȉ$SAFBDd5 RS bDCQ%9Rj$))ʑ0 HbW/ #! 9 2 U#! 1J2  QP4%98t)@ɌBDdH $EB4SL!ds xt '3@h ) BDdH $LOG20RD#)SDyxt '@h! BDdH $LOG20RD#)S!4It3@͐|ZU/d@@)"J d<"E!"r:$PaU$U t"yQ0Ej٠|ZTT$EB42D($NUBE4iӑQ2D($NUMC n BD38$EB42D($NUBE4iIVDU)t"(!!MƆ/f `YT3@D%0Q,h`, q1݈4:! c  2 c" 1J28 T#M2J c%52j PT'M2v P'=YpI̠bDs#1=LOG2G@)"bz94bDs# fP$LOG21 @!  t0Z,0w%JQ}LǷ(8Q( NPqHJQHg 1H ɊPHa8  BEŘQA=1fjr hf ͢ GE!"b˭@g稍T$SaåpH *FH(pHI@H8 Qa4DYȬ#3&0R# Z!`BDCIDIVG@"!ˬeR00$D99=-O#@ Vh[(#& 葑H$JSQӡE4t騘t)3@~[g.;$FAT2BD38Ȉ$SAF U!5$It) 3@4d |T1HIHa8 U!4DIt" 3@xFV wd@@!" d  FC!"r:$RTQӡT4tXt3@YTl$IAT2BDtIPPD%9`t$)fcyn~Ld '#NQU`BDtH9J$NGR1IԌ%Qy=&_<~/SEsd\b* q&2$P! p P!45 t$O*|:'ԙ4G[&pԓRSBEu$I$I0L`2D( $$I4 2DX H$W52Es()I$MJARG`2DT I$ND `bE4I@,6\.9D 09D P#9D  9D `C9D @ p@h~ J UK@[X660Wx FUX^*.Wla]! :1|ϢLUl"+_ ZxY0tTnhd3l ꂁTp ^2VmQP5ʞ@m1*G*VS 5p60:`KvUY uu4 ,2oZ/ 6|, =vmqX;6U@=Z2`n>V|ϡxuPf2uN@b^ä@?@ @I>ҩ $POSBDӓʘ$D90`2DD($DB0I RDD#Q%Zkd,B@#  GB@)""(BDD#hFL$DB00W"gFW٠4G(I=Q hh^hkp\rꎀQ$iTpmn3QU.ST< { Ar.GBIH h(ё@HO q He#F`Hfd(qHe:(fqHIȑHra8t "@TT`evhwV#  2IP#"`UA.26 Ց#ip RDd#M1JjtɊL:I@<zY46>L$.| 1H*FHi f H'IȆ1Hg3Iѐ BDd5 @Ըe͠`{ B+mY"3+?.X+?$ &2  P̣ B2 Q Mp`BDdHI"FLTG@" t#&* ``R!H @pa Hfm`Y&2 P!9J2  ##aJ2( gd4uDt!*<eQizڢɌBD3H$NGDBDu($NGR0RDu# T5)Ht, 3@hhc A!2IPT'QSaDD٨xt$$@+4pRfhɌRDC(($ICPIU DdC)@t# 5YF@!"j ld&&N`BDӓQ%5U2j6d'ū!|Z#4M)u$z¡ QREX %9BOUTf`^L(POKEf6Lt((@l?cH B#@ =UPF0  FA)"J d TREUYU9A .j* bFwREUn'̘$AC2 `BEYAMA1j* "7Lt((( Sh*`ū*m`P@ d d x2@#d;ͬD`/k ڊwa/> *j(X[FUuH@VUI 0%RC,zð,:+wիeZ0ͽ π u^@_V,z¶#ͽ ڊ÷"|iw +T0* *" Uc@.U6f@')".dP *WU@b f@#EAl:: /W( ϩaҭ`NVUPUJTx|fv *@B*~*N 0@h#'rE]W 2GjDq6ܬVml `mH:}c  ²@B ? æk`mdfހU~X  VHpVVWMԐA* >&W8UX'[ "+F?v| aFme]G)!FK U# "ݕBAY4!EzٕFY ã0+ *`#ʦ xͳ!:>` 'ZU ESB:* :* :x:`s i"XeBρ-U$0CNOW Cr@q=XVdCB@3\F~ggqfZVC^F7*ݕoOdujL+\ é! yV:UYTzʾ`ڊ XSx]>g^pV/̀#V^ #<; U*+\0Qe]Y0u`AYuGW, ermpS^qY^_ #+h R a(Ͱ@g0Pad¨:`q%Rah`Vkaf٠è`4ò ۦ00`63tҴ@a-#ݒTQLV Vm XW|Tf W f朗*A63\¾Ճ 362xPp@Ff٠pp+eQ@wFAf٠pp2« +Qq  Vm`P9<6;6]n@$v*Q uU#m@1 wa0Fm|3¬ ڌrYu{78gp+ nP:ì ۦ2;$uO*Jͳ@ #2;¼@^2ۦ :!*ꃏ>3>(ʒ0þcÀ?[`ՕVT$EjD6$hëAb6HJ݅}GVn¾"=,W$&*aEzB|4usFW$e$a+v@T<(TK@ aՠ ?-T)^wapU{HQnZt(uG+*A'ū*T(uVFV@^2!+&2&sx(0̈́iIu@–4#8jS ²A~ `V X0w ]*PP2U*g70P℺U$2~U  XWP(kN oBb+l2v} [0tR) K`elW(aP:aKvU WMp"Gũ-5;*8aQ`H s|+x[$, XaSK#L4@,  a0+ K6@S pKRʳa/5*DBk<'Uh-ER": UICEb*|ZXkVU(0:ai dhhh;kHh f`mFX-rD4@4/## ʆⳃ$Ci8/'//K6 V 4iVHꣅ ㆊV5g (1PHHt pHH9ђHH4QHHc &Q(HaĈ(JH񕰈H; *HqЦHd*PH2*QްvHm dHHB dI0fH (q HQiєHdћ`HdPHHіPHdљHdѓH dqH1 ĈIѐH dHd&pHcd&QPHgs8]@@D1Hq5Ċi F1 HcdF1HgIp HaQPH(fqH8TQ bE4CM!)H$SHJR4MF<[quA,@*&Ɍ2D$SHJ41bE4#$SHJR4ՑBDdh=Y$RND0  RE$C@#F@&B<hhH3'(0A#"` 2  T$ 5J: Ց=Y:" # I9:FI g֐PRE3iP5 p"1PH(fQHH(fSSU bD@Ըt-d(l(tH^wXTd+@: IQ#MpUBDDi@Ԥ3@mf @m 63h6@&2J c")I: U!5)I2$S #$@M!)0pQBDEi@/#E^vzA-*4'|+B\n3CLt$+NBE4(M!H$SHR1MI!Ce8à@ `I^-dC|{;G@!"Bt))GE)"BT2DHQ&$ATRMZfI8FF"3=aP0H`4xdZF4!`eS& j@@ @W`b0Edw Ci KkBXe_V!vB+H/y]@ՠ[K!W !ͮ ;ͧFH@ͽP5a]ZGXҧjW!*@YCjƬ fPs:v-Uh-F„74[XK6EV EIETT$D0XP Uu du[~ U%f0F# xHLF~ UT%"!,:~ V $fހUl KFî!.U PKF~ U%VT|$z"4@+åC+8«Abj+;* + :Ac* ëAoSeBٴ$8!Ux-2CE̫`#_ υl`Z <j:KvU IxFVuQi]X`HV[kW-kB'ѕi WXQ mP  TL1kU,2b+P f``( IR1Ij% 6у`kL i05J x& [|@CGY XW68(4w*"&|Z[iPYnʡcʁ㪨=eZ hJ+ qR  v fy_m FVd0nԺ !ݐ򶡌`3k`k0`mLfлJn`F3j`@ 0͢l 5+h¶+x!A`AFaQ@ 2G&VXDTd&hH )Hc ĉ)JQ`H dF1He dFqHi\ dF`Hou dGHĉʈQHFĉH*HH QHTd豚pH dQ H d QHsdFQ0HkU dHqPvHHqH dhћ H8 Ċi)ҐHczĊi JF1,Hi8 dj񟀶Hadq,Hd`HekdH8ԓ`BD$9=H$NORMd &aQVPJ),ҡ@݆aSXp¥vKG >(4-TvtZɅYl*2e0!]a a@"ŻĀ\} &2P$M-J2: %=1:SSc1%9 2&#1U9Q 2V'SSbDTD)@TPpP D@#! IX:S"`M-IZ2PU RDC)@,#3gd@)"J 2EC5I$MRM1 PS`2D5I6$MAR0 U BD)@ͤ#8 :pͦVmpY"fHdUHIxFVdan<8$ACBD3(x$FAT2Dx$MAMBD($MAR0BD$$MRMRD$$SAF12ECQBE4hM$SAF1MD@ݐ:݀c  2 PMTRBE8$POS2bDE4U(11$MEMRYSdE448M-IZP5K%€ q\~.A"A*. @U $ '`>ͣ m Pw %fpi4X,+C efHX_ "L:`rX/̖m[@XuYlB @!F aXIF -V :[J1Yn,1f@Ya[fp3aPm's IC6b3l vA.z nc=V deR+TB FV?uL(IUhAh`Z`2p٠PIZ-VmhD"drBO3iH8Hud`<s(eͫ` Vs?p0 3l@6ÀX0F  BՕ0` GdY<*4aZMl@DX",ͦ` ) e^0Us>-YW\@¼`-PpM4Z٠PEy{0pYTlͤb+,NyPp$;򱁳j6 (I{$"wdjV B@!1aR&H8`Ͳ `2Ut#a@&84 nAmTp'X84Lf 5!AmW꽁- yZ&m$*OS6#Y$ I-vH8Ͳ cm fѠ6T UrXҁN7X?} WL gJH-dYeQ6mO,mO[)`jˀ ">$UeTu%ݙi@ݐ*Q5e[*Ā?,*>3lĀL.~ V$| fp?ٶ\=aذ+/(d#,ͦ $BF2D$P$CLSFLbDU%($OPNFLdDE%iQRDE%c9@T D(p K Wh?L.QP0*/M"`k @64 +#bd H>@Vʯ  ڞï S6Uy U| fp?ٵ=aװȈ$IOERR2D$@$BFBDU%($TTYINbEEEH$DRV3TBDU%(Q2$IOERRMv%PT d23*A@mL"ͭ 2c 1M2:V#a%R2 S# U::VU'PRSbEEEQQe=R$LNPTRPbDĔ$iD`rA"4 xZ,KUS2-dZPG3@/Ȍl LwuX,p@ E` $CPMBFbDĔ$hP$LNPTRbEEE$TTYOTԑU BBD $A3Q 2D$h 2$POS2ET $AC P̠BD38 $POS2 P`2D8 $$CD 2DD8 $$DE 2DEJ$$DV2E$8 $REC  2DTh $FL TBBDT B$FWѠBBD$$IM0 SL`2D ($J3 2Dh A $PL2E81$SF2x"!lj)""z4x""G@""4x"&G""x"+nj@"*4x"&#nj"2x#&G"2y#+ǐ@":4y$G!"Jiy %ǒ@"Qy(%ǒ"Qy0%Ǔ@"Qy8%Ǔ"Qx%ǔ"j4yD'*G"yL(&G@!"zy\('G@"yl()Ǘ@"x)"Ǘ"4y)ǘ@"\y)Ǚ"y*)Ǚ"tRDED$hQ $DTBF3`bDED$cxQ $DTBFAԓbETdD\.K@% pDZ  HĈH10 HgĈHƱp HoĈH HĈI H8!zs# x>2*""> 2*22m~ (!"!6=h!6# p#6#> w#\"!2,l 2 *"*" "2:G :!F#N#~ :!!y~#!~6L#~6I#~6B: : !!!"͊:#!_^#VJB:Į5:($W[[0[AW:[;O8*-l>w#p#}y+>‚͖wxʒ‰y:ұ0ڱOxGÙx+N#^,>. . *4 ^*44,> *xx!@ȽCc8[\Vm3f 1<[\#ݐ7d^ڞ~X1 C(b|G!' %IFp$ S`!ͨx[X#0f0mcm's= fհOa06m[hf֠ ƏHWͪ>~S &3i8KX,ڶh`Xinʾa1 ¼c АɌ2D$h`$BLـD44d0$CPMRFbD5d̀$CPMWFbDE4U($ERRbDddxȘ$IOERRD$LUNTBbDT% $RECETHDSKCLSdE4E%hOPENdDE%h=A92P5%` T*hM4ݕS@mfx2GXn* V@ͲST|Vw< @I~:* 4ťY4Z@,ͬ 0CEvC6uͰmus;8t'aI0& %"1\T"i0Z&eIL'RILE$b8L#dȒO"D F#b8M)` :> T,a%R:US# %=IJ3$S'SU RDH $IOFLGUbD5th A5IP 5+K@%@0 h \.+X e4D [3@}>2UI"2c!` 1M2<T A5Y:<Uѣ` :ISU#%=1pVU DUH b$EXITѓ%@Q` ph@U#k4,E5x Q$TS PRDD3I$ARGIT̠RD$s8 ($J62D =$KEY=K% 0 p \. K@% q(.(K%` qp\b.2K% q\|.@ K%Ȁ` r8 \.J%K%ɠ rx@\.R)K@% rt\.`0K%̀P s0\.k6K% s\.y=G!!" x ǃ!!"$x""Nj@!!""x"+G!!"*tx"G!!"Iy$G@" x  Ǜ" y G!" y ǜ!" x G!" &8:7>I@*6#6 #w#8xc2jzn> ڋ6 #=y.8xڢʯã"yɯ**͋ ~OA:,,++:@7~ DM:1^+V:+++++;#x+;y;@"{ J+~+ng~w*+r+s w@f"+1+w+w+p+q+r+s+' 7*}̊*"+1+++:,:Ͳ' >@w ҴxIJ:w+ :;@~*!@"DM+1: p+q+r+s+~ wF#~# x:!>/O ü++++:w+:w7_ > >:!o>g6 !~6Gʞ#~ …wx+#ʖ~Ë2\ͬ>*>O> >2> >:ʬ<2> >~>#G~>+ú~#  ` / +#27U@L CERO3H 2:2BByʀʍB2**͋ ʬ~ġ~/_bͷ~w×ͷ~w+++r+sB:̵~,+<2ͱ!ͬUnsatisfied external request(s)yͧ ~2+V+^+++V+^ ~,+ ,~/_~>#/ <2ͬ!n ͱ<2ͱ! G <2ͱ! G Common block(s)Entry point(s)External reference(s)27v ʭ 2͖ ͺ' 7v  ͋ ~ ~ͬ¬ ë: ͺͺ  ͺͺú' ,+V+^: Length of Data areaLength of ProgramModule ofڈ ~ 7,+++~+ng~|}!~#4  t6+w͑ xG © ɯ2͑ ͥ 7ͧ ) Gͧ   ͧ )  ͧ !w oun! ê Can't enter fil!" ê Module name/number not found in fil!M ê First module in Until clause after las!{ ê Library write erro>2I< >2< eu ͧ : e2ɯ2: Ie< 2I!"! w#P w: <2_!dw: ʤ: _<2!~*w#"*' * ~#" :# !~# !w#! w#5#N+>5+~>5:5<2 ,'2 :G~x:͏ !w#Q* "w#w**͋ ~~vw/_:,d|2FORLIB REL!  CR"*!"!"t``9tP*#"> xt"x JG!y yw# f P"*!|”}~» ³# ¨»7~O  Í͆ }*s#r*xyw#*s#r#w#w#yw# "A:O>4G> x+x 72!"PX R|P>:*w#":<2*KB!~ʒ}|o|g>o|g}}}""*%T]##ó*++"ê*|}  ~GO 'CBɯ3xG3 73x3x!~w#4H\!">2*!"YYy   Y!ͱͱ**͋ G ~@ҫ¦ $ ÕͬìSymbol Value Defined Reference"Y"Y>͸~w+1+r+sYͷ~!i ͱ*>2' !q !~#6@>>:> / ͱ!V *z ͬ!A *z ͱ2*͋ ʒ~{$ b:9 z ͺɯ2*͋ ~@ҮĴ$ Ø:L ͖ ͺɯ2*͋ ~@$ :] üO~++4#6 _ ͥ w# ! "O:G<2ͥ Xͥ P:\ )0>) K 0>H |a }Gl x0:w >PX  |} >:> '"!7 ! :O ~>'A> y > CBy :GW> !F# W> _x GxG3 :3 "*͋ ڧ "*$͋ * ^#V+*{ʧ :<2͠ ͠ xj ~# ] * "*  " * ^#V{ʗ r+s*͋ ʗ | *w#w}_|W! >?>ͬ(Out of memor! ê Command erro! ê File read erro! ê File not f2: .ʹ y%#2 >@͸ɯ2 go":IG:~2͊څxr͊͡͡2GG ͡BI:2x2#" G:<222 :E<2!"*" ##"ʹ VVyʙV?** s#r2 w#wډ~:=222>@͸V#~G#N#~±>@2͸>2+~, *~Ÿ,:,+++~++,d|2FORLIB REL 7#~#foN#F+w#wxy+͌*"*++## ~O#^#V"#^#V"#yn2͜~x #eͲ*>#x*|4A>22͜> x:<32Ԍ> x> x: ھ͜<2> x͌ ͺ 'RELCRFPRNP?Command error?File not found?Can't enter file~ # !  !  ! ; "`*+++"*`:2*p :} ; 2222222<22 ů22n r:ʄ oQ a:`2 2¡ :@2!E y=7n 7oQ `  7!?E :!% !: 'o> = % :* +~ #p #" +~7ȷ> > y!"w!:P w!"u!:ʁ ~ ͣ < ͣ < !"y{!?~ u  w#¬ w? {:= :< f> x> x>x*wyPy := : >*uwPw |}[ƀ)`iï> x> x> x:= :< W*w|̧#"wxwy!>£ =¯!w>!ï:= : *u|=#"uvTITLE DSKDRV FORTRAN-80 RUNTIME DISK DRIVER -- CP/M VERSIONS | CPM SET 1 ;CPM Version ADDS EQU 0 ;SYSTEM 70 TANDY EQU 0 ;TANDY CP/M CPMSBC EQU 0 ;CPM RELOCATED TO 4000H CROMEM SET 0 ; Cromemco Version ; MAXLUN SET 10 ; Max # of LUN's allowed ; IFT CROMEM MAXLUN SET 64 CPM SET 1 ENDIF IFT ADDS CPMWRM EQU 1004H ;CP/M WARM BOOT Entry Point ENDIF IFT CPM CPMWRM EQU 0 ENDIF IFT TANDY CPMWRM EQU 4200H ENDIF IFT CPMSBC CPMWRM EQU 4000H ENDIF IF2 .PRINTX/DSK Search directory for filename. .DELET EQU 19 ; Delete File .READS EQU 20 ; Read Sequential (1.x) .WRITS EQU 21 ; Write Sequential (1.x) .MAKE EQU 22 ; Create File .STDMA EQU 26 ; Set DMA address .READR EQU 33 ; Read Random (2.x) .WRITR EQU 34 ; Write Random (2.x) FCB.FT EQU 9 ; File Type FCB.EX EQU 12 ; Extent Byte FCB.RC EQU 15 ; Record Count Byte FCB.NR EQU 32 ; Next Record Byte FCB.RR EQU 33 ; Random Record number (2.x) FCBLEN EQU 36 ; FCB Size LRECL EQU 128 ; Logical Record Length  : :2͆ ' *##:2G` ~? ? w# 5 #5  w#H :!i~ l w#b O :7>’ xn Ox=y³ [A@2`O x ڠ  a ç T T7 Y7Ò L S7 T7>Ò R7 D7R7>Ò > 6 #= y.2O ix% 2 & <2y/y L72 O8  [m 0m Ai :m R O!~6Gʟ #~ ˆ z | x+#ʙ ~Î 2ÿ 2:²  >*  { > :| !} " o>g6 #> w~#  #" _w:?< *y|'#"yz {>?=P!=,!>L_! u s x~|Í7ȷ! @@´> !  DISK FULL*wyPy := : >*uwPw |}[ƀ)`iï> x> x> x:= :< W*w|̧#"wxwy!>£ =¯!w>!ï:= : *u|=#"uvDRV - Runtime Disk Support/ IFT CPM .PRINTX/CPM Version/ ENDIF IFT CROMEM .PRINTX/Cromemco Version/ ENDIF IFT ADDS .PRINTX/ADDS Version/ ENDIF IFT TANDY .PRINTX/TANDY Version/ ENDIF IFT CPMSBC .PRINTX/SBC Version/ ENDIF ENDIF PAGE ; BDOS Function Calls, FCB Offsets CPMENT EQU CPMWRM+5 ;CP/M BDOS Entry Point .VERSN EQU 12 ; Get CP/M Version No. .RSET EQU 13 ; Init BDOS .SELCT EQU 14 ; Select Disk .OPEN EQU 15 ; Open File .CLOSE EQU 16 ; Close File .FFILE EQU 17 ;(Sector size) ; MACRO Definitions .SALL SVC MACRO .FUNC ;; SUPERVISOR CALL MVI C,.FUNC ;; CP/M BDOS Call CALL CPMENT ;; With Function in [C]. ENDM ; Global Definitions EXTRN $CPMVN,$CPMRF,$CPMWF EXTRN $BL,$BF,$IOERR,$IOINI,$ERR,$REC,$UN,$LUNTB,$CLSFL PUBLIC $DSKER,$FLFLG,$MEMRY ; PUBLIC GTMODE,ALCBUF,GTFCB,DSKCLS PUBLIC OPEN,DSKCLS PAGE DSEG ; Data Area ; I/O Error Code Defns OBOVF EQU 016Q ; Output Buffer Limit Exceeded IRECER EQU 022Q ; Input Record too Long NOFILE EQU 236Q ; File Not Found FULERR EQU 237Q ; Disk Full LUNERR EQU 240Q ; LUN too Large NOMEM EQU 241Q ; Out-of-Memory ; I/O Mode Defn Byte MD.ALC EQU X'80' ; 80H Allocated Buffer and FCB MD.OPN EQU X'40' ; 40H File is OPEN MD.OUT EQU X'20' ; 20H If Output MD.BIN EQU X'10' ; 10H If Binary I/O MD.WRT EQU X'08' ; 08H Write-Data-in-Buffer MD.RND EQU X'04' ; 04H If Random I/O $FLFLG: DS MAXLUN ; I/O Mode Byte for each Lun $FLCNT: DS MAXLUN ; I/O Buffer Index for DW DSKFRD ;FORMATTED READ DW DSKFWR ;FORMATTED WRITE DW DSKBRD ;BINARY READ DW DSKBWR ;BINARY WRITE DW DSKREW ;REWIND DW $IOERR ;BACKSPACE (not supported). DW DSKCLS ;ENDFILE FNFERR: CALL $ERR DB NOFILE ;File Not Found DSKFUL: CALL $ERR DB FULERR ;Disk Full LUNOVF: CALL $ERR DB LUNERR ;LUN too Large MEMERR: CALL $ERR DB NOMEM ;Out-of-Memory ;------------------------------------------------------ ; ; GET MODE BYTE(LUN) FROM $FLFLG ; GTMODE: LXI H,$FLFLG-1 LDA $U---------- ; ; GET DATA.BUFFER.OFFSET(LUN) ; GTBOFF: LXI H,$FLCNT-1 LDA $UN MVI D,0 MOV E,A DAD D MOV A,M ;GET OFFSET RET ;------------------------------------------------------ ; ; GET ADR OF FCB(LUN) IN [DE] ; GTFCB: LXI H,$FLFCB-2 LDA $UN ADD A MOV E,A MVI D,0 DAD D ;POINT TO ADR OF FCB MOV E,M INX H MOV D,M RET ;------------------------------------------------------ ; ; Get Read/Write Record Number for LUN ; On Return: ; [HL] = FCB.RR(LUN) adr of Rnd Rec ull. INX D LDAX D ORA A JNZ CPYTXT RET PAGE ;------------------------------------------------------ ; ; OPNCHK - Assure that File is Open and Buffers Allocated. ; If not then: ; 1. Allocate Data buffer and FCB from $MEMRY. ; 2. Open File with name of FORT##.DAT where: ; ## is Logical-Unit-Number (LUN) of file. OPNCHK: LDA $UN CPI MAXLUN+1 ; JNC LUNOVF ; LUN is too Large ; ---------------- PUSH B ;Save Open Mode Request. CALL GTMODE ;GET FLAG ORA A ;ALLOCATED ;Save Rec No. CALL GTMODE ANI NOT MD.RND ;Set Sequential Mode MOV M,A POP D ;Restore Rec No. JMP SETSEQ ; ---------------- SETRND: CALL GTMODE ANI MD.WRT ;Write-Data-in-Buffer? CNZ FRCOUT ;Yes, Flush it first. CALL GTMODE ORI MD.RND ;Set Random Mode MOV M,A CALL GTREC ; Restore Rec no's. DCX D ; Adjust Random Rec no. MOV M,E INX H ; Store at FCB.RR for next I/O MOV M,D INX H MVI M,0 ; ---------------- SETSEQ: IFF CROMEM LDA $CPMVN ;CP/M Version Flag ORAeach Lun $FLBUF: DS MAXLUN*2 ; Buffer Location for each Lun $FLFCB: DS MAXLUN*2 ; FCB Location for each Lun ; ------------ $DSKER: DS 1 ;STATUS OF LAST I/O CLSADR: DS 2 ; ------------ $MEMRY: DS 2 ;FOR LOADER TO STORE TOP OF MEM INTO CSEG ; Code Area FILTXT: DB "FORT",0 FILEXT: DB "DAT",0 PAGE ; I/O DISPATCH TABLE ; LUN's 6 thru MAXLUN point to this table via $LUNTB. ; An explicit open via CALL OPEN () allow ; other units to use the disk also... ENTRY DSKDRV DSKDRV:N ;GET UNIT # MVI D,0 MOV E,A DAD D ;[HL] POINTS TO FLAG MOV A,M ;GET FLAG RET ;------------------------------------------------------ ; ; SET DMA TO DATA BUFFER(LUN) ; SETBUF: PUSH B PUSH D CALL GETBUF ;GET BUFFER ADR SVC .STDMA ;Set DMA to buffer address POP D POP B RET ;------------------------------------------------------ GETBUF: LDA $UN ADD A MOV E,A MVI D,0 LXI H,$FLBUF-2 DAD D MOV E,M INX H MOV D,M RET ;--------------------------------------------Num. ; [DE] = $REC 00 or Rnd Rec Num. ; GTREC: CALL GTFCB LXI H,FCB.RR DAD D XCHG LHLD $REC XCHG RET ;------------------------------------------------------ ; Zero FCB from Extent Byte to end. ; CLRFCB: CALL GTFCB LXI H,FCB.EX DAD D LXI B,FCBLEN-FCB.EX CLRFCL: MOV M,B INX H DCR C JNZ CLRFCL RET ;------------------------------------------------------ ; Copy Bytes from [DE] to [HL] until null (00). ; CPYTXT: MOV M,A ;Copy from [DE] to [HL] INX H ; until n BUFFER,FCB? CP ALCBUF ;NO, GET SPACE AND SET PTRS ; ---------------- POP B ;Get I/O Mode in [C] ANI MD.OPN ;Was OPEN? CZ OPNFIL ;No, Open File. ;------------------------------------------------------ ; ; SETREC - SET UP RECORD NUMBER ; SETREC: CALL GTREC ;Get current & Last Record Numbers MOV A,D ; [DE] = $REC ORA E ; If Random I/O JNZ SETRND ; use value in $REC ; ---------------- MOV E,M ; ..Else INX H ; Use current record MOV D,M ; set by Seq read/write. PUSH D A ; Version 1.x ? RZ ;No, Version 2.x nothing else needed. ENDIF ;------------------------------------------------------ ; ; SPLIT RANDOM RECORD INTO EXTENT AND RELATIVE RECORD ; FOR VERSION 1.x ; SETV1: MOV A,E RAL MOV A,D RAL MOV B,A MOV A,E ANI X'7F' MOV C,A ; ---------------- CALL GTFCB ; [DE] = adr of FCB(LUN) LXI H,FCB.EX DAD D MOV A,M ;FETCH CURRENT EXTENT CMP B JZ SAMEXT ;IF SAME AS REQUESTED EXTENT ; ; CLOSE CURRENT EXTENT, OPEN REQUESTED ONE ; PUSH B ;EXT/REC PUSH D ;FCB adr LXI H,FCB.NR DAD D MVI M,0 ;ZERO the Record Number LHLD $MEMRY ;Get scratch Buffer XCHG ;from top of Heap for Open/Close SVC .STDMA ;SET DMA TO DEFAULT BUFFER CALL GTMODE ANI MD.OUT ;Open for Output? JZ OPNXT ;No, skip this close POP D PUSH D ;FCB SVC .CLOSE ;CLOSE THE EXTENT OPNXT: POP D ; FCB POP B ; EXT/REC PUSH B PUSH D LXI H,FCB.EX DAD D MOV M,B ;SET NEW EXTENT NUMBER SVC .OPEN ;Open New Extent INR A JNZ SKEXT ;I MOV A,H ; then give Out-of-Memory SBB D ; Error and Exit... JC MEMERR ; ---------------- LXI H,$FLBUF-2 LDA $UN ADD A MVI B,0 MOV C,A ;[BC]= 2*UNIT# DAD B ;GET ADR OF PTR TO BUFFER MOV M,E INX H MOV M,D ;STORE $MEMRY AS ADR LXI H,LRECL DAD D ;GET NEW TOP PUSH H ;SAVE FCB ADR CALL GTFCB ;GET [HL]=ENTRY+1 POP D PUSH D ;Save FCB adr MOV M,D DCX H MOV M,E ;STORE ADR OF FCB LXI H,FCBLEN DAD D ;GET NEW TOP OF ALLOC SHLD $MEMRY ;STORE AWAY ; -----------ed. MOV M,A ;SET FLAG RET ;--------------- ; ; Convert Logical Unit Number to two digits ; Return: B = Units digit (binary) ; C = Tens digit (binary) ; Preserve [HL] please ; CONLUN: LDA $UN ; Get Logical Unit Number MVI C,0 ; C will count subtractions CON1: SUI 10 ; Does 10 go in? JC CON2 ; Get out if not INR C ; Bump tens counter if so JMP CON1 ; And go around again CON2: ADI 10 ; Add divisor back to get remainder MOV B,A ; Which is the units digit in B RET PAGE : XCHG SHLD $CLSFL ;ON EXIT, CLOSE ALL FILES CALL CLRFCB ;Zero FCB & Record Number. CALL SETBUF ;Set DMA to File buffer. ; ---------------- POP B ;I/O Mode PUSH B MOV A,C ANI MD.OUT JZ OPNINP ;Brief Open Input LHLD $REC ;Check for random I/O. MOV A,H ORA L JZ OPNDEL ;Delete file on Output + non-Random. PUSH D ;Save FCB pointer SVC .FFILE ;Check for file already exists POP D ; we don't want to delete random files CPI 255 ;Check file not found flag. JNZ OPNINP ;RI MD.ALC+MD.OPN MOV M,A ; Mode Allocated/Open + I/O RET ;------------------------------------------------------ ; ; MAKE New file or Extent. ; MAKEXT: SVC .MAKE ;Create New File INR A JZ DSKFUL ;Brif DISK FULL Error. RET PAGE ;------------------------------------------------------ ; ; REWIND UNIT # ; DSKREW: CALL GTMODE ANI MD.OPN ;FILE OPEN? CNZ DSKCLS ;YES, CLOSE IT NOCLOS: XRA A ;GOOD RETURN RET ;------------------------------------------------------ ; ; ENDF IT EXISTS POP D PUSH D ; FCB CALL MAKEXT ;CREATE NEW EXTENT SKEXT: POP D ; FCB POP B ; EXT/REC SAMEXT: LXI H,FCB.NR DAD D MOV M,C ;SET RECORD NUMBER RET PAGE ;------------------------------------------------------ ; ALLOCATE FCB AND BUFFER FOR UNIT . ALLOCATES UP FROM ; $MEMRY AND STORES PTRS IN TABLE. ALCBUF: PUSH H LHLD $MEMRY ;GET CURRENT TOP XCHG ;IN [DE] ; ---------------- LXI H,-256 DAD SP MOV A,L ; If Memtop-256 SUB E ; is < top of heap ($MEMRY) ----- POP H ;FCB adr. MVI M,0 ;Default to Current Disk INX H LXI D,FILTXT ;Default Name initially FORT##.DAT LDAX D CALL CPYTXT ; Move "FORT" to FCB CALL CONLUN ; get 1st digit in C, 2nd in B MOV A,C ADI '0' ; convert to ASCII MOV M,A ; Store 10s digit MOV A,B ADI '0' INX H MOV M,A ; Store units digit MVI A," " INX H MOV M,A INX H LXI D,FILEXT-1 ;EXTENSION CALL CPYTXT ; Move "DAT" to FCB ; ---------------- POP H ;GET PTR TO FLAG MVI A,MD.ALC ;Now Allocat ;------------------------------------------------------ ; ; OPEN File Given by LUN and Clear Buffer Index. ; Entry: [DE] = adr of FCB ; Exit: [HL] = adr of Mode Byte ; [A] = Mode byte - Allocated & Open. ; OPNFIL: PUSH B ;Save I/O Mode CALL GTBOFF ; Get Buffer.offset(LUN) MOV M,D ;Clear Buffer Index ; ---------------- LHLD $CLSFL LXI D,CLSALL MOV A,H SUB D JNZ STRADR ;NOT US, STORE ROUTINE ADR MOV A,L SUB E JZ STRCLS ;US, DON'T STORE AGAIN STRADR: SHLD CLSADR STRCLSFile does exist. ;------------------------------------------------------ ; ; OPEN NEW File for Output or Random. ; OPNDEL: PUSH D ;Save FCB adr SVC .DELET ;DELETE Old File POP D PUSH D CALL MAKEXT ;Create New File. POP D ;Restore FCB adr ;------------------------------------------------------ ; ; OPEN Existing File for Input or Random. ; OPNINP: SVC .OPEN ;OPEN File INR A JZ FNFERR ; Brif File Not Found (Fatal). OPNDON: CALL GTMODE POP B ;Get I/O Mode. MOV A,C OFILE UNIT # ; DSKCLS: CALL GTMODE ADD A ;OPEN? JP NOCLOS ;NO, DON'T CLOSE ADD A ;OUTPUT FILE? CM FRCBUF ;YES, DUMP LAST IF NEEDED CALL GTFCB ;Get addr of FCB CALL SETBUF ;SET DMA ADR SVC .CLOSE ;CLOSE File CALL GTMODE MVI M,MD.ALC ;Set mode as closed, ; but that buffer is allocated. XRA A ;NEVER AN ERROR RET ;------------------------------------------------------ ; ; CLOSE ALL FILES. CALLED FROM EXIT ; CLSALL: LXI D,1 CLSAL1: LXI H,$FLFLG-1 DAD D MOV A,M ADD A ;SET MINUS IF OPEN PUSH D ;SAVE UNIT # MOV A,E STA $UN ;SET UP FOR OTHERS CM DSKCLS ;CLOSE FILE IF OPEN POP D ;GET # BACK INX D ;BUMP IT LDA $LUNTB ; Get max LUN CMP E ; Done all? JNZ CLSAL1 ;NO, DO NEXT RET ;RETURN PAGE ;------------------------------------------------------ ; ; BINARY WRITE ; DSKBWR: MVI C,MD.OUT+MD.BIN CALL OPNCHK ;OPEN IF NOT OPEN LHLD $BF ;GET BUFFER ADR PUSH H XCHG LHLD $BL ;GET LENGTH OF DATA MVI H,0 ;# OF BYTES XCHG D STA $BL ;ALWAYS 1 SECTOR CALL READ ;READ Record into $BF ORA A ;EOF OR GOOD RZ CPI 2 CMC RET ; PAGE ;------------------------------------------------------ ; ; FORMATTED WRITE ; DSKFWR: MVI C,MD.OUT CALL OPNCHK ;OPEN FILE IF NEEDED XRA A STA $DSKER ;CLEAR COUNT LDA $BL ;GET # TO WRITE ORA A RZ ;IGNORE NULL BUFFERS LDA $BL ORA A JP DSKFW0 CALL $ERR ;Warn User of.. DB OBOVF ; Output Buffer Limit Exceeded MVI A,127 ; and truncate to 127 bytes. DSKFW0--------------------------------------- ; ; FORMATTED READ ; DSKFRD: MVI C,0 CALL OPNCHK ;OPEN IF NEEDED XRA A STA $BL ;CLEAR LENGTH OF RECORD STA $DSKER ;CLEAR $DSKEROR CALL RNDCHK ;If Rnd Mode, Set offset to 0. DSKFR1: CALL DSKIN ;GET CHAR JC DSKRDN ;JUMP IF EOF CPI 32Q ;CP/M EOF? JZ DSKEOF ;YES LHLD $BL MVI H,0 XCHG LHLD $BF ;BASE DAD D ;GET WHERE TO PUT BYTE MOV M,A ;STORE CHAR INX D ;BUMP OFFSET XCHG SHLD $BL ;UPDATE OFFSET CPI 15Q ;? JZ L GTBOFF ;Else zero Buffer offset so.. MVI M,0 ;next READ/WRITE starts at beginning. RNDCHX: POP PSW RET ;------------------------------------------------------ ; ; DISK INPUT ROUTINE ; DSKIN: CALL GTBOFF ; Buffer.offset(LUN) ORA A ;BUFFER EMPTY? CZ REDBUF ;YES, REFIL RC ;EOF DCR M ;DECR. # LEFT LXI H,$FLBUF-2 DAD D DAD D ;GET $FLBUF PTR CMA ADI 129 ;128-#LEFT=OFFSET ADD M MOV E,A INX H MVI A,0 ADC M MOV D,A LDAX D ;GET CHAR ORA A RET ;----------POINT TO ADR OF BUFFER ADD M MOV E,A INX H MVI A,0 ADC M MOV D,A ;POINTS TO FREE POP PSW ;GET CHAR BACK STAX D ;STORE CHAR POP H RET ;------------------------------------------------------ ; ; FORCE FORMATTED BUFFER OUT ON CLOSE ; FRCBUF: CALL GTMODE ;Get orginal mode byte. ANI MD.RND + MD.BIN ;Check random or binary modes. JNZ FRCOUT ;Skip EOF char. write if either. MVI A,32Q CALL DSKOUT ;SET END OF FILE FRCOUT: CALL GTBOFF ;Buffer.offset(LUN) ORA A ;EMPTY? MAD D ;PTR TO 1ST TO CLEAR XRA A DCR E DSKWCL: INR E ;CLEARED REST OF BUFFER? JM DSKBW1 ;YES, DONE MOV M,A INX H JMP DSKWCL ;CLEAR END OF BUFFER DSKBW1: POP D ;GET BUFFER ADR SVC .STDMA ;Set DMA to Buffer CALL WRITE ;WRITE Record ORA A ;ERROR? RZ ;NO, GOOD RETURN STC RET PAGE ;------------------------------------------------------ ; ; BINARY READ ; DSKBRD: MVI C,MD.BIN CALL OPNCHK ;OPEN IF NEEDED LHLD $BF XCHG SVC .STDMA ;Set DMA to $BF MVI A,128: CALL RNDCHK ;If Rnd Mode, Set offset to 0. LHLD $BF ; Get buffer ptr DSKFW2: PUSH PSW ; SAVE COUNT MOV A,M CALL DSKOUT ;SEND OUT BYTE INX H ; Increment buffer ptr POP PSW ; Retrieve count DCR A ; Decrement count JNZ DSKFW2 ; One more time ; DSKWDN: MVI A,15Q CALL DSKOUT ;PUT OUT CALL GTMODE ;Mark Mode Byte with ORI MD.WRT ; Write-Data-in-Buffer. MOV M,A LDA $DSKER ;GET $DSKEROR STATUS ORA A ;ERROR? RZ ;NO STC ;YES RET ; PAGE ;---------------DSKRDN ;YES, HAVE RECORD MOV A,L ;GET OFFSET CPI 128 ;BUFFER FULL? JC DSKFR1 ;NO, GET NEXT CALL $ERR ;Warn User of.. DB IRECER ; Input Record too Long. XRA A RET ; DSKRDN: LDA $DSKER ;GET STATUS ORA A RZ ;NO ERROR CPI 2 CMC RET DSKEOF: ORA A ;SET CC'S RET ; PAGE ;------------------------------------------------------ ; ; RESET BUFFER OFFSET IF RANDOM READ or WRITE ; RNDCHK: PUSH PSW CALL GTMODE ANI MD.RND JZ RNDCHX ;Do nothing if Sequential Mode. CAL-------------------------------------------- ; ; READ BUFFER FROM DISK ; REDBUF: PUSH H PUSH D CALL SETBUF CALL READ ;READ Record STA $DSKER ;STORE STATUS ORA A POP D POP H MVI A,128 ;FULL BUFFER MOV M,A ;STORE COUNT RZ ;IF NO ERROR STC RET ;------------------------------------------------------ ; ; DISK OUTPUT ROUTINE ; DSKOUT: PUSH H PUSH PSW CALL GTBOFF ;Get Buffer offset ORA A ;BUFFER FULL? CM DMPBUF ;YES, DUMP INR M LXI H,$FLBUF-2 DAD D DAD D ;VI M,0 ;CLEAR OFFSET RZ ;YES, DO NOTHING PUSH PSW ;SAVE OFFSET CALL GETBUF ;GET BUFFER ADR POP PSW MOV L,A MVI H,0 DAD D ;POINT TO 1ST UNUSED CHKFIL: ORA A ;SET MINUS IF FULL JM DMPBF1 ;NOTHING TO FILL MVI M,0 ;CLEAR BYTE INX H INR A ;BUMP OFFSET JMP CHKFIL ;------------------------------------------------------ ; ; DUMP BUFFER TO DISK ; DMPBF1: DCX H ;SO THAT DRIVE # ISN'T CLEARED DMPBUF: PUSH H PUSH D CALL SETBUF CALL WRITE ;WRITE Record STA $DSKER ;STORE STATUS CALL GTMODE ANI NOT MD.WRT ;Clear Write-Data Bit MOV M,A POP D POP H XRA A MOV M,A ;Clear Buffer offset RET ;------------------------------------------------------ ; ; READ RECORD/WRITE RECORD PRIMITIVES ; READ: CALL GTFCB ;Lookup FCB LDA $CPMRF ;CP/M 1.x or 2.x MOV C,A ;Random Read Function JMP IOCALL ;Read Next WRITE: CALL GTFCB ;Lookup FCB LDA $CPMWF ;CP/M 1.x or 2.x MOV C,A ;Random Write Function IOCALL: CALL CPMENT PUSH PSW CALL GTREC INRA A ;ALLOCATED? CP ALCBUF ;NO, ALLOCATE POP B CALL GTFCB XCHG POP D ;[DE]=NAME PTR LDAX B ;GET DRIVE # MOV M,A ;STORE DRIVE # MVI B,11 ;# TO COPY FILLOP: LDAX D ORA A ;NULL BYTE? JZ FILLEN ;YES, LEAVE REST AS BEFORE INX D INX H MOV M,A DCR B ;DONE COPY? JNZ FILLOP ;NO, DO REST FILLEN: LDA $UN ;GET UNIT # ADD A ;WORD TABLE MVI D,0 MOV E,A ;[DE]= OFFSET LXI H,$LUNTB DAD D ;POINT TO HIGH OF ADR LXI B,DSKDRV ;ADR OF DISPATCH TABLE MOV M,B DCX H MOTITLE LPTDRV FORTRAN-80 RUNTIME LINE PRINTER DRIVER ; ENTRY LPTDRV,$OPNFL EXT $IOERR,$BF,$BL,$CLSFL ; ISIS EQU 0 CPM SET 0 ADDS EQU 0 TANDY EQU 0 CPMSBC EQU 0 R2E EQU 1 IF2 IFT ISIS .PRINTX/ISIS II VERSION/ .ISIS EQU 100Q ENDIF IFT CPM .PRINTX/CPM VERSION/ ENDIF IFT ADDS .PRINTX/ADDS VERSION/ ENDIF IFT TANDY .PRINTX/CPM RELOCATED TO 4200H (FOR TANDY)/ ENDIF IFT CPMSBC .PRINTX/SBC VERSION/ ENDIF IFT R2E .PRINTX/R2E VERSION/ ENDIF ENDIF IFT TANDY OR CPMSBC CPM SET 1 ENDIF CLSLPT: LDA $OPNFL ORA A ;LPT OPEN LHLD CLSADR ;OTHER CLOSE ROUTINE PUSH H RZ ;NOT OPEN MVI A,15Q CALL LPTOUT MVI A,12Q JMP LPTOUT ; SETCLS: LHLD $CLSFL LXI D,CLSLPT MOV A,H SUB D JNZ STRADR MOV A,L SUB E JZ STRCLS STRADR: SHLD CLSADR STRCLS: XCHG SHLD $CLSFL RET ; LPTERR: JMP $IOERR ; LPTFWR: LDA $OPNFL ORA A ;LPT OPEN? CZ LPTOPN ;NO, OPEN IT LDA $BL ORA A RZ LHLD $BF DCR A PUSH PSW MVI A,15Q CALL LPTOUT MOV A,M CPI "+" JZ LPTFW2 SH H PUSH PSW ANI 177Q STA LCHR LXI D,LPTBLK MVI C,4 CALL .ISIS POP PSW POP H RET ; LPTCLD: LXI H,STAT SHLD LPTBLK+2 LXI D,LPTBLK MVI C,1 CALL .ISIS ;CLOSE LPT RET ; LPTOPN: LXI H,AFTN SHLD LPTBLK CALL SETCLS LXI H,LPTNAM SHLD LPTBLK+2 LXI H,2 SHLD LPTBLK+4 LXI H,0 SHLD LPTBLK+6 LXI H,STAT SHLD LPTBLK+8 MVI C,0 LXI D,LPTBLK CALL .ISIS LHLD AFTN SHLD LPTBLK LXI H,LCHR SHLD LPTBLK+2 LXI H,1 MOV A,L STA $OPNFL SHLD LPTBLK+4 LXI H,STATR M ; Update Sequential JNZ POPART INX H ; Record Number. INR M POPART: POP PSW RET ; With I/O cond. PAGE ;------------------------------------------------------ ; ; CALL OPEN(UNIT #,FILENAME,DRIVE #) ; OPEN: LDA $LUNTB ; Get max LUN DCR A ; CMP M ; Out of range? JC LUNOVF ; Yes, LUN too Large. ; ---------------- MOV A,M ; Fetch LUN STA $UN ;SET IT UP PUSH D ;SAVE REGISTERS PUSH B ;SAVE FILPTR CALL $IOINI ;INITIALIZE IF NOT ALREADY DONE CALL GTMODE OV M,C ;NOW A DISK FILE RET PAGE END A ;STORE DRIVE # MVI B,11 ;# TO COPY FILLOP: LDAX D ORA A ;NULL BYTE? JZ FILLEN ;YES, LEAVE REST AS BEFORE INX D INX H MOV M,A DCR B ;DONE COPY? JNZ FILLOP ;NO, DO REST FILLEN: LDA $UN ;GET UNIT # ADD A ;WORD TABLE MVI D,0 MOV E,A ;[DE]= OFFSET LXI H,$LUNTB DAD D ;POINT TO HIGH OF ADR LXI B,DSKDRV ;ADR OF DISPATCH TABLE MOV M,B DCX H MO IFT ADDS CPM SET 1 ENDIF IFF ADDS OR R2E CPMENT SET 5 ENDIF IFT ADDS CPMENT SET X'1009' ENDIF IFT TANDY CPMENT SET 4205H ENDIF IFT CPMSBC CPMENT SET 4005H ENDIF IFT R2E .LO SET 14FH ENDIF ; DSEG $OPNFL: DB 0 ;0 IF NOT OPEN CLSADR: DS 2 ; CSEG LPTDRV: DW LPTERR DW LPTFWR DW LPTERR DW LPTERR DW LPTERR DW LPTERR DW LPTCLS ; LPTCLS: LDA $OPNFL ORA A ;LPT OPEN? JZ LPTERR ;NO, ERROR MVI A,14Q CALL LPTOUT CALL LPTCLD XRA A STA $OPNFL ;LPT CLOSED RET ; CPI "1" JNZ LPTFW1 MVI A,14Q CALL LPTOUT JMP LPTFW2 ; LPTFW1: MVI A,12Q CALL LPTOUT MOV A,M CPI "0" JNZ LPTFW2 MVI A,12Q CALL LPTOUT LPTFW2: POP PSW INX H LPTLOP: RZ PUSH PSW MOV A,M INX H CALL LPTOUT POP PSW DCR A JMP LPTLOP ; IFT CPM LPTOUT: PUSH H PUSH PSW ANI 177Q MOV E,A MVI C,5 CALL CPMENT ;WRITE TO LIST POP PSW POP H RET LPTOPN: MVI A,1 STA $OPNFL CALL SETCLS ;SET SO LPT WILL GET CR/LF LPTCLD: RET ENDIF ; IFT ISIS LPTOUT: PU SHLD LPTBLK+6 RET ; DSEG LPTBLK: DS 10 CSEG LPTNAM: DB ":LP:",0 DSEG LCHR: DS 1 STAT: DS 2 AFTN: DS 2 CSEG ENDIF IFT R2E LPTOUT: PUSH B PUSH D PUSH H PUSH PSW MOV C,A CALL .LO POP PSW POP H POP D POP B RET LPTOPN: MVI A,1 STA $OPNFL CALL SETCLS LPTCLD: RET ENDIF END  CALL .ISIS LHLD AFTN SHLD LPTBLK LXI H,LCHR SHLD LPTBLK+2 LXI H,1 MOV A,L STA $OPNFL SHLD LPTBLK+4 LXI H,STATTITLE INIT RUNTIME INITIALIZATION ENTRY $INIT,$EC,$IOFLG REALIO EQU 0 ADDS EQU 0 OASIS EQU 0 CPM SET 1 GENRAD SET 0 GENBUG EQU 0 IFT GENBUG GENRAD SET 0 ENDIF R2E EQU 0 CCORP SET 0 TANDY EQU 0 CPMSBC EQU 0 LOKHED EQU 0 TRSDOS EQU 0 MOD2 EQU 0 HDOS EQU 0 ZILOG EQU 0 ZDS EQU 0 ;ZILOG ZDS VERSION TEK EQU 0 ;TEKTRONIX MOSTEK EQU 0 ISIS EQU 0 DTC EQU 0 MITS EQU 0 SORD EQU 0 ISC EQU 0 ;ISC VERSION XTNSYS EQU 0 ;EXTENSYS VERSION IF2 .PRINTX/INIT/ IFTX/SBC CPM VERSION/ ENDIF IFT CPM .PRINTX/CPM VERSION/ ENDIF IFT TANDY .PRINTX/TANDY VERSION/ ENDIF IFT ZILOG AND (ZDS-1) .PRINTX/ZILOG MCZ VERSION/ ENDIF IFT ZDS .PRINTX/ZILOG ZDS VERSION/ ENDIF IFT TEK .PRINTX/TEKTRONIX VERSION/ ENDIF IFT MOSTEK .PRINTX/MOSTEK VERSION/ ENDIF IFT ISIS .PRINTX/ISIS II VERSION/ ENDIF IFT DTC .PRINTX/DTC VERSION/ ENDIF IFT MITS .PRINTX/MITS VERSION/ ENDIF IFT SORD .PRINTX/SORD VERSION/ ENDIF IFT ISC .PRINTX/ISC VERSION/ ENDIF IFT XTNSYS .PRIO EXT $CLSFL ENDIF IFT TEK SRB EQU 3 FILNAM EQU 0BH EXT $IOERR DSEG ;**3.36 PUBLIC $MEMEN ;**3.36 $MEMEN: DS 2 ;**3.36 Save mem top here ENDIF IFT TRSDOS .HIGH EQU 40111Q ENDIF IFT R2E .LMEM EQU 200Q ENDIF IFT CPM CPMENT SET 5 ENDIF IFT TANDY CPMENT SET 4205H ENDIF IFT CPMSBC CPMENT SET 4005H ENDIF IFT ADDS CPMENT SET 1009H ENDIF IFT ISIS .MEMCK EQU 0F81BH ENDIF IFT SORD MEMSIZ EQU 40040Q ENDIF ; IFT HDOS SCALL MACRO ARG RST 7 DB ARG ENDM .SETODIF IFT LOKHED DSEG $MEMRY: DS 2 ENTRY $MEMRY CSEG ENDIF CSEG $INIT: XRA A ;INITIALIZE ERROR COUNT TO 0 STA $EC STA $IOFLG ;INITIALIZE I/O FLAG IFF MOSTEK OR LOKHED OR REALIO LXI H,RETINS ;INITIALIZE $CLSFL TO POINT TO "RET" SHLD $CLSFL IFT MOD2 EXT $CLSF2 SHLD $CLSF2 ENDIF ENDIF IFF HDOS OR OASIS OR LOKHED OR REALIO OR GENRAD OR R2E OR CCORP IFF MITS OR DTC OR ZILOG OR MOSTEK OR TEK OR ISC OR TRSDOS OR MOD2 IFT ADDS OR CPM LHLD CPMENT+1 ;INITIALIZE STACK TO TOP OF MEMORY-1 XI H,(.WRITR SHL 8)+.READR SETVF: SHLD $CPMRF ; 2.x uses Rnd I/O calls ENDIF IFT TEK OR ISC IFT ISC EXT $OSTCK LXI H,0 ;SAVE ORIGINAL STACK PTR DAD SP SHLD $OSTCK ENDIF LHLD $MEMRY ;GET TOP OF MEMORY PTR MVI D,55H MEMLOP: MOV A,H ;CHECK FOR WRAP-AROUND TO 0000 ORA L JZ ENDMEM MOV M,D ;FIND TOP OF AVAILABLE RAM MOV A,M CPI 55H INX H JZ MEMLOP DCX H ENDMEM: DCX H SPHL IFT TEK SHLD $MEMEN ;**3.36 Save mem top for others ; LXI H,40H ;SET UP SRB PTR MVI M,0 ;ST REALIO .PRINTX/Simulated version/ ENDIF IFT ADDS .PRINTX/ADDS VERSION/ ENDIF IFT OASIS .PRINTX/OASIS VERSION/ ENDIF IFT GENRAD .PRINTX/GENRAD Version/ ENDIF IFT GENBUG .PRINTX/GENRAD Debug version/ ENDIF IFT R2E .PRINTX/R2E Version/ ENDIF IFT CCORP .PRINTX/Compucorp version/ ENDIF IFT TRSDOS .PRINTX/TRSDOS VERSION/ ENDIF IFT MOD2 .PRINTX/TRS-80 Model II version/ ENDIF IFT LOKHED .PRINTX/Lockheed Special Version/ ENDIF IFT HDOS .PRINTX/HEATH VERSION/ ENDIF IFT CPMSBC .PRININTX/EXTENSYS VERSION/ ENDIF ENDIF IFT TANDY OR CPMSBC CPM SET 1 ENDIF ; IFT CPM .VERSN EQU 12 ; Get CP/M Version No. .READS EQU 20 ; Read Sequential (1.x) .WRITS EQU 21 ; Write Sequential (1.x) .READR EQU 33 ; Read Random (2.x) .WRITR EQU 34 ; Write Random (2.x) DSEG PUBLIC $CPMVN,$CPMWF,$CPMRF $CPMVN: DS 1 ; CP-1 0FFH IF if cpCP/M 1.X, 00 IFif 2.X $CPMRF: DS 1 ; CP/M Read function held here $CPMWF: DS 1 ; CP/M Write function held here CSEG ENDIF ; IFF MOSTEK OR REALP EQU 52Q ENDIF IFT MOSTEK EXT $BF,$BL,$REC,$LUNTB ENTRY $MEMRY DSEG $MEMRY: DS 2 ENDIF DSEG $EC: DS 1 ;RUNTIME ERROR COUNT $IOFLG: DS 1 ;FLAG WHETHER I/O INITIALIZE HAS BEEN DONE IFT ZILOG OR TEK OR ISC OR REALIO ENTRY $MEMRY $MEMRY: DS 2 ENDIF IFT ZILOG CSEG CONOUT: DB 2 OUTREQ: DB 64 DW CONFLG DB 1 DB 0 DW 0 DW 0 DS 1 DW 0 SYSTEM SET 1403H MEMGR SET 1409H ; IFT ZDS SYSTEM SET 1003H MEMGR SET 1009H ENDIF ; EXT $BGMEM,$OGMEM,$OGFLG ; DSEG CONFLG: DS 1 ; EN DCX H ENDIF IFT ISIS PUSH B ;SAVE RETURN ADDR CALL .MEMCK MOV H,B MOV L,A DCX H POP B ;RESTORE RETURN ADDR ENDIF IFT SORD LHLD MEMSIZ DCX H ENDIF IFT XTNSYS LXI H,0FFDFH ;TOP OF MEMORY ENDIF SPHL ENDIF ENDIF IFT CPM PUSH B ; Put Caller back on Stack MVI C,.VERSN CALL CPMENT ; Get CP/M Version Number SUI X'20'-1 ; Set $CPMVN such that SBB A ; 2.x = 0 and STA $CPMVN ; 1.x = -1... LXI H,(.WRITS SHL 8)+.READS JNZ SETVF ; 1.x uses Seq I/O calls LRB IS AT 03 INX H MVI M,3 ; PUSH B ;SAVE RET ADDR MVI C,5 ;TRANSFER 5 CHARS LXI D,CONO ;FROM CONO LXI H,FILNAM ;TO FILNAM CALL BLT MVI B,0 ;ASSIGN CONO TO CHAN 0 CALL ASSN LXI D,CONI ;AND ASSIGN CONI TO CHAN 1 LXI H,FILNAM MVI C,5 CALL BLT ;FALL INTO ASSN ASSN: LXI H,SRB MVI M,10H INX H MOV M,B ;CHANNEL # PUSH B ;SAVE IT LXI H,SRB+6 ;POINT TO BUFFER PTR LXI D,FILNAM MOV M,D ;STUFF IT IN INX H MOV M,E MVI A,0FFH OUT 0F7H ;DO ASSIGN NOP NOP POP B INR B ;INCREMENT CHANN FOR NEXT CALL LDA SRB+2 ;CHECK ERROR CONDITIONS ANI 0FEH JNZ $IOERR ;ASSIGN ERROR RET ; CONO: DB 'CONO' DB 13 CONI: DB 'CONI' DB 13 ; BLT: LDAX D MOV M,A DCR C INX D INX H JNZ BLT RET ENDIF ENDIF ; IFT ZILOG XRA A PUSH B LHLD $MEMRY ;ADDR OF FIRST FREE MEM LOC LXI D,0FFFFH MOV B,D MOV C,E CALL MEMGR ;MEMGR XRA A CALL MEMGR ;ALLOCATE THE SPACE SHLD $BGMEM ;SAVE BEGINNING ADDR DAD B POP D SPHL PUSH D ;SAVE RET ADRET ADDR LXI H,-1 ;ASK FOR ALL OF MEMORY SCALL .SETOP XCHG LHLD 20324Q LXI B,10 DAD B MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A PUSH H ;SAVE TOP OF MEM SCALL .SETOP ;ALLOCATE ALL OF MEMORY POP H ;TOP OF MEM PTR POP B ;RET ADDR SPHL ENDIF IFT GENRAD IFF GENBUG LXI D,0D5FFH LXI H,08000H LDA 0A000H CMP M JNZ M64K INR M LDA 0A000H CMP M PUSH PSW DCR M POP PSW JNZ M64K LXI D,09FFFH M64K: XCHG SPHL ENDIF IFT GENBUG LXI SP,0A3FFH ENDIF I A,11 ;REQUEST CODE FOR INITIALIZE LXI D,ADRTBL ;POINT TO ADDRESS TABLE LHLD $LUNTB ;PICK UP O.S. ADDRESS PCHL ; ADRTBL: DW $BF DW $BL DW $REC DW $MEMRY ENDIF RETINS: DB 0C9H ;"RET" INSTRUCTION END EMRY MOV H,B MOV L,C PCHL ENDIF IFF CPM OR MOSTEK OR TEK OR ZILOG OR CCORP MOV H,B ;PUT RETURN ADDRESS INTO HL MOV L,C PCHL ;RETURN ENDIF IFT CCORP DSEG ENTRY $SYSTK $SYSTK: DS 2 HIMEM: DS 1023 STACK: DS 1 ENDIF IFT MOSTEK MV;COMMENT * ; DRIVER ADDRESSES FOR LUN'S 1 THROUGH 10 ; LPT EQU 0 ;UNIT 2 IS LPT DSK EQU 1 ;UNITS 6-10 ARE DSK DTC EQU 0 ;DTC COMMUNICATIONS UNIT 4 MOSTEK EQU 0 ;MOSTEK VERSION TEK EQU 0 ;TEKTRONIX VERSION ZILOG EQU 0 ;ZILOG VERSION ; IF2 .PRINTX/LUNTB/ IFT LPT .PRINTX/LINE PRINTER INTERFACE/ ENDIF IFT DSK .PRINTX/DISK INTERFACE/ ENDIF IFT DTC .PRINTX/DTC VERSION/ ENDIF IFT ZILOG .PRINTX/ZILOG VERSION/ ENDIF IFT MOSTEK .PRINTX/MOSTEK VERSION/ ENDIF IFT TEK .PRINTX/TEKTRONIX 3 DW $DRV3 DW $DRV3 DW $DRV3 DW $DRV3 ENDIF IFT DSK DW DSKDRV DW DSKDRV DW DSKDRV DW DSKDRV DW DSKDRV ENDIF ENDIF IFT MOSTEK $LUNTB: DW 0FF2CH ;EXIT ROUTINE ENTRY $EX,$EXIT,EXIT ; $EX: $EXIT: EXIT: MVI A,14 ;REQUEST CODE LHLD $LUNTB ;GET OS ADDRESS PCHL ;EXIT ENDIF END 3 ENDIF IFT TEK DW DSKDRV ENDIF ENDIF IFT ZILOG DW $DRV4 DW $DRV4 DW $DRV4 DW $DRV4 ENDIF ; IFF DSK DW $DRVDR MOV H,B MOV L,C SHLD $OGMEM ;SAVE SIZE OF SEGMENT ALLOCATED DB 375Q ;LDIY DB 41Q DW CONOUT CALL SYSTEM ;READ IN CONSOLE STATUS FLAGS LXI H,CONFLG MOV A,M STA $OGFLG ;SAVE ORIGINAL VALUE ANI 375Q ;MASK OFF AUTOLF BIT MOV M,A MVI A,66 STA OUTREQ ;WRITE STATUS REQUEST DB 375Q ;LDIY DB 41Q DW CONOUT JMP SYSTEM ;WRITE STATUS ENDIF IFT TRSDOS LHLD .HIGH SPHL ENDIF IFT MOD2 XCHG SPHL ENDIF IFT HDOS LXI SP,21200Q ;SET UP TEMPORARY STACK PUSH B ;SAVE KCLR EQU 10H .PTCHR EQU 112H .GTOXY EQU 115H ; PUSH B MVI A,KCLR CALL .PTCHR LXI H,0 CALL .GTOXY POP B ENDIF IFT R2E LHLD .LMEM SPHL ENDIF IFT CCORP EXT $MEMRY LXI H,0 DAD SP SHLD $SYSTK LXI SP,STACK LXI H,HIMEM SHLD $MEMRY MOV H,B MOV L,C PCHL ENDIF IFF CPM OR MOSTEK OR TEK OR ZILOG OR CCORP MOV H,B ;PUT RETURN ADDRESS INTO HL MOV L,C PCHL ;RETURN ENDIF IFT CCORP DSEG ENTRY $SYSTK $SYSTK: DS 2 HIMEM: DS 1023 STACK: DS 1 ENDIF IFT MOSTEK MVVERSION/ ENDIF ENDIF IFT DSK EXT DSKDRV ENDIF IFT ZILOG EXT $DRV4 ENDIF ; ENTRY $LUNTB IFF MOSTEK EXT $DRV3 $LUNTB: DB 13Q ;MAX LUN + 1 DW $DRV3 ;THEY ALL POINT TO $DRV3 FOR NOW IFF ZILOG IFF LPT DW $DRV3 ENDIF IFT LPT EXT LPTDRV DW LPTDRV ENDIF DW $DRV3 IFF DTC DW $DRV3 ENDIF IFT DTC EXT $CMDRV DW $CMDRV ENDIF IFF TEK DW $DRV3 ENDIF IFT TEK DW DSKDRV ENDIF ENDIF IFT ZILOG DW $DRV4 DW $DRV4 DW $DRV4 DW $DRV4 ENDIF ; IFF DSK DW $DRVTITLE DTBF Runtime data buffer ; TRSDOS EQU 0 OASIS EQU 0 ; IF2 IFT TRSDOS .PRINTX/TRSDOS VERSION/ ENDIF IFT OASIS .PRINTX/OASIS VERSION/ ENDIF ENDIF ; ENTRY $DTBF,$DTBF1,$DTBF3,$DTBF5,$DTBF7,$DTBF8,$DTBFA ; DSEG ; $DTBF: DS 1 ;DATA BUFFER $DTBF1: DS 2 $DTBF3: DS 2 $DTBF5: DS 2 $DTBF7: DS 1 $DTBF8: DS 8 $DTBFA: DS 145-16 IFT TRSDOS DS 115 ;TRSDOS USES UP TO 256 BYTE BUFFERS ENDIF IFT OASIS DS 375 ;OASIS USES UP TO 512 BYTE BUFFERS ENDIF ; CSEG ENTRY $FORLN,$UFMLN ; $FORLTITLE IOINIT I/O FLAG AND VARIABLE INITIALIZATION REALIO EQU 0 CPM EQU 0 ZILOG EQU 0 OASIS EQU 0 GENRAD EQU 0 R2E EQU 0 CCORP EQU 1 TRSDOS EQU 0 MOD2 EQU 0 LOKHED EQU 0 HDOS EQU 0 TEK EQU 0 ;TEKTRONIX ISIS EQU 0 DTC EQU 0 MITS EQU 0 SORD EQU 0 ISC EQU 0 XTNSYS EQU 0 ;EXTENSYS VERSION CLRDSK SET CPM OR MITS OR ISIS OR DTC OR ZILOG OR TEK OR ISC CLRDSK SET CLRDSK OR XTNSYS OR TRSDOS OR HDOS OR OASIS OR MOD2 CLRDSK SET CLRDSK OR GENRAD OR R2E IF2 .PRINTX/IOINIT/ IONIX VERSION/ ENDIF IFT ISIS .PRINTX/ISIS II VERSION/ ENDIF IFT DTC .PRINTX/DTC VERSION/ ENDIF IFT MITS .PRINTX/MITS VERSION/ ENDIF IFT SORD .PRINTX/SORD VERSION/ ENDIF IFT ISC .PRINTX/ISC VERSION/ ENDIF IFT XTNSYS .PRINTX/EXTENSYS VERSION/ ENDIF ENDIF ; ENTRY $IOINI EXT $IOFLG ; IFT HDOS SCALL MACRO ARG RST 7 DB ARG ENDM .CONSL EQU 6 EXT OPEN,$UN ENDIF IFT CPM OR DTC EXT $LNPTR,$CPMBF,$LINBF ENDIF IFT ZILOG EXT $LNPTR,$LINBF,$INLUN,$INCOD,$OTLUN,$OTREQ,$ZNPTR,$ZDIF IFT TRSDOS OR OASIS OR MOD2 OR GENRAD OR R2E OR CCORP EXT $LNPTR,$LINBF ENDIF IFT LOKHED EXT $LINCT ENDIF ; $IOINI: LDA $IOFLG ;SEE IF WE'VE ALREADY BEEN CALLED ORA A RNZ IFT LOKHED STA $LINCT ENDIF INR A STA $IOFLG IFT TEK OR ISC LXI H,$LNBUF SHLD $LNPTR ;INITIALIZE TTY I/O MVI M,13 ;PUT A CR IN BUFFER TO FORCE READ ENDIF IFT TRSDOS OR OASIS OR MOD2 OR GENRAD OR R2E OR CCORP LXI H,$LINBF SHLD $LNPTR MVI M,13 ENDIF IFT XTNSYS LXI H,$LNBUF SHLD $LNPTR MVITLUN MVI A,0CH STA $INCOD MVI A,10H STA $OTREQ ENDIF IFT MITS LXI H,$TTYLN MVI M,102Q INX H MVI M,0 INX H MVI M,101Q INX H MVI M,2 INX H LXI D,$LINBF MOV M,E INX H MOV M,D INX H MVI M,80 INX H MVI M,0 LXI H,$LINBF MVI M,12Q SHLD $LNPTR LXI H,$OUTBL MVI M,103Q INX H MVI M,0 INX H MVI M,101Q INX H MVI M,0 INX H LXI D,$TOCHR MOV M,E INX H MOV M,D INX H MVI M,1 INX H MVI M,0 XRA A STA $TOCHR ENDIF ; IFT DTC LXI H,$CON: IFT TRSDOS DW 256 ENDIF IFT OASIS DW 512 ENDIF IFF TRSDOS OR OASIS DW 132 ENDIF ; $UFMLN: IFT TRSDOS DW 256 ENDIF IFF TRSDOS DW 128 ENDIF ; END R $DTBF1: DS 2 $DTBF3: DS 2 $DTBF5: DS 2 $DTBF7: DS 1 $DTBF8: DS 8 $DTBFA: DS 145-16 IFT TRSDOS DS 115 ;TRSDOS USES UP TO 256 BYTE BUFFERS ENDIF IFT OASIS DS 375 ;OASIS USES UP TO 512 BYTE BUFFERS ENDIF ; CSEG ENTRY $FORLN,$UFMLN ; $FORLFT REALIO .PRINTX/Simulated version/ ENDIF IFT CPM .PRINTX/CPM VERSION/ ENDIF IFT OASIS .PRINTX/OASIS VERSION/ ENDIF IFT GENRAD .PRINTX/GENRAD Version/ ENDIF IFT R2E .PRINTX/R2E Version/ ENDIF IFT CCORP .PRINTX/Compucorp version/ ENDIF IFT TRSDOS .PRINTX/TRSDOS VERSION/ ENDIF IFT MOD2 .PRINTX/TRS-80 Model II version/ ENDIF IFT LOKHED .PRINTX/Lockheed special version/ ENDIF IFT HDOS .PRINTX/HEATH VERSION/ ENDIF IFT ZILOG .PRINTX/ZILOG MCZ VERSION/ ENDIF IFT TEK .PRINTX/TEKTRINBF ENDIF IFT CPM OR MITS OR ISIS OR DTC OR ZILOG EXT $LUNTB,$FLFLG,$DSKER ENDIF IFT ISC OR XTNSYS OR TRSDOS OR HDOS OR OASIS OR MOD2 OR GENRAD OR R2E EXT $LUNTB,$FLFLG ENDIF IFT CCORP EXT $LUNTB,$FLFLG ENDIF IFT TEK EXT $FLFLG,$DSKER ENDIF IFT MITS EXT $TTYLN,$LINBF,$LNPTR,$OUTBL,$TOCHR,$ARGBK ENDIF IFT DTC EXT $COMBF,$COMLN,$COMPT ENDIF IFT CPM OR ISIS EXT $OPNFL ENDIF IFT ISIS OR ISC OR XTNSYS EXT $LNPTR,$LNBUF ENDIF ; IFT TEK EXT $LNPTR $LNBUF EQU 50H EN M,0 ENDIF IFT HDOS XRA A ;SET CONSOLE TO LINE INPUT W/ECHO MOV B,A MVI C,-1 SCALL .CONSL ENDIF IFT DTC LXI H,$CPMBF ;INITIALIZE TTY I/O MVI M,80 INX H MVI M,0 INX H SHLD $LNPTR MVI M,12Q ENDIF IFT CPM LXI H,$CPMBF MVI M,133 INX H MVI M,0 INX H SHLD $LNPTR MVI M,12Q ENDIF IFT ISIS LXI H,$LNBUF MVI M,12Q SHLD $LNPTR ENDIF IFT ZILOG LXI H,$LINBF MVI M,15Q SHLD $LNPTR LXI H,$ZINBF MVI M,15Q SHLD $ZNPTR MVI A,1 STA $INLUN INR A STA $OMBF ;INITIALIZE COM I/O MVI M,80 INX H MVI M,0 INX H MVI M,12Q SHLD $COMPT ENDIF ; IFT CLRDSK IFF TEK LDA $LUNTB ;GET # OF LUN'S DCR A IFT DTC ADD A ENDIF MOV B,A ;SAVE IT ENDIF IFT TEK MVI B,6 ;6 LUN'S FOR TEK DISKDRV ENDIF LXI H,$FLFLG ;INITIALIZE FLAGS FOR DSKDRV XRA A FLGLOP: MOV M,A INX H ;INCREMENT PTR DCR B ;DECREMENT COUNT JNZ FLGLOP ;NEXT IFF ISC OR XTNSYS OR TRSDOS OR HDOS OR OASIS OR MOD2 OR GENRAD OR R2E STA $DSKER ENDIF IFT MITS STA $ARGBK ENDIF ENDIF ; IFT CPM OR ISIS XRA A STA $OPNFL ;FOR LPTDRV ENDIF ; IFT HDOS LDA $UN ;SAVE CURRENT LUN PUSH PSW LXI H,TWO ;POINT TO LUN LXI D,LPNAME ;POINT TO NAME CALL OPEN ;OPEN LP: TO BE LUN 2 POP PSW ;RESTORE LUN STA $UN RET TWO: DW 2 LPNAME: DB "LP: " ENDIF RET END T JNZ FLGLOP ;NEXT IFF ISC OR XTNSYS OR TRSDOS OR HDOS OR OASIS OR MOD2 OR GENRAD OR R2E STA $DSKER ENDIF IFT MITS STTITLE CPMIO CONSOLE I/O ROUTINES FOR CP/M ENTRY $TTYIN,$TTYOT,$LNPTR,$CPMBF,$LINBF TANDY EQU 0 CPMSBC EQU 0 ; IF2 .PRINTX /CPMIO/ IFT TANDY .PRINTX/TANDY VERSION/ ENDIF IFT CPMSBC .PRINTX/CPM SBC VERSION/ ENDIF IFF TANDY OR CPMSBC .PRINTX/NORMAL CPM VERSION/ ENDIF ENDIF ; IFT TANDY CPMENT SET 4205H ENDIF IFF TANDY CPMENT SET 5 ENDIF IFT CPMSBC CPMENT SET 4005H ENDIF ;CP/M CONSOLE OUTPUT ROUTINE $TTYOT: PUSH B PUSH D PUSH H PUSH PSW ;SAVE ALL REG'S MVI C,2 ;CONSOLE OUTP RET ; GETLIN: PUSH B PUSH D ;SAVE OTHER REG'S MVI C,12Q ;READ CONSOLE LINE LXI D,$CPMBF ;PTR TO BUFFER CALL CPMENT ;READ LINE FROM CONSOLE LXI H,$CPMBF+1 ;POINT TO LENGTH OF LINE MOV E,M ;GET LENGTH MVI D,0 ;[D,E] = LENGTH XCHG ;SAVE [H,L] IN [D,E] DAD D ;GET PTR TO LAST CHAR INX H MVI M,15Q ;ADD INX H MVI A,12Q ;LINE FEED CALL $TTYOT ;CPM DOESN'T GIVE ONE MOV M,A ;AND XCHG ;[H,L]=1ST CHAR -1 POP D POP B RET ; DSEG $CPMBF: DB 80 ;LENGTH DTBF Runtime data buffer MACRO-80 3.4 01-Dec-80 PAGE 1  TITLE DTBF Runtime data buffer  ; TRSDOS 0000 TRSDOS EQU 0 OASIS 0000 OASIS EQU 0  ;  IF2 TRSDOS IFT TRSDOS  .PRINTX/TRSDOS VERSION/  ENDIF OASIS R $DTBF1 0001" $DTBF1: DS 2 $DTBF3 0003" $DTBF3: DS 2 $DTBF5 0005" $DTBF5: DS 2 $DTBF7 0007" $DTBF7: DS 1 $DTBF8 0008" $DTBF8: DS 8 $DTBFA 0010" $DTBFA: DS 145-16 TRSDOS IFT TRSDOS  DS 115 ;TRSDOS USES UP TO 256 BYTE BUFFERS  ENDIF OASIS UT MOV E,A ;EXPECTS CHAR IN [E] CALL CPMENT ;OUTPUT THE CHAR POP PSW POP H POP D POP B ;RESTORE STATE RET ; ;CP/M CONSOLE INPUT ROUTINE ;NOTE: DON'T STOP PROGRAM IN INPUT WITH SWITCHES, COULD LEAVE ; GARB IN LINE IF THEN SAVED AND STARTED OVER. $TTYIN: PUSH H ;SAVE [H,L] LHLD $LNPTR ;POINT TO LAST CHAR MOV A,M ;GET LAST CHAR CPI 12Q ;FINISHED OFF LINE(LF)? CZ GETLIN ;YES, GET ANOTHER INX H ;POINT TO NEXT CHAR MOV A,M ;GET IT SHLD $LNPTR ;SAVE PTR POP H ;RESTOREOF BUFFER DB 0 ;LENGTH OF LINE $LINBF: DB 12Q ;SO WORKS AT FIRST DS 135 ;REST OF BUFFER FOR LINE ; $LNPTR: DW $LINBF ;AT FIRST POINT TO IN FRONT ; ;TO FORCE READ OF LINE ; END ;SAVE [H,L] IN [D,E] DAD D ;GET PTR TO LAST CHAR INX H MVI M,15Q ;ADD INX H MVI A,12Q ;LINE FEED CALL $TTYOT ;CPM DOESN'T GIVE ONE MOV M,A ;AND XCHG ;[H,L]=1ST CHAR -1 POP D POP B RET ; DSEG $CPMBF: DB 80 ;LENGTH IFT OASIS  .PRINTX/OASIS VERSION/  ENDIF  ENDIF  ; $DTBF$DTBF1$DTBF3$DTBF5$DTBF7$DTBF8$DTBFA ENTRY $DTBF,$DTBF1,$DTBF3,$DTBF5,$DTBF7,$DTBF8,$DTBFA  ;  0000' DSEG  ; $DTBF 0000" $DTBF: DS 1 ;DATA BUFFE IFT OASIS  DS 375 ;OASIS USES UP TO 512 BYTE BUFFERS  ENDIF  ;  0091" CSEG $FORLN$UFMLN ENTRY $FORLN,$UFMLN  ; $FORLN 0000' $FORLN: TRSDOS IFT TRSDOS  DW 256  ENDIF OASIS IFT OASIS  DW 512  ENDIF TRSDOSOASIS IFF TRSDOS OR OASIS  0000' 0084 DW 132  ENDIF  ; $UFMLN 0002' $UFMLN: TRSDOS IFT TRSDOS  DW 256  ENDIF TRSDRDED$hQ $DTBF3`bDED$cxQ $DTBFAԓbETdD\.K@% pDZ  HĈH10 HgĈHƱp HoĈH HĈI H8 DTBF Runtime data buffer MACRO-80 3.4 01-Dec-80 PAGE 1 1 TITLE DTBF Runtime data buffer 2 ; 3 0000 TRSDOS EQU 0 4 0000 OASIS EQU 0 5 ; 6 IF2 7 IFT TRSDOS 8 .PRINTX/TRSDOS VERSION/ 9 ENS 1 ;DATA BUFFER 20 0001" $DTBF1: DS 2 21 0003" $DTBF3: DS 2 22 0005" $DTBF5: DS 2 23 0007" $DTBF7: DS 1 24 0008" $DTBF8: DS 8 25 0010" $DTBFA: DS 145-16 26 IFT TRSDOS 27 DS 115 ;TRSDOS USES UP TO 256 BYTE BUFFERS 28 ENDIF ENDIF 40 IFT OASIS 41 DW 512 42 ENDIF 43 IFF TRSDOS OR OASIS 44 0000' 0084 DW 132 45 ENDIF 46 ; 47 0002' $UFMLN: 48 IFT TRSDOS 49 DW 2OS IFF TRSDOS  0002' 0080 DW 128  ENDIF  ;  END DTBF Runtime data buffer MACRO-80 3.4 01-Dec-80 PAGE S Macros: Symbols: $DTBF 0000I" $DTBF1 0001I" $DTBF3 0003I" $DTBF5 0005I" $DTBF7 0007I" $DTBF8 0008I" $DTBFA 0010I" $FORLN 0000I' $UFMLN 0002I' OASIS 0000 TRSDOS 0000 No Fatal error(s)  ENDIF TRSDDIF 10 IFT OASIS 11 .PRINTX/OASIS VERSION/ 12 ENDIF 13 ENDIF 14 ; 15 ENTRY $DTBF,$DTBF1,$DTBF3,$DTBF5,$DTBF7,$DTBF8,$DTBFA 16 ; 17 0000' DSEG 18 ; 19 0000" $DTBF: D 29 IFT OASIS 30 DS 375 ;OASIS USES UP TO 512 BYTE BUFFERS 31 ENDIF 32 ; 33 0091" CSEG 34 ENTRY $FORLN,$UFMLN 35 ; 36 0000' $FORLN: 37 IFT TRSDOS 38 DW 256 39 56 50 ENDIF 51 IFF TRSDOS 52 0002' 0080 DW 128 53 ENDIF 54 ; 55 END DTBF Runtime data buffer MACRO-80 3.4 01-Dec-80 PAGE S Macros: Symbols: $DTBF 0000I" $DTBF1 0001I" $DTBF3 0003I" $DTBF5 0005I" $DTBF7 0007I" $DTBF8 0008I" $DTBFA 0010I" $FORLN 0000I' $UFMLN 0002I' OASIS 0000 TRSDOS 0000 No Fatal error(s) $DTBF 15 19# $DTBF1 15 20# $DTBF3 15 21# $DTBF5 15 22# $DTBF7 15 23# $DTBF8 15 24# $DTBFA 15 25# $FORLN 34 36# $UFMLN 34 47# OASIS 4# 10 29 40 43 TRSDOS 3# 7 26 37 43 48 51  01-Dec-80 PAGE S Macros: Symbols: $DTBF 0000I" $DTBF1 0001I" $DTBF3 0003I" $DTBF5 0005I" $DTBF7 0007I" $DTBF8 0008I" $DTBFA 0010I" $FORLN 0000I' $UFMLN 0002I' OASIS 0000 TRSDOS 0000 DOUBLE PRECISION PILOW,SLNGTH,PIUP,FACT DOUBLE PRECISION K,SIDES,SUM,SSQ,TERM,TEMP WRITE(5,198) 198 FORMAT(/1X,'BOUNDS ON PI - DOUBLE PRECISION BINOMIAL THEOREM VER 1SION'//' N SIDES SIDE LENGTH PI - LOWER BOUND PI- 2 UPPER BOUND') SIDES=4.0 SUM=2.0 N=3 1 SIDES=2.0*SIDES SSQ=SUM SUM=0.0 TERM=.25*SSQ K=1 2 TEMP=TERM+SUM IF(TEMP.LE.SUM) GOTO 4 SUM=TEMP FACT=(2.0*K-1.00)/(K+1.0) TERM=FACT*SSQ*TERM/8.0 K=K+1.0 GOTO 2 4 SLNGTH=DSQRT(SUM) PILOW=0.5*SIDES*S` &G@)"j Jt< 4fP 8H NB'IBN "hO*Q@E!Jdy8@B$I * +JE2I<' $E)I"D)8T$I Dy\RRq@  "TP""yTDf"`3@)fhC@B3m6qH4mh! ۪!r@8x@ 63oP3nx 3ofB͠"ͻ`b9$D@D8X)-@$3h3i3ifͨ"; ! ! ,C 3j 3j03k 3kfͮ`"ͯ "BͲ ,:&Í! ͭÞ(/1X,'BOUNDS ON PI - DOUBLE PRECISION BINOMIAL THEOREM VERSION'//' N SIDES SIDE LENGTH PI - LOWER BOUND PI- UPPER BOUND')!RX!)"z!RX!1"z!"Q"!RX!)"!)"z!1"ͤ!9"z!xRX!1"z!RX!9"!A"z!O!!"z!A"ͤ!1"!I"z!1"=Ɓ2S"¢!I"ͤ!1"z!!"ͤ!t!T"z!RX!!"!t!T"!"z!A"ͤ!9"!"!!A"z!T"ͤ!!"z!1"͘! "z!RX!)"! "!"z!RX! "!T"z!)"ͤ! "!T"!"zZ! GIGx Â!##j0 TeB׳]h!I.k ́RX^́O!#!#q#~++w+qyÂDNn"~`35zr1{r1h!I͍ʂyO2#͍ʂ:#d/,PcHdqHd*`H1H` $ARE5(p $DUŀDE)x@FQ@"` rp%@Spj  KHXF0j. Da\1Q"!|>M ! ""\"!""^"!""`"\")"!|>b ͭ*Q"}2S"Md *Q"#"Q"t(1X,I3,F9.0,F15.6,2F19.12)ͤ!#~>@ẃ>͕͛ͬ!́Ͳ=®!#wḈRX́Od!#͍`:#ʂ:#/F+N+=¡!#õ!#>q#p#=¸!#"#͇ͬ͛*#͍:#!#N#F̈́q#y2#!##~q+q2NsY+' W~w+<5!#9XR!#w#^Âo}ͤxêͤ# !#F#^#V#Nͪ}#~#’G++NyÊ#Ð!#R>ҿ{i!#60 g>| !>¹akRͤÂ!#~+>wÂB> 2#!PA"#!US"#!E "#S*9#6 *9#6 Tʸ#~#I!# ~#XB> 2#!ST"#!OP"#! "#Sø!#~Gxƀw# w+ɷix{^!#60 wgz >|{>2#/2#2#<2m# >2# 2#< >2#2#2m#~#fo"#!#"F#~#+ !"o#!9##"b":# go"q#"s#"w#"u#G !q#>*q#~#! go"q#*s#~#/ go"s#*u#~#fo"u#*w#~#foG "w#2#2#2#2#2|#2a#go"y#"C#*o#| *y#"#(O2J#2K#2H#2I#<2#:#>Jͭ © > ͒wÜ :c#/< ͒=» 2c#:#ʖ:#/ ʖ͒= ͭ:c#  5= 2c#:# 2e#:b#2`#:c# 2e#!`#w:c#/F *#"}#!"#!c#46 *}#"#F :#/:c#M !b#/2{# 5Ù *y#*o#DM*# +|® "#"y#ç*y#*o#F5*y##"y#*#+"#|# ç*J#DM!{#5*H#+}|*F# ~2#`i"J#> >  ) !{#4 :n#I„:#=K==K=KR:b#V!#gl#\:#ʖ:#~ Ö>2E#:#ҕ!b#:d#ª:l#ª:h#w~/2# Ö!#~">T>Fw> #w#w#w>2#2# > D> D>O}2#O!.:#=_^#V ^#Vpڀ*s#|Œ*q#|Œ*b"!##w#›!##Ù:#!E#w :#>J!`#5:}#*5!#505*f#F#"f#5!k#~!#!`#2}#&2`#/!:#-5!e#5.5 5!}#5&*H#*J#{zV#"J#*F#+p!{#5Z:|#:#ʧh!#~4x *#"#*#"#ç!"{#*y#*o#:#ʾ~'ʯ w#Ü#~'ʢ"y#ç~'G5*y##"y##þ*y##"y##~'ç:#=!#4!"y#u2#O!:#!n ^#V"#y,*y#"#!"{#6}2k#2h#y V:#.`*#}2h#*y#+"y#hXH(AILEFGDq k  k > L ; :#G*?##:#«#w#«"?#*#|ʧh!#~Yx2E#w:#====+>2#>w :#F>2#7Ԓ5!E#~w͹>!##͙͹!##͙!c#4/Gc!#~#L2E#!#w#a!c#4>J*#*J#"J#* DMyxҧ *H#"J#ç 5*#+"#|˜ç:#G:k#2c#!E#>w!c#5c͓c !#~/G#~/#:>#N!#_b:;#*<#g_~#fo:>#<2>#W:;#zFORTDATA|!c":#_~ͽ:#_!v"^#V!m":#_~!":#_^#V!!*u#! p# w#:# Ҝͤ@z:^#VͤwRͤͤws#r#6:"{zG{O! ~ʥ! 6*"ͤ ʌ! p<£r! q*"!9}|ڠ!v":#O s#r!r+s!$""6#}y0wx0#w> #w# >͒= :#G5͒ !##w# :#R *J#DM*H#"#*F# *?#q `i"J#"?#*H#DM* "#*?#*F# q `i"H#N :#*#+}|Ҹ :#¡ *#"H#>J*F#u >J*H#"#*F#u w#=t *C#+"C#|q < >G!L#60#͹!c#4:#0wͻ "#~: w+ w!L#|( }( !c#4#"f#|/W}/_*#"#>2a#:#/:b#G:#Z x2`# :#i 2e#:# 05!`#5ʛ 2#:c# :c#2`#2e#!#~/W+~/_>2#2c#! ͻ}0o!c#4{”!L#:c#G2`#2e#2#s#¸!L#"f#V+^Ð  >00:02#>ɯ2b#2d#2l#- >2#+*J#+"J#!{#4ͮ:#.=>2d#2c#ͮ:#0EMDR+a-f>2E#y2l#*J#+"J#!{#4Ox ڌ> Gw:E#xʡ/<2c#G!b#~w0:#®͓ͪͪ ͪ:#!#w#w !b#:c#wî  :k#<2{#/Fʧ*#+"#|ʧ*#"y#!#4ç!E#6:#D:m#D*J#z=*F#6 "H#l:E#2J#2K#:#\* "H#!"J#ç!#~uwÄ*C#+"C#|Ä:#*#|ʧ+"#:h#2b#2#2c#2E#go"#"#"#"#:k#!{#w:#4*#:#G:#*?###~#"?#:m#J* "H#ɯ2E#go"#*y#*o#~# -!E#  "y#2#G0C C*#T])))_*#|N#x:E#_o>g"#|x!#~w+ ic!#~w+|!#y‡#!#w#›6 "#,ʧ/)'ʇP:#2#ç|!"#2n#G!d# y xy"#`i"#:#!+"#ajSX_JS\E!#/ 7>{_zW}o|g=|g}oCZQ >w:#   Gr*"|+}.""""Ͱy `*u#|T`r<ʔͤyw<ʘͤ@ĆͤͰͤ6!c"~{2#:.¦0*F#*H#&w#)7*F#>2H#? 2":H#:H#>͇*F#~#=$> ͤw:"72H#2"͇͗|ʅ*H#&*F#w"H# |}P:"?ɷͤʕ6̲5!v"/Ɓ_#>WͰ2">w7 4!v"_#>Wͤ>6ͽo&6#<+Ͱ)2"ͤww:"O0:"O4=#4:.=ڜ~2#ͤ w m#wa:#_!.p+q:"> +2":"*"> > *"|}"""":"#:H#*F#=> ~+1> > ~0> #~#= _>2"ʹ?n<<:::2H# C*H#&*F#w"H# }C:H#*F#=> ~+ʥ1> å> ~ ʥ0¥> #~#=ç **** at address ** !~"~>#O!G ~#~:"<2"F$P  !&ø!~#|3}3> <Ɛ':'IDF0MPIRFWITEXDOMLDZLGSQIBTLOBDEISBEINOVCNGLGSSNA2IODTBIRCEFFNDFUNOM??2"2"!""*+ 2"!´!!"""!*"> > _*9#~ #~"9# "!"^#6 #> wɄ"F$P