IMD 1.16: 8/06/2007 8:32:12 HJELP LBR HJELP LBRQIF COM IF MQC !KEYWORDSDAT"LISP2 LBR#$%&'()*+,-./012LISP2 LBR83456789:;<=>PILOT-P LBR?@ABCDEFGHIJKLMNPILOT-P LBROPQRSTUVWXYZ[\]^PILOT-P LBR_`abcdefghijklmnPILOT-P LBRopqrstuvwxyz{|}~PILOT-P LBR PILOT-P LBR pPRINT CQM PRINT MQC)PUZZLE LBRPUZZLE LBR7QSORT LBR-PUBDOM 074 {.HJELP HLPnHJELP DQC#?HJELP AQM)hHJELP AQ6HJELP COM +=HJELP CMD)eHJELP - introduction HJELP.ASM - listing HJELP.A86 - listing bibliography :: (HJELP) HJELP.DQC :: (HJELP) HJELP.AQM :: (HJELP) HJELP.AQ6 :Bibliography. The best references to consult are the HELP files which accompany ZCPR2 and ZCPR3. SIG/M 103.03 HELP.HLP 1K brief HELP file SIG/M 103.04 HELP2.HLP 22k detailed HELP file for HELP This material is included in the reprints issued by the New York Amateur Computer Club, Books 5, 6, and 7. :[end] [Harold V. McIntosh, 15 October 1984] vhHJELP.DOCM    "!#$%&'(*),+.-/102345687:9;=<?>@ABCFDHEGIKJLo]t=7S?路,z?A9GX;*E{Y챐QS9- ƒ9GϡzaW;"CUwɫ^![ YV+o6(^eZhZi!ߕKt੮uLS ]a,C=ތ Hz{]|{q /V:+{,ws7{kٰS b˲S ] 3ܘٿ787>cI]ՐلeaDeN؋7{}Yhx?ςsSB$0>,}eH5aI&3X4Y EH/u* I/8Ć٩i=kJpo !۳|w+p8; X ﳽ8نwu}ڟT. g>ŋKʲ@|kMzi"F_LT?7e%i,R[[:w띎ޣ0ƻe7{|abrɮfo|5,Fן=r!WRwS<MXMz9fૣUv+!n tC`>MXMzĩ$ .˂s˂IO]Ϩ!QM錻z3oROdF-Ŀ/~tZTxc*ة/g,k3v- g|?kXLڟ|dei,X`.`Nѳ:]%[M=aDL,rhm$뵞zC̈́ V:-CdeG]ڔ*e=]Ɵ=> |u4դ`Nt} V+]*\]]VyePjF..~eP=û8 *8o[;*;pMl&//N:e!`ʂ,C? >!-,˂iw,R'bMUhS_X;LiROO"˲`,iw\0#ZY@B%[o/~tZ= ]̮QlRҤHT9iMVGjIoi+SZdKc[ц}=:׭- 'bRO1>xe߄Gk,XL򦳖onvoae@ew(V,_ qv,II&U4k F*],Im'Y@ds=M&'i,F&4o67a:*,[<,rfq 7ޣgu4\Qw=S6IcMxEk߄Xejeч=%η[ YV̍?q* ;ew'cKWԦ4U]ˢpM/wV̍NĤ_8Xĩ$?u, >NK55~w,S?sNƖoXE 9GnD ?~[Jw,}Xٚdi=ni?S&A׮EkS_[hW}I=نDVGk˂!%SS {v+!ˌ0kM%Rgs੊>{S"/>Kݱ^{d*Uv+!͸~  k#wZkzް" ׮z;8Y3vGeֲ/\57ݡꠗ{q/Yxb9[ Axſ7 ?IX9TؕAPzENO?J'[kuPwM5;^k2R, vڷ;N˂ T&B7ۃbY}fOkkqFZ_X41Z0SKxل% ~w:z{?L|ݔ.Yf{~$ޣgu4ʞҬiLD_`NHFuNG3iYweTPאn]T& >{T j&nEkB`,Dk=E L%aIZi0YnP3:e6K!,X [_HF+oAbo$Y/~jx S,Í΁*Ʈ T7 \K]t= _ ' {pgXkBeM'bpOD&h1Қ%A9V_d}F9դ" hµu}Mпx_zz-D2VGû`1YV{t=޲`O:㗤gT%آ)uL]x@*.W陵_Z-.pz/ʹx8EдjUTWv+82r8/w}]+T}!K;57# >,Žd׳FY-uqnbH]᠝lCe%ޜޣgu4Tk2M9Gje.DۡzH竕mr腮RU_ehX4_,~tZ{?/Xh{ 㿴N|Sf?Sof/ XtZ^/0T$뵞zC̈́ V:-CdeGv!HJELP.ASM^  !"#%$'&(*)+-,/.0213456798:;<=?>A@BCDFEoGHJIKLMNOQPSRTUVWXYZ[\]«'^P JS=>^_v*?TO%RF#J`~$|]x^ Ou׵ JSɤ R]Pz]O塗A*vk^ OuӉIjI!y51~~;h>x ' A":,CS@u'do / ^«9_Ӟeןho2'g"C|9=TNLuP^«5,ļg%z +!HՅbc҄B]k4qU]X}cUP JC۫cHsrp1iҋ{Ns'k)ti A .*U1b*EkzgNG3ilNѳ" 7n& VGòXa_o_{Ǜt=WsS}]t=s:z[#YV+-r_^%TW_6띎ޣ-x5?WD=z]Ϩ띎ޣgތomLP ;_IȲ,LgJc cKHW.?NƖ&٪c 'b` Y4?vǘo4m1K^^7yg&C^Ag'ab{×w0RaaM:T/${=X;`̟ S-PD;VL\DXJՆz¦\+aLz$WP%&ϹJOן@)tݥN3ݥ? %$lXS5 ՆApȳ:q u7J9ú9J{? v#,~J\Pz¦0qU]tW ŕ9z,^A*W^Vw¾w%$Z¦J(>\0_mUb\8{訴 aoJ+z#yv~(O.aH $lXS Նd!{]GyvM/a,M{} j x{)z*1"lߋ(W^Vw¾w=a(!aÚʳ~aB] taAja†ݿ޿.cݯ6$-lC [/^-,~aUbKtIد6w aU Նis}T]د6 RA«q&O>^"s}ˀnC WKu; .(Uh5/:6\%. Նz¦6aQyX[Lx¾wpyU^Հuiaߕ]W /ARo¾wp),zsiQ`4ޞB,{=LD;^= yL:aR]d/ςN,gS/=v}0MxY0&, uq NY&%7 6mW^>խ{S;kG/yv4'O¦֟mzAjhQ 0[:'4{˫&$$6A}%SWN1GZ-3FhQ̳ *«Y rvZX_RΎxaY}h?y]ذ#_Xx `3vqvNDA|*g WRF=4w=)Ɓ4w.L`v"R:w^]/YY0$ŇY0I|xc;;YPx5EH%N"ݥ? %$lʻOXx Wǖ=*g1yc(d+EkraF,0b >.sh2"%ߡ9q9«uom,1M6> ƩA1ςٰv2b«{)?ς oK«'^P",[?xdw;<ˋǖx(W)t)lsG†57a0BCH|=β& o{@Hi`z7 ouB,;<|!W^B .'ګd;1OIEtyf[,$P.1 [܋_,ɢ(<^wa%w_s(l;ήύwoyaׇrT2rv0hH.865/¦>l9'FC ?w`DgǙva k*_m^!HAa}HHغm7R+gލVk'qo4.Ka0zI] Նdݥc~cdQ`YRkz(lXSx VF#ȇr Ԃgд@9Zb`ckaa, %l[Jo',Ns K8{*Z'hgIǐj'C7 P!X./ګb~[㡰_mХuUҋ®.lςsBg9h38«ͳ`^>Ll'R 5m~rjzɳSvF#1YWad9uN(,1͆~F'ͳ`}olGx.,zyub„K]`rv0?YZX=6@ty?^N{QtyD{O̳E}}b< /F}Wv#,z-ς1Nh {Q,V•]u$x¦'Tv0 Ն*dWlZ 'Lxw՚S;~﹗coO}r7rvPꐰa*Wvns,g^ h,gBXxAgyc#S#&V!]3ز'0> .ÜZ^h4Yo if&E}n@!HuYAN-C/IO&ONd7]-RvUbNu0*1yΥWz$;<Rua]%>uϽ{}{ va04 Ӯ]=aC†5Ĝ+W.{*oldCHO݄{kG/f9;(\zuE:8zO|^=TR'nɈ+*.1^ S,`u,,{݃E;v?aTX|65/¦%Y|wYwxX {Ur ~F wÌw~aB=W J/ vX)~% .o}#a< _,ɢ2~\#>;ZX}uP /A/^gI&hȯ FŸ=GtaV"laM^[je {Y})"Ȉ62Z%;͆)qv-Zc%64]xx-,1u$]-'ګd;1OI¾w=Xc6=ZZ刱f;0# t͋o}M1d!2AQj 8.{^aw)aMq&W^SD{hc;)Bد61P6=ZI!HD,Ct 8K?_b«wxw0ˉ`^: \:ͳĤMxy0ޣyb<Ϋ&d1l;Yh`N,ɓg4>szEk]7bG wW^SDa;nj[د6¦G [Zoز,:'b l8 *piޱ rFT[ذw7^+;?w|',Z[!^=iSyc#Dzrgv-,\%\ZJ\>^#,q%ςyc#tq)l߳Wr5/ls~{{=a_N|-WAP\~o4j( [|SZ)̳SFCa0{|Ɨ;f UB^巅cw6L*1gaoJ+z#yv~(\%LP J(|W9 3v{)더 ٩wJ2^#vz1ԻP&9B0+ 5!c˳S10t rwieן{aR6L*nVv0O?ItJغg_a k^)a?zڸ;n[ذ]%\6%! ]%\6L*1*uϽ^HiMغ*q6o0N%E}n†ݿĜ+W.{*oldCHO݄Ĝpu0U{&p27u7{^<;nt?6]%\jtSyc#Dzrg&,zBOb`cV(,/ {a; aV";<|GHje {Ǯ,,z7^ WPWtq)쟤.^}upiJKwaGغ*qAE{͹99ߋ߿Ka$])au|*yaODsm0ncL)f ;jaVAŽM a⼺#a 毅u|Ewx ean^cz7 k^ذޭ۫^z̳SFCaՊǮ<;nt?ֻ.锰..t1Oŋa/Av#,M~0%kaᮗOuO..{݃[ؔ,] aAh5/¾w=MaBvJaӣo-GXxZ`,ςԟ(y_ <`ԟ(y a {EhaG/(]#2<;C-W^ڶWHD;>6]`觿w)t"W^UUl;d9;S}*Yβ#{݃[;vwaTl&ٱrv0'8Ue/gGذw/gQY@G=Wٱ0 Og, !lzٱrv0'8Ue/gGX/Žxc9;u?=UB6U~m,gaqr3Z%Yrvcw6LJ9;f9;$,q%w!}{@UUl;d9;S}*Yβ#ٱrv0'8Ue/gGpبY FD}rzvߣ¾w=x¦di"lZ¾w==Z͋h@;^=|at۵p5jݺXΎxaBY0DPzf?؍f?Ysȿ7|׼a*WP~~;woa򪺽oaT/?c7dw" [wԻPذw5ُF ~C?c7a~̳`h>g߹{w-8vk#g粧򍆉 Cխ{+@A-ޞ>۫3Ի07y~acЅ{^ל[9I߿tJj^<;ZXROť.Ix~q*yv)lsܜIE ߥ#a~b}{p [PBŽ*a2.l[? %$t [w¾e0G̊]-j^a(!a릲ޭ Rذ[jž1f9;H3R p uvl*aV3h5/:6 V{1f9;HN%٩D =H]f {}]أ =Z͋. k*߃ŽxWØsY}/yv* _Xa]3-lzz@@G†5o@jaG<«'qFC] O} I~aa?1βr9Z>=߃¦'ګ?& .Oן S-=(W^*^巅}RjegG̳, vȟZX8ҟAhŽxW_)v] v6]wx P{ A^ :"lЁa j I :0 u|$a2mu7 UggYiIQat{G;jKP%> #aI$=`vv$x?ut{G;j IP a QiY;6-;<\M u[|R .Oן S-=(W^*^_U"źu:^׼_mx \{ջ0#}*FC*loaǦ^=iM%S, דj j&j@=ߔVFJ{ԻPJ\$&j Oc<>@wP|ׇa|ma݅ SJ\|)lMi^oW0Nϗu0ϱW?c|xA=ߔVFJ{ԻPغ*\{A,SFCaӭU/=fNaHmHذ^6]%l`YHa´^ b6W v3׈-Nǐj u T†ݿĕy8{-W'6MF A"={nCאaM= lJ|ײOyvƽ[ÐaM=6]%>MN0 a aÚ{uIa†ݿ*{E&A†5*=G1.rb'E}n{u?J{3b<;)3v;J\^#Rzvߣ~%[o{-ɸO?cԛl\ Ն`x{Ul&YTgJ!ls8Fx򍆩7َ_mx \{ջ0#}*FC*loa@W!a]%W-Qد6 *P M‡hy}A)$lMi^oW0N}=Z-GXx'=`q] '~V' D{I=ߣ¾w=@aS6-K/ŽM Ahj x]/߅6IغZty$]jFaT Ň/-{݃[;vwaG WP/~aT OµMVT oah莺{gz{.lXSy7{M/ PoٰvR/=v}0 '{ c,ςԟ(y [F|K]†5wR/=v}0 [ ^a^z`]0wT@Gwh.lzn^#xd;~uvz$,u†ݿ^> Fɺ~]/:=>~†ݿ^> z̆zZX4U,`^>MǺuϣ^#v k'q kڠij1/ϲ1 aV"j^AӴ{m<ٰvr#j^}Ap a[<獽ф'6/aTMa݅ &{p*wQP<¾w=@{h}olAGa -l}kaG< S7=땄'6gIce9#aՊ4GP((^ ɺEqzˇt` lЁA†ݿAQXx2vad?G9N?I/~%[o{-ɸO?cԛl k*r¾w0]غQΎxaY}h?y6=q3{3Z%AQ.ggJŽ= ˙}젰{v#,Z;0vcjǺuϣ{-%w,g~$=-{.쟤aG9;ZKYfIz"[u@\P.\%.^Uԭ{S_ :$lUPZ6or*B9?L\^UW5-lʕr٩Rma@wP\n?c|xFan^cz7 {.lzt{s0 {ֻu{Kyv~(;<(!an^cz7 [\%BMjgc0HMذwxU!,z~Aɿ7|95Β !z-,\%.NUUBqe~>h|!..JJ\c~b< [aO tt6\%\^6]%._^v _gc>`AR|Oݮĕϡ=rv W>O[+U| ՆJ(̵W3Go4:6\%|.\%̹ҊHi`z7 Ն =¾w%$,lߋh3bkazﰽb 5y0^Gٳ3b {yf?8/bwxPB¦dݥߋn.gG6L? ) Sy(W^SRغG*lC!aTze /)tݥa3+앱W^SRغ# V,?ecvZXXՆ =¾w=}JH} T{O [+ {}{z喙? )C†5+Qغc!l3 [  /AkDTGĖ=b6•X!x k*Dau'l3@Bد6e%6{DĖTGĖ=b6#nCs!aÚz-lb{HCՆ,i#1-{.le!l[ﷅWRcdQ`NHG4ςYEZX鲨co aÚ[eQ9#lo aAh5/†ݿ( aˢnCA†5k,7(uϱaô~[;v¾wwЅ=Z͋a BXˢnC!aÚz-\eQ9#lo oa;;Eذw & #~ [1Hltv_ͳW+p*c#cGOxZx WċV^ ΄G˿ǣ<;GyUxXJLُ0/'\O J|ኽBpߚTC [|SZ)̳SFCaEbK3bY}ލ0 r8U&A†\%._a*WW  4M=HŎ9d$s-,\%̝S9cn젰?P6L*qEgoГ !$67 [_†\%( zR!~aT~WcVcܕu7{^<;nt?J\^#R? ]CŽ*aJHQ%lCuHQ%lC!aG?PvT {.luvT [wJ&BŽxWO0 eן{ka*å> o {.lUbN _卍qAa*aNXx5<$ aߵp7å> o {.lXSJ|lOӓj sNW(ꣲ`/ ツ{)더 ٩wa*1'g{F V0Ɠg'a_gc~㵰p0?np0W7=UB^巅{C]׷u?xߘ%=]{}a_ [1G^P;{S_ ˫U0TUZLc;9UW=PkOb|+ TM IQ[*_;vwaÚUÜjKP%WګލV7Ra} T|/GXxbA)< Ƥ-͞`OYUu{9; w,ga ;6uϱa?]%.a_~[m޽6nζ&,†5ćW5bYAُ~aT+_b7R+gލ†ݿ+ 5!c˳S1«dćW=W.ۺbȳ` SKcOv:Y0%b*yCMa /qA6OA^ :"lЁa :06@ؠ/ŽxWO31(gv-,\%_å> o {.lUb~aT W b7R+gލ~J(>\0uUbK{=7|Ɨγ$ń ~aT {B&$lMi^oW0N~J(>|׿7|ma݅U=W/a_~;Ϋ&ՆAP%W'$lMi^oW0N &F_?w1Ϋ&$=qʵp>:%Z¦J(> TM^`TF%FaO} u7̅l "JLُy5;Mze#p\z [\%^Ǽ&@=wQ C$l[U/=٩wif?4qKUbW: .(Uӿ^7%K†iWW a WOӯuw\ aAUBWUȦo22N6.1 {.lXSJL{EZtW ^U!*ː8Ȼ(aM*1}a@ v~/,\%ϽRv Ws[wԻP#a*1}.\ݠ4p_UBs݀^巅Üuh. _Yp_iHz$\%&ϹPWØt)=(?ѻn@^%oR7Э:=>~$u;uK{ ݚVrԛlE8rV7ЭgJZh݀^C*dS}v IC*Y*^n@}i[Si;d9;}3Z%{9;Mxnrv0'8Ue/g X7l[`G;m8b݀'YVZ">f1 ԟU]hUuggYiIQaX7ldQܽX7l?IZ{QP_k& ǺnjAqߩwOW7mҴ]$'TbǤ- Ws {-"bx8^g@ABCDEFCNPC'~K1顠@|!ϮmtF4 쇌p_iNmJVx3vr5/lP&OcǮA4wg3zq( ׼Aih< w%2u}}b<#.6(P(_!z"Ȉ!1{N=SKN@| ̳w;ݮS=>^+v~-<ˠPP JCC#al9< :,CKc-iQ ׼Aih\zDlh28r5/lPCcOr5/lP%}8΂1'|]}s~ܵ| U獍r5/lPEVx3vKh'8.ͩe ׼AiGc,)b"[?;ή@| lЇJ&U@| { _/kA [qy7,&U|  k^ؠ44?Zo@B96( 1O k^ؠ445N)ycw1͞7%EO|H@B96( ԻI}nGo4OOzGy6r5/lP3v/2=bF,0b,q%'|]}r5/lPвSAXYVF[b`cePP JC rj FQ`vγ`,:5(yaҐpbAir5@p_s~nPR/ o>&$\%~Nݠ47jc#s7N'o>N W~>h-?]HiNN0P9-8GHoIJKMLNOPQRSUTVWXYZ[\]^sӅwyewnY"w^O _M<}mRr`@[6G k~ ?Wl܅o^-c%`ew>ޚKꖛ}w"ʇ͹o"O(m-f^O%Jp$[v~u|!=!J^.|S!' T>C _. _7bwVB\]sxٰ7%M4Yaxl5o0r>Ϯ.|SB>>pӕe<݅/|%;Ϯ.|S/RE/>C9 _,yvuFHXjH#[ws]xKX#ϳ(yׅoH/;O ݁*۞ OpB\}]ď%d3QÁϽ佸.|SBwҢW mmS }8'Ds҃9!JWܻ.|!P!~I ҇# ?su?=7]>|&P9Mb?ڕ6ٰswɄ]JzۃUF:Z!m\Y.wg*c9 Y)4?:R9Q5Mb?ڙ6ϢvYjq,C ~dEJtu\]?J+m?jT]jŢ*Ϣv,q ν&$\% W7( }|)$<9'bwh#(yaP'Iyv~<ˠ9IGĖjo@TCg紐#(yaP6oc*G; ΈZ-'>cjBUJݠB9ĉ9 Qr5@jBU*u k>B'&ܷsT!(RsC]V(_81C k2v JC9qb*!cgcH@|p;nPZ|PrĜ aokw k>Ԅܫ|.'Nvʂ10/NeZMHQ J+R$҃ (clb;jBcV(_$Ƹ㵚p+ƫV(_!HAa}Hk5!aaPׇrTQ(ExV7l[,d`ѐ]$q&u?n@YdQ7YdQ7,|ԟĺgcP_ګo?~nP_ګo' ? ĺg]E݀z:.\%W.ԗ TM IQ[*_J(|P_+I1ʜx8˿W W ŕuK{s0 W ŕuK{ջ0#}*FC*\%Wԟ?1E*@ /U 9KUBn@}i; Y5b뷩=ҦEt5A/7v6ѤmWExzy2VW&|vi>Li,7Bi\bgQҦ1uރUFu[jFڵ,jE3bkH'eWƉ\O,cLe,2r~;gQ;TO,v! ; Y5b뷩Exzy23]kX'Dew&=gJkg)?SZ;Uf,jȹ?ڕ6bkgҦ_ѺvVڎe~k ]O8TƎٰso,jgه4ϔN9MU||,jȹo,jWů៱Jzۃh]oMim7ZFTy7DU9Q5b?ڱxzy2v̆uEJ^53V]iSo{8k)rF뚫,j1vLH,j:CV Xmغ _e)Oq;M&$̃,jgܥuur{g!W,~6]?ERg>, |/sWlUVW/Ѻ֯cLelťxY6 oTΔϔ֎EYgȪ_M, |jQ-|TP9jˉŗWB8x?/>t~zdħE%aɊ&agQ;$L,I g߽}[׊e"s&e1ik}K>1v cYBuY 31CM*guw[j7Zx+Ϣv,qYΪ'_ Cw0rcLel]Á^Y"8-#kKgcU{3w8d%.fOkt Y|^|rcLe`vϢvV ?Yu~_۔KsIDgQ;O8T]xay%aKX4[;#i~RG2ia@,>|V9ڱxzy2Ro,jg"3o31B5m&ÿ6,j7fúvwJ$Щ48?r1vLH,jgڔKE%a {X!tnʺO0W*guF܋ wg*clX׹EJ^5; Y5b뷩=gҦW,~ ֮jov+ϢvY<()‘l ; Y5b뷩cLel"ow)Ol &'Du΀{g!W,~6ϔ.:. :C/f,G2,Ji>*+gQҦȹ3V]iSo{8ߪUӶѺ~Q?=7]%au'$iw8V,TyG2镱s׹y#םxzK0-Oŏx0JAWg)!X&;#iq8*; X/%^ڪ_Rpd3lX&>~znÇ^WNHdZ/%t>˃󕳨iS.}&ϢvY<aNj;y+rc䛄I g]ݰΐmO8ox1}):7,*T?&abMBd8ul{зyNj;ϢvḾ说5Wl嶿UvX hUExzy26O{K{^Bd;?M6XJ=gJk7wJKDv ?ʙڕiwmbζ'q\Y.wg*c #so,jȹۥV,XYFγxgJkgܥɿ*^_:ZÊFk>Š϶I gK6ё^ +@ yEX<6]El0&!2}bgmq^+cLel&ݥUFkjՒZFk\EXgܥdYgȴŌEHF@?cՕ6<8]]U ϳ֮dV+gQ;O8To,j7/U!y()‘lZG2px0O穜EX<}&JeG"a!k1)i'%:q;YXd)i-pd1)!7Y7dZS$BHe!KI3&q_9SZ']:0ΎD\Bwh KbEL~j'_j1)iOϥJHdC.>tKؤn .\,#Y&0QHD73dp&镐@:eG⼪<.; ْe^('8˞OdZ*MΏc0~[;!J+a,;YU.*߇BGi?pdGaMV}7vIL-c8;p R6#$˞.*߇nH&>cÑ5hU+aOLMb}o3:CVb#j~_I^߲TΔID2#uН=}"XWX<,;O,q"EX< 5]:$ C$PG2gQwj}oS ,jWT9w៱JzI؃UFjRoιW_&YgȪ_|%ʹ/3 G=ɃCpl +M"%M,3egl( ZE'D6f%bgKԒj;#fzcmDY׊eç2W+gQ;Os9WgQ&?WFjRouIyYoE sEL\=^Jd]O8TƎٰO2V >9,jغK5O,^|%?pdy?mglݼě=^@yiik,jR"$%2ro۞ v'$ʙy Y_O?ERg>, |/sr6Z縶ȔFWyG,%۲3dgv#i&"[1Bi<O$<#t_lqI|^<"s,cdwA2 ;YԮ9608s_SZ[/>F~R/%[ ^ k"3o31B55O, ` ,jɪROwF3]i+μ}YoE~b 0~#gPៗ~zR-#~ٴaRUl -?2$ہ;Y+'$>TMu&;p)^fO0$ǖI\icѕ:az1eHN|^|\9ڱxM]$D^ -k2ϢvḾ说5W gQ;O8Tf?ڽΐU+~de[SGew-![/}Ñbƃa)"4>FrcLe"vϢvJ ?RER'İ 0?ڱxzy2֢o,j:CV Xm%ݥI 8֥M;pm/˝ƪV&Li 댻!/l1ȲgҦ^ڕ[j#!ڕ?BFʙyw,8Au?cՕ6u'ÿ*g+jFȳ֮\gJkYgܥ ,YUWԫ_5p6ZoVmD"֮'TXuM<8]U6r]*jE ~D"R9SZ;E*YԎ;3xKmKE5 YgȪ_Zu2B‡Y9ڱxRjT01' Ϣv5K;pY$,Ϣv,b5]߁"aq^v~? 5Kc>acLeGow){ze< xgQwj}oSYԎ;3sݥ>In@>3dc3Y:Yu~_TÇ^V:k%y#^6Q6{xB|LFHز?iceyg8[`ð%dZg1R10OlK'dK%B5S$uo&fxP,jWů_lfEm_T76Ndxb1ĜqU9UfFk~ 2OExSÑUd8E3qY.wg*c[1?ڱxR5\ >aƥb3iE:jŗr]sYN'_HdVxgQ;O8Tj]J]{g!W,~6~zBzف;YGJ8"E3qYԎSG r]sYN'_HdVxgQ,qm8]s)H,jX]Ms}KU ҶϢv3důߦy᧗tpx0_p*gQM?eT?ڱ6e YԎ9Sedٱxb1+Yv,X J,XEf_ɲcϢvY<|E*rcw"abXOExzy2VYZчvϢvM?J+m]iseJ2UFk~gQ;LܻVvϔ>Sjŗ*:&U!YԎ;3vmW̽ΐU+~e^>TKGGZ| Y9ڱx_lebgQ;OJ *:&U!YԮ)kJX+mG&hbel5 q&?eLel+{oLilFgQ;X|"abXOEX<>?cՕ6z8ݷUVWm{RVLq?cՕ6jlvVZ]27ZW.j16ѤVy'řJ*:[olg* 滔@OiG6HR1VvOzRJ B:x0ݓExzy2VW'%ݥ=A+ɖX@Li, %";p M_ժIR`Z ^BǢs yd[83pd M +H꜉"sY Ic1iS.}sok0PlOPO2nM]5W]{g!W,~ˀ_W'U΢vY<JKDv0Pl4R9ERL IbHEL^ܥU cO=a,ː^ 7ve?X bPៗ~z.w4P?:sEJ^53V]iSo{8uY8/3EJ^53V]iSo{8s_/csgQҦ^^ Y8;љr+mzOԙO0B53V]iSo{h557ZV_&hZ37ZW~zxل:C2"ay߶l|<\lfEmK^76Ndxb13V]i+UFk~H'B5S$u̲xP21gUFk~oժ5iњ 5ل:C'x->|rq"-mz8ϢvXz* ): fxPIy,*TL_њ_[jCoׯ?/>AM6Gbwg*cM~jY8SiϢvMXQ]iqE^TS$u̲xP,jWůeJjgQW,~=,jWdGewG8bS',j.5ϢvM?WGhbel5׋ʥ^\B>>?eLeqݥ=#&?%iZux{e=Bi|uFIc1wg*cyK9|g܀|Xg6&gIn@>3dc3Y:Ҧ_5p6Z綿U6:csK1ȲΐiNj~㑌8+mEJ'p6 ȇulylby":[Xg?ڕ6%θKYg6&gM;:JIDB6-`ƪ+mY$h͛VZ]͕pysgJk$UNWs%'_Ws%')gq2dYg]i&'K M֋-OxBdkřq"["%Ɖlq)OKGGɢe,1.ΫJ-76Nd3ř_&JWluVZ]KּWt5WrRJ6(& ٴTƃ!>|]_9SZ;:.eg1ȲZߕrvƷ.%OϢv,qow@z Ol{Pwj}oּߪU]yњ׽_WsUΔNWrKGG6ѤyϢvY<!u52WLio]J EX<{B~z7ё_Ӣ_"d%˃_W^VΔγθK31hJ ;ckv'YԮ@ LitK=t,CcZ/%[: )F/rK)8[H2"a v'?ڕ6u'/+H"sY I31]֦ELmC"99Ʋ 饛plW-]֦:9YδI.}6{&OWƲ 饛plW-SO, ձy~zBln>bܻ^BG|Z?e,j;3Eowiϭu$=gJkg)ܥV(-فk0PlbWT&. MrU P1)BE?SZ;E*j~wq٣]bgҦvK$"FߪUr kjj7Zp?SZ;O LiHgQҦ:9YNWsSir&i|`|ou^rvZϽr +gJkPjթ"j=rX]"]0'l>/n^=gJkg)ܥV(-فk0PlLit5]e4K D M*gҦ^wU9ܷUV6o{)T$3SHWThUhsUWsۃUFk=oժUEZLi|]śr+m=שKU ҶϢv,b5]߁"aq^v~? 5Kc>acLeGow){ze< xgQwj}oSYԎ;3sݥ>In@>3dc3Y:Yu~_T?SZ;]ūwz2=A wg*cu5A?]j0Pl^ly"۞ ebu~_?ڕ6Et5Aw*RTM,j;3]s+Mx0-^6 3FR+5(63m偯*gJkWXgܥ 1qdAu?cՕ6*=W z\ߪUoW uV mƪ+msIyR"ZO[j##h_ }؁KLJs]i&ޥƃa! .5N;p M̕Ϣv;v)`&c+m)PR`YԮ=gJkg085(6v?Aһttl{LK=j<_ժ\I ᧗:XUM|i{4>|]͕r+mw@z Ol{PgQ;L?WTFk=zz+Aʙ滔@\(PLd;?Mzz3ռ\wiCS4P,ϢvY<aɆbه4Ϣvƙr9gQ,q ν3iEX<ҩ)gl4WnVmFsk).%8ߪU۰p\^ƪ+mUzhVZl%Fs5YԮ;88\ߪU۰pdBi#al'OoFÑ&X'$>T}- O(ȣIp>#>; Y5b뷩9T X S9ERX ,jgс33Ce4? ,jJTSϢvMXY.:)΀ƪ+m_5p LiuZuO3Jz=!O:?ڕ6bkGIvM=փ{Si/s,v:U'>\*~C}0HB<*sT' Y8;3V]iS/s! s;Ώ,>|:pE^T{9ÿL_s Liu3ur@st ~zɐ#-g8Z i|r{g!W,~6`/sW ˀ?=^֋-O/0Dv~ey7 sLiu3ur@s #8b~Ώlx2;-~zGLo J|}?׃UEsXuM*9wWgҦ^]៱Jzo=W\4 UWD UEs6]rƪ+m%كUEsXuM{ʹh?sw~zn$Qe߁G|Zer+m]D]说4W oժh\=TY++mUNW%?(.lMZ|ZeYԮIWrwiMvҦ_n[ju^ro4ǟ\E?vB6Ѥ?eLeN4]8[4i=gJkg)ܥV(-فk0PlVvwKV:k%G,TJ6ѤM;:J6+yj\U+mUz𱕸r{SiϢvƙJμ},*T?ERg>, |XuMJU9ߪUt\_vu3V]iS҃UFsj6,o4WU_ժV:7,Ɖ\O,C3bW 6?=$H'&:q6iml;YBM=Z G txҌêm#aQJnɒT, |ϢvX YS9X ƒm B:$[ķҡylX9eLelCg~K{X'DewM~)4rZDd@ |gQ;O8TfB?ڽΐU+~zۃLiT]d%ɃU jwb! W<-;?M,^iKvt3We]iSo{Ϣvs׹4sLiu3V]iSo{8ռߪU>|]3#8b~ 6V:yDrcLel&t]i+{g!W,~6UWů_\u[j b7˹V)mU!!* bbUW#*gjF7˹W)*)?SZL(QgQ;O8T2/]%[jH?SZf VGHUWԋ_\[jY#e+ϔϔ֎)]&(wg*cYć4ERE/5fW 65R*gҦ^r6qmVh.UvdvTLi2DEX<>f\9ڕ6UWKrߪUh._26WΔγ΀`6mVh.W{SiOԙO0B5Zu-c3|h\9cՕ6*gjƆh.[+gJkYgj0^lVh._i+{SiOԙO0B5Zu>ذrƪ+m*g9z[j 6Fsu~rvuќkn[j 6Fs _i+{SiOԙO0B5Zuqfs Oev~beZ`[UAw )!nd,w" OM7᧗P&%{BdY+!?̓.wڪww>^6)vӔVOwt*~TΔYgW=W*~vCh}el9W]֖,>\*~4 Ώ,o][6{h%3Kg~$Šx:u,;Br3m偯y_VJl4ϿZ7i+ LWt5 ^u5oҺr%ˮ8ϢvƙJ+m. Mrs|\7{"@Z&Ҧ_?jjބh,jWd&Sir&9>=gl -_iSih_[ju5oBo4ǯ_+mmU:]͛|7~,jWd+YvM_W&|Q9SZ;ܥ)~@ ]iqM2v=$xٝ KOO+&ԝ<)CXAzYv~5Fy"-ЛSw2 CrpdIZ"83?t<.;YڡC>J{xNMt3` 4oy^viBxYD _ƮG' dӖeKBO{ngzxN\ӞQpk0P2 y˓/2:?Bw8M;ez^+aL+},|;?M:Ee"a)QR#Yo"O/cCNdHXՊle|D _ƮwǓ/m@tZL._u'$[qzxN^YO`X兒J!)c]tNH(OkK&ԝ 2vex0!9"1:]  D*: 2!6 2 D:](v!F#!.",z6zDn!~ m]zv!!~ 1!e~ !\6 6#!"ͨ6;!:hڽw#ë": ʶ\<!|6!"$+"Y*"))"*+"| Y !p*"!6:Q/5\2|*|R+"\;!"$ !hw# ^*$|7́?+"$*&~#"&*|ʨ+"\¨!"&!7!"&6!7?!"$+"2|2\2ͱ!ڞ:«: ͎+5 GDU:DeD. ^ +!@ͷë_Dë6H#6L#6P+a{_> 5> 5_ ~ d~ >.5~# 5d#pw#z+~ƒ * z"" !6 *" ̓!6_kb))) ̓* " !6* }| z" !4* * {zӄng2`$x$#&~ӝ/7d[Z[SiKXU{3Zg#&a%a֖Io"O/cB!ٴIDG>c3%=l&s!M;ez\#OSoewM~[ibƃnn&ԝ ]/c0'l>/7v',IH>c/]/_BeXQM2z6ߛSw2vu7cG֍%A\B>>&ԝ< ys#OS%ͺZiOOX'l77mN4eSwsɺq<Gv&m. ҇؛Sw_W'L@xNz.Y7n{2 q~y^vIo"OS|]M u&mՄez||]M_ƮWYn{u5!2v=;Jv$$2~=wdh6/Ibm&]Ʈe׭417t׍%{Bdy^vrۃo#OSOIsy%v;ԝ<()tHaP #|/_Ǝ@Ô2Ô* pR##^#Vzdf{/7?7* J!5€62:2og!G~w#~wx7?*}7!~:52:>2::**}|~#"?  5+!55 kDt:5DD2MIÆQPYÆ.a ^i LwS͈ͣ+>2>2*"!6!6͈!5>A2EDͱ: :5<2>.5> 5÷:G+͈͌ͱ :  :=+!5#5 gD(:LSP e hhpL> p> _D2ʱSʮͣ>2ͷD͈Lͱ: h:!5ͱ:: D ] z z!4!.",KK:7> K>:wG#::K"*]*,~#",zD!)6 n> 2R s(ʑ!\V )ʗ!]P!\S !S !e~ ®6L#6B#6R>(5!]P>)5> 5!P!)~6 +vRͨ!@ ]G ͨ!m"wwW73d-Λ=^@߁_/'^~a|>Kgy #gyv#r|[5G%<]j_Tx0τrw~//9g[yv'p6U%HCŌþ{ R_}rwD}rw)`&c ϳݥ&Ŗ'tN;xMb' M~j'^.5[1yv%Bb%ٹMRExƃa aܽyv%zea{ ?VßO]߁"aq^v~'^.-||R5\ >aƥb|?xg[dGaM+5ݥNa>aoQrw-cIƃq?.wR=5(6Ȭgǽ$RER'İ3bƃa)gWߥY+}>Kɱ8"%d C : DÆ=2 zDP+!] z !zv( o&]T)))):N :D:] AD:] DD2dr  r 05| t G:’ y2’ > Õ y05xHJELP/ICUAP/05-OCT-84 $Many systems feature HELP files containing information about the usage or characteristics of the system itself or the programs which it contains. HELP files are often structured, and require an auxiliary program which will facilitate their consultation. HJELP.COM satisfies this requirement, even if the HELP files have been squeezed or have been placed in a library. HJELP FILE will display either FILE.HLP or FILE.HQP, using a menu of information sections and a series of prompts which are largely self-explanatory. HJELP (LIBR) FILE will display FILE.HLP, taken from the .. ?@ABCDEF [ Caa{{|AWe;K$,Xz<_M9ga ߽?-pQuY&+A',_O)i#ꌹaJ \ AƂcWZ mhl1fo .=d\5h0uYia_N'~{a3L&X 7jcW ZjϱAY \An,PZj?@W Jt&V0ս0O +LlY&+}YOn pSf hl1fo g rj_A'e# r`x3|XAn0zB0F6|}f )> 7jz[FqQ>b4)~Va5j_Aga_^On g  7jcW 'CA՞c F \4#|yQC@2!*SmB̺.>ga@W#xa_^@W]R `1L 1fo g  %% rƱ0ș߃`C Zs1#fM{ͳ05kxak )aK\VB7 lB{j :!f-"yVZ -/ &ĬE/[ B2ҨE鐫9S0|An8# rf&<juYie0ș rƱo6n 7js'a5Nxq; I!~9`a3{\R 7jl6nJtSUY߈9dlY"S>r"VaK/OobY8` lBw?0|g3vR:j"*D,7|2ZҿAsuxGzWHt#HBH3cnXFz[3,5&Yg(¬|fX)jM=?4C3E)4c93RdBYf93RdBB1\if(Rd{EaV S׿_(1fShƳ>r?P8F0eXStDW!Wϓ˯¬Y)jM{ ǘ)O܏F11oquoa9~G>J]nf>ɋ{\)f(puo0+ K}1 R UWսս¬Y)jMwe(c>Ƴ>EG\Yf;;Pe0K1kfo g rj_A'e# U (1P6FLdFLX]B Kn4geZdTF*d,( P[3F $&hΊ w ( :L~5unEakh9,Z-hyD?kЉ`dЉk |F7 n{@!eD-&-۠HFZ1J ($:ɷF7$s_4rQGׄz<%: yFiDȊPO焬$O#w\.%[{|K'%pl|LOO"mN[L>"[BA 3AO \!l0<,&:rQ 疃aMmrQtN"hWX(`%: d)4(#ڣYN"dX(`ϒ, $ ӠLϧ-OY<֣l3Zw}Wq͢/릺r^w%g͟%W !<Y8[zxG+ٮgbԛE-_,MrhX]hk%wBߙ&w @Axn=6#(ᕇL7).嵞|L-u]EѺK u] ڣuݗ꺴G$BChP&!@B-Ǧ JxΖ,ъwkؾ8fQuS'8Pfͳ&yyr#si^C Q{vl$BV4a6VHe4ϡW }vNi=3Z{qW]T5ir޳c+'J lk&ي"<(ᕇoԃ{.i:gF+ީ 'u͜D(iF# q4#@[vv8LISP.COM "2 !"#$%&'()*+,-./012<*3456789:;<=>?@ABCDEFGHIJKLMNOPQRAP-O STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{o.4Q=:6%G|}~  H> &5nCwD3#)F!KJi_SL97B;1uXUxaNE8(}y`R,'qle/~{^\[M@ tpdWI?$zvsrc]ZY mgVjhbTM4Jxa]hkuZό5S׮ 'u͜D(iF# NW -Ǧ^y=3]Zޖzf|qjNkhŅ:gݜD(`_+[vMs%wؾ8fQ;u_ZjmZ].ܦu/uI l~J'7 @!<aA~vNimygF+v])׭ڴB]^$BF_P淇يܲ{lOWpƳ=3]Zޖzf;'.MkO8'J8B G^܍ܲ{lD Q!o*·EC>z(ٲsTnWv&ĦƬkk;bS#q LM&&ɩ:dZ5t3QEm:dZ5t3QAr3iD|A6뢥1uN[P|L[- $RЉ`dP4p? (D:kl/n8!Vo#QuIS!d99;&CIO\G7SN%Y_&CIO\G7SN!1FI'n6P-gPo9J~ohxDG^aTH G#)#Ϳ֜C+ l| B~t 2M񖜈ݏ;@ \1APbB6lE5 ?{= Y;,4(d+e,L*C>afёRfo('>$o$?RafA>丿ae?ݑeL7rkӣB6lû;xQʬqQ!o"v2A Bu0t oYH2 eVfRM xE.J6 RH#3)]צGlي\: YgiEIq캓eL7rŀUQ(q[r(c#⁤1*AȏF^$&EK-fL!6Ar3iD|B>u:F:8BCDr(z[Eo@CoFGf:MMYw5j&ĦFF 1݌r(AMPL%ns+DKc0:-C>aMt-B B)D0@2P(F؟|# B ?#1b6_G9͘,'!6Ar3iD|B>mTh#D;DTCC*·EC>z(Q lA3¨AȏGxM_STGx!7D+9e6ёW :+Oһ:OKy5I}P!0+ y5Eu7~qCšSv(`y#ݜ%Q&1O#w\.e [{Dw\q}ԃeLS%'(yS2A b7V!FlيTkw% YS?yBýWLCPe&RH+3MDG"H"gyBA LE3XBG9%||d"Pʊ`Xjۥ lDG^:r"QGĭ'a~;_y6?<@tpngO8J>'ܟ?* R7 #'x60Hld&ёWٮ+,'^Of&YOeBg&ϟaDZu7id  _<PeL$: V?5y69#@tW5@OB )@Yal" (2ZlL^\ёL2) YBCmL 2 š>H Q|d"Pʺ7j ӠLdVĭd k.WX(`4#p[r`#VY-ۊ:P}ёWE&( -ś:A񖜈ins$Oަ2A È'ox60Hld&ёW ؠLiDG^* iXo&0:3e6@ޢ!LRؤy (d@ #c@ PtF`2+V kmEWX(`C+5|[r`#VOy0׺o+B ': sFw@àxKNQm[0o&0H0xLi07A)4(. 2QP3mPHa- 2mF<u0e6@ޢA|iP&1_搱$x6( Italy6ҍDG^'r#HT⡘2 ʤx(2u0e6@"H ٠,ɃVv7L2A BB6lO^YD+tਐ7[2A Bu0t o҃ (0EZIq9jǨ7[ (42sՎQ!o"}A>(~eԃ/M,L[9 P&t!W Xeeבu.2=ЂdP :L2 "Q5}M6?G('-=3 (D:kl~6X^ (Q+A (ᕇ7IFgH 9neakE%ݮ 6 #\w;PeL$: tnN"4«h;}2|&l0aݠLiCVfF+9e6ёWٮ+,y#ן%v !|+w2AI#3 bF<ٷ%h;}42|IF h;}ٕH#÷nN&uneakBbZ0B %7VP|?ٴ;Ѵ,'Jh[,?&YH-SG֞&3b{$BI,W Zlb(і'k@2PGu5mDFNϐ/;[q5MM!r_ХkBxnYV!:l琻u.2="n% ZB[{ :PA#;w[r"nYlP42¨AȏGxM_STGx!%̊lNZ}+,+5|[r`#VT0纺u^aHyܹ[rAA coɉ8JnN?Hq$!LRؤy (d@ #c@AeQܥA&[RV:y6Nyܷ:D[a~;_ l)#;w8?UQƭnnz7(d0x lP&4L# k]3yWX(`DG^'xk0՛:PyLJYz74(⁘BPD;eLCqh-d(O>x7P@2DG^!gf:P[y#ן|n Lf ӠLb>d"Pʊ;gu:P&: o בu.2="n% kr+,-lw8J֣Ow?u 2mF]ny6y#p[r`#VV[hky6DG^wq6yGIyyP0(ޒq[0o&(d0xr=:3e6@ޢ{A̴AY M:B6( 02F eAg&"n%`X-B_+5\Gֹ\$`XϵuBCtpng#(=U*(d0x{@AɬrdIP 2J  È' lP$#It7D+9e6ёW :+ׂBz7[[/ZpTH/E^$&='A^a !idyQ!==𚾦C62/nVXsl#@t!?J^$&@2 R D@ Pie&(2EE0X} D9A9%# (f (?0sJH Ag&"n% k mu/Bm&: o ?ܭsH lq+Y kڝ]u]SŲ+,DG^wq6+(fmm/0H0xr^^C2nL2mPa:ief(A3Y{aMkXy6߷+5|[r(A#V{aMk/*u^ah/ёWEn{ݍ{ݍ{AAaēsWfݍ{OL2mPa:idf(A3YkbwuM:PK{[çu.="n%gbV?[ۥ l~,Ftpngc"_s+6 #YD+oߊqVo̊X0ϖvBM+5\Gֹ\$JZl{+,yדoۥ lt+5|[r`#V`Xjۥ l : syc@Qrǀ{t=:6 #aP%'(95#[7@'IAY M:B6( 02F eAg&n"(x&" ߺG a~k& lh+UiP&1Du_d߻2(eEJ{5s=u]:P7U[unEak[VaMӊ=bY DG^wq6]UiP&ϥ x6($: VoBOd ̺-7L2)O>4(⁘ k]3yWX(`;@)+VOn5M+eWX(`@tp#w\.ȰGĭ$!lt^aͿёWEu?bbAeB'I daē lP$#Ita~k& l~}DG^'sX"ǧů̺n>N &H Q< @20Ʌx6($: V?5y6O. k_VfDG"Hʊ^Exdj&ѯ# &[A P XoQ~xd*5 <= B~k%[_E6<CMv+ê:ɨCMv+Gf:k`WX(`uFfyLJY5a~|K ؼDG^:r"QưGĭF0NK | : sG Gɷ GeR<@ SܥAA lP$#Italy6?(ёW :}kL2)x( A)4(⡘πLJY{4?֥ lG[çu. ="n%`Xz&uK:P=Jtpng<*(Gݟsv Nӆaē/ ؠv&Ita~k& l;Ftp_c ӠLd1ӠvR<A%p^B~j#@hgZA.NT0h+OBёWE͟xJQr)S@,6ĉv&Z (1iP&z! AhqI2A82J $3Y`X=0Vy6+5|[rk^Z~< lёWEͧ^quZZP&ȴaAA,6ĉv&ZDueBg+L.\J@ 2J $( YBCmL 2 š$@.jx(V(-jdF kWX(`DG^w}iP&z! AhqI2A8z! AhqIp6C#>x2J̍r]x+,WyAA,6ĉv&Mo (1 LfEJ>#ִr]x :Pw : o בu. ="n%o k]m==u:PO : s!(;o<~iP&1|:0]dP@2DG^!vWX(`DG^'wL2)A&@A|<@ 2( 0 #|^a )Ffy`XBoz+-A)4X R(7iſg uPab>xeLSZ nn1r6lTMzf >#WfK n'&ZlL^ 牎B&:? ٮ+,牎B& uPab>A& :0C1|P&4š>@){/$@|<A  uPab>x 2A)qnkzHT⡘b>(dZ*LPC1|P&4š>!RmEхHT⡘b>(dZ Rm x!Rx(じ8C1Duwt[HT⡘b>(dZ*LPC1|P&4š>x2(eVm8u1Rx(oLJYwG{; uPab>@)HT⡘9ny :0C1LJYwG֬5ߺ S<@eLSZR@)vHT⡘b>(dZ 2Mqh-d"Pʺ;-2|w uPab>LiCk}:0C1|<A LJYwGIA)x 2A)A|<@eLSZ㻚!Rm=7w uPab>LiCk}:0C1|<A ֽ@); :0C1|P&4š>=@)nR S<@eLSZ߾2(e֍ uPab>LiCk}'UDuwt[+u :0C1||d"Pʺ;԰[ S<P1 2Mqh-dZRx(じ82A)KZ3YwGu8v)Rx(㡘(⡘LJYL2)x "n%ڮ:WX(`y+5|[rhak[ɿ| sWX(`<@tpngo< (yA9mF||ů̺9 j'&7mxXP (dZaBT+%DG^!gf:Py#ןd0P -D 6F̌Qh2A3F 2`LD%q>n0 ief!W('AfF 'AIPVfRӠvR1J uid& S1JA:0@ ̌Qq+`0ۋ=:P=[ǐu..1lq+avmXy6DG^wq6";CD |<AwiAPbBFfy`X7u^a?Htp_?Mo@P 21Jq6P<@ 2( 0 #!^a )Ffy`XB{+>Mo@P 2PZ Sie&œM( @R|(d:cDJCV_ԶP,ByܷO#w\. 0lq6xHQ=C"n%Sa>7Vy6DtpnP&ȴaND+?2 ʤx % daēWX(`B L# k]3yWX(`7y#ҟ& x ZlL^ ӛ@/d!? p N3 P&48H Q< s6L2)AJP cAI@ 0/ jx(d,( E^B~j#@hgLip(L+@\2 #>!KZ) 4F8$  b>(dZȴBi *LP1V @.jLfVz uPab>AJK @`X뾴Pץ l~ёWA*LPC1_<2A)KZ3YwGeo S<@ 2PZÚu_Zjy6%#>HT⡘b>xeLS @Bg&nKJA)x 2A)< k]3yWX(`wyLJYwGܕtۄ+,y.#>HT⡘/LJYwGŇGv%a~0_>^,B߼+ k]3yWX(`Etpw@&;] :0C1Ӈ Rmņww'@|<A|<@=nHT⡘ R6^j)@Y @!0x2 d 3hfr6\Gv9o9-Pt [ᣇWfK Xfr6l]L,b> (⡘b>ߴG %EPC1|:0C1_<uH+3)LJYw2beQ<@ S<M(G! %EPC1|ie&š@)5Xׇ/&@ PC1 %EP1*LP@LCk!RkƆw6$@ PC1|:0C1ߴciHʢx(㡘b>P2ZDM@ PeLSZA) 2Mqh-d"PʊT V[_y6LёW}k4r%=&Z,"DKh EkbyMl'V?55؂:.fDGޢhbӽD-ZzallA2L[-Xh98R!_qIFY>C"c%/4\Ul;ƭȽ_zjci/~ک<= @8f`m}z x/;O&&:ޱ|YLOWsxjxfiekgueV[zu5]]Rֵ1kka닧[Oo>} N{iO$O~WW#x~tW67ٓx{@\. 9v֡xJU'j|!ךׂ&n}Z#|'q!j5J\vWb7Bp`]B YDZ`gQ(1aq/~ک =mɠA[ݘ,nI%Z-x LO_۬-̖[༓xqxfWcG}=_90Y>pQ[fegDM_8z|B Nbbq d/;qrmV XǴ`p,Zނ_lYon|reBP|?)[B`do ukBief( 5!E?k|r0 | 72 k:x!_fMt-Z`w85U?uiyV[hkM؂:ߘiyV?[ۥN؂:g̴`X-w9uȿ3&:a>םoۥȝ#fDGb0zmtuo2&:a>om/i fDGb0NYl(v|N[P6ё k6fح[u3m#o1ִ򮺅bN[PcMt-Z}z[QGuH3m#o1k]uǷui "3m#o1s]u:x-C^gMt-Úu_Zjyt!;iyV?8Qo36ё kZm}WxflA2L[ tۄc!WiyV_*^_؂:dMt-Z`].s!2m#o1s=u]:u~˴`X}"_[PؖiyVk9-C˴`Xmo؂:GiyV:uL[ tM_-C\˴`XMt~glAeDGb0h+O?>c ꐄeDGb0m)[PeDGb0׊mǷuȟXMt-ÚvgqW]TßuiywuM:-Ck6ё kKm ŲΏ=l ꐛ-&:a~0_>^,mARL[ 5M+e|!'-&:a~أ>l kiyV^?@2Xo؂w,ϕS2gޯni1b/|NsH+i9n׭w[HMm׶g23fMa1ٜNJ|oQ3s'o4j1;dfiՀu F2 F6뭧F KVu)^phꠖ]@Q23^vӔC ~{sm,=~KIijuլ=?^Rȉ#ĩ@P'F#'NuOPi:wqg y56?&!oɽ&f&Qd`m`m}p0CSM~*G(D2u6ܻ!Zr.>~d!hBoGz8_bMj-V '?£&adZ2h:ZSWpSMuçEoyo ߉r{[RW:y Л[wrwO@(8vZ/| thуSM~*G(D2;Pո؆{pUk;sv_~+xzwMGQM$[tc?w"lE@a+)?o8?irƛ|_9>܇W~;œg햧ims۷_-i{6Oʫ\ hNnю{k/z}Q}Qq1maǶ_+^7'F:}Qʵ,_9"x_*:}l߯N9;^R[FE 53Ww:kP:CnO{>ߛwLh*k~etv~4 qeЀ5ϧR`vt3{ul'8i ؏-]xT*8ȵ`vt3{5Ej_eW_!kB`N'1۴}0aTdm&F7_ۓ\\Άo ea|YP #F.<~$Ωwګ>4 0bWkot߮ޞXjoWVVmR #7γfhel/!FY= of{l/!FY= >ԝ/kΦ>rm7Js#\X{#!7ҏr#\~Ψ=אNө҇i:ѻQ&Ψ=vɩgH?>O_Bc{q 9ѭyul Pp ߏǮ:4+}8-pSw55So5^o5'^㗿՘O/_Vc[+InO4q?[/oo_??8xA&C~[{at*0b'^zL4 ؉ǁ! :#0Z:Xz_Tmp |(@088=}N,joyn& wkWz/Wg/1zShUß=I;1+'N\^޽[m{{xjkop?s&=/?}hooOZR*m9ïȟ|>gƟUsԅ/ 7 {h<5|5Ժ5-/VSq~5hN5M=e6yǔm#@O F1 261`uW"mb)`"s(`<ᕁ65'M㛈gt.?_v~a-7* R%Al,y# `惏l;d[惏l;d[è#6٦d8D: >E@a+)?o8pܿ^Np=Mѻh4J{oIR֭$}c5\Cn j*P$MRQw*t*{P=אCq vFjݎk;aT:jjr?v#!F9j~hZ-zhZ-zȡ{P=P؍N<{_~{sWR)'7TK%:ϚtO L䢱T_jvlG 3W_h'%[\%[ f{or݊^NR`qx57<7!~jjr?q 94QA-:eS|Ml5q\C=6T*k~g >qG_f?7Gɚz?p#s#MT e͆aޢ]]]ǧR)ݨaw{ qA90J-W θp9`:ᛳjB7o~Ivm|oSS'۾tB.=}U]OEUMZ&/TMQufvLISP.DOC~  !"#$o_%&'()*+,-./012345 6789:;<=>?@ABCDEFGHr  IJKLMNOPQRSTUVWXYZ[\]^S/Qu_`abcdefg1hijklmnopqrs>Vtuvwxyz{|}E2X876-+(a9c8vݴ;|9yO891;pTP(Կ1_. /:Dy&~etv~u/ϥqUY;@zd˩qԾS4pH–榀 &]P+7%2YP"h.\^9DsׁT r5!Zh!"%RH&pNVNzD]s7!06!2L oRK&Xju~5'&N6vr(Y|!kQ:):qݺ z_E?˚/^ۍY;ͱ>HˡgYC吱 :Ag3߫KnUY7jiV^!쵂cuѾU]CZ[nəX]=}Vs-߹37x*؈ztκ@k6阮aT*5Wſ{u{W\CH?>Sn|p/YswT*E;of{l/&F\CG(G[S[eS94zjjn5ttM>P&A^\C5zz5W-DK%uV@.uP˦6cאC5rZ6ujބ|Ml5q\CNnԼ EX&v{B7u3y֌{P=אCq nthۋkȱn5tTvFͩTn-ne(i>}Lfb&9g;˫'娦N>FO~CS}2}ss&MM>ƥjc?޾\}9,kQsjcis-͍6m\}9,kf鸆v~5z4FPyIძQˇv~u%7ҿ6\Fߖ wuiGW{h*6Wrht5\gA-:O_ \ r r8+Apyke.%3 N-/TP(yQgɓ4Yb:e)ZnF5*k༨_P9d{,d&.(Ư̤wB7_pༀ8#z$pv>(5Y N3ٞ%& aI-JP(Br8]Y [=gr8]Y 6h&) S a4"XMC޻!9Mi[hI%o<КPm=kDo Ef]Y2zƈгbA\ E9wO6O EeR2+j1ڂ~fĒLWBxd'(a^1Yd9i&K-8>jϒ[o((W!|m.iN@3IQ鴏Y ,LXҜɓ Ep,0ɮ'p&8d{,V.%X╠PO`b 4]Q(P{ NP(;8 3f3Σ1e/S{ N3ٞ+AL+zi K>&vڳ3z'|C~ydY g(F$hDcDWBؚ66bK=vO"ivp&$Ek8aS⇝P OktVcel.k5X8e ΋Iɬ~_ga*IGaDAWL-Aw8ŝiNBa3/wnloofM_ؼs0vPAػke s(:yUvkT&%Z##SSTּyCta*ݛdBIip&8ִagNPA؛O΃B& K1譠Pǒ4{ z |P(5I0d0 7%Al?c2\ 3Ùy4(*e/'8£mbTP(<(jY b$< ~,IyʤA3IQڠPk"a΄h&% g+)(*e/.p .~]L÷P̏B& K1Pǒ4cm4=BroaIf0AP$EAJ S3!9APU){0d~mbTP(NΏB& K1Pǒ4cm4=BroaIf0AP$RvXggTz%*I3B1APU){0GN d 5,LXfBm?cYϷ z <5F z yfIw4 &)$|l28 ñ΃3r3㕠P<+I3Dpqr~ O-cIBRad#<.69dpc;P? rD~,IBKҌDoaB]/1Z@f⒌Ң9š⼨\hC̋f=KLg8/j$ašY#vBwgNc')Mp^i&۳dL071 %[װ$}ypg]:m~_#zO8T-UNSX'D ,f"mn4U ;NP(t94%hfqz JT5M|OAgEѢ̌k领kp5J^gMEj|L?P݈35t9D%F 0ia:8/ l;T&% Pkcwx̌kaIZі-8T;ANpFϒ'tu4F8;~ʤdVtu*^=񵱻OStp_bhs *j.!r8陳Fg4a7vFTLp,1ٝPMFҢp2.C8ݤ*s΋h{/j8T-F{hfqzбMTQ7^uNױNNq鬆%-٭Qp2.Ht,3ˌ.yCe;-0 %*sލDOkHznʥ8T#jL4S^K9ktIgNc'i sN3ٞ%&nL)F Dv. kpX]@iN{wnؙSlV_Ûrd&\H7[;A;vwGAbo Iɬɖ- Ş`oj,+q79{ɕh p&ǒ4BuUE%4S3Al?CږZg+AYKԡBw9n8M-y rD~,IBxlR4APEݰ3[u8HϜ5$A4 cQEݰ3VA3IQ|P(~Cl?#(*e/*`%p2.^PA;n9n8Mq;ڷ3z;(jY b$ x) qo!Ȃ3ag4ZCpP(~K3IQCl? 6 w'lBm&S<_vwɴ;*({݋PI,Gda*ǒ4{ <(jn$` &)ULIa*p&<~,IX)=Bl83KIR g+Ax4p ^JBI[h(% Axf8]9O APU){0{#<.&ePA^ܙ/B& K1 ~,I2wGBIp8f"y !K!@[ 3Ùyd JK6݋;%h (>PuˠPI,Gda*ǒ4{ p;(jn$@QP(5I0gLR$ 3I`*p&ǒ4|< rD~,IBKҌyU& IB] p&$qwS3a&)LXPD`8.N ޲> rD~,IBKҌyU& IB] p&XTwG! 6=$QBl&)LXf$9(*e/,SmcwwSPA[ӠPI,Gda*ǒ4{ z+(jn$¸; &)$gLR$S3Al?BuW%p<mcwwaNᳱ5q󼆹 9ysh 3Wz`y3YTP(F;O1mhUeR2+19ysh 3Wz`y_2)]]ʺ~DO,i * ^p< XS1;kxD%zbIs&Iɬz8T>E&(QIr s0S{'ήaΐ5< Fq&X(~o2)mA`]?3zbIs&NP(>Q,5t,GtVܬAJҼklJ!M-;Abv0N%ӃP|)1-i6rLR$LtBqΦd-i6rLR$ܘ/NP(B7gS!vI+Z BְԳI1dh58u*=K QK5Fkp^6js0>558/jTE *lY akCLR^3Ɲp3mHƼYרExo'LX9~ T}F56րNPA 'd<<;`iwTP(yQ#9YܬyQagN}Uvb5|e1^i&۳txut-ƺ;s s, i^agNZíqnFp@eR2+1<]hUvk]ft w ơcI-8 c 3I`*yp&$9d;(8f p9GAbor0 rD~,IBKҌDoaB] L*#dIpy 3ٕp ]l&Smcww2PM,APc) 19PI,Gda*ǒ4{ z+(jn$¸;" uMR$ 0.*hXf$EF_ g3ٕiP(TwU^" 98mcww2({A?>x<(jY b$< ~,I0B] $E1~,IsP(ص*jp&ǒ4{%LR*XTP(NB& K1譠Pǒ4{ z |P(5I0LR$ I=)Y E(!SB>9B3Yx |&a?zR$;#iJOLݭa)c9 j)^LH|(Z_Ep`͏8@Q 7~ TC81ˆD!)r$ /<߸r>Hk͏8@Q 7?,!)r$ /Y3nZH*|&= :b$'Enk~@H K&AA#O P!/L*)bRВ1'p@H4<߭k~@H 3a Li-DG\ƍA0h򣟬:EsPH`rL %8OZIICPx}w5oDP\Wep)HAL Z@J 'G o^0iG@F>"=͔AcI7k8(,!V\~Z%+~+X?/_ ś5o>Ggly}qX|>G#YK:;%DC"!_V$WIZ(rnTvXQ{-՚uJ$՚5jM3jM}tr)Hvr)sr);5}gܡ\>89CZ}՚;5}P}O7ݡ\~,YCZxvw(WkO2;5}՚^(CZ}e՚vjMd՚wjM՚;5}jMI՚ Gw(WkO*jMO՚E=jMݡ\^Q ;5}+w(WkWt#-4{ ]lpc;Pw׺q 5,LXfnBm?| L4 &)LIS3Al?+=(QI=BҌ6(*e/w׺qmbs{oq7 rD~,IσBK1@g PFϠ(L`6+w[ z ((ꚤH3a&)LO-cI_3a&)RP( !KҌ,=f"R/IC-Blc&)Lq7 @UE c3g.I3Gl)4-u6P썻 l/a rD~,IσBK1@g ¦|O-qw uMR$ 0 gb$ͯy$E ų5$΄H08*g=Cl?9|CƮ%PUQ3YK #[&i i] *({I 5,LXf &) ،"c$5h&B1΄*ꆝ+FPTP(L.(jY b$| uMR$ 0.EHk$-8k)L4oBuUE c΄*ꆝ+A2O#[i *p:<̗ͧwqPA؛fBeR2+u쌖%[j1 ?>xh& GK )}8&+f5}+et?(V"l+ ;=x{- 0FP?IJٻ|vUPAP'shI=K;B{`*{ƊBuhT9_ ߽w>{slMBWԢag$E N{԰Qڂ6 $EaLBl?ٿ *(Ɲtx]h665aA5V_༨kܸ3 ճf՚;5};P}JOjM'a'r75c'LJDXQORz|EP~;妵p9%VXp':'E 5;%D?9)r ESPٚXac'LJD5}CCY֚1iGТ9K }ՉTх8֚;v"GF)<` !њ;;:рȹCȑSP5MkMF 3|kCYƚIrk57H󨈢w XB IKk JOˀ%HZZk!S8 : NƚWܴz4iFT`Tg)pE:C{!Yc Cx3+N28A"f<=f xI've Ehjgg;٭q-daᝠ j)p9OAݕh{{VjE}ܾT4&ęlzυ*e/'8£mbTP(<(jY b$< vƧLISP.PASW  !"o#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV?>i7JBb7k^txLLAXk;"04{߾}{ּ|1^vAJiˎ0[͚R~˗/´B9EoTPf޽o߾{yG7k ѻ)r֚Wk~I]iy&s$!Ј%xaRI[xRa;XbPВٚg&'LF~ JO_d k蝊kDEP:ĪinZY8jI]\1"P:ĪXhb y&aZ8"a +wZ`X1"tǧGBtR| kнbX1έ5=tưi`X1"akztGZ3 ^{ǚOÊ;}lG +\֚wA0NJ5=#In遢;I)ưb<'xE1iGx xEQz[k5@Ra|R)HHB&ZܴݑP:ĪXhbͫ5O3ETR#FE "L!FQI}kZkެAwQ1[HB&aL%aX!!S[kf L%7hڽXL%=5|IVрgkzݱð$Ewa݋5=0*" ".-JzgÊQE︵FEc +J'ɭ5=SIV0 ݑ$iZk^Aw|R)J B1*"HG&)H X]1*" pniy xE1iQIZcBWZ-~9o~9o~9ohYSNBtNƚ'$ٚ$>y߬H.z܅Όa ɭ50BtNXT(APZknZ~TkBk?BGE:;e4 ^AÊ»Igw(-tT!Sưbё5ItDžv/֠{y}$TLaCŚޏzI'nЀg(9JkMH:Mk 4Ho5^i|vukh3 ڽXOa paELZvC"!lܡ`XV$$uҎZkz?B%AIH(5"475^H5^(:Bkzw(VhVlZ{ +~i<?pi? ϑdǥAI'Êin?R%AIH(5=H:MkM /anun5g45"TưBKvZ?> SP}R䞂ʟhɨSP_$DP`M(rOAe +i"TnZkzEԍ2>SP}R䞂ʟX$[HkH+3C[k5IILM+j;)jZk^(ZsӪ3p9%V5 ^#*)< B%ϣ"qI#kv/)#H󨈢w Irf +\b #CAAwTI++)v/ 8Z9 X=ڽ9o5=Es(V:Q х0wZ#uTưB#uZ~D"GF x&" E)lMO[kcҊd<%V䀅v/ЙݡQeM|h3 ڽ ~lZ. EG~D;U%HЀga(!^+Goa݋5}Es(V::zor* 0ðBNe!}rKk+gIy(uîբwb};œLQZYޫqZ|$Xhb LQ pg'MǓf:'E iAw$ϣ"1NZ$LÊQI %VV(zǭ5waŨwϤske$"H!᭵k "RAU9/L;f݋5LQZ<)T7 vBj\]55ANe!0ZxxR)JݴOFDgx ߷'噢MTHaDRawЈ}kZk\$wV:Q»Igw(VCiÊ"$"X~J^҉ZcMRa|R3Cܴ/L;֚v/~Dt>$wh3 ڽX 1w=jHg:'Ugҹi!tfw(5}GTCY)2Lv/xPsRpI}C͚ tfw(-Hg:'UYش:;֚GTw(_IITP8lMߓdk#,{+///5},zz?%/-L*kk$[ӣ;dkzy~ ɯvZq:3r$\kH+E:9)XT(!)/,P]hnZknZ~TkBka@Q"֠;z +<~Z5t/O3խk):Qǝ͡$Xhb 'vߚIya:'U]bi)+=038ꦵ0 Nf݋5BpưBNKk°'8@NO3 ؚ֚'F¤55cP Ê 8HRZ"Gbt/$t/a݋5; +4g +6tfk=?[kzE4[ QHҠ$a4QA!J2H LE:G^FiAg\>ܴ'aQ1OVv߮[}FZ+rOAe +dw(5#/ߠ='E)=NJOA"Tư*rOA妵WH(cXQ='E)5^H5$$":; ZkI*LOHg:KiX p9%VMkM E\ZknZrP:Īf݋5~D% AP$yTD;n3 Ptd  T]bմ~I~Q3 @ΌaKw3vw(5*iErE"CTPҴ\@[k52X?yrB_4 xh V'j!>N+rnV(rn[kzPH($Pܡ`X=Irk cLZ OgtFP.5=GTCY)2Lv/ { H5=@ё5=QeUI+4.z`X!>JȄW 5=#EGXhbMk Z(ҙRgҹi!tfw(֚#*ܡ x&B~9oE社fM:;K E:9]*kBgvri{~DuJZ4 ^@JUnZ. =I):B M E\ZknZL%]1iFbZCYk$ (C>cnCY ".5MP:ĪXhb JO7(rOAeI{ *n%*rOAe|GJA=1piSPiAwTH(cXQ3V(rOAeI{ *FZySI䀅v/֠{Ѣ9 +X݋BVZ;ȑQ~ *cXȑQnAGTEԍrIȹCB{ *[H[k˻P0`* ~+=sLVz纕w͡;n5I~EQ5k$ Ph.\ܡ,tNU3BXQ/qiڽXDA3 X鉄IMQzؚ$7 $?(z x&8Aw\hb QEs(h3 ڽ צ8l #EGpqIg +\bQQz X]ZkIrk pVz DguSh$"Ph[k5x}(JQO%V+\bq;)jCY ".5Bk?9x&+=0)JQOִ~D% AP$yTD;n3 Ptd Bk X]w-CAITP?5-dk):K.;k1ptGE) X]ZkIrk pVz DguS ɯ#'bX'L:WX p9%Vw( SbZDPĥXhb G=$`'&UI+t#*)< B%ϣ"qI#kڽXGTqע94 ^@JUi$[Hf X=3ZH[k^X}|ܵh<⣄La݋5=#SIVu&K.3\]biZkztG?]t!]$L%aXAO:V>VX]+XX]bi):Bk⣄L$ٚ$[H[kJz܅Όaݑtİ$kIrk pVz Dgu'}k0t[k5x})+ p9%V CY ".5M+L%]!gw( SbZ,{#X鉞g bD55QI)Hn*I~QL=pYtRe*iAw#H󨈢w I֠;ʙ1`*q:s V2`*q:3rtG9ňa}^]buSI5$ ~+=sLVz)Ft/[c @_F)FX'quw( Sb p9%V5@ E\ZkV=SIܡ,tNUk `'zIJO$LnZ2[ZzAQE$\@ё5 ^Aw#Kw-Ci%q]+6݇$ݑÊ91~kAw ^ATtӱΤsuUsqZŏL%=Z4@KFe*q]+6݇$ ư$kнPtb ++kKt/$tGZ\k?9x&+=sݴdt$" [k5x}Suw( Sb p9%V5@ E\ZkV=SIܡ,tNUk `'zIJO$LnA55QI)Hn*I~QL=pYtG?qע9Z2Kwхb}Lp°%V֠;Rtv/֠{a* XgҹĪBGiAGTw-Ci%2./߰>l x&K8aXQ` G=$`':{ۤ[c @_F̤3ZkƓL샀%Vܡ,tNU3BXQ/qiڽXDA3 X鉄Im ݇iJJ=OArPI󨈢w܀g.tDžv/֠;.zܵh x&BRA4-dk):k1ptGZ\k?9x&+=sݦ}k0xkO2).\ܡ,tNU3BXQ/qinZL% p9%V5Bk?9x&+=0MAiJJ=OArPI󨈢w܀g.tDžv/֠;*SIMk AGEcL=pݑ]P0utԂ}&1pեݑǝVc)ðtGZ\k?9x&+=sݦ XWSk$ B:TX p9%Vw( SbZDPĥi3ty;)jڽXDA3 X鉄Im ekZk?RS (T<*7{ (:q݋5~DKw-CAIŚ>TJjZkz?$?(z{KkM/gư]-Jz`XGk zw3cX!gn1t$kI5YO!0:t.zgҹb P]biZkIrk pVz DguB:{k0b 逷k$ ).8BX5ܡ,tNUk B`݋5JO4R]bP:ĪesJZk7z3p9%V5Bk?9x&+=0iִ~D% AP$yTD;n3 Ptd BkSHя ϣ"1x&8Z(gư]̭5~DKw-CAIAT tGAT QBtGw3cX!gn9 +JjAw$ɭ5e#X鉞g=Ms(^$" ZkƓL j%Vܡ,tNU3BXQ/qinZg*i;)jڽXDA3 X鉄I-j^#*)< B%ϣ"qI#kڽXGTX=Z4ҀgD X#kн,{ SIVĪiAGTw-Ci%2.րgk13\]bՀ#DÊWkнdkIrk pVz Dgu1 ɯ#vk$ Pt#娺j;)jCY ".5MP:ĪXhb G=$`'&U7E7RlMk GTRy JGE<`pEG֠;.{ݑ$ +cuUZGTwхbctրg(raK@ё5莊naXS"Uэš݇)3\]b\Q5R7݇ikIrk pVz DguSt#XWn᭵`<>"suw( Sb p9%V5@ E\ZkV=SIܡ,tNUkM3 ѓ[kxaI ^Vz D¤Iv#*%VǝWX}ltGZ\k?9x&+=stJ$qkH+I[k5x}D︺2BX5ܡ,tNUk Bক5cb5BX ^Vz D¤ct/[ZzAQE$\@ё5 ^Aw#$0\buyܵh<t/;ưb *t.<3|qsEK.;ktGt/~K.B ItX55&V䀅v/͡`XD-D°b}ج'[kMc + M:zcbXӓdkнPtcX5^H5$ ~+=sLVzEXW;[k5x}%V+\bq;)jCY ".5M+ܡ,tNUk `'zIJO$LnݟiJJ=OArPI󨈢w܀g.tDžv/֠;*SIMk AGEcL=pQΌaSIЙ[kZ]buyܵh͡4ВQ]buyEZ]bq]iA!(TX]%VLVL֠;RtV2֠;2  9s  ZkIrk pVz Dgul5I~EA߿㭵`<>I.P:ĪesJZk70tܡ,tNUk `'zIJO$Ln#[ZzAQE$\@ё5 ^AwL!UtG?$?(z{Kk  w3֠;%V]PLv/~Du]PL0߫K.WccMOJz`X!>JdMOAw  )< B%ϣ"qI#kڽX?[kJ°%V5~De*qע9<`݋5^T.Vl#[I?AڽXkOJU/{ H5^H5AQ"֠{ Êt/L%aXTRc L%=Z4@KFe*q]+6݇iAwIaX3[k $GO3Ӭ*_ϟ ~4-^/1_tGI؏ԧ1fU_ZB7\~lg .?iAwI}j iVj pϟ ~ֿ Ϳ_~61֙t:zMc #EG֠{!1StUGiAw$ɭ5e#X鉞g=-~J[c @_FO o5I&AxZ.䮸x"wm;)jCY ".5M+kJܡ,tNUk `'zIJO$LniJJ=OArPI󨈢w܀g.tDžv/֠; ]P@KF]= րgkн,^Vðf #EGXhb ?L%aX1q3\ErtӱΤsx"\ArkдL%}İb]ec]5WtCY`݋5QI)Hn*I~QL=pYtG?9x&+=0%vt/[ZGqע9Lv/ M=p$Ye݋5^^I*x3!z#nZyDro֠{ѧb&Kt/O O]PO]t!|M|DakڽX;b3\\Q5R7݇BGiak>kzקGzkA:i^vgBRaWYVĪiA(fkz.V̤se*wZӿw9fMG0tyܵh< 3\YXJ45=SI1:zMkMGH`0qע9Lv/XSIV̤se*cZTEs( ^?]t!I IŚ1cXQ5R7݇i$#,{Gw#JzEŠml ^ѽ3CB3!zo֠akKtk cPzGTÊttnZkzt/L%aX1ΕMZӣ{y}$H`T.͡4ʚL%]wхJzEjڽX>1`cէsZQkJ-UΏBX>l x&sLVz-^V$"Xdvk$ XdK]]qD w( Sb p9%V5@ E\ZkV֠;2tSICY`݋5JO5t/~f #EGXhbMTSW1Ut!\1\g*#~`c]5Wt5t/t`XA)Hk$'kXHё5^6n:V̤secI:I{嚦ݑ$`'zIJOt\7MA}k0nSX'AyO^]bP:Īw( SbZܴݑ$ p9%V5Bk?9x&+=0$Zִ~DuEs( dT X=iEԍSP$֠;2a9'jGwܚ+ M+t+t#kJ°b jyJƓh;nSW]buqӴ}k$iZkzt/L%ưB$ٚ $k!ɭ50 >V~7֠sߏ͡4ВQJ.ִ֠{I*V0t/$tGZ\k?9x&+=sݒ ; ɯ# ;ZkƓL .\ܡ,tNU3BXQ/qinZL% p9%V5Bk?9x&+=0%nMk GTRy JGE<`pEG֠;.{ݑ$ +cu 㦵ݑ$ +cu+ttǤ Aw$ɭ5e#X鉞g=-DukH+ˆo5I&ATإj;)jCY ".5ML%}ܡ,tNUk `'zIJO$LnI]}ݚ$7 $?(z x&8Aw\hb Q]bkJIT X]buqAt/L%ư%V5DJ`X1ΕMkMTG +ce*rqZ3 >V~7'aQJkJ-ߏBX>lMk .V0t/$tGZ\k?9x&+=sݒ 5$aDRaX,{_;7hD;7k?9x&+=0MGt/[ZzAQE$\@ё5 ^Aw#*qע94tÊ)UBG︱ݑ#kн,{ #aX1Ε֚ޏ #=Z4b;)jq :zesJ ".5M+kJ\T+J}ܡ,tNUk `'zIJO$LnѽlMk GTRy JGE<`pEG֠;.{яpqע9Lv/֠{!KZep InAwd*av.L%V+ttG>bX1ΕKZGT>>Z4@KFe*.Vl#[IAw|i 1L) x&Ye݋5^RHMk ?$?(z{Kk ~?Z4aŨL%~k>9 +NRzZߏ;k1;nwaSI[kн>Mk ?$?(z{Kk '3tt~ ,{-CbQ ǚOÊ)֠3VL!K.Mk ?}İb P]b'֠{!֠;Rt޴z&͔<t߬ATqg#SH5$ ~+=sLVz9bF5$5pZc T(AQ K}w( Sb3%w( SbմQ/qinZL%]`*L%esJZkv/~+=sLVz"aRuST‚ִ~D% AP$yTD; vrxvw(WQ%kw(5} ^@JU7-kztXܡ`B=ՉZkH71(CXwGZcMIXܡ`B=bQkMaEyJGtƚ;$ƚ݇@71IJMZcMPܡ#CtӱΤsec7Mk5=J?n:bXA߿WXgҹR\u􎛫5}wDB7L:W>V>Vj iJO:Ca}?XcIJMsqsM:ΕBGiZk}Igw(aL:WXgҹR\u􎛦ƚ>CMG +XXcIJMs;nkzt J?n:bX1qn:֙t}4WjM}u&+k+k+5MsqӴXӣ0Pt MA*k+5Mk5=;v VD︲RӴXӣ%C0n:bXA\YXiZkztr8n:bXNƚ9 5}t 9XcIJMsqӴXӣ@7ݡ#tӱM:Ε  㦵ƚIvt ItӱΤsec7Wk+@7L:W>V>Vj iGAQP0n:bX(E=\cIJMs;nWtӱΤsececi;nkztE=CaD\cIJMs;nWtӱΤsececi;nkztv@71qu&+k+5:zMZcMC$yvtÊH\cIJMsqӴXӣFʑ; V(rTcIJMsqӴXӣ0dbw(@71(IL:W>Vjƚ qkLHaŖil5"Tvi,zr3[I`k݇VlݟP䞂IGw(莟1IGt_@{ *OP}aF7ѽl5"Tv0F]ݡ1ƨ˒5P䞂ƓhCÊmSP}ܡÊml5"TvB g +n5"TvuYv3[eqkCA3[Ԏѽl5"TvIvݡaIv@{ *Oޱ;t_?cXEZ(rOAe  Vl݇P䞂;t_?cX)Ft/[k ='݇VlASP}BRawg +Žek g +׭P䞂 CAwaŖT׭P䞂;tVlO ׭P䞂E=aŦ(E= l5"Tv( ÊMQz"@{ *OPT3t_@{ *OP'%P|ưbS'%[k ='(raŦFP䞂;t/11[k ='8P}a房{ZkE)> g +6Vz"t_@{ *O8 +=;3IXl5^<{? < 0%5o)wܴ:zǏ͡`X1訵;~k>9 +NRzZǦ3cXwq:sk wa(!Sk wq:3r TutnZk^/#8gP >Zf y>䀅v/֠;j Z8|rVhNE ΤsG5Bkݑ$ +cIJM\wܴ=#J7L:W>Vj+t+JBGi{tGaSI֠$GwڽXL%aXA7L:W>V>Vj 㦵1יt}4W0tqZt {$>dܡ`Xhb $ +fҹRӴ=#T՚GwZ5R˒5\JM\{tG㦵#L%YIn}4tNP0XBkݑ$ +fҹRӴ=#T՚GwZ5R1d `k`ceci=qZt {$>(*aqڽX莊JXL:W>Vj+t֚GwVw͡M|DakAHrkMܡ;VLA\-Cٚ+XXiZkztI;tÊ)]s(uS'%[s>w͡M|Dak֚݇@71H*앵G!ttÊΤsecZw_gҹR[k}H*#I]*k+5Mk5=$uҎެAStdM`݋5=*aL:I0RZӣGTLZ0Es(h%bZw"GF)I0R\J՚;75}MG +Z(gưb&w3I⣄L-fq:3rtRecBΌakw3` QBtG>>BgưBl @[kRe*iJzܵhÊQGG5SIc'aIV[kw>bXwZcXTRk B:zǏL:75 0<45oOg?3@Xhb ͡`X1k>9 +NRz"TgҹiAw3cX1ΏЙ[̤ L:?BgưBZB}lZș1`.t}|`X2֠;q:3rfkZ(ru9z+>RZ(ҹz}+iZ(ҙRx}$H`T$V͡APHwх|F/>lhڽXTtӱ&VW75BgvriAwT3ӥ&VMk c]ETXH[k'噢O3E@8lMk lhڽXGH`=$xRnִ֠;&Tt:z ֚WBpưg YGQE<`2$cX1訵я0V/ Lv/O3EIF1H Ie,4EϣI|ߚ֚~њ$֠;&VV5O3EiVjQGi{t#tӱb&+XX:iFj k In{WLެ}ȚatSWc #]w\JMsqc :CX$[֚`JOV(z-$dXaXq;tQE wl @[k^x:9R7x *ɚ7kE)>AKv3Z(rOAe :%g +6IFwZkE)>As(P}aŦ9t/[k ='̤;t_?cXMZSP}kݡÊm ݇P䞂  1ئ Z(rOAe SVlSek);t_?cXM!нl5"Tvisr3[ \Ktn@ uMg7[St +Kȭ!Y\j@@+4pƂÕ `3M\rkp[V%f7\ `n[u3ܦv,RW/Ͷ@rZ"pFA9r*rdH"$)t!rJ:,e$FR!rJb,g, ")FAbad&L*b*r:dD&"#$NSUH dDTUDXDELETEA7Lf ӐsM>7`[tn pn 0$"3iå -p)f@ {¯ p!fKX7s{0H t nm!VEmV3id7`[tn![tn iIt7N3[tWJMӠ%u7M/`He^Jh07Mnp1^)7KXn 0$2np1^)t nb6:w fM+t nb+6AȩʊJhq\d(豘\)\'&ђpɈԑTP`u$U4XREPLACEA7Lf ӛpA`KD7tn%vy+Khҫ p!fۥd/?jiIuۦ]^+ݥ&ìv:gpܦv+nVhҸ p!fۦ`[t WJEvy,^pۦCt N 3@@9?lf K4aW@+E!X`f!or|f!)A9r*rf")'Fs@1r* ASL REL FBERRIES PLTQ}CATALOG SICHAIN RELeCHAIN SUBgCOMPILE SUBiCPM HLPj jGOLDI PLTw <HIPILOT PASOHIPILOT PLT TILIB RELZLESSON1 PASlLESSON1 PLTGLESSON2 PLTLESSONS PLTVBLMENU PLTvMATCH PZ {MATCH RELc8MATCH SRC!"NPILOT/P COMCpPILOT/P DOCo4PILOT/P HDR"ʏPILOT/P PAS7QPILOT/P REFH2SPILOT/P SUB `xPILOT/PRHDRPRIMS PZ 'pSAGE PAS5,SAGE PLTaL?SAMPLE1 PASSAMPLE1 PLTJe$L!rJ:f\, ")FG"adx&"#$NӐU d44HCONCATA7\ r@u +68C! m+@/m [u`ڸn\"[B9D n\ @]f ;r@ p%r@ p%ͣ^)9Yu@ >T^n\"[W +V+r_(]m+@ `!\V%f7\ @ n[u3ܬV%f7\ @ n[u3ܢru\ .Հrn8a`\!ȫ *qP\jHJQbfo&bnq hꑗ8SPU TD4MATCHA7Nr@ %!p(rA-p9D 7N7?ۦ`pA@ K8YJ\X3@3?m3n~]IVsn3t~7N7?\s{7M#n ӫnL+u@+68YjML^3A@땺 n ReP 7?\7?ۦ`B 3m\j@@+67M#n ӫetn}L:[`Kt;MW/ݥ&U@ VpA Hmp!Y3J7?GjfV}+٠ޯv^guLsk7Nã"X FA1r*r*f("$)j!rJ:d$"^qrJb!e($*FTyr*SAMPLE2 PLTsSAMPLE3 PLT MSAMPLE4 PLTUSAMPLE5 PLTSKSAMPLE6 PLTNSAMPLE7 PLT7hTUTORIALPLTWAIT PZ WAIT RELWAIT SRC mLU COM0ST d4U%HINSERTA7Lf ӐsM/?ۥ`M4` tnrRaU7s{B_. ڰ.Vhå-sf9[WY@ Lҥ-p!fKXWJL+<rEb)f ;rEb+t nCfV}+ۦCt rM/`JRYt nNV3EnVmnmp)g7D n\ `]fՠ7s{B_. ڰ.Vm,02 ˑS&8a%QN2 Sc5MQIIJ3c%@103 Mc-03 M<MQ19R2ՓS'`D4COPYA7\, r@[V%f7\ `n[u3ܬn7Lx+"tftn%r4ۦSt +ٵT`Zn땺n7L\r@ g, ")FWjJr"*e`&F|"af&Wbaf)&"#Fi:b*r:DTH T44XLCASEĀA7F u3[C:erV7m0%n+ݥ"xBA3@z3M[t n iH^=gz3M[t n iIgn7ґ\!. 0 02 ˑS0a%QN2> Qc'%12, N "Y19Q"pUPT`UT44XUCASEA7F u3[C:erV7m0%n+ݥ"xBa3@y3M[t n iH^=g7m0%n+ݥ')n:ۦ`KtWJEr '7 h£@VDB 00.ENTRSCbUE8.IGEBXȰVLENGTHUSQH ddTXIVALUEA7N;[gpA K7NO7?g\v3[tfM#uA h6M@,ڦW/Р27`KB k\@ { 7M#n-Ө!UCt uA mw+oi@nn 0$F:[PCtn.$ʹrt3M( !r 4 tna`1 sf}Y{ ۦ8> sf}A@h3Md"[Gt ۣg6}?u|n7Lt nA p!f 6Әt@tnҳG@[@t,02 ˑS/8a%QN2 Q#>h\.1@:4Z"PFQrLeD!P)rd"*))S1r*ze"$#FN!rJ:,TS`t4ISALPHAAۦ@Du@(7p3Mf,7`v!`d"*))P@1r*J4d$"TQU t4DtHISDIGITAۦ@D`u@,7`v!`d"*))J1r*J4dD$"TTt4tU(ISLOWERAۦ@Du@,7`v!`d"*))J1r*J4dD$"TP`t554XISSPACEAۦA >2n9D E^)#z:  rTE%48`.EXITFTTTt5UU(ISUPPERAۦ@Du@,7`v!`d"*))J1r*J4dD$"ԓѕSu$eDTPWROFTENA7MW/@9n7L 0r@ % Tpt%r!.+ @ppMP tnv 9|ۮW@jBPV4[u` ڸpXwB+ݥ!B_.}  ڰrͲ`rn\"[;W @@{ _r@/$;Vp8"9Zۘ!.+ @ppPW%1R3 S-8E5U1R3U#*8aJ2<ՓS'ՓS udTuDVLENGTH8\e&pRU EtHWAITA7Nn\"[n7LXV^qYJ7NnD$S+/8ܬD07Lf8\cA4uU4h\.1@:P4Z"`FA9r*re"$)N!rJ:,e%'"NVPT U$$HKEYBOARDA3@gn7fv}ޯ3N!(# 9QIM2^VU!  =9 !JpT D$t8IZ:TIZk-+ڢ a~Fe<# =\``@x !AqaIp|ZKvA<vbpQSPURS TdMEMAVAIL7\˕vlӔU t45DHCONSTAT7\(8xݓ8ӐTt44(CONCHAR7\+el4 l\-녺/QRETTA=-:QRA=-jp+\'[pS`dD4ANDMSKA7O;KuL nb`FA9r*rdx"$#NQVԑTU$xI1=ISTRORGTU$xRLORGe5E$$ytnM%wA@ȩʊJhq \8SԓTT$4ORMSKA7O;Kul nb`FA9JB]m+@ @`!/!͠"rn\"[;W @{ _r@/$;V8"Zڀ!.+ @ppP WJB]m+@ @`!'-gͯ@"rn\"[;W @{(@{(A{ Nn 0$"3@:tN 3@@9?lf Ktn%rRaU 9|ۮW@jB]m+ ]` ڸpD  24.COR55E88.CVTFLTrTE%48Ȱ.ERRORbUDh͠.FMULTBuHȈ.ILT4EdIS E$HRMODA_r@ $;Vru\0 Հ]m+@ @`TB_.  ڰ`\-V+4hX.6ۮW& @ppB]jʈɊ`\ȫ *ѓ \gɪ \B&G3SSd5$TACREMOA 1t iSL@?Zb(P ؁̀>  nHaS`k XT|i 0.ENTRSCbUDiTuDtU(TOLOWERAۦ@Du@/3M|iR;tæv:  rTE%48.EXITFBYTTuDUU(TOUPPERAۦ@Du@/3M|iR;tr*rdx"$#NS DHHALTA@ w(b@r@ $V  (B0.ENTRSCbUDh0L109Uԕ tUE%HOUTPORTA7I AȩʊJhq@ \8ВUSD%4UHIMRTESTD%4UHRESETEDU5IE)nA#ձ֯tX.++"< {W`DxAwH8ВUT t$EDU5HBITTEST8Z,)B BgSԕ d%HINPORTA7Iif7Mc`!`d"*))H1r*J4TTUtU(POWERA_B_"ru\0 Ճ4˭pAHv4[uXv.@# 9QIM2VU'@5U1R2z L$0pԒU`dEu$DXDWRITEA@/Pa`\ȫ *ӀRVRSTUKEYIN3hHEwW""]3S D4CALL8Z,+urAW+Uj\,W +~sV~K7>w?N9?_7~_Ll\- 8QSV`TDTDELAYA7NnD*+/8ܬ\@wtl\X7`K+/8ܬ6Ҭ@4vhd\cA4uV04æv:  rTE%48.EXITFBY 55E(STRA7MGtn-p!g7Ytnߍsf~ۧGtn 3" 3@:`KtrV3?ܢ9D 7Mφtn_4vhdMφW/ݥ!@=n~7LЈ(Tn7L}  sf~A@mtN3[CorE(rk0tn@3>ۥtf0mn33[BR+0tn7ғtnnV7ґ\9MϦn-p!^)ۥͺn~7L[tn_sf}ۧGta0#0@ &3ː/ MQN2 ˑS0II=J2VU4%3 S#.@9 Y2S#!03 L$@02DUS' 58POSA7\ ?͠+5Fb^r@ p$|_6Vjaҽ7N@6!`d"*))P@1r*J4d))")FM@*Jr"*ՐS 5dVALAۦCB04]jiItN!$# 9QIM2>VUH dtDGOTOXYAC`(q@ 3@Q@ S+f7`HD> D "5LQt na2@n02F`AȩʊJhq \V&&3AMPLE3.PLT Demo - Menues, selection, and subroutine. 000.29 1K SAMPLE4.PLT Demo - output text to printer device. 000.30 1K SAMPLE5.PLT Demo - reading a data file. 000.31 1K SAMPLE6.PLT Demo - the WAIT stmt. 000.32 1K SAMPLE7.PLT Demo - RANDOM, RND, and RANDOMIZE. 000.33 2K TUTORIAL.PLT Pascal and PILOT program. Tutorial on CP/M using the data file CPM/HLP. 000.34 1K WAIT.PZ Source code for the Wait routine. 000.35 1K WAIT.REL Assembly language module. 000.36 2K WAIT.SRC Assembly source code. 000.37 4K XDIR.COM Super extended directory program. PRSb40:RS0j!.4 urAl6H E/ u!@.an e iwFK1rBJq$d#$' A1rzrJtd(")'FGr*b ,:SUBMIT CHAIN Program DriveUnit [Optional libraries] :SUBMIT CHAIN LESSONS B PILOT/P $2:$1 PASCAL $1.$2$2X ASMBL $1.$2$2/RELR:FILE: BERRIES.PLT *START T: TYPE STRAW BERRIES OR ELSE A: M:STRAW BERRIES JN: *START T: I SURE LIKE @ans@ AND CREAM E: NUMBER SIZE NAME COMMENTS ------ ---- --------------- ----------------------------------------------- 000.1 9K ASL.REL A Small Library. Contains assembly language modules used with PILOT/P. 000.2 1K BERRIES.PLT Short prgm demoing matching exactly. 000.3 1K CHAIN.REL Module that is used for linking programs. 000.4 1K CHAIN.SUB Batch processor for linking programs. 000.5 34K CPM.HLP Data file used with TUTORIAL.PLT. 000.6 4K DISK.COM Execllent file transfer prgm. 000.7 3K DO.COM A replacement program for submit.com. 000.8 2K GOLDI.PLT Fantasy about a girl and 3 bears. 000.9 2K HIPILOT.PLT Interactive session pro ERA $2:$1.SRC LINK /N:$2:$1 chain $2:$1 asl/s $3 $4 $5/E ERA $2:$1.REL DIR $2:$1.* Pascal $1.$2$2X asmbl $1.$2$2/rel ERA $2:$1.SRC LINK /N:$2:$1 $2:$1/V asl/s $3 $4 $5/E ERA $2:$1.REL DIR $2:$1.* 65 :General Information on CP/M .break CP/M is a monitor control program for microcomputer software development which uses IBM-compatible flexible disks (floppy disks) for mass storage. Using a microcomputer mainframe based on Intel's 8080 or Zilog's Z80 microprocessor, CP/M provides a general environment for program construction, storage, and editing, along with assembly and program debug facilities. An important feature of CP/M is that it can be easily altered to execute with any computer configuration which uses an Intel 8080 or Zilog Z80 Microprocessor and has at least 20K bytes of main memory with up to eight IBM-compatable diskette drives. The CP/M monitor provides access to programs through a cgram. 000.10 1K LESSON1.PLT This is a chained program under LESSONS. 000.11 1K LESSON2.PLT This is a chained program under LESSONS. 000.12 1K LESSONS.PLT Driver program for chaining sample lessons. 000.13 1K LMENU.PLT Menu prgm for LESSONS; prgms chain back here. 000.14 3K MATCH.PZ Source code for the Match routine. 000.15 1K MATCH.REL Assembly language module. 000.16 5K MATCH.SRC Assembly source code. 000.17 2K PRIMS.PZ Declarations for the routines in ASL.REL. 000.18 14K PILOT/P.COM PILOT/P object program. 000.19 14K PILOT/P.DOC Documentation of PILOT/P. 000.20 3K PILOT/P.HDR An include file for PILOT/P. 000.21 17K PILOT/P.PAS PILOT/P source code (Pascal/Z compiler). 000.22 9K PILOT/P.REF Quick Reference Guide. 000.23 1K PILOT/P.SUB Batch processor file to be used with DO.COM 000.24 4K PILOT/PR.HDR The include file with RANDOM and real #s. 000.25 4K SAGE.PLT Lesson in abstraction. 000.26 1K SAMPLE1.PLT Demo - Type, Accept, Match and X. 000.27 1K SAMPLE2.PLT Demo - subroutine. 000.28 2K Somprehensive file management system. The file subsystem supports a named file structure, allowing dynamic allocation of file space as well as sequential and random file access. Using this file system, up to 128 distinct programs can be stored in both source and machine-executable form. Digital Research, the designer of CP/M, has provided a set of nine manuals which describe the use and operation of CP/M in detail. .pause .break These manuals are: 1. An Introduction to CP/M Features and Facilities 2. ED: A Context Editor for the CP/M Disk System 3. ASM: CP/M Assembler User's Manual 4. DDT: CP/M Dynamic Debugging Tool User's Manual 5. CP/M 1.4 Interface Guide 6. CP/M 1.4 System Alteration Guide 7. CP/M 2.0 User's Guide 8. CP/M 2.0 Interface Guide 9. CP/M 2.0 System Alteration Guide As the reader can see, CP/M supports a context editor, an assembler (Intel-compatable), and a debugger system. These are avaind 67 :CP/M Line Editing and Output Control .break The following are the line editing functions supported by CP/M -- rubout Delete and echo the last character typed at the console. Ctrl-H Delete the last character typed; Backspace one character; CRT-oriented Ctrl-U Delete the entire line typed at the console. Ctrl-X Delete the entire line typed at the console; Backspace to the beginning of the current line; CRT-oriented. Ctrl-R Retype current command line: types a "clean line" following character deletion with rubouts. Ctrl-E Physical end of line: carriage is returned, but line is not sent until the carriage return key is depressed. Ctrl-M Terminates input (carriage return). Ctrl-J Terminates current input (line feed); CRT-oriented Ctrl-C This is used in CP/M to re-initialize the system. Anytime you change diskettes in a drive, you should type control-C so that the operatinglable in the basic CP/M package. There is a large variety of other software available which can run under CP/M with little or no modification. Such software includes several assemblers (both 8080 and Z80), a symbolic debugger, several high-level languages (including FORTRAN IV {compiler}, BASIC-E {translator}, CBASIC {translator}, many interpretive BASICs, ALGOL, FOCAL, and C), and several special-purpose applications programs (such as text formatting systems and accounting systems). This HELP File addresses itself specifically to the CP/M 2.x Operating Systems. .pause .end 66 :CP/M File References .break A file reference identifies a particular file or group of files on a particular disk attached to CP/M. These file references can be either unambiguous (ufn) or ambiguous (afn). An unambiguous file reference uniquely identifies a single file, while an ambiguous file reference may be satisfied by a number of different files.  system will know that a diskette was changed. Ctrl-Z End input from the console (used in PIP and ED). .pause .break Other control functions affect console output -- Ctrl-P This code is used to tell CP/M that characters sent to the screen should also be sent to the printer. This will remain in effect until you press control-P a second time to turn off the routing to the printer, or until you reset the system. Ctrl-S This is used to pause or "freeze" the characters that are scrolling by on the screen. Pressing any other character will resume output (scrolling) to the screen. Input lines can generally be up to 255 characters in length. They are not acted upon until the carriage return key is typed. .pause .end 68 :CP/M Built-In Commands .break The ERA Command This command is used to erase files from a diskette. The format is: ERA FILENAME Where FILENAME is any valid CP/M filename. The f An unambiguous file reference is an exact name of the specified file. It consists of up to eight characters in the file name and three characters in the file type. An unambiguous file reference is of the form -- pppppppp.sss The characters used in specifying an unambiguous file reference may not contain any of -- < > . , ; : = ? * [ ] An ambiguous file reference is used for directory search and pattern matching. The form of an ambiguous file reference is similar to an unambiguous reference, except the symbol '?' may be interspersed throughout the file reference. In various commands throughout CP/M, the '?' symbol .pause .break matches any character of a file name in the '?' position. For example, X?Y.C?M will match XZY.COM and X3Y.CEM. The '*' symbol is used to match all characters of a file name or file type. For example, *.COM will match XZY.COM and HELP.COM, while HELP.* will match HELP.COM and HELP.HLP. .pause .eilename may be prefixed by a drive designator (i.e. ERA B:FILENAME ). If no designator is given then the currently logged drive will be used. EXAMPLE To erase a file called "LETTER.TXT" from drive B, you would type: ERA B:LETTER.TXT .pause .break The DIR Command This command displays a list of all files on a diskette. Its format is: DIR x: Where x: is an optional drive designator (A:, B:, etc.). If no disk drive is specified, then CP/M will give you a listing of the files on the drive that is currently logged. EXAMPLE To get a listing of all the files on drive B, you would type: DIR B: .pause .break The REN Command You may change the name that you have given to a file with the REN command. To use the REN command, you would type: REN NEWNAME=OLDNAME EXAMPLE To change the name of the file "LETTER.TXT" on drive B to the new name "MEMO.TXT," you would type: REN B:MEMO.TXT=B:LETTER.TXT The SAVE Command The SAVE cocode format and produce a file in machine executable form which can be loaded into the TPA (this loaded program becomes a new command under the CCP). .pause .break DDT Load the CP/M debugger into the TPA and execute it. DUMP Dump the contents of a file in hex. SYSGEN Create a new CP/M system diskette. MOVCPM Regenerate the CP/M system for a particular memory size. .pause .end 70 :Physical Device Assignments for ARIES-1 .break Logical Device Physical Device CON: TTY: Model 43 Teletype CRT: Hazeltine 1500 CRT BAT: CRT and Modem UC1: In=CRT, Out=CRT and Modem RDR: TTY: Model 43 Teletype PTR: Modem UR1: CRT and Modem w/CRT Output UR2: CRT and Modem PUN: TTY: Model 43 Teletype PTP: Modem UP1: CRT and Modem UP2: CRT and Modem LST: TTY: Model 43 Teletype CRT: Hazeltine 1500 CRT mmand places n pages (256-byte blocks) onto disk from the TPA and names this file ufn. The form of the SAVE command is: SAVE xx FILE.COM .pause .break The TYPE Command The TYPE command is used in CP/M to display a file on the screen. To use the TYPE command, enter the following: TYPE FILENAME This will cause the file to be sent to the screen of the terminal. When the file is being displayed, you may press CONTROL-S to stop the scrolling. To continue scrolling, press any other character. By preceding the TYPE command with a CONTROL-P, the output will also be sent to the printer. EXAMPLE To view a file called "LETTER.TXT" on drive B, enter: TYPE B:LETTER.TXT This command will only work to display text files. Displaying non-text files such as files ending in "COM," may cause your terminal to do strange things. .pause .break The USER Command Upon cold boot, the user is automatically logged in to User Area 0, which is compatible with CP/M 1.4 d LPT: Modem UL1: CRT and Modem .pause .end 71 :CP/M STAT Command .break The STAT Command takes any of the following forms -- STAT Calculate the storage remaining on all active drives and print a message like x: R/W, SPACE: nnnK -- if disk is Read/Write x: R/O, SPACE: nnnK -- if disk is Read Only STAT x: Calculate the storage remaining on the specified drive and print BYTES REMAINING ON x: nnnK .pause .break STAT x:afn [$S] Scan the specified files on the specified drive (x: is optional), and list all files which satisfy the unambiguous reference in alphabetical order with storage requirements. A table like the following is generated -- Size Recs Bytes Ext Acc sssss rrrr nnnk ee a/b d:pppppppp.sss where sssss -- number of virtual 128-byte records in file This field is display if the optional $S is given rrrr -- number of 128-byte records in each extent of the file irectories. The USER command allows the user to move to another logical area within the same directory; areas are numbered 0-15. The ERA, DIR, REN, SAVE, and TYPE commands apply to the current User Area. .pause .end 69 :CP/M Transient Commands .break The CP/M standard transient commands are -- STAT List the number of bytes of storage and data on the currently logged-in disk, provide statistical information about particular files, and display or alter device assignment. PIP Load the Peripheral Interchange Program for later disk file and peripheral transfer operations. ED Load and execute the CP/M text editor program. SUBMIT Submit a file of commands for batch processing. XSUB Used in conjunction with SUBMIT, transfers all buffered console input from CON: to the SUBMIT File. ASM Load the CP/M assembler and assemble the specified program from disk. LOAD Load the file in Intel "hex" machine  nnnK -- number of bytes (in K, K=1024) allocated to the file ee -- number of 16K extensions a/b -- access mode of file; R/O or R/W d:pppppppp.sss -- drive name (d may be A, B, C, D) and file name .pause .break STAT x:=R/O Set the specified drive to Read Only. This is cleared by a warm boot. When a disk is Read Only, the message BDOS ERR ON x: READ ONLY will appear if there is an attempt to write to it. STAT VAL: Summarize the status commands. STAT VAL: will print the list -- Temp R/O Disk: d:=R/O Set Indicator: d:filename.typ $R/O $R/W $SYS $DIR Disk Status : DSK: d:DSK: User Status : USR: Iobyte Assign: CON: = TTY: CRT: BAT: UC1: RDR: = TTY: PTR: UR1: UR2: PUN: = TTY: PTP: UP1: UP2: LST: = TTY: CRT: LPT: UL1: .pause .break STAT DEV: Display the current logical to physical device mapping. For example, the list may appear as -- necessary to load, print, punch, copy, and combine disk files. PIP is initiated by one of the following forms -- PIP Engage PIP, prompt the user with '*', and read command lines directly from the console. PIP used in this way is exited by either typing an empty command line (just a carriage return) or a Ctrl-C as the first character of the line. PIP cmnd Engage PIP, execute the specified command, and return to CP/M. The form of each command line in PIP is -- destination = source#1, source#2, source#3, ..., source#n .pause .break The general forms of PIP command lines are -- x:=y:afn Copy all files satisfying afn from drive y to drive x. 'y' may be omitted, and, if so, the currently logged-in drive is selected. x:ufn=y: Copy the file given by ufn from y to x. 'x' may be omitted, and, if so, the currently logged-in drive is selected. x:afn=y:afn Like the above, but x  CON: = CRT: PUN: = PTP: RDR: = UR1: LST: = TTY: STAT d:afn [$R/O or $R/W or $SYS or $DIR] Set the various permanent file indicators. R/O=Read/Only, R/W=Read/Write, SYS=System, DIR=Non-System STAT ld1=pd1, ld2=pd2, ... Change the logical to physical device assignments. Logical device ld1 is assigned to physical device pd1, etc. The valid logical device names are -- CON: The system console device RDR: The paper tape reader device PUN: The paper tape punch device LST: The output list device .pause .break The valid physical device names are -- TTY: Slow speed output device (teletype) CRT: High speed output device (cathode ray tube) BAT: Batch processing (CON: input is RDR:, CON: output is LST:) UC1: User-defined console PTR: Paper tape reader PTP: Paper tape punch UR1: User-defined reader #1 UR2: User-defined reand/or y may be omitted; the default drive is selected for the omitted drive(s). ld=pd Copy from the specified physical device to the specified logical device. Valid logical devices are -- CON:, RDR:, PUN:, LST: Valid physical devices are -- TTY:, CRT:, UC1:, PTR:, PTP:, UR1:, UR2:, UP1:, UP2:, LPT:, UL1: .pause .break There are many different ways to use PIP. The following examples illustrate the most common forms A>PIP B:=A:FILENAME - Makes a duplicate copy on drive B, of the file "FILENAME" on drive A. A>PIP C:NEWNAME=B:FILENAME - Makes a duplicate copy on drive C, of the file "FILENAME" on drive B, calling it "NEWNAME" on drive C. A>PIP B:=A:*.* - Copies all files from drive A to drive B. .pause .break Additional device names which may be used in PIP commands are -- NUL: Send 40 Nulls (ASCII 0) to the device. EOF: Send a CP/M End of File chaader #2 UP1: User-defined punch #1 UP2: User-defined punch #2 LPT: Line printer UL1: User-defined list device #1 .pause .break STAT d:DSK: List the characteristics of the disk named "d:"; if "d:" is not specified, list the characteristics of all active disks. A sample listing: d: Drive Characteristics 65536: 128 Byte Record Capacity 8192: Kilobyte Drive Capacity 128: 32 Byte Directory Entries 0: Checked Directory Entries 1024: Records/ Extent 128: Records/ Block 58: Sectors/ Track 2: Reserved Tracks STAT USR: List the User Number the user is currently in and the User Numbers which have files on the currently addressed disk. A sample listing: Active User : 0 Active Files: 0 1 3 .pause .end 72 :CP/M PIP Command .break PIP (Peripheral Interchange Program) is the CP/M transient which implements the basic media conversion operations racter (ASCII Ctrl-Z). INP: Special PIP input source to be patched (see manual). OUT: Special PIP output destination to be patched (see manual). PRN: Same as LST:, but tabs are expanded at every eighth character position, lines are numbered, and page ejects are inserted every 60 lines with an initial eject. The user can also specify one or more PIP parameters enclosed in square brackets separated by zero or more blanks. These parameters are -- B Block mode transfer. Data is buffered by PIP until an ASCII X- Off character (Ctrl-S) is received from the source device. Dn Delete characters which extend past column n in the transfer of data to the destination from the character source. E Echo all transfer operations to the console. F Filter (remove) form feeds from the file. .pause .break Gn Get File from User Number n (n in the range 0 - 15) H Hex data transfer. All data isnFs^Z Find string H End edit, close and reopen files Is^Z Insert characters nJ Place strings in juxtaposition +/- nK Kill (delete) lines +/- nL Move down/up lines .pause .break nM Macro definition O Return to original file +/- nP Move and print pages Q Quit with no file changes R Read library file nSs1^Zs2^Z Substitute s2 for s1 +/- nT Type lines +/- U Translate lower to upper case if U; none if -U +/- V Engage/disengage line numbers (verify) 0V Print memory buffer info (free/total usage) nW Write lines nX Transfer n lines to X$$$$$$$.LIB 0X Empty X$$$$$$$.LIB nZ Sleep +/- n Move and type (+/- nLT) n: Move to absolute line (V engaged) :n Process from current line to specified line (V engaged) .pause .end 74 :CP/M ASM Command .break The ASM Command loads and executes the CP/M 8080 assembler. It is of the form --  checked for proper Intel hex file format. I Ignore ':00' records in the transfer of Intel hex format file. L Translate upper case to lower case alphabetics. N Add line numbers to each line transferred to the destination. O Object file (non-ASCII) transfer. Ignore End of File. Pn Include page ejects at every n lines. Qs^Z Quit copying from the source device or file when the string s (terminated by Ctrl-Z) is encountered. R Read system files Ss^Z Start copying from the source file when the string s is seen. Tn Expand tabs to every nth column. U Translate lower case to upper case alphabetics. V Verify that data has been copied correctly. W Write over R/O files without console interrogation Z Zero the parity bit on input for each ASCII character. .pause .end 73 :CP/M ED Command .break The ED Program is the CP/M system context editor, which allows creation and alteration of ASC ASM filename.xyz where filename ... is the name of the file 'filename.ASM' to assemble x ... designates the disk name which contains the source y ... designates the disk name to contain the hex file (y=Z suppresses generation of the hex file) z ... designates the disk name to contain the print file (y=X lists on CON:, y=Z suppresses listing) Refer to the ASM Manual for further details. .pause .end 75 :CP/M LOAD Command .break The LOAD Command reads the file specified, which is assumed to contain Intel hex format machine code and produces a memory image file which can be subsequently executed (converts .HEX to .COM files). It is of the form -- LOAD filename where filename is the name of the file 'filename.HEX'. .pause .end 76 :The UNLOAD Command .break The UNLOAD Command does the reverse of the LOAD Command -- it converts COM files to HEX files. It is of the form -- UNLOAD filename where filename is the naII files. Complete details are given in the user's manual. The following are the error indicators given by ED -- ? Unrecognized Command > Memory buffer full # Cannot apply command the number of times specified O Cannot open LIB file in R command The following are the control characters recognized by ED -- ^C System reboot ^E Physical (not entered in command) ^H Character delete (backspace) ^I Logical tab ^J New line (line feed) ^L Logical in search and substitute strings ^M New line (carriage return) .pause .break ^U Line delete ^X Line delete and backspace ^Z String terminator Rubout Character delete Break Discontinue command The following are the commands recognized by ED -- nA Append lines +/- B Beginning/Bottom of buffer +/- nC Move character positions +/- nD Delete characters E Exit me of the file 'filename.COM'. .pause .end 77 :CP/M DDT Command .break The DDT Program allows dynamic interactive testing and debugging of programs generated in the CP/M environment. It is invoked by -- DDT DDT filename.HEX DDT filename.COM where 'filename' is the name of the program to be loaded or tested. DDT responds to the normal CP/M input line editing characters. DDT responds to the following commands -- As Perform inline assembly starting at the specified address s. D Display memory from the current address for 16 display lines. Ds Display memory from address s for 16 display lines. Ds,f Display memory from address s to address f. Fs,f,c Fill memory from start address s to final address f with byte c. .pause .break G Start execution at the current value of the PC. Gs Start execution at the specified address s. Gs,b Start execution at the specified address s and set a breakpoint at> Search for ASCII string from bbbb to eeee. String is at most 16 characters. String is terminated by . F bbbb eeee Search for hex string from bbbb to eeee. String is terminated by . G Go to next breakpoint. H aaaa nnnn Hex add and subtract. Computes aaaa+nnnn and aaaa-nnnn. I nn Input. Prints value at port nn. J nnnn Jump to and execute at location nnnn. K Keyboard echo. L filename.typ nnnn Loads specified disk file into location nnnn. .pause .break M bbbb eeee nnnn Move block from bbbb to eeee-1 to nnnn. N aaaa Enter offset aaaa for loading. O nn dd Output byte dd to port nn. P bbbb Input hex into memory from keyboard starting at bbbb. advances pointer, or backs pointer. Q bbbb eeee Dumps from bbbb to eeee in ASCII. R n ll tt ss bbbb Read block  the address b. Gs,b,c Same as above with breakpoints at b and c. G,b Start execution at the current value of the PC with breakpoint b. G,b,c Same as above with breakpoints at b and c. If Insert a file name f into the default FCB. L List 12 lines of disassembled code from the current address. Ls List 12 lines from the specified address s. Ls,f List lines of disassembled code from s to f. Ms,f,d Move the block from address s to f to destination at address d. R Read file in FCB into memory at 100H. Rb Read file in FCB into memory with offset b from 100H. Ss Set (examine and alter) memory starting at address s. T Trace the next instruction. Tn Trace the next n instructions. .pause .break U Untrace -- like Trace, but intermediate steps are not displayed. X Examine all registers and flags. Xr Examine specified registers or flag, where r may be -- C Carry flag Z of data from disk n of length ll (256-byte pages) starting at track tt and sector ss placing the data at bbbb. S bbbb eeee Disassembly (symbolic dump) from bbbb to eeee. T bbbb eeee Destructive memory test from bbbb to eeee-1. U bbbb Set breakpoint at bbbb. .pause .break V Display all currently-set breakpoints. W n ll tt ss bbbb Write on disk n the data at bbbb for a length of ll starting at track tt, sector ss. ll is in 256-byte pages. X Display registers. Z bbbb eeee dd Zero or set memory from bbbb to eeee-1 with byte dd. .pause .end 79 :CP/M SYSGEN Command .break The SYSGEN Command This command is used to place a copy of CP/M in its reserved place on a diskette. Anytime you want to create a diskette that can be used in drive A of your computer, you must use SYSGEN to place a copy of CP/M on the diskette first. This is because the CP/M operating system always expects to fi Zero flag M Minus (sign) flag I Interdigit Carry flag A Accumulator B BC Reg pair D DE Reg pair H HL Reg pair S Stack pointer P PC .pause .end 78 :The ZDT Command .break ZDT is a Z80 version of DDT. It is invoked by typing -- ZDT The commands recognized by ZDT are input in single-character input mode. No input line editing is done, and each command expects an exact input. All byte values are exactly two characters, and all addresses are exactly four characters. The commands recognized by ZDT are -- A bbbb Enter ASCII characters into memory from keyboard starting at address bbbb. B Warm Boot -- Return to CP/M. C bbbb eeee nnnn Compare memory from address bbbb to address eeee to block starting at nnnn. .pause .break D bbbb eeee Dump memory from bbbb to eeee. E bbbb eeee SYSGEN CP/M System Generation Program Source Drive (or CR to skip): a Source on A, then type CR Destination Drive (or CR to abort): b Destination on B, then type CR Destination Drive (or CR to abort): .pause .end 80 :CP/M SUBMIT and XSUB Commands .break The SUBMIT command allows CP/M commands to be batched together for automatic processing. The form of this command is SUBMIT ufn parm1 parm2 ... parmn The ufn given in the SUBMIT command must be the filename (not type) of a file which exists on the currently logged-in disk with an assumed file type of '.SUB'. Refer to the CP/M Manual for further details. The XSUB command extends the power of the SUBMIT facility. When specified as the first line of a SUBMIT File, it self-relocates directly below the CCP. All subsequent SU 13 None None Log-In Disk 14 Value in Reg E None A=0, B=1, C=2, D=3 Open File 15 Address of FCB Byte address of FCB in DE if found or 0FFH if not Close File 16 Address of FCB Byte address of FCB in DE if found or 0FFH if not Search for File 17 Address of FCB Byte address of FCB (0-3) in DE if found or 0FFH if not Search for Next 18 Address of FCB Byte address of next FCB in DE if found or 0FFH if not Delete File 19 Address of FCB Byte address of FCB (0-3) in DE if found or 0FFH if not .pause .break Function and Number Input Parameters Output Parameters Read Next Record 20 Address of FCB 0=successful read in DE 1=read past EOF 2=reading random data Write Next Rec 21 Address of FCB 0=successful write in DE 1=error in extendBMIT command lines are processed by XSUB, so that programs which read buffered console input (BDOS Function 10) receive input directly from the SUBMIT File. While XSUB is in memory, it prints the message "(xsub active)" on each warm boot. An example of the use of XSUB to display memory from 100H to 1FFH is -- XSUB DDT D100,1FF G0 .pause .end 81 :CP/M BDOS -- Basic I/O Operations .break Function and Number Input Parameters Output Parameters System Reset 0 None None Read Console 1 None ASCII Char in A Write Console 2 ASCII Char in E None Read Reader 3 None ASCII Char in A Write Punch 4 ASCII Char in E None Write List 5 ASCII Char in E None Direct Con I/O 6 ASCII Char in E I/O Status in A if E=0FFH Get I/O Status 7 None I/O Status in A Put I/O Status 8 I/O Status in E None Print Buing 2=end of disk data 255=no more dir space Make File 22 Address of FCB Byte address of FCB or in DE 255 if no more dir space Rename FCB 23 Address of FCB Byte Address of Dir entry in DE or 255 if no match Return Log Code 24 None Login vector in HL Read Drive No 25 None Number of logged-in drive (A=0, B=1, C=2, D=3) Set DMA Address 26 Address of 128 None byte buffer in DE .pause .break Function and Number Input Parameters Output Parameters Get Alloc Vect 27 None Allocation Vect Addr in HL Write Prot Disk 28 None None Get R/O Vect 29 None HL=R/O Vect Val Set File Attrib 30 Ptr to FCB in DE Dir code in A Get Disk Parms 31 None HL=DPB Address Set/Get Usr Code 32 E=0FFH (get)/Code A=Current code (get)/no (set) value (set) ffer 9 Address of string None terminated by $ in DE Read Buffer 10 Address of Read Read Buffer is filled Buffer in DE Console Ready 11 None LSB of A is 1 if char ready *All function numbers are passed in Reg C. .pause .break I/O Status Byte -- Value Bits 6&7 Bits 4&5 Bits 2&3 Bits 0&1 00 CON:=TTY: RDR:=TTY: PUN:=TTY: LST:=TTY: 01 CRT: PTR: PTP: CRT: 10 BAT: UR1: UP1: LPT: 11 UC1: UR2: UP2: UL1: Read Buffer -- Byte Function 1 Maximum Buffer Length 2 Current Buffer Length (returned value) 3-n Data (returned values) .pause .end 82 :CP/M BIOS -- Basic Disk Operations .break Function and Number Input Parameters Output Parameters Return Version # 12 None Version Info in HL H=0 CP/M, H=1 MP/M L=00 CP/M 1.x, 2x 2.x Init BDOSRead Random 33 DE=FCB addr A=return code 1=reading unwritten data 2=(not used) 3=can't close curr ext 4=seek to unwritten ext 5=(not used) 6=seek past end of disk .pause .break Function and Number Input Parameters Output Parameters Write Random 34 DE=FCB addr A=return code 1=reading unwritten data 2=(not used) 3=can't close curr ext 4=seek to unwritten ext 5=dir overflow 6=seek past end of disk Compute File Siz 35 DE=FCB addr Random Rec Field set to file size Set Random Rec 36 DE=FCB addr Random Rec Field set *All function numbers are passed in Reg C .pause .end 83 :CP/M File Types .break AIN ALGOL 60 Intermediate ALG ALGOL 60 Source File ASM Assembler Source File BAK Backup File BAS BASIC Source File C C Source File COB COBOL Source File COM "Command" File FWHO DO YOU THINK THEY WERE? A: T: T: GOLDILOCKS DIDN'T LIKE PORRIDGE, SO SHE T: FOUND SOME YOGURT IN THE KITCHEN. NEXT SHE A: $A T: T: THEN THE THREE BEARS CAME HOME. THE LITTLE BEAR T: SNIFFED AROUND AND SAID ; A: $B T: T: THEN THE BIG DADDY BEAR CHASED GOLDILOCKS ALL T: OVER THE HOUSE BECAUSE SHE @$A@. T: T: GOLDILOCKS HID UNDER THE BED. T: BABY BEAR HID UNDER THE BED. T: THEY SAT ON BABY BEAR'S ELECTRIC TRAIN, AND A: T: T: PRETTY SOON MAMA BEAR CAME IN YELLING T: "WHO ATE UP ALL MY YOGURT?" A: T: T: GOLDILOCKS LAUGHED. T: BABY BEAR LAUGHED EVEN HARDER. T: HE SAID "@$B@." T: MAMA BEAR SAID A: $C T: T: THEN THEY WENT ON A PICNIC. T: THEY PACKED A BASKET OF PEANUTS AND POPCORN AND ; A: $F T: AND BUBLE GUM AND FRISBEES AND LEMONADE. T: T: THEY DECIDED TO GO TO ; A: $P T: T: WHEN THEY GOT THERE, THE DADDY BEAR OPENED THE DOOR T: AND ALL OF THE @$F@ ; T: FELL OUT OF THE CAR. T: THE BABY BEAR SAID "@$B@" T: THE MAMA BEAR SAID "@$C@" T: THE GREAT BIG DADDY BEAR SAID A: TOR FORTRAN IV Source File HEX Intel "hex" code file HLP HELP File INT BASIC Intermediate File LST Listing File MAC MACRO-80 Source File PAS PASCAL Source File PRN Assembler Listing File REL Relocatable Module SRC PASCAL/MT Source File SUB SUBMIT File SYM Symbol File TC Tiny-C Source File TFS TFS Source File TXT Text File $$$ Temporary File .pause .end 84 :CP/M BIOS Jump Vector .break The following is a table representing the entry points into the CP/M BIOS of the major routines accessable to the user -- Routine Relative Offset Comment BOOT 00H Cold Start WBOOT 03H Warm Start CONST 06H Console Status Reg A = 00 if no char ready Reg A = FF if char ready CONIN 09H Console char in (Reg A) CONOUT 0CH Console char out (Reg C) LIST 0FH List out (Reg C) PUNCH 12H Punch out (Reg C: T: GOLDILOCKS CRIED "LETS'S GET OUT OF @$P@. T: LET'S GO HOME." T: BUT THE CAR HAD A FLAT TIRE AND THEY ALL HAD TO SLEEP T: IN THE BACK SEAT, AND ALL NIGHT LONG THE DADDY BEAR GRUMBLED T: "@$B@." T: T: T: T: THE END E: PROGRAM HIPILOT; {$iPILOT/P.HDR } { FILE: HIPILOT.PLT} { A TYPICAL INTERACTIVE SESSION.} { } BEGIN initialize; WRITELN(' Hi there, is this your first time on a computer?'); READLN(ans); ucase(ans); match('YES!SURE!OK!YEAH','!',ans,flag); if flag then WRITELN(' I hope you will enjoy your experience with me.'); WRITELN(' In the area of education, what are your main interests?'); 1: READLN(ans); ucase(ans); match('TEACH!INSTR!LEARN!MATERIAL','!',ans,flag); if flag then GOTO 2; match('ADMIN!PROGRAM!TEST!GRAD!ANALYS!COURSE!CURR','!',ans,flag); if flag then GOTO 3; WRITELN('Please tell me more about this.'); if not flag then GOTO 1; 2: WRITELN(' An excellent way of using computers for teaching and learning'); WRITELN(' is to give children an) READER 15H Reader in (Reg A) .pause .break Routine Relative Offset Comment HOME 18H Move to track 00 SELDSK 1BH Select disk given by Reg C (A=0,B=1,...) SETTRK 1EH Set track address given by Reg C (0...76) SETSEC 21H Set sector address given by Reg C (1...26) SETDMA 24H Set subsequent DMA address (RP B&C) READ 27H Read track/sector (block) WRITE 2AH Write track/sector (block) LISTST 2DH List Device Status Reg A = 00 if no char ready Reg A = FF if char ready SECTRAN 30H Translate sector number in Reg C using table pointed to by DE; physical sector number returned in Reg L .pause .end R:FILE: GOLDI.PLT R:A SHORT STORY. R: GOLDILOCKS AND YOU KNOW WHO; 2/7/77 T: ONCE UPON A TIME THERE WERE THREE BEARS T:  opportunity to write their own programs.'); WRITELN(' How does this strike you?'); READLN(ans); ucase(ans); match('GOOD!EXCEL!FINE!YES!IMPORTANT!OK','!',ans,flag); if not flag then WRITELN(' I see you disagree. Will you explain further?'); if flag then GOTO 4; READLN(ans); 4: WRITELN(' Of course the teacher should write programs too, however,'); WRITELN(' it isn''t always necessary to use "packaged curricula"'); WRITELN(' for effective use of the computer in learning situations.'); GOTO 0; 3: WRITELN(' Are you interested in the computer''s application to teaching?'); READLN(ans); ucase(ans); match('NO!NEVER','!',ans,flag); if not flag then GOTO 2; WRITELN(' Then perhaps ''PILOT'' is not for you. PILOT''s intention is'); WRITELN(' for it''s use by teachers and children for interactive dialogues.'); WRITELN(' Thank you for your time and interest.'); GOTO 0; 0:END. 0V3 ү^0#Ck6?˅Rw f 004 rLpW,m4Y+! d?mllUrp)G@m@0 6?(,"((kF(kH(c[8C# ?#h`6`]^iP3\|\Ƞͦ Q00f@-WYU f~7MϷ+tn@  #A +[!&_ 2[ab@^>/bʼkh_- tH7Lwp@/tuWVX!ͼ/hr\:Pò{f7M+qipjހ″6 .1dٵ pGf 1 M@  @ #( + 6*r@m&ׂ3lhJ@ٵ `f9qnQzre^ͳnñ3¯#Y 3Vqp얫Blh /h ± Má0\lڊuRFm<F`W-A^G<5{%^X- f`6mDQ wi5:C/%n sV7K6F#fXw< &[9wK1A.l1uCgwy8DSrIuzNG#y@i7 &,Ga4˘&.BYTIN4P$.EOFρTʀ.ERRORR'.PERROR$$40.STRERR5E$4x$.TINEDɸ&.TXTYPQPtDD%DXMU eQ:QR: FILE: HIPILOT.PLT R: A TYPICAL INTERACTIVE SESSION. R: T: Hi there, is this your first time on a computer? A: C:ucase(ans) M:YES!SURE!OK!YEAH TY: I hope you will enjoy your experience with me. : In the area of education, what are your main interests? *MORE A: C:ucase(ans) M:TEACH!INSTR!LEARN!MATERIAL JY:*TEACHING M:ADMIN!PROGRAM!TEST!GRAD!ANALYS!COURSE!CURR JY:*OTHER T:Please tell me more about this. JN: *MORE *TEACHING T: An excellent way of using computers for teaching and learning : is to give children an opportunity to write their own programs. : How does this strike you? A: C:ucase(ans) M:GOOD!EXCEL!FINE!YES!IMPORTANT!OK TN: I see you disagree. Will you explain further? JY: *YES A: *YES T: Of course the teacher should write programs too, however, : it isn't always necessary to use "packaged curricula" : for effective use of the computer in learning situations. E: *OTHER T: Are you interested in the computer's applUcMU eQj\`!~xD>råCO| +LST`TU$4XI95:QTTcI95kd[hr\ u u\mmUPHnYU@LDڪ p]7\/ (F!0-6?\+rB$A-+Ep@Vp4ʹ@ 8٠Pup"th :p\!  b <57#v %@/p+U0S_6 t70Rl0Ebs<5o*x  c Ƿ<59:}Y X@! @Q*ű@1]@n? FLe"*))f1r*J4 TDU0LENGTHUS#@%9b: L19Q";2US& rN'"\ XV^°i+uW͠#$0n! j]jH e'#6>ܭP@i| "xV <@X p6~H6_ CE¯p`Df8hOӸB0"3l0t nMp !v\3>ˑS5a%Q2B˔T r5E$UMQIF.STRGRT˔T`r5E$58MQI9E2:˔TS#MQIF:$˔ication to teaching? A: C:ucase(ans) M:NO!NEVER JN: *TEACHING T: Then perhaps 'PILOT' is not for you. PILOT's intention is : for it's use by teachers and children for interactive dialogues. : Thank you for your time and interest. E: S rU%%E%9AUR.READ˔PQr$U$0L112rU%%E.INPUTR$TH .READLNׂr$U$ L110D)P#62W"P3n-\Vm4 =vC4jS@{%^g7h ͦ|[ P@KN@6UDk%W+zT.8F#f4(kPt ±X haV>/,HF#f0qXD&[E2Ebq+elüCp`Ha2 FSɼdIf땺! n[e# u|`t\ Lpl6|?۠~7K52+`t`UC2W D0pYeWWVZe1zY,nVe-]@FY 6~?۠Y9 m EpZn sͣ z|[R0 2€0l  h ٶpfؠAMoh>a;aۅͦ⠠T: ԕ#MQI1F:6˔ MQI9E2kͧ`di(v6?"`$ͧ`i0 %^KE??iÀ0#`Pp͢ /0| .0hGFb!@hC)PTB%8A N.SQR LM`Dh0: P@A N:$ T0: LM@0j.>2fszRdZ,Zt 02*SUS'QӑLbDS(.DONE2B ~YrU1~[ 9|P.FNORMUR4UMN.GTEQKT`b$t.COMPReU58(.GTEQRDU8.ORGAN3@@@gZ\ nբ! /ZnhH֯th0iL;aDB _.{JҸ@Ƞ˭^7t"DB@_.K6 .SAVREGUӠr44UH%9:.INSECTU bTH.CONSETB.INSECTb$54UH.UNIONRb `xO 9=l,vvpP#aeSx+?u{%kgYV="ru"rG'El,rݤ'0>hpLˬPm6 )A˭^錺r4e$TyUS bTHE5U1R:<SUS#E5U1RjJg!4BYX=!Tesм{l|Ϣx^W^wXzxD"[oetۦ`tn X6f۰'j xbI!z @{$V+€C6ہ+b1%vlfp$`4XlP.ADDRCKb%DH.COƀrU%%Dh.HPERRrD(Π.PUSHBDr$$4.RELBASEr$$4.RBLOCK3@0\1- #fYX@{e&f <f0(c@|@W+3jx ͹@-`\/*=B"dj~ 9B"@d#+g!Y h $I31^v"@^) H}vY@BnPuL (rVl-@S.pi$@+f@-݅k"XS\.Vmh Djڞrk݅K.QNv+U4X.+6XwXp^q@!^eU XeU` #CPW1dl:rlpVľ(DH e`VsW/+hZ,l bk-ܤ}lYhaX`4P^0$_< z( ]cP0zF a)u1YH!ye$xp0eVX(2DqlZ 29B3%B*]`6H p!0Md@ #B1E!S.pi$-8B͒P'F@][`FNᓈ[Pmr@D@ 2wPax[xF#eb{ eu 2US8IJ2˔ AUM! 2$ STc'@0P uMNQaհWғ&2˓STTTU b$U4UH0:TU#0j~Yl^'w녂6h+gF Lpf= @8V+8HV+eexV+elaFWc I .2dUS! 1M=R2<˓SՓSc%=A9%:pTԠbU%$(.ERROR6O  ~ ~F|Zb6 v0.CLSOTbՄUH .PSTAT $L0?D`fM#>-Db1;`dT!)F@1rjz b4DX !-!2:c !-!2k2f *$0\`pZ:`rY0K.e͠@EhZQ Mfmkm4pkXfi7  ;MS*@e<̦S!@b7ME,(֯3ݥ @N.6Lm @reiP \ȉ(* \%(豑\Hʋ *rE$4.PTRCHK6]nʯv@uJMlc!1MR2&˔TTU bDtHAMQR:QU#`AMQRj Dyl2%@ (1Y|s<|ޯ3A@m[@ ڶr;B3h"jDfհ(ͫ`V 60\*H8^;JCeFY@r|eH!&#FLrjj@ -X,Er‡azY0+ YX ̺ Ve+/( fY@xA.K'R)J&xr 3mxABql^%F7OtVbhG n XmN3mxA-[tV [ t8:.bDP@8@͵A A ٶ&|4Y%BTF dV?譺+ mpH CA f 킯\ PtV' `R1+ mXm ڭҳ^7\n[+7A,РZo#JA3w7Ed@NͭA@ [&@6A@mo"k nۧZ Ȁ + O4(m Mpkٺnۢ!/[E^W@Ґ\K@`n X1^Gd@/  t( 9ER@` V?#QT fo\"aH2~E h"']`4 p]`4 [N(EN hu(n 8^%2#`"Bs5 #E9! 2Sqn3 Ɠci9cD43yad&)m2QQ\! Q\hisV BDQ=UR.TXTINT#Q%::KU#QaQ%::T&` U$*e^ "3 ^):ߦ` >-Ee{ b1+ߧp 7 ~U@.CLSOTbU%(H.MXOUTR.LOOK+ׂ +dER@`"KpȌ!,P.RELBASERSTRC%1.ILD12KS bC#%1.ILDVS`bEc(%MQJ.ISTR1TbDE(eJ:KS c %1:S L%1: S c %1:@KS %1X:DS@%MQJ:fTc%MQH:Q@eJjO#[V$+'8A&;$Gb\IVNpH³qO#[V$+' Cm^sV땂 # ³="dݥ&땢dݥ'땢dT R5H.LASTNPROGRAM LESSON1; {$iPILOT/P.HDR } { FILE: LESSON1.PLT} BEGIN initialize; WRITELN($c); WRITELN(' LESSON #1'); WRITELN; WRITELN(' ',$n,', AFTER PROGRESSING THRU THESE LESSONS WE'); WRITELN(' AUTOMATICALLY RETURN TO THE MAIN PROGRAM.'); WAIT(5,ch); FTXTIN('LMENU.COM');CHAIN; GOTO 0; 0:END.  EwF6CG 0fTU؞@P `jX8thK@ 0<ᑰF~x, ^+vIږ8nzmFxae!\9rzB"e0(*!"FTr*b ,PUSb%D.BYTIN3@?zB-wefeY@(F'8\4pB"@dh~Fa@"14Z0pi$.PF4cG "]` 6H Q.PuL (bpB/dh~Fa@.Piu, (npV;rm<hB`6H c.Piu ([(E lڀ8\2@P /`xW[G|,/ rD(.PUSHBD$T$4X.RFLUSHЀr4TE4T r$dU4.RFLUSH9Db6Z8V+X84!0M3@ "!F#jrDˬf@ p2gӔ 24 >.CSTS24.COR55E9@4٠Pݔ:͠ 4 am,L(F#$A=A! 2:˔T'S`b=A9=R:BS=A9=Rj 3@<\- d?\- f"%FfPX8 FD)r"*d('$"!FH9rB$d)")ђS rDTUDXA=A! .PUSHBD˔S 1Q:N˔AUM! :˔SR: FILE: LESSON1.PLT T:@$c@ T: LESSON #1 T: T: @$n@, AFTER PROGRESSING THRU THESE LESSONS WE T: AUTOMATICALLY RETURN TO THE MAIN PROGRAM. W:5 L: LMENU E: R: FILE: LESSON2.PLT T:@$c@ T: LESSON #2 T: T: @$n@, AFTER PROGRESSING THRU THESE LESSONS WE T: AUTOMATICALLY RETURN TO THE MAIN PROGRAM. W:5 L: LMENU E: R: FILE: LESSONS.PLT R: BY COMBINING PILOT AND PASCAL/Z WE CAN CHAIN TO OTHER PROGRAMS. R: THIS PROGRAM DEMONSTRATES HOW TO CHAIN WITH PASCAL/Z. R: YOU MUST FOLLOW THE DIRECTIONS GIVEN IN THE PASCAL/Z MANUAL CONCERNING R: CHAINING AND THE PROGRAM CHAINED TO MUST FOLLOW THE CP/M FILE NAMING R: CONVENTION. T:WELCOME T: T:WHAT IS YOUR NAME?; A:$n t:THANK YOU @$n@. NOW WE @ l pi$/ ( ͠pM$ E*T^7v'S+Ґ|U>HRd#%^7d\!ʽ8ԑS b4UTM.SGT `B4HM9:TUS#M: #M1:$ #M9kBͣ` mY,ͩ`K62Y~n[09n\-Ktnݪ9J7 EbwKtqZ,֯t\A-+ nO+@-^<"ku tF\\A-+ nO+B-^<"ha8U bDdH%5=.NCDVDS#%%Y:KSS#9 Y; S& aSՖzB^_ ς9^g>5z@(Y#=ySPZovr$z  C,2g7¡CDnWgAx)aX-ݥ!jV찋, 2c[x ʾ;HJH%^f`2ςS66 iI^f[&3ˑUTUQr4e$Tx.SAVREGD`ˬB @LSS R$9^.RELEASE LD#x0:*KPT9^:: SPTc0:* L㣠0jlC.VD+9YʽRm ˕9 ll[/+F" WILL TAKE AN ADVENTURE. r: first time flag; = 1 means 1st time here; = 0 means not 1st time. c: #f := 1 r: clear screen string for Zenith terminal. c:$c[1]:=chr(27); $c[2]:='E'; setlength($c,2) r: string to home up the cursor but not clear the screen. c:$h[1]:=chr(27); $h[2]:='H'; setlength($h,2) T: L:LMENU R: FILE: LMENU.PLT %:QUIRY( message: strng; goodchars: charset; var c: char ) T:@message@; C:REPEAT keyin(ch) C: c := toupper(ch) C: IF c IN goodchars THEN writeln(ch) ELSE write(chr(7)) C:UNTIL c IN goodchars E: *BEGIN T:@$c@ x: #f=1 TY: WELCOME @$n@ TO USAGE OF A COMPUTER. TY: CY: #f:=0 TN: TN: *AGAIN T:YOU HAVE THESE OPTIONS: T: 0) END TODAYS SESSION. T: 1) BEGINNING USE OF THE COMPUTER. T: 2) MORE ADVANCED USES OF THE COMPUTER. T: U:QUIRY(' YOUR CHOICE?',['0','1','2'],ch) C: ans[1]:=ch; setlength(ans,1) M:0 JY:*END M:1 JY:*LESSON1 M:2 JY:*L BEGIN append(a^.data,patterns[i]); i := i+1 END END; a := root; status := false; WHILE (a<>NIL) AND (status=false) DO BEGIN status := (index(source,a^.data)<>0); a := a^.next END END{match}; SPU TD4MATCHA7Nr@ %!p(rA-p9D 7N7?ۦ`pA@ K8YJ\X3@3?m3n~]IVsn3t~7N7?\s{7M#n ӫnL+u@+68YjML^3A@땺 n ReP 7?\7?ۦ`B 3m\j@@+67M#n ӫetn}L:[`Kt;MW/ݥ&U@ VpA Hmp!Y3J7?GjfV}+٠ޯv^guLsk7Nã"X FA1r*r*f("$)j!rJ:d$"^qrJb!e($*FTyr*g, ")FWjJr"*e`&F|"af&Wbaf)&"#Fi:b*r:DESSON2 J:*AGAIN *LESSON1 L:LESSON1 *LESSON2 L:LESSON2 *END T: THANK YOU FOR COMING @$n@. T: GOODBYE. E: PROCEDURE match( patterns : string255; {these patterns } delim : char; {separated by this delimiter} source : string255; {against this source string} var status : boolean ); {returning this flag } {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ LAST EDITED: 03/03/84 rep RETURNS: 'status' true if any of the patterns appear in the source string. DECLARE: TYPE string0 = string 0; string255 = string 255; CALL AS: match ( 'YES!yes!NO!no', '!', ans,flag ); match ( $s, '!', ans,flag ); Required: function vlength(); from ASL.REL procedure setlength(); Pascal/Z supplied extension. function index(); Pascal/Z supplied extension. ++++++++++++++++++++++++++++++++++++++++++++++++++++++;PROCEDURE match( patterns : string255; {these patterns } ; delim : char; {separated by this delimiter} ; source : string255; {against this source string} ; var status : boolean ); {returning this flag } ;{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;LAST EDITED: 03/03/84 rep ; ;RETURNS: ; 'status' true if any of the patterns appear in the source string. ; ; ;DECLARE: ; TYPE string0 = string 0; ; string255 = string 255; ; ; CALL AS: ; match ( 'YES!yes!NO!no', '!', ans,flag ); ; match ( $s, '!', ans,flag ); ; ; Required: ; function vlength(); from ASL.REL ; procedure setlength(); Pascal/Z supplied extension. ; function index(); Pascal/Z supplied extension. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++} ;TYPE ; nodeptr = ^node; ; node = record ; data : STRING 18; { MATCH MAXIM+++++++++++++++} TYPE nodeptr = ^node; node = record data : STRING 18; { MATCH MAXIMUM OF 18 CHARACTERS PER ARGUMENT } next : nodeptr end; VAR i : integer; a, root: nodeptr; {$C-,F-,R-,S-,M-} { NAME MATCH ENTRY MATCH } { setlength - forces the length of string 's' to length 'n' } PROCEDURE setlength ( VAR s: string0; n: integer ); external; { vlength - returns length of ANY length string. super fast! } FUNCTION vlength ( VAR s: string0 ): integer; external; { index - returns the position of pattern in source else 0 } FUNCTION index ( source,pattern: string255 ): integer; external; { MATCH: } BEGIN root := NIL; append(patterns,delim); i := 0; WHILE ivlength(patterns)) OR (patterns[i]=delim)) DO UM OF 18 CHARACTERS PER ARGUMENT } ; next : nodeptr ; end; ;VAR ; i : integer; ; a, ; root: nodeptr; ;{$C-,F-,R-,S-,M-} C SET 0 F SET 0 R SET 0 S SET 0 M SET 0 NAME MATCH ENTRY MATCH ;{ vlength - returns length of ANY length string. super fast! } ;FUNCTION vlength ( VAR s: string0 ): integer; external; EXT VLENGTH ; ;{ setlength - forces the length of string 's' to length 'n' } ;PROCEDURE setlength ( VAR s: string0; n: integer ); external; EXTD L171,SETLENGT ; ;{ index - returns the position of pattern in source else 0 } ;FUNCTION index ( source,pattern: string255 ): integer; external; EXTD L173,INDEX MATCH: ENTR D,2,6 ; root := NIL; MOV -4(IX),A MOV -5(IX),A ; append(patterns,delim); PUSH IX POP H LXI B,522 DADD B PUSH H LXI H,255 PUSH H MOV H,A LXI B,266 PUSH IX DADX B MOV L,0(IX) POP IX INR H PUSH H LXI H,2 PUSH H CALL L137 ; i := 0; MOV 0(IX),A MOV -1(IX),V H,A MOV L,A DSB1 D,0 JRZ L349 INR A L349 MOV L,A XRA A MOV H,A XCHG MOV H,9(IX) MOV L,8(IX) MOV M,E ; a := a^.next ; END LXI H,-2 ILOD H,2,-19 MOV -2(IX),H MOV -3(IX),L ;END{match}; JMP L329 L328 EXIT D,515,6 *+*+w!8* w##w!~(F# ~ (~ #N#ͦ5 ͦ5û^#V!&!!!!!$!2 !$!!5Æ*Illegal pointer dereferencString too lonCall by reference precision erroIndex or value out of rangAttempted divide by zerMultiply overfloStack overfloFloating point overflow/underflo -- statement INIT TERM PRGM PROC UNK PROGSYM REMSYM TYPSYM MTCHSYM JMPSYM EXITSYM PROCSYM TERMSYM COMPUTESUSESYM BOOLSYM ASKSYM LABELSYMLINKSYM WAITSYM NULL 1!Q!9 QU͎+ :RORRE!!9!5!Q!9 Q`͎+eunitnoc otA ; WHILE ivlength(patterns)) OR (patterns[i]=delim)) DO L254 MOV L,-1(IX) MOV H,0(IX) PUSH H PUSH IX POP H LXI B,522 DADD B PUSH H CALL VLENGTH POP H GRET D,0 JC L259 MOV L,-1(IX) MOV H,0(IX) XCHG LXI H,522 ADDR IX  gnihtyna epyT!!9!uͽ+N#͎+6!YÚ21gn!8W^{ zgn!8W^! ѯR! gn!_!7(#7ʆ*.7! Ú21! ͌8W_R¯f n W8nf#tuf n F+n`nff nP>PiQnf ^Vr+snf w+wnf w+wvf n F+n`!9f n Qnf#9QPP1)nf f n'u!9f n Qnf#9QPP()Nnf f n'uLEBAL ETACILPUD!_>PiGV3+ ! Ú21! ͌8W_R›wwSf n F+n`!9f n Qnf#9QPP1)nf f n|rsR!9f n Qnf#9QPP()Fnf f n|rsR! ͌8tu! Ú21f n͎"+++f n|rsnfW_R¸+++f n'+++f n|rsgo͎8tu! Ú21NFݾ >nf>f n#7҈>nf#>tu>nf>f nRW^f ns! }8}@|…>ݾ8 MOV D,A MOV E,M MOV H,A LXI B,266 PUSH IX DADX B MOV L,0(IX) POP IX DSB1 D,0 ; BEGIN JZ L253 ; append(a^.data,patterns[i]); MOV H,-2(IX) MOV L,-3(IX) PUSH H LXI H,18 PUSH H MOV L,-1(IX) MOV H,0(IX) XCHG LXI H,522 ADDR IX MOV D,A MOV E,M INR D PUSH D LXI H,2 PUSH H CALL L137 ; i := i+1 MOV L,-1(IX) MOV H,0(IX) ; END INX H MOV 0(IX),H MOV -1(IX),L ; END; JMP L254 L253 L256 EQU L253 L257 EQU L256 L259 EQU L257 JMP L200 L199 ; a := root; MOV L,-5(IX) MOV H,-4(IX) MOV -2(IX),H MOV -3(IX),L ; status := false; MOV H,9(IX) MOV L,8(IX) MOV M,A ; WHILE (a<>NIL) AND (status=false) DO L329 MOV L,-3(IX) MOV H,-2(IX) MOV D,A MOV E,A DSB1 D,0 JZ L328 LXI H,9 ILOD H,1,0 MOV A,L CMPI D,0 MOV A,H ; BEGIN JNZ L328 ; status := (index(source,a^.data)<>0); PUSH IX POP H LXI B,265 DADD B SPSH S,255 MOV H,-2(IX) MOV L,-3(IX) SPSH S,255 CALL L173 MOuÐf n6@! Ú21! ͌8f n r+s! ͌8W_Rf n F+n` V+^f n r+s! ͌8W_Rf nw+w!Ú21! ͌8W_Rn f f n r+s3f nF+n` ^ V r+sn f f nr+s!Ú21 gogo!ETIRW!!9!gͽ+f n#goR gogo!;NL!!9!͎+U f n#f nRW^{;z f nf n#!_!A  gogo!NL!!9!" ͽ+f n#goR~  gogo!!!;e3 ͎+U wwwwwwwnff n#7k +++T8fn w+wfngo(++gn}@| ++gn}@|N fn!Pgn$!e(gn}'|2 fn!P!'!e(gnfn s++ nf  Ó  go(wݾڄ +++  ͖nfW_RB !8}  !P!9fn Q!Qe(B A  !P!'!e( !P!9fn Q!Qe( !P!'!e(nfW_R^ nfW_R PiGV3+ g$.detcepxe elbairav gnirtS!>PiGV3+ g tnemetats ksa demrof ylreporpmI!P>PiGV3+ é gogo! ;)sna(NLDAER ! !9! ͎+! Ú21gne3g_#{R6sT6sM6sJ6sE6s%6sC6sU,6 sX96 sAF6 sLS6 sW`6s*m6 s6! Ú21>go(3! 8}:|¾!T!9f n !! 8e3gͰf ns! }8}|! }8} |f n !!_!3! 8e3g_#sgn!Yͮ)Nͮ))gn}Yz>!P neht galf fi !9!T!e(÷N¶(| Ҕ w63Û w6D #nf7  gogo!!!(e3 ͎+  gogo!!!(e3 ͽ+ gogo!!Q!9U Q;)!!9!6 c͎+! Ú21gn} (( ( (… 3gn}  gogo!;ezilaitini NIGEB!!9! ͎+ê1  gogo!!!{e3!Q!9 Q!!}e3g͎+êE  Iêgn}@|   >iGV3+!!K  gogo!(hctam!!9! !Q!9U Q;)galf,sna,'!',!!9! z͎+ #!77N gogo!(hctam!!9!(͎+Ç gogo!(hctam!!9!dͽ+ gogo!!!'e3!Q!9 Q;)galf,sna,'!','!!9!v͎+ê( gn}*|<lebal demrof ylreporpmI!#>PiGV3+  Yrsgn}¬ gogo! OTOG!!9>!P neht galf ton fi!9!!e(f n !!_!3! }8} | f n !f n >iGV3+!:!9͟(_!! Ú21wwwww gogo! MARGORP!!9!@!Q!9 Q!!;e3n͎+ gogo!} RDH.P/TOLIPi${!!9!͎+ :gnitalsnarT ! !9! !Q!9 Qf͎+6ww) \+) W_go! P͟# #goRg  ygn}|ʦgn}ºgn}|¢6÷gn}|ʷ6G3[ <gn}|66<gn}|66G3[ <;gn}|;.won erudecorp od t'naC!%>PiGV3+ #go70PiGV3+ 3[  gogo!.DNE:0!!9!͎+h4!dilavni si margorp lacsaP ,margorp TOLIP ni srorrE3!3!9!37͎+!Ú2]1go,+Ҳ!n!nf!!;e3͎+  gogo!!nf!!:e3͎+ê, gogo!;0 OTOG!!9!͎+ês gogo! ERUDECORP ! !9!H !Q!9 Q!!;e3p͎+ gogo!!,11,01,9,8,7,6,5,4,3,2,1,0 LEBAL ! !9! ,ͽ+ gogo!;02,91,81,71,61,51,41,31,21!!9!'͎+ gogo!NIGEB!!9!N͎+êµ gogo!;DNE:0!!9!͎+ê ( gogo!!Q!9 Q!!;e3b͎+ê  #!7X.KNIL ROF EMAN MARGORP DILAVNI!?>PiGV3+  !PMOC.!9!f!e( gogo! '(NITXTF!!9!!Q!9 Q ;NIAHC;)' ! !9! v͎+ês gogo!(TIAW!!9!!Q!9 Q;)hc,!!9!No͎+ê   ?elif tahw etalsnarT!!9!ͽ+++P͟#++P>Pi Q !PTLP.!9!!e( ~_+#9P{OG!OB96 ) P+*) \+!!e3 ELIF ,DETANIMRET MARGORP!!9![!Q!9] Qwͽ+ .DNUOF TON !>iGV3+# MORF GNIDAER ! !9! !Q!9] Qf͎+++P>Pi Q !PSAP.!9!?!e( ~_+#9P{OG!OB96  P0 OT GNITIRW ! !9! !Q!9] Qf͎+++>iGV3+!:!9͟(s++>iGV3+!.!9͟(sgn}|5++#s=gn+ugn>|Sgn#uW6 ++>iGV3+gngnW^R#K gne3g_#s P>Pi Q!Ú2!9!8!98Rڂ48/62/20 ,5.2 noisrev P/TOLIP!!9!!͎+né*1f n #rsnf ^V7E nfW_Rxf n go!9 !e(E nfG!D# (- + #:0%08!''c8:000⯸x/Gy/Oɯ e!J(5[5 !T]jjZj_ZfnV^\+X$###5++Fwx+0w+z  z %!7(ÏType error on inpuError in input, try again !9N#F ~(!V+^++~+ AN+둾iyFwyHB+O#!9!O~82G>+ (<+(~<#_1!~w!M21f n Nq! M2Q) 2-Q)()$Q) Q) Q)8 Q)07ɯ!9Y#X#~(6( 8FG+8  8 > >># }((!"9(7>7w+! 9͎10 ###ͩ3 w##w#͸1+++~### 8[785O8 ( (++q+++++++ˎ#q#x*#fn##|###ĩ3#fn##|###ĩ3 -- Module!*5|og + +|g!S5 +d + + +!a5/ R0.7 *~+7^#~ 77~ F777~7N77gi#9A[5 Nͦ5+  #7E nf ^VR·++go(++f n >iGV3+nf nf^V R#K f n nf +(f n go!9 !e(f n go!9 !e(! Ú21  #s  f  ngo(nf ^ V +W^70tnf W_70gn f W_70Z6nf W^70@  f  ngon f W^+! 8W^!e(4 N6gnW^708  f  ngogn! 8W^!e(4 !Ú21f n #rsn f 78n f ^V78nf 70È"n f R!nf ^V70f n go(È"n f ^V +^V702n f ^V +^VRtunf ^VRt un f ^V ^V70|.f(zȯF+,c-̹,s,"- Nng)))V^G~ (#X(y(8 PG =.BN=.#F~++( 8 G =.F+N=.+++ݾ~-8 (8 Gy =.OAO=.TRUEFALSEF~+++N Ő( 8G =.( +N=.y(G++V^!9 z(6-+goGRw+O'--d- -E.G #~-   60 +A~8 ( W =. N=.++++!9ѯɯR0 >0w+ G fnN++I.| z ô+  .7+++~(.7###v###m.Ͱ7Yá73>+++###Ͱ7`i##ˆ#z7V {f("z((/.(###=(>GÐ0/F0R00(5~<0$^#Vr+sR0$ N#fiR(+R(><f B###'44+++/F0R0z(&/.¨.##N++(6F0R0gnuÕ#gnu! M2m$ɹ ( կNX$T]F('###58C(?58:(6+++ (ˆ#w+> ###58(G+++ˆ ˎ#Np+y ++Nwy+!^$ÏRead beyond EO!PY9G!ݾ Lfn( ~^(Vfnů|.ˆ^ ѯݾ'~(!z(& ,F[%L'%̾%& r+sFfn\+X$|(,+0n({( #\+8,+8# > w+6 +#T(*t(&F(+f(' (鯼1(!J(5[5 ͇5[%ͨ%ͨ%fnpG#Ee ,\+OG \+8x,+8s(c8%# (] (Y (U (Q (M#(1_(-$(){8 [8:8ç&a8A8 0ڧ&Wҧ&zW>( (#3 #%%fn~!9 G_~((GW>__{(+#ܯ>(#> + ٯgk9~fnw !!9G ᯼1(!J(5[5 %1(OfnF+\+X$|(,+0#w\+8G,+8B# (; (7(3 x8w+᯼i!5 .7!J(5[5,+0͇5&G #qF ̓'(1(!J(5fnqG̓'fnp+q(^.0^0(4~(^W##~#w+0##N++6$^#Vr+sGR0z## Ư++OW_ˆ++`i(  S_xDM!=()8 )0 0)+} E˸$}($0##0""JS\$s#r#q!#6!*!!4 #4 #4!!+F&( 6##Nq+'6p 5 6w+( ##++á7˞á7͎10 ###ͩ3 w##w#͸18i+++v ~ ,1###͓7:7+++͎֯10 ###ͩ3+++go͎10 | }!Z1ÏToo many open output file!z1ÏBad output file nam#}( ##|#(}#7[50!9G ANͦ5+ ͦ5ͤ2[5 r+{PY_>0D*>_~:(GAG*>_~ > :(*5*+~͙3x8I!M557á7L(C ͙3O ͙3N  ͙3S ͙3T  ͙3á7w  the PILOT langugae. The experienced Pascal programmer may add additional variables, functions, real numbers, and procedures by modifying the file "PILOT.HDR". The program has been modified to conform, as much as possible, to standard PILOT syntax since its original publication in the July 1980 issue of BYTE. To compile the PILOT/P program SAMPLE1.PLT residing on the diskette in drive B, execute the PILOT/P submit program: A>DO PILOT/P SAMPLE1 B Programs that utilize the program linking statement must be compiled using the CHAIN submit program instead of the PILOT/P submit program. Let us assume that these PILOT/P programs are a complete lesson and that they are all on the diskette in drive unit B. LESSON.PLT, LMENU.PLT, LESSON1.PLT, LESSON2.PLT, and LESSON3.PLT Then the following commands will compile and link all the progrms: A>DO / *DO CHAIN LESSON B *DO CHAIN MENU B *DO CHAIN LESSON1 B *DO CHAIN LESSON2 B *DO CHAIN LESSON3 B * (The order in whi38(.(w#H (#[5a8{0_ Ͱ7+++f###%(6333á7Ͱ7y%44fʱ4###z7"«4!5~< #5~< #5'"«4! 6!'+Fˆ"(w#w#w 44~0#4 #4!!4 #4 #4! 6!!%664!5Ï)~6<(3z7' " ^##wá7!5 !5 !65 !?5ÏDisk erroError in extending filDisk fulDirectory fulBad filename Ͱ7*^#~ 84 á7 ( #64Ͱ7*6O  ͦ5 .7á7Ͱ7*6#~P( 4^qá75 ͦ57á7~O.7#Ͱ7%~#?6fr6##N(6$4~0#4 #4###z74~0#4 #4!4~0#4 #4!6~Ҹ6z7   76<+w_##~á7##ˎ++"!5~< #5~< #5'"Ͱ7 ʡ7>á7Ͱ7á7Ͱ7Yá7Ͱ7z74Ͱ7%6#6z7xá7Ͱ7ch they are done is not important.) When completed all the required programs will be on drive B. Recommended placement of programs on a 2 drive system: DRIVE A DRIVE B ------------ ----------------- PILOT/P.COM PILOT/P programs. PILOT/P.SUB SAMPLE1.PLT -PROGRAMS CAN BE PILOT/P.HDR ON DRIVE A IF ROOM. DO.COM -Supersub renamed. PASCAL.COM MAIN.SRC ASMBL.COM LINK.COM ASL.REL -A Small Library (Pascal/Z User's Group) CHAIN.REL CHAIN.SUB LIB.REL EDITOR.COM -YOUR FAVORITE EDITOR PIP.COM STAT.COM ------------------------------------------------------------------------------ PILOT/P INSTRUCTIONS ------------------------------------------------------------------------------ TYPE (T:) SYNTAX: ------------------------------------------------------------------------------ T [] : T [] : ; ------------------------------------------------------------------------------ DESCRIPTION: Displays a message to the PILOT user. A $^Ͱ7z7|7R?|77R|77R?|7Rb$ɯ7!#9!  r+s!9Rxr+sV+^#!+Rfn|(R bk###ͩ3ww##ɯ(#~+*^W#~!OG F+N ngOG F+N F+n`OG F+N+~=(ۯOG F+N+~ =(rW+sɯRɯR8L2734 AL2759 L2760 L PILOT/P Implementing a High-Level Language in a Hurry by David Mundie Documentation by Raymond E. Penley, Feb 26, 1984 With PILOT/P one has the features of the languages Pascal and PILOT. PILOT/P is a PILOT to Pascal translator. It was originally written for the UCSD Pascal language but has since been rewritten to use the Pascal/Z compiler by Ithaca Intersystems. Pascal/Z has all the standard Pascal constructs plus the ability to chain to another program, thereby increasing the flexibility ofmessage can consist of a literal character string, string variables and numeric variables. All char- acter positions to the right of the colon are reproduced in a literal fashion with the execption that the values of variables are inserted as replacements for their names. String variable names are identified by beginning with "$" and numeric variable names by beginning with "#". Variables may be displayed if their names are enclosed by at-signs "@". The second form of the TYPE statement will print the message and hold the cursor immediately following the last character on the same line. LIMITATIONS: Never print a string variable that has not been defined by a previous assignment. The results are unpredictable and usually disasterous. The length of a TYPE statement is limited to 78 characters, including the 'T' and ':'. EXAMPLE: ------------------------------------------------------------------------------ T: WELCOME TO PILOT. T: PLEASE TELL ME YOUR NAME. A: $N TN: HI THERE @$N@, Ie last response. Any item which matches causes the YN-switch to be set true. Patterns in the list are separated by commas, with leading or trailing blanks considered part of the pattern. A comma which terminates the last item is ignored but can serve to indicate the presence of a trailing blank. A moving window scan of the response with each pattern occurs until either a match is found or the input is exhausted. LIMITATIONS: The match statement does no case translations. The length of the arguments on the command line is limited to 62 characters max. M:<------------------- 62 CHARACTERS MAX ----------------------> M:Washington!Baltimore!California!Tennessee!Mississippi!Maryland EXAMPLE: ------------------------------------------------------------------------------ M:A!B!C Matches A or B or HAT or ALICE or JOB M: A! B! C Matches A or B or ALICE Does not match JOB or HAT. M: A ! B ! C ! Matches only A or B or C M: A! B! C! a! b! c Matches upper and lower case. M:@$ HOPE YOU HAVE A NICE TIME. C: #X := #X + 1 T: YOUR NEW SCORE IS @#X@. T: YOUR NEW SCORE IS @#X:4@. T: This is a very long type statement. And we are going to reach the limit >>| T: These two type statements; T: will print on one line. ------------------------------------------------------------------------------ ACCEPT (A:) SYNTAX: ------------------------------------------------------------------------------ A [] : A [] : # A [] : $ ------------------------------------------------------------------------------ DESCRIPTION: Opens the console device for the PILOT user to enter a response. Line editing follows standard CP/M 2.2 line editing. The line terminates when carriage return is entered. The blank accept statment actually stores the user input in the system variable "ans". The system variable may be used at any time in the program. LIMITATIONS: Numeric variables and stria@ Matches the contents of the string variable $a ------------------------------------------------------------------------------ JUMP (J:) SYNTAX: ------------------------------------------------------------------------------ J [] : ------------------------------------------------------------------------------ DESCRIPTION: Jumps to the specified destination in the current program. The destination must reference an existing label. The label may come before or after the jump statement. LIMITATIONS: A Label statement must be the only statement on a line. The PILOT/P translator does not check to see that you are jumping to a real label, also it does not know if you jump to a label that does not exist anywhere in the program. (A two pass translator would be required to do that.) EXAMPLE: ------------------------------------------------------------------------------ *START J:*MORE ..... ..... *MORE T:ARE YOU READY TO BEGIN? A: M:YES JY:ng variables may be any one of the 26 single letters of the alphabet: a..z. #a,#b,#c, ...,#z. $a,$b,$c, ...,$z. Upper and lower case letters are considered the same variable. The length of a response is limited to 80 characters. A numeric variable response may be +-32767. EXAMPLE: ------------------------------------------------------------------------------ T:WHO ARE YOU? A: ..... T:WHAT IS YOUR NAME? A:$N ..... T:WHAT IS YOUR AGE? A:#X ..... ------------------------------------------------------------------------------ MATCH (M:) SYNTAX ------------------------------------------------------------------------------ M [] : [!...!] M [] : @string variable@ ------------------------------------------------------------------------------ DESCRIPTION: Causes a scan of the last user response, the one received by the last ACCEPT (A:) statement. Patterns in the expression field of the MATCH statement are compared with th*AGAIN JN:*START ..... *AGAIN T:I HAVE A QUESTION FOR YOU. ..... ------------------------------------------------------------------------------ SUBROUTINE (PROCEDURES) (%:) SYNTAX: ------------------------------------------------------------------------------ % : ------------------------------------------------------------------------------ DESCRIPTION: Identifies and delimits subroutines. The statement '%:' is followed by the subroutine name. LIMITATIONS: Procedures must be declared before the main program body. EXAMPLE: ------------------------------------------------------------------------------ %: getchoice(var #c:integer) -- procedure starts R: accepts a number and checks its value C: REPEAT writeln T: What is your choice(1 to 10)?; A: #c X: #c in [1..10] TN: @#c:4@,@chr(7)@ is out of range C: UNTIL flag E: -- procedure ends ------------------------------------------------------------------------------ USE A SUBRth a semi-colon and the assignment operator is the ":=". LIMITATIONS: Numeric variable names are the alpha letters A..Z,a..z. Longer names may not be written unless they are predefined in the file 'PILOT.HDR'. EXAMPLE: ------------------------------------------------------------------------------ C:FOR #i:=1 to 100 DO writeln(#i:5) C: #X := #X + 5 C: #X := (#A+5) DIV 15 C: $s := 'SUNDAY MONDAY TUESDAY WEDENSDAY' ------------------------------------------------------------------------------ REMARK (R:) SYNTAX: ------------------------------------------------------------------------------ R : ------------------------------------------------------------------------------ DESCRIPTION: PILOT/P ignores the REMARK statement and blank lines.. It is a means of storing potentially useful information in the program listing. The REMARK statement may occur at any point in a PILOT/P program. EXAMPLE: ---------------------------------------------------------------------OUTINE (U:) SYNTAX: ------------------------------------------------------------------------------ U []: : ------------------------------------------------------------------------------ DESCRIPTION: Calls the specified procedure in the current program. LIMITATIONS: Only those limitations imposed by your Pascal compiler. Also see the above instructions on subroutines. EXAMPLE: ------------------------------------------------------------------------------ %:INSTRUCTIONS T:THE FOLLOWING INSTRUCTIONS APPLY ..... E: *START T:THIS IS WHERE WE START T:DO YOU NEED INSTRUCTIONS?; A: M:YES UY:INSTRUCTIONS ..... ------------------------------------------------------------------------------ END OF SUBROUTINE OR PROGRAM (E:) SYNTAX: ------------------------------------------------------------------------------ E [] : ------------------------------------------------------------------------------ DESCRIPTION: Indicate--------- R:-------------------------------- R:LESSON TWO: DATE WRITTEN: 1/2/84 R:-------------------------------- ------------------------------------------------------------------------------ PROGRAM LINKING (L:) SYNTAX: ------------------------------------------------------------------------------ L [] : ------------------------------------------------------------------------------ DESCRIPTION: Links to another PILOT/P program. LIMITATIONS: Must follow the rules in the Pascal/Z manual concerning chaining programs. Program name must be from 1 to 8 characters only. EXAMPLE: ------------------------------------------------------------------------------ L:LESSON1 ------------------------------------------------------------------------------ WAIT STATEMENT (W:) SYNTAX: ------------------------------------------------------------------------------ W [] : n W [] : # ------------------------s the end of a subroutine or the end of the current program. EXAMPLE: ------------------------------------------------------------------------------ %:skip(#x:integer) C:for #i:=1 to #x do writeln E: ..... T:If you'd like to do more with the abstract and :concrete, try CLOVE. Bye for now, @$n@. E: ..... *QUIT T: O.K. @$n@ T: Try SAGE again if you like. E: ------------------------------------------------------------------------------ COMPUTE (C:) SYNTAX: ------------------------------------------------------------------------------ C [] : := C [] : ------------------------------------------------------------------------------ DESCRIPTION: Computes a value based on evaluation of the numeric expression and assigns the result to the numeric variable on the left of the assignment operator. You may use any legal Pascal expression. All statements are terminated wi------------------------------------------------------ DESCRIPTION: Pauses the specified number of seconds or until any key is pressed, whichever comes first. The system variable 'ch' contains the key pressed or if no key was pressed within the specified time period the value returned is the null (0) character. EXAMPLE: ------------------------------------------------------------------------------ W:5 X: ch = chr(0) TY:You must select one of the above, try again. JY:*AGAIN M:Q!q ------------------------------------------------------------------------------ BOOLEAN EXPRESSION (X:) SYNTAX: ------------------------------------------------------------------------------ X [] : ------------------------------------------------------------------------------ DESCRIPTION: Any Pascal boolean expression may be used, whether arithmetic or not. EXAMPLE: ----------------------------------------------------------------------------1,a2:string255);external; PROCEDURE str(t:integer;var dest:string0);external; FUNCTION ivalue(buf:string255;posn:integer):integer;external; PROCEDURE halt(message:string255);external; FUNCTION isalpha(c:char):boolean;external; FUNCTION isupper(c:char):boolean;external; FUNCTION islower(c:char):boolean;external; FUNCTION isdigit(c:char):boolean;external; FUNCTION isspace(c:char):boolean;external; FUNCTION toupper(c:char):char;external; FUNCTION tolower(c:char):char;external; PROCEDURE keyin(var c:char);external; FUNCTION keyboard(var c:char):boolean;external; PROCEDURE dwrite(c:char);external; FUNCTION constat:boolean;external; FUNCTION conchar:byte;external; PROCEDURE gotoxy(column,row:integer);external; FUNCTION val(c:char):integer;external; PROCEDURE initialize; BEGIN END; PROGRAM PILOT_P; { PROGRAM NAME: PILOT/P SUMMARY: See the file PILOT/P.DOC for further information. The file PIL-- X: i < length(ans) X: (ans='HOUSE') or (ans='house') X: index(ans,'car')<>0 C: $s := 'SUNDAY MONDAY TUESDAY WEDENSDAY' X: index($s,'DAY')<>0 ------------------------------------------------------------------------------ {$L-,C-,M-,F-,P+ DO COMPILE PILOT B ASL/S ILIB/S Place the program PILOT.PAS ON DRIVE 'B' and these files on drive 'A': DO.COM, COMPILE.SUfrom Pascal/Z Users Group Utility Library disk} PROCEDURE error( message: strng ); VAR ch: char; BEGIN WRITELN( buffer ); WRITELN( 'ERROR: ',message ); WRITE( 'Type anything to continue' ); keyin(ch); WRITELN; badsyntax := true; END{error}; { strip -- strips blanks and tabs from buffer at position 'i' } PROCEDURE strip( i: byte ); BEGIN WHILE (buffer[i]=' ') or (buffer[i]=chr(9)) DO delete(buffer,i,1); END{strip}; PROCEDURE place( VAR tree: lblptr; var key: strng ); BEGIN IF tree = NIL THEN BEGIN NEW(tree); cpos := cpos+1; WITH tree^ DO BEGIN name := key; posn := cpos; left := NIL; right := NIL END{WITH} END ELSE WITH tree^ DO IF key < name THEN place( left,key ) ELSE IF key > name THEN place( right,key ) ELSE error('DUPLICATE LABEL') END{place}; FUNCTION FIND( VAR tree: lblptr; VAR key: strng ): lblptr; BEGIN if tree=nil then find := nil else WITH tree^ DO if key < name thB, PRIMS.PZ, ASL.REL, ILIB.REL, LIB.REL, PASCAL.COM, PAS254, MAIN.SRC, LINK.COM, ASMBL.COM } {-------------- Pascal/Z compiler options -----------------} {$C-}{..........control-c checking OFF } {$R-}{..........range checking OFF } {$S-}{..........stack overflow error checking OFF } {$F-}{..........floating point error checking OFF } {$M-}{..........integer mult & divd error checking OFF } {----------------------------------------------------------} TYPE strng = STRING 80; { the length of a "default" string } byte = 0..255; { single byte integer } string0 = STRING 0; { special string for Pascal/Z } string255 = STRING 255; { maximum length for a string } lblptr = ^labelrec; labelrec = RECORD { The data structure of the label list } name : strng; { THE LABEL'S NAME } posn : integer; { POSITION OF LABEL IN TREE } left, { We use a binary tree for faster access } right : lblptr end; mode =(init, { inen find := find( left,key ) else if key > name then find := find( right,key ) else find := tree END{FIND}; FUNCTION lookup( VAR buffer: strng ): INTEGER; { tries to find the label contained in buffer in the labels tree. if not found then the label is inserted into the tree. returns the position of this label in the tree. } VAR node: lblptr; BEGIN ucase( buffer ); node := find( tree,buffer ); if node=nil then begin place( tree,buffer ); node := find( tree,buffer ); end; lookup := node^.posn; END{lookup}; PROCEDURE T( VAR buffer: strng ); { THIS VERSION WRITTEN BY Raymond E. Penley, Feb 01, 1984 } { LAST EDITED: MAR 4, 1984 rep } { THIS INPUT PRODUCES THIS OUTPUT T:This is a test writeln('This is a test'); T: writeln; T:@$a@ writeln($a); T:@chr(7)@@chr(27)@ writeln(chr(7),chr(27)); T:@temp@ is not correct writeln(temp,' is not correct'); T: your score is @#s@ writeln(' your score is ',#s); T:Your score is @#s:3@ itial stage of production } term, { terminator } prgm, { program mode } proc, { procedure mode } unk); { null mode; no activity } sym =(progsym, remsym, {REMARK } typsym, {TYPE } mtchsym, {MATCH } jmpsym, {JUMP } exitsym, procsym, {PROCEDURE } termsym, computesym, {COMPUTE } usesym, {USE } boolsym, asksym, {ACCEPT } labelsym, linksym, {LINK } waitsym, {WAIT } null ); VAR badsyntax : boolean; { flag any bad systax in prgm } buffer : strng; { data line from input file } cpos : integer; { current label's position } tree : lblptr; { the labels tree } state : mode; { the current state } PrevState : mode; { the previous state } symbol : sym; { the current symbol } PrevSym : sym; { the previous symbol } temp : strng; { temp usage string } used_outbuf: boolean; { flag if using outbuf } fout, { Output file } fin : TEXT; { Input file } {$iPRIMS.PZ }{Utilities points writeln('Your score is ',#s:3,' points'); } LABEL 9; CONST delim = '@'; apos = ''''; TYPE link = ^object; object = record { the data structure of the parse list } TXT : STRNG; TYP : BOOLEAN; next: link end; VAR empty, { flag for empty queue } switch : BOOLEAN; { toggle switch for string vs variable } c : CHAR; argv : link; { one component of the queue } front, { front of the queue } rear : link; { rear component of queue } I : INTEGER; width : INTEGER; { getc - returns one character from the input buffer } PROCEDURE getc( var c: char ); BEGIN IF I55 then writeln( fout,'match(' ) else write ( fout,'mat} PROCEDURE retrieve( var first,front,rear: link ); BEGIN first := front; if front<>NIL then begin front := front^.next; if front=NIL then rear := NIL; end; END{retrieve}; { enqueue - places a new component at the rear of the queue. 'Arrival' is a pointer to the new component provided by the caller of the program. Special action is taken when the queue becomes empty. } PROCEDURE enqueue( arrival: link; var front,rear: link ); BEGIN if front=NIL then front := arrival else rear^.next := arrival; rear := arrival; END{enqueue}; BEGIN{PROCEDURE T} WRITE( fout,'WRITE' ); IF vlength(buffer)=0 THEN BEGIN WRITELN( fout,'LN;' ); GOTO 9; END; IF buffer[vlength(buffer)]=';' THEN delete( buffer,vlength(buffer),1 ) ELSE write ( fout,'LN' ); IF vlength(buffer)=0 THEN BEGIN WRITELN( fout,';' ); GOTO 9; END; front := NIL; { initialize queue pointers } rear := NIL; I := 0; SWITCH :ch(' ); WRITELN( fout,'''', buffer, ''',''!'',ans,flag);' ); END; jmpsym,labelsym: { Jump, label symbols } { *START