FORMAT (? PASCAL54COMt PAS254  PAS254 !"#$%&'()*+,-./0PAS254 R123456789:;PASCAL COMt<=>?@ABCDEFGHIJPRIMES PASKLPAS2 MNOPQRSTUVWXYZ[\PAS2 ]^_`abcdefghijklPAS2 RmnopqrstuvwPRIMES LSTxyzPRIMES SRC({|}~PRIMES COM"PRIMES REL UCTRANS COM UCTRANS SRCZINFO NEW**+jCopyright 1980 by JEFF MOSKOWK!\478\!(%![Unable to chai*+w!:* w##w!( F##N6 6%^#V! !!!7â0Attempted divide by zerToo many errorProgram too compleFloating point overflow/underflo -- statement A B C D E H L M IX IY S MOV MVI LXI PUSH POP CALL JMP JR INX DCX JC JRC JNC JRNC INR E !D!9!!gn&[1 gogo![1 gogo![16 gogo!!nf !!9!͉16gn+W^I8 gogo!gn! :!W^S3 ͉14· gogo![1gn#u!Ù4 RORRE ^ :s46EGͲgn#ugn}|]gn#unf W_R{gn+u gogo!nf+!!!9!/gn&!9!,͉1nf W_R gogo!!!9!9M ͈8+ nf+tu/ 6@ݾڂ nf/! :#9!9M ͑8҂ nf#tunfG]8Ҝ Grsnf! 9gnu! Ù4s4gn}| gn++&3 Grs!e2 gn}|c gn+jj! :V+^rsnf/! :W^{zI nf#tu nfG]8c Grsͥrsnf#V+^S8Ҿ nf/! :nf+/! :5F# 5 v T  gnugnuwww6nftunMAIN SRCECOMPILE SUB DCR DADY DADX RRCR JV LDIR LDDR STC JRNZ STMT MIDL DSUB MEMB NEQL SPHL ILOD LESS DADD CMP XCHG GRET ADDR XTHL XTIX GE LE CSET ENTR EXIT EQUL MULT DIVD MMOD ISTR NEGT INCL SBST DIFF INTR UNIN RCHK JNZ MTCH NOMT ADD CTRL XRA LPOP FDVD CVTF XCFP DW SPSH egaPs46gn>:|kgn#u gogo!! !e3!!9!%!nf [1! Ù4s4nftunf#tu!Ù4s4gnjj! :V+^rs!Ù4s4gnjj##! :V+^rs!Ù4s4Grsgnjj! :Gr+s!Ù4s4n f +jj! :V+^rsn f jj! :V+^rsnftuww6ݾ3 nf^VS83 nf^VR# 9ڻ^Vtunf/! :nf W^{znf #9!9M ͑8nf#tu/ nf #9f/! : ! Ù4s4unf ]8H !2q gnjj##! :unf r+s! Ù4s4n f ! :nf J/͚9ڻsn f #! :nf J/ 9ڻnf W_h80NFݾ gne3Ͷ >NFݾ su>NFݾ su! :>NFݾ W^surs rs>NFݾ gn/! : !Ù4s4!# >NFݾ gn#! :W^s>NFݾ gn##gn w >NFݾ gn####gn w ! Ù4s46 FEDNU*!9!W  !# 6 REGETNI!9!~  !# gn! :6 RAHC!9!  !# gn! :6gn#! :6 NAELOOB!9!  !# gn! :6gn#! :6 LAER!9!* !# gn! :6 TXET!9!Z !# gn! :6gn#!w 6 ESLAF!9! gn/! :w+wgn/! :w+6 EURT!9! gn! :W^r+s CCUS!9! !3  DERP!9!7 !3  NLOE!9!^ !3 gnu FOE!9! gn/! :W^r+s6 TESER!9! !# gn#! :6gnu ETIRWER!9! gn/! :W^r+s NITXTF!9!0 !# gn#! :6 NIAHC!9!a !# gn#! :w WEN!9! !# gn#! :6 KRAM!9! !# gn#! :6gnu ESAEL NIS!9! gn/! :W^r+s6 DNEPPA!9!: !# gn#! :6!Ù4 TES  s4gnW^ROw6w .1 W_go! Qo- 1'gn>P|!26P W_go!gn! :k-gn#u .1R W_go!k-gn! :6 hͲ gogo!!!;e3 ͉16 gn+W^I8 gogo!gn! :!W^S3 ͉14¨ gogo!W^u!9  gn /!U :#9  ͑8Ngn+uÛ!9  gn /!U :#9  ͈8ғgn#uÛ66ݾڪwww6gn}|}ôgn}|gn! :W^! :W^{z6}gn}|}ͦ{Ez?6}gn}|+gn}|.}gn}|?}.gn}{|T6rgn}|o!2rgn}‡6 gn}$|Žͦsͦ{+z `|gn}{|gnu!Ù4s46!PW^I8"gn! :W^s͗7(ͨ7ʢ0ͳ74!}  w6gn}|M<gnugnugn!êͦs}gn}|fgn}|f6gn!:W^! :W^sgn#ugn! :W^gnRgn} |‰66&wݾڞgnW^S8ҞgnW^R# 9ڻ|'gn /gn!0Ruu gogo!!gne3!!9!ogn! [1gn}}|ʃgn}|ʛgn}|ʪgn}}|ʪÎgn}}|»gn}|Žgn}66gn})gn}|"}&6 .}gn}|=6 gn} |gn}c6us6 ugn}6â 6 âgn}|º6 xKBfBnR gogo!!gne3!gne3! !9!n [1! Ù4s4gn#]8}!2gn#jj! :Gr+sgn#jj##! :ur+sgn#u!Ù4s46!W^I8 gn+W^!E :W^! :W^s4gn####!E :! sgnD uC 6 gn} |] C 6:! Ù4s4gD nugn}š"6!W^I8ҽ gn##!E :W^!U :W^s4 : 6 6gn!E :W^{ z gn#u MYS.!9! gne3!96  Q0 go! k-w6 nfV+^I8Ұ! go!nf/! :k-4# 4!g!PYT.!9!!gne3!96  Q0w6 nf#V+^I8I" go!nf! :k-4# 4J""]nf t unf t uu͘rs%go1" -- elif tupnI!!9!"͉1 Qo-6gn! :W^{ z#gn#a/YO!a/!ͥ/<%:TSL!9!% ͫ3y%TSL.!9!>%gne3!96  ͫ3CRS.!9!{%gne3!96  ͫ3MYS.!9!%gne3! Ù4!9!:!9:Rڶ 1-2.3 rev lacsaP smetsySretnI!!9!%"[1gou+++!W^I8_&gn! :64A&6A+++!ZW^I8Ҏ&gn! :64p&6a+++!zW^I8ҽ&gn! :64Ÿ&66m 660+++!9W^I8'gn! :64&   ELIF !)   ROF !1)   DRAWROF !N)   NOITCNUF !k)   OTOG !)   FI !)   NI !)   LEBAL !)   DOM !)   LIN !*   TON !6*   FO !S*   RO !p*}   DEKCAP !*t   ERUDECORP !*k   MARGORP !*b   DROCER !*Y   TAEP 6<Ͳ6!!9M !nf͉1G3x3x2SAP!9!M-;1,î0*.ɹ (<*.18͎-|.1Ԏ-| ͧ6-.ʢ0-6ͧ6ʢ0 > կN.T]F('###78C(?78:(6+++ (ˆ#w+> ###78(G+++ˆ ˎ#Np+y ++Nwy+!.premature EO!PY9G!ݾ Afn( ~^(Vfnůk-^ ѯݾ/z(& ,F//.// r+sFfn.1.|(10n({(͎-.1818 ͎-w+7 *~+y8^#~ y8}8F}8v8}8Nv8}8gi#9Aͧ6 N6+ 6#ͬ1F ͷ1###go2 l3 l3#ͬ1F ͷ1ˆ###E3go2!9 PY FfnV go44| }~^(Vfn>[1f(zȯF+̒2̒2g212̒2 Nng)))V^G~ (#X(Nl3#F~++( 8 G l3F+Nl3+V^!9 z(6-+goGRw+O',3,3d,3 ,3E43G #~-   60 +Au"6!W^I8C#gn!E :W^gn+++! :W^s4#6gn#ugn!E :W^sgn! :W^{zI#gn! :W^{zI#gn#!E :W^s6 6 6 gn! :W^{z0$gnugn##!E :W^sgn! :W^{z0$gnugn###!E :W^sgn! :W^{z0$gnugn####!E :W^sgn! :W^{z    NEHT !X+5   OT !u+,   EPYT !+#   LITNU !+   RAV !+   ELIHW !+   HTIW !,  wwgouw6dww6wwwwww66-www6w w 6 w 6 w 6I 666w3c gn} |,3c 3x6,3T L6 +ɯfnV^.1.###7++Fwx+0w+z  z ó.!J/|goR˹T]/ (9;;;Ry(G#A~#0w+~wͭ9~w+99Ny+999BG>(33(7>ͭ9+9(  SxDM!=)#0 |z(z/W{/_|(|/g}/o#  -# z"BKgo(0|x( j-0ygoR40 ###5 6###948787O8 ( (++q+++++++ˎ#q#x0ͧ60#fn##|###5!$70d0 00!27/ R0~8 ( W l3 Nl3++++!9ѯɯR0 >0w+ G fnN++x3| z Á1  ͳ7+++~(ͳ7###v###ʜ358Y&85>+++######948U+++v ~ 3###8Ϳ7+++ˎ˞˦40 ###5+++go40 | }! 4!4#}( ##|#(}#7ͧ60!9G AN6+ 64ͧ6 r+{PY_>_~:(DAG*>_~ > :(*5*+~Ͷ5x8I!677&8L(C Ͷ5O Ͷ5N  Ͷ5S Ͷ5T  Ͷ5&8w Ͷ58(.(w#H (#ͧ6a8{0_ 58+++f###%(6555&858y%4J6f 6)~6<(37' " ^##w&8!o6 !y6 !6 !6Disk erroError in extending filDisk fulDirectory ful58*^#~ 84 &8#658*6O  6 ͳ7&858*6#~P( 4^q9 ~ݾ++8 |z(z/W{/_|(|/g}/o# ((!= N9goRW_= DM(go*7ɯt <) >5D^#V! !!!gAttempted divide by zerToo many errorProgram too compleFloating point overflow/underflo -- statement A B C D E H L M IX IY S PUSH LXI MVI MOV POP CALL STMT MIDL DSUB MEMB NEQL SPHL ILOD LESS DADDPʣ6gn>:|һgn#u gogo!! !e3!!9E !D!9!!gn&Ͳ gogo!Ͳ gogo!Ͳ6 gogo!!nf !!9!6gn+W^͠K gogo!gn!͏!W^S3 4 gogo!Ͳgn#u! RORRE ^ :ʣ6Eڗgn#ugn}|­͵ gn#unf W_Rgn+uw6+gnW^͠(gn!͏W^{ zgn#go!!gne3!gne3! !9!Y Ͳ! TES  ʣgnW^R( w6w ͅҪ  W_go! Q3 Y gn>P| !͂6P W_go!gn!͏/gn#uê  ͅ+  W_go!/gn!͏6 A   gogo!!!;e3 6 gn+W^͠  gogo!gn!͏!W^S3 4  gogo!Ͳnf#tunf ڻW_&85 67&8~Oͳ7#58%~#?ˆ7f87~~77   76<+w_##~&858 &8>&858&858Y&8587T658%6#67x&858$^587|q8R?|r87R|q87R?|r8Rb$ɯ7͚8͚8?88?88?!9 ~# 87 !9 ~ݾ++8  ##! CMP XCHG GRET ADDR XTHL XTIX GE LE CSET ENTR EXIT EQUL MULT DIVD MMOD ISTR NEGT INCL SBST DIFF INTR UNIN RCHK SPSH MTCH NOMT ADD CTRL XRA LPOP FDVD CVTF XCFP JMP JR INX DCX JC JRC JNC JRNC INR DCR DADY DADX RRCR JV LDIR LDDR STC JNZ JRNZ JZ JRZ DW DSB1 CMPI ENTRY EXT FINI GLBP SVLN GTLN egau!gnڻRW^u4 gogo!nf+!!!9!gn&!9!|nf W_R gogo!!!9!u!nf Ͳ! DETCEPXE ʣgnW^R͵ Sgo͂ gogo!gn ͢!U͏! #9 ! !9! "Ͳ! DETCEPXE ʣgnW^R͵ B go͂gn}©gn}|ž͵ 6:6=º6I6D6.6.6 6 gn#ugn!͏W^gnR goR !gne36-w6 8 gn!͏W^sgn#ugn!͏W^s!ʣgn!͏W^sgn#uX !ʣgnugn>`|ү gn}{|ү gnu!ʣ6!PW^͠ gn!͏W^s( 4 !V   w6gn}|& X  gnugnugn!ê sV gn}|? gn}|? 6gn!͇W^!͏W^sgn#ugn!͏W^gnRʦ gn} |b 66&wݾt gnW^ͪt gnW^R#wW^u!9  gn ͢!U͏#9  $ gn+uq !9  gn ͢!U͏#9  ߧi gn#uq 66ñ ݾڀ www6gn}|› V Ê gn}| gn!͏W^!͏W^{z 6V gn}| V  {Ez6V gn}|gn}|V gn}|V gn}{|*6Hgn}|EX !͂ý HX gn}]X 6 ê¨X gn}$|dX  sX  {+z |Ұwgn!ênf#rrsnf#rrsnfr!R(nf#rsnf###rsnfrsnfr!Rsnf#rsnf###rsnfrsn f ###r s nf ###r snf^VRnf^VRnfnfxn f nf xn f /nf /R ! ʣn f nf x)!͂! ʣnf !xO!͂! ʣn f nf x &3 s &3 sgn}|«gn}|gn}|gn}|!͂! ʣgnugnu!ʣ gogo!!! e3!gne3!!! e3! ʣ gogo!!! e3!gne3!Ͳ! ʣgn e3 gogo!!gne3!4 Ͳ! ʣ3 gogo!!gn e3!4!!,e3!gne3!4Ͳ! ʣgn e3 gogo!!gn e3!4!!,e3!nf Ͳ! ʣw! ]՝ʹ!!! ]$!gn ͈ gn }|!!;͈ !!:͈ 6go! o! ,)ʣgn ugn W^ʹ"gn ugne3 &3~!03C G)6f n 6f n wA/ݾA/gn}|-ݾA/f n 6gn͎(sݾ:.!)nf}/o|/g#a)! ͈  3C 3C 6gn}|-nfgo%(.nf^VR#f n r+sf n3*!nf$!>3C G)A/(gnͣ*0/!͈ w! ʣwnf r{ ( (/gn}}/6'/Š/6(/ —/6 / ¤/6!/±/6$/¾/6"//6#/60gn}/6 0/6006 0 060 060(060!nf xK0!nf xһ0gn}]06ø0j06ø0w06ø0„06-ø0gn}—06÷0¤06÷0±06 ÷060gn}|06 06ݾ0!͂! ʣfn 1ݾ N^Vfn r+s3C3!N^VRfn r+s3z3nfW_Rw3!N^Vwfn r+s3wr66gn}|¦3  !?}|3gn}|3fn gn}|T6gn}|4nf}/o|/g#tunftu6gn}4wnf!R446t4!RD46t4!RT46t4!Rd46t4!Rt46t4gn}|46{z—4ͳ(3C 6++gnW^͠Ҿ4!͈ 4¦4T6.5nf՝Ϳ+563nfW_ʹ4626+nf՝W^͠%5gne3S3͈ 456T6nfW_͠S6nfͪS6ݾS6gn}|S6!NRS6!?}|5!!LxS6gn}F( ¼56 !Gnf$!F65nfR56 !Gnf#$!F666!nf$!͈ F6E6nfW_RE66!nf+$!͈ ݾS6 ݾr6fn 6fn 6ݾi76fn ҿ6ݾ ҿ6ҩ6gn&͈ wͳ(ÿ6gn}|¿66!͈ fn 6!Na)wݾ 6nfa)6gn}( (F'R29gn}|$9!gn$!+9! !3͈ gn}|L9!gn$!S9! :gnͣ*03͗!͢!͏͵ gn}|>3c͵ $>3c͹}gn}|;>!2͂nf^Vr+snf++^Vr+sݾm>nf 6 ݾ>nf 63cgn}|=w!ʣ͵ ͒?wT  gn&3?nf͢!͏W^{z>!e͂>6{(A6;AA;Anf:Agn}| NFݾ R3͗r+s͵ gn}|dF3c+++ͩInfr!RF!l͂gn>NFݾ 747gn}| !ʣgn}|@W=gn}|$@=gn}"|2@͛>͑PrsUgn}|¡@!gne3! !e3! !e3!!9E !nf6-nf p%!gnnf0*nftuw3< 3͆! ʣwnfrw6+͸V+^͠pC !go!nf͢!͏! #94# 4qCC6gn!E͏W^{.zʕCgn#uvCPYT.!9!Cgne3A!96  w6+V+^͠-D !go!nfr! e3 4# 4.DC!!9!!9RڶEUw6 ͸V+^͠Enf͢!͏ n f W^{(E n f++V+^r!ʹE n fI3V+^͌&u>NFݾ  ! ]W^͠ҷG>NFݾ gn)!>NFݾ RV+^!̈́!͏nf++^Vr+snf^V r+snf ^Vt u4)Ggn}|AFgn}|[I͵ ͒G͵ gn}|¡H! ]#! o! ])!>NFݾ R3͗r+s͵ ! ])!>NFݾ RV+^!̈́!͏nf++^Vr+snf^V r+snf nf/t u͵ äHnftu3gn}|H͵ gn}|PIgn}|PIgn}|PIgn} |PIgn}|H͵ +++(=nfnfgn}|H3c3cf n f 3nf 9F3cgn}|ʷHnf >NFݾ ^VʹңInf >NFݾ tu! ʣwwgn}(Ngn}|I͵ gn}J͵  3c Ef nr+s!͏6nfrs!rgn}|J͵ rsnf###!r Enf#nfnf!͏6  *J 3c3 ͩInf###nfNK͵ www &3go9F 3f n#ugn+ugn}|-Mgn++&3Mgn}|`M3͗!̈́!͏r+sww͵ úMnf̈́!͏nf W^{z®Mnf++V+^rsnf++r+s͵ ùM ͩIM ͩI6gn}|M! ͂N!͏W^sf nr+snf!rÛOHO!͏6 f nr+sgopNnfiNH3nf͌&e&p%!r͵ ͒O3͗!̈́!͏N gogo!!!9!3F!!9M !!"e3"ͲnfW^r+s}|Pgn}|Q3c͵ &Q3c ͩInftunf̈́!͏nf W^{zQnfV+^!RQnfҨQnf^Vr+snf^VtuQnf^Vr+snf^Vtunf++^Vr+snf#tunf͸͠=Q3cgn}|Pnftunf̈́!͏nf W^{znRnf++V+^nRnfnfV+^nfr+snf#tunf͸͠Rnf^Vtu!L RTXE L DTXE ʣw6wgn}|T͵ 6 gn}$| NFݾ ݾj>NFݾ gn}|j!>NFݾ gn$!j! !͈ ! 2͈ >NFݾ w!ʣ6nftunftunf#rs6wwgn}|{G)gn!zê6gn}|0mG)gn+u͵  ͹}nftu &3 snfW_Rjw G3*gn}|k$3fnfm!n͂nfa)gn͈ Ìj!gnR$!wzwwgn}|urw͵ G) ͹}ݾ҇mݾ҇mݾڇm!͂ݾڙmݾҠmݾڠm͈ G)nftu &3 snfW_Rmw6 gn}n6 G3*G)nftunf#rsnf/!wunf/!ڻu!nfxin!a)nftuongoa)3C !͈ G)gn}|n͵  ͹} ,ݾڴnnfa)!nfngoa)͈ 6wG)gn}|n!y͂pn6p gn} |`e&rswgn}|l`gn#ugn}|{_w13nf͌&nfp%e&rs03nf͌&nfp%e&rsgn} |¢_͵ gn}|ʟ_!͂6i` (=nfnfnfW_͠_nfͿ0`ݾ*`ݾ8`D3nf͌&͵ i`ݾJ`ݾ[`A3nf͌&i`03nf͌&_͵ nfp%ݾ҆`!+͈ ͮ\gn}|š`͵ É`gn} |ʳ`03nf͌&nfp%e&rs_ݾ`!+͈ nfp% 3f͵ e&rsnfp%f{zc3C 3C nfp%nfRAc! Oc! !3͈ ! 3C !͈ gne33go$!63nf͌&3ͮ\*3C !͈ 3C gne33͈ gn}9|c! !8͈ nfR"d!2͈ B3nf͌&gne33͈ nf#=3͌&e&p%03nf͌&7dA3nf͌&!͈ nfp%!͈ e&p%!͈ gn++ufwgnu͵ 6͵  G32nf^Vtunftuݾڻd 3*ݾdgn#uww͈ G)6nfr!Rd!͂gn#fr!Rg!͂3c nfcAݾGgݾGg͈ G) ͹}ݾҮg ,nf!xқgݾڋg!.nf$!Ôg.͈ w6666w6nfnfnfr!R znfRyݾyݾҲygn}yïyŸy8͈ ïygn$!ynfW^!̈́)tuw6wygn}|y6nfunfR'zݾ$zS3S3 ͈ ! 2͈ >zݾ7znfa)͈ ݾjznfr!Rqznfr!Rqz!͂gn#ugn+ugn}|ʗzgn}|v͙izrvvvvvvvvvvvvvvvrrititrrrrjitrImugn}|zgn}|z!~͂gn}|{0znf/rsnfr!Rx͙i &3 !R¥x ,ݾtx8͈ Âxnfa)͈ 6! &nfR$!xݾxgn}|xnfnf%(x 3*! &nf+$!yݾynfRy  ͹}z3c[{gn}({[{(?{!go$![{R{!go$![{!~͂ݾ~{3nf͌&!nf+$!!ʣgn}|ʟ{gn͈ ڭ{gn͈ nftunf#rsgn}|N|nfW^!ڻ͢#rsnf0|!nf/{/_z/W$!! ͈  3C 3jG)nf!xK|6e|3jnf####rsf n 6f n 6gn}( –|!͂||͵ nfr!Rʹ|!͂nf#rsf n 6f n wnff nr+s!nfx P}f n  6 2;ww! LG/s͵ f n , ! LcAgn} |•66f n  ڎ! Na)f n  6͈   fnfr!Rݾ!͂!nfxgn}|!9 p;!9 P}6nf#rsgn} |nfrrsnfr{ (! Lnf#nfr! Rwnf#r{ ( (³nf#rsုnf#snf#s%gngn0*G)!n sgnf n sݾ:nf! Lͻ%f n 6ݾ`nf! Nͻ%f n 6! ʣwgn}|‚͵ Ôgn}|”͵ 6! Ltue&rswwf n  WݾҮ! ?}|f n ,f n  ͈ îf n  +! N}/o|/g#f n  r+sî!͏6!͏! N#r!ڻs!͏! N##rs! N###f n  r+s!rgn}|8!9f n  p;gne3! L͌&ݾnfp%e&rsw͵ f n  W! L/f n  6f n 6îgnf n sݾbnf! Nͻ%ݾuf n 0NFݾ gn}|Vnf V+^nf V+^ͱ)Ӓnf [!)nf W^ͣ*0NFݾ unf W^͎(>NFݾ s>NFݾ gn&nf V+^!>NFݾ gn&nf V+^!3C nf V+^ͱ)>NFݾ ݾR!͈ G)wӒ!)nf V+^nf V+^a)666nf W^ͣ*ҽ3C 3C !͈ 3C Ӓnf W^͎(͈ nf w+wnf w+wnf 6>Nwwgn}f n  w͵ nfr!R9!͂nf#rsݾZf n f n  ڙf n  ڙf n 3*66f n  w+wf n  ʕ! !3͈ ! ! 6! N! Nf n  r+sf n  w+wf n  wif n  w͵ ͒nfr!R>3nf#rrswwgn#unfW^)!͢!͏nf #9!9M ֧6! NnfV+^Rf n  r+snf++V+^rsݾgn^VRUf n  6f n 6Ïgnf n sݾCnf! Lͻ%ݾVf n 0NFݾ 6! ʣ6wwwwww6w6nftuwww666wwwwwnftugnugnugn}Ǔnf}/o|/g#tuÑ ӓwÑ( ( 䓯Ñ4ݾ$3gn#unfnf#r!͢#tunfrsшw6nfRW^)Rtuw6wgnu!) ,66Ñ!;͂nf/rsgn}|nfՔnf++nftunf#tu f n 6wwіݾ!͂͵ i cf n  wwwww͵ nfr!Rdnfr!Rd3nfr!R§w6nf#rrsw6w6w6Gnf#rsnf###rsnf/rswwnf#rrsnfr!RGnf#rsnf###rsnf^Vnf͢tu ͹}nfnf ,ݾҎ%nfnf0*ùnf^Vʹڲnf^VͿҹ!.͂3 !9 0gne3 !9 0gn}|1! N^Vf n  r+sgn}|U! N^VȯRf n  r+sY6 3ci6ݾnf0 կNۚT]F('###v8C(?v8:(6+++ (ˆ#w+> ###v8(G+++ˆ ˎ#Np+y ++Nwy+!premature EO!PY9  4h4h&4P!9w ! h~ݮ w~<ݖ hw !9w#+! +8 +#+,8!*! w#!9~|goR˹T]â!9w >ݮ w !9w !( ! ~ݖ ( OE8y! ~(!  ~( !('yG(!4h+~! 4h+~!4h+~! 4h+~!  !  *ѯݡ!9 PY FfnV gofZ| }~^(Vfn>Ͳf(zȯF+̾̈ Nng)))V^G~ (#X(Nâ#F~++( 8 G âF+Nâ+V^!9 z(6-+goGRw+O'̓̓d̓ ̓E͋G #~-   60 +A~8 ( W â Nâ++++!9ѯɯR0 >0w+ G fnN++Ϣ| z ؠ   +++~( ###v###͌Y}K>+++##H (#a8{0_ ͌+++f###%(6KA4}͌y%4¡fb)~6<(3V' " ^##w}!ƥ !Х ! !Disk erroError in extending filDisk fulDirectory ful͌*^#~ 84 }#6͌*6O  > }͌*6#~P( 4^q}5 >7}~O #͌%~#?ߦfʏ~զV   76<+w_##~}͌ }>}w~/w#~/+~w+ #~wOG F+N ngOG F+N F+n`OG F+N+~=(ۯOG F+N+~ =(rW+sɯRɯR, conspart, i, pntr: integer; kind, count: byte; (* for counting sons of records *) ind# 7 !9 ~ݾ++8  ##!9 ~ݾ++8 |z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <)+ >#F ###gof â â#F ˆ###œgof####͐8U+++v ~ 2###o+++ˎ˞˦f0 ###+++gof0 | }!`!f#}( ##|#(}#70!9G AN>+ >3 r+{PY_>_~:(DAG*>_~ > :(*5*+~ x8I!g7}L(C O N   S T  }w 8(.(w#}͌Y}͌Vʫ͌%6#6Vx}͌$^͌V|ȧR?|ɧ7R|ȧ7R?|ɧRb$ɯ7?!!?QQ?!9 ~# 7 !9 ~ݾ++8  ##!9 ~ݾ++8 |z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <)NFݾ gn####gn w ! Ù4s46 FEDNU*!9!W  !# 6 REGETNI!9!~  !# gn!X :6 RAHC!9!  !# gn!X :6gn#!X :6 NAELOOB!9!  !# gn!X :6gn#!X :6 LAER!9!* !# gn!X :6 TXET!9!Z !# gn!X :6gn#!w 6 ESLAF!9! gn/! :w+wgn/! :w+6 EURT!9! gn! :W^r+s CCUS!9! !3  DERP!9!7 !3  NLOE!9!^ !3 gnu FOE!9! gn/! :W^r+s6 TESER!9! !# gn#!X :6gnu ETIRWER!9! gn/! :W^r+s NITXTF!9!0 !# gn#!X :6 NIAHC!9!a !# gn#!X :w WEN!9! !# gn#!X :6 KRAM!9! !# gn#!X :6gnu ESAEL DCR DADY DADX RRCR JV LDIR LDDR STC JRNZ STMT MIDL DSUB MEMB NEQL SPHL ILOD LESS DADD CMP XCHG GRET ADDR XTHL XTIX GE LE CSET ENTR EXIT EQUL MULT DIVD MMOD ISTR NEGT INCL SBST DIFF INTR UNIN RCHK JNZ MTCH NOMT ADD CTRL XRA LPOP FDVD CVTF XCFP DW SPSH egaPs46gn>:|kgn#u gogo!! !e3!!9!%!nf [1! Ù4s4nftunf#tu!Ù4s4gnjj! :V+^rs!Ù4s4gnjj##! :V+^rs!Ù4s4Grsgnjj! :Gr+s!Ù4s4n f +jj! :V+^rsn f jj! :V+^rsnftuww6ݾ3 nf^VS83 nf^VR# 9ڻ^Vtunf/! :nf W^{znf #9!9M ͑8nf#tu/ nf #9f/! : ! Ù4s4unf ]8H !2q gnjj##! :unf r+s! Ù4s4n f !X :nf J/͚9ڻsn f #!X :nf J/ 9ڻnf W_h80NFݾ gne3Ͷ >NFݾ su>NFݾ su!X :>NFݾ W^surs rs>NFݾ gn/! : !Ù4s4!# >NFݾ gn#!X :W^s>N/! :w+6gn/! :w+6 TNIXAM!9!& gn/! :6+6gn/! :w+66 NLETIRW!9!q !# gn#!X :6 NLDAER!9! !# gn#!X :6 ETIRW!9! !# gn#!X :6 DAER!9! !# gn#!X :66 DRO!9!9 !3  RHC!9!` !3  SBA!9! !3 gnu DDO!9! !3  RQS!9! gn/ER!9! gn/! :W^r+s6 CNURT!9!2 gn#!X :6gn##!X :6 gn###!w gn!w gnu! #  DNUOR!9! gn/! :W^r+s NATCRA!9! gn#!X :6gn##!X :6 gn###!w gn!w gnu! #  SOC!9!2 gn/! :W^r+s PXE!9!f gn/! :W^r+s NL!9! gn/! :W^r+s TRQS!9! gn/! :W^r+s NIS!9! gn/! :W^r+s6 DNEPPA!9!: !# gn#!X :6!Ù4 TES  s4gnW^ROw6w8 .18 W_go! Qo-8 1'gn>P|!26P8 W_go!gn! :k-gn#u8 .1R8 W_go!k-gn! :6 hͲ gogo!!!;e3 ͉16 gn+W^I8 gogo!gn! :!W^S3 ͉14¨ gogo!W^u!9  gn /!U :#9  ͑8Ngn+uÛ!9  gn /!U :#9  ͈8ғgn#uÛ66ݾڪwww6gn}|}ôgn}|gn! :W^! :W^{z6}gn}|}ͦ{Ez?6}gn}|+gn}|.}gn}|?}.gn}{|T6rgn}|o!2rgn}‡6 gn}$|Žͦsͦ{+z %gne3!96  ͫ3CRS.!9!{%gne3!96  ͫ3MYS.!9!%gne3! Ù4!9!:!9:Rڶ 1-2.3 rev lacsaP smetsySretnI!!9!%"[1gou+++!W^I8_&gn! :64A&6A+++!ZW^I8Ҏ&gn! :64p&6a+++!zW^I8ҽ&gn! :64Ÿ&66m 660+++!9W^I8'gn! :64&[1nf#tunf ͚9ڻW_RE!gne3͉16-w6 _gn! :W^sgn#ugn! :W^s!Ù4s4gn! :W^sgn#u!Ù4s4gnugn>`|gn}{|gnu!Ù4s46!PW^I8"gn! :W^s͗7(ͨ7ʢ0ͳ74!}  w6gn}|M<gnugnugn!êͦs}gn}|fgn}|f6gn!:W^! :W^sgn#ugn! :W^gnRgn} |‰66&wݾڞgnW^S8ҞgnW^R# 9ڻ|'gn /gn!0Ruu gogo!!gne3!!9!ogn! [1gn}}|ʃgn}|ʛgn}|ʪgn}}|ʪÎgn}}|»gn}|Žgn}66gn})gn}|"}&6 .}gn}|=6 gn} |gn}c6us6 ugn}6â 6 âgn}|º6 xKBfBnR gogo!!gne3!gne3! !9!n [1! Ù4s4gn#]8}!2gn#jj! :Gr+sgn#jj##! :ur+sgn#u!Ù4s46!W^I8 gn+W^!E :W^! :W^s4gn####!E :! sgnD uC 6 gn} |] C 6:! Ù4s4gD nugn}š"6!W^I8ҽ gn##!E :W^!U :W^s4 : 6 6gn!E :W^{ z gn#u MYS.!9! u"6!W^I8C#gn!E :W^gn+++! :W^s4#6gn#ugn!E :W^sgn! :W^{zI#gn! :W^{zI#gn#!E :W^s6 6 6 gn! :W^{z0$gnugn##!E :W^sgn! :W^{z0$gnugn###!E :W^sgn! :W^{z0$gnugn####!E :W^sgn! :W^{z  կN.T]F('###78C(?78:(6+++ (ˆ#w+> ###78(G+++ˆ ˎ#Np+y ++Nwy+!.premature EO!PY9G!ݾ Afn( ~^(Vfnůk-^ ѯݾ/z(& ,F//.// r+sFfn.1.|(10n({(͎-.1818 ͎-w+7 *~+y8^#~ y8}8F}8v8}8Nv8}8gi#9Aͧ6 N6+ 6#ͬ1F ͷ1###go2 l3 l3#ͬ1F ͷ1ˆ###E3go2!9 PY FfnV go44| }~^(Vfn>[1f(zȯF+̒2̒2g212̒2 Nng)))V^G~ (#X(Nl3#F~++( 8 G l3F+Nl3+V^!9 z(6-+goGRw+O',3,3d,3 ,3E43G #~-   60 +AN*>_~:(DAG*>_~ > :(*5*+~Ͷ5x8I!677&8L(C Ͷ5O Ͷ5N  Ͷ5S Ͷ5T  Ͷ5&8w Ͷ58(.(w#H (#ͧ6a8{0_ 58+++f###%(6555&858y%4J6f 6)~6<(37' " ^##w&8!o6 !y6 !6 !6Disk erroError in extending filDisk fulDirectory ful58*^#~ 84 &8#658*6O  6 ͳ7&858*6#~P( 4^q9 ~ݾ++8 |z(z/W{/_|(|/g}/o# ((!= N9goRW_= DM(go*7ɯt <)   NEHT !X+5   OT !u+,   EPYT !+#   LITNU !+   RAV !+   ELIHW !+   HTIW !,  wwgouw6dww6wwwwww66-www6w w 6 w 6 w 6I 666w3c gn} |,3c 3x6,3T L6 +ɯfnV^.1.###7++Fwx+0w+z  z ó.!J/|goR˹T]/ (9;;;Ry(G#A~#0w+~wͭ9~w+99Ny+999BG>(33(7>ͭ9+9(  SxDM!=)#0 |z(z/W{/_|(|/g}/o#  -# z"BKgo(0|x( j-0ygoR40 ###5 6###948787O8 ( (++q+++++++ˎ#q#x0ͧ60#fn##|###5!$70d0 00!27/ R0~8 ( W l3 Nl3++++!9ѯɯR0 >0w+ G fnN++x3| z Á1  ͳ7+++~(ͳ7###v###ʜ358Y&85>+++######948U+++v ~ 3###8Ϳ7+++ˎ˞˦40 ###5+++go40 | }! 4!4#}( ##|#(}#7ͧ60!9G AN6+ 64ͧ6 r+{PY_>&858&858Y&8587T658%6#67x&858$^587|q8R?|r87R|q87R?|r8Rb$ɯ7͚8͚8?88?88?!9 ~# 87 !9 ~ݾ++8  ##!PROGRAM PRIMES; (*$I+ * THIS IS A DEMONSTATION PROGRAM TO GIVE AN EXAMPLE * OF HOW TO WRITE A PROGRAM IN PASCAL/Z * TO STOP THIS PROGRAM JUST TYPE CTRL-C * * TEST PROGRAM TO GET THE PRIME FACTORS OF NUMBERS 2..32767 *) (* * DEFINE SOME VARIABLES *) VAR A: INTEGER; (* NUMBER UNDER TEST *) PRIME: BOOLEAN; (* IS PRESENT # A PRIME *) COUNT: INTEGER; (* # OF PRIMES ALREADY FOUND *) PRIMES: ARRAY(. 1..5000 .) OF INTEGER; PROCEDURE FACTOR( A: INTEGER ); VAR IFALSE; FACTOR( I ); WRITE( '*',K:1 ) END ELSE WRITE( A:1 ) END END; (* * MAIN PROGRAM *) BEGIN COUNT := 1; (* INITIALIZE COUNT *) FOR A := 2 TO 32767 DO BEGIN WRITE( A:5, ' = ' ); PRIME := TRUE; FACTOR( A ); IF PRIME THEN BEGIN WRITE('*1 ***** PRIME *****'); *+jCopyright 1980 by JEFF MOSKOWK!\378\!(:D![Unable to chai*+w!* w##w!( F##N> >5D^#V! !!!gAttempted divide by zerToo many errorProgram too compleFloating point overflow/underflo -- statement A B C D E H L M IX IY S PUSH LXI MVI MOV POP CALL STMT MIDL DSUB MEMB NEQL SPHL ILOD LESS DADDPʣ6gn>:|һgn#u gogo!! !e3!!9E !D!9!!gn&Ͳ gogo!Ͳ gogo!Ͳ6 gogo!!nf !!9!6gn+W^͠K gogo!gn!͏!W^S3 4 gogo!Ͳgn#u! RORRE ^ :ʣ6Eڗgn#ugn}|­͵ gn#unf W_Rgn+uw6+gnW^͠(gn!͏W^{ zgn#go!!gne3!gne3! !9!Y Ͳ! TES  ʣgnW^R( w6w8 ͅҪ 8 W_go! Q38 Y gn>P| !͂6P8 W_go!gn!͏/gn#uê 8 ͅ+ 8 W_go!/gn!͏6 A   gogo!!!;e3 6 gn+W^͠  gogo!gn!͏!W^S3 4  gogo!Ͳnf#tunf ڻW_,J,K: INTEGER; DIVIDE: BOOLEAN; (* WAS DIVISION SUCCESSFUL *) BEGIN IF A < 4 THEN WRITE( A:1 ) (* #'S < 4 ARE PRIME *) ELSE BEGIN J := 1; REPEAT J := J + 1; K := PRIMES(. J .); I := A DIV K; DIVIDE := ( I * K = A ) UNTIL DIVIDE OR (I < K) OR (J = COUNT); IF DIVIDE THEN BEGIN PRIME := COUNT := COUNT + 1; PRIMES(. COUNT .) := A END; WRITELN(' '); END; WRITELN(' THERE WERE ', COUNT-1:1, ' PRIMES ' ); END. E COUNT *) FOR A := 2 TO 32767 DO BEGIN WRITE( A:5, ' = ' ); PRIME := TRUE; FACTOR( A ); IF PRIME THEN BEGIN WRITE('*1 ***** PRIME *****'); CMP XCHG GRET ADDR XTHL XTIX GE LE CSET ENTR EXIT EQUL MULT DIVD MMOD ISTR NEGT INCL SBST DIFF INTR UNIN RCHK SPSH MTCH NOMT ADD CTRL XRA LPOP FDVD CVTF XCFP JMP JR INX DCX JC JRC JNC JRNC INR DCR DADY DADX RRCR JV LDIR LDDR STC JNZ JRNZ JZ JRZ DW DSB1 CMPI ENTRY EXT FINI GLBP SVLN GTLN egau!gnڻRW^u4 gogo!nf+!!!9!gn&!9!|nf W_R gogo!!!9!u!nf Ͳ! DETCEPXE ʣgnW^R͵ Sgo͂ gogo!gn ͢!U͏! #9 ! !9! "Ͳ! DETCEPXE ʣgnW^R͵ B go͂gn}©gn}|ž͵ 6:6=º6I6D6.6.6 6 gn#ugn!͏W^gnR goR !gne36-w6 8 gn!͏W^sgn#ugn!͏W^s!ʣgn!͏W^sgn#uX !ʣgnugn>`|ү gn}{|ү gnu!ʣ6!PW^͠ gn!͏W^s( 4 !V   w6gn}|& X  gnugnugn!ê sV gn}|? gn}|? 6gn!͇W^!͏W^sgn#ugn!͏W^gnRʦ gn} |b 66&wݾt gnW^ͪt gnW^R#wW^u!9  gn ͢!U͏#9  $ gn+uq !9  gn ͢!U͏#9  ߧi gn#uq 66ñ ݾڀ www6gn}|› V Ê gn}| gn!͏W^!͏W^{z 6V gn}| V  {Ez6V gn}|gn}|V gn}|V gn}{|*6Hgn}|EX !͂ý HX gn}]X 6 ê¨X gn}$|dX  sX  {+z |Ұwgn!ênf#rrsnf#rrsnfr!R(nf#rsnf###rsnfrsnfr!Rsnf#rsnf###rsnfrsn f ###r s nf ###r snf^VRnf^VRnfnfxn f nf xn f /nf /R ! ʣn f nf x)!͂! ʣnf !xO!͂! ʣn f nf x &3 s &3 sgn}|«gn}|gn}|gn}|!͂! ʣgnugnu!ʣ gogo!!! e3!gne3!!! e3! ʣ gogo!!! e3!gne3!Ͳ! ʣgn e3 gogo!!gne3!4 Ͳ! ʣ3 gogo!!gn e3!4!!,e3!gne3!4Ͳ! ʣgn e3 gogo!!gn e3!4!!,e3!nf Ͳ! ʣw! ]՝ʹ!!! ]$!gn ͈ gn }|!!;͈ !!:͈ 6go! o! ,)ʣgn ugn W^ʹ"gn ugne3 &3~!03C G)6f n 6f n wA/ݾA/gn}|-ݾA/f n 6gn͎(sݾ:.!)nf}/o|/g#a)! ͈  3C 3C 6gn}|-nfgo%(.nf^VR#f n r+sf n3*!nf$!>3C G)A/(gnͣ*0/!͈ w! ʣwnf r{ ( (/gn}}/6'/Š/6(/ —/6 / ¤/6!/±/6$/¾/6"//6#/60gn}/6 0/6006 0 060 060(060!nf xK0!nf xһ0gn}]06ø0j06ø0w06ø0„06-ø0gn}—06÷0¤06÷0±06 ÷060gn}|06 06ݾ0!͂! ʣfn 1ݾ N^Vfn r+s3C3!N^VRfn r+s3z3nfW_Rw3!N^Vwfn r+s3wr66gn}|¦3  !?}|3gn}|3fn gn}|T6gn}|4nf}/o|/g#tunftu6gn}4wnf!R446t4!RD46t4!RT46t4!Rd46t4!Rt46t4gn}|46{z—4ͳ(3C 6++gnW^͠Ҿ4!͈ 4¦4T6.5nf՝Ϳ+563nfW_ʹ4626+nf՝W^͠%5gne3S3͈ 456T6nfW_͠S6nfͪS6ݾS6gn}|S6!NRS6!?}|5!!LxS6gn}F( ¼56 !Gnf$!F65nfR56 !Gnf#$!F666!nf$!͈ F6E6nfW_RE66!nf+$!͈ ݾS6 ݾr6fn 6fn 6ݾi76fn ҿ6ݾ ҿ6ҩ6gn&͈ wͳ(ÿ6gn}|¿66!͈ fn 6!Na)wݾ 6nfa)6gn}( (F'R29gn}|$9!gn$!+9! !3͈ gn}|L9!gn$!S9! :gnͣ*03͗!͢!͏͵ gn}|>3c͵ $>3c͹}gn}|;>!2͂nf^Vr+snf++^Vr+sݾm>nf 6 ݾ>nf 63cgn}|=w!ʣ͵ ͒?wT  gn&3?nf͢!͏W^{z>!e͂>6{(A6;AA;Anf:Agn}| NFݾ R3͗r+s͵ gn}|dF3c+++ͩInfr!RF!l͂gn>NFݾ 747gn}| !ʣgn}|@W=gn}|$@=gn}"|2@͛>͑PrsUgn}|¡@!gne3! !e3! !e3!!9E !nf6-nf p%!gnnf0*nftuw3< 3͆! ʣwnfrw6+͸V+^͠pC !go!nf͢!͏! #94# 4qCC6gn!E͏W^{.zʕCgn#uvCPYT.!9!Cgne3A!96  w6+V+^͠-D !go!nfr! e3 4# 4.DC!!9!!9RڶEUw6 ͸V+^͠Enf͢!͏ n f W^{(E n f++V+^r!ʹE n fI3V+^͌&u>NFݾ  ! ]W^͠ҷG>NFݾ gn)!>NFݾ RV+^!̈́!͏nf++^Vr+snf^V r+snf ^Vt u4)Ggn}|AFgn}|[I͵ ͒G͵ gn}|¡H! ]#! o! ])!>NFݾ R3͗r+s͵ ! ])!>NFݾ RV+^!̈́!͏nf++^Vr+snf^V r+snf nf/t u͵ äHnftu3gn}|H͵ gn}|PIgn}|PIgn}|PIgn} |PIgn}|H͵ +++(=nfnfgn}|H3c3cf n f 3nf 9F3cgn}|ʷHnf >NFݾ ^VʹңInf >NFݾ tu! ʣwwgn}(Ngn}|I͵ gn}J͵  3c Ef nr+s!X͏6nfrs!rgn}|J͵ rsnf###!r Enf#nfnf!X͏6  *J 3c3 ͩInf###nfNK͵ www &3go9F 3f n#ugn+ugn}|-Mgn++&3Mgn}|`M3͗!̈́!͏r+sww͵ úMnf̈́!͏nf W^{z®Mnf++V+^rsnf++r+s͵ ùM ͩIM ͩI6gn}|M! ͂N!X͏W^sf nr+snf!rÛOHO!X͏6 f nr+sgopNnfiNH3nf͌&e&p%!r͵ ͒O3͗!̈́!͏N gogo!!!9!3F!!9M !!"e3"ͲnfW^r+s}|Pgn}|Q3c͵ &Q3c ͩInftunf̈́!͏nf W^{zQnfV+^!RQnfҨQnf^Vr+snf^VtuQnf^Vr+snf^Vtunf++^Vr+snf#tunf͸͠=Q3cgn}|Pnftunf̈́!͏nf W^{znRnf++V+^nRnfnfV+^nfr+snf#tunf͸͠Rnf^Vtu!L RTXE L DTXE ʣw6wgn}|T͵ 6 gn}$| NFݾ ݾj>NFݾ gn}|j!>NFݾ gn$!j! !͈ ! 2͈ >NFݾ w!ʣ6nftunftunf#rs6wwgn}|{G)gn!zê6gn}|0mG)gn+u͵  ͹}nftu &3 snfW_Rjw G3*gn}|k$3fnfm!n͂nfa)gn͈ Ìj!gnR$!wzwwgn}|urw͵ G) ͹}ݾ҇mݾ҇mݾڇm!͂ݾڙmݾҠmݾڠm͈ G)nftu &3 snfW_Rmw6 gn}n6 G3*G)nftunf#rsnf/!wunf/!ڻu!nfxin!a)nftuongoa)3C !͈ G)gn}|n͵  ͹} ,ݾڴnnfa)!nfngoa)͈ 6wG)gn}|n!y͂pn6p gn} |`e&rswgn}|l`gn#ugn}|{_w13nf͌&nfp%e&rs03nf͌&nfp%e&rsgn} |¢_͵ gn}|ʟ_!͂6i` (=nfnfnfW_͠_nfͿ0`ݾ*`ݾ8`D3nf͌&͵ i`ݾJ`ݾ[`A3nf͌&i`03nf͌&_͵ nfp%ݾ҆`!+͈ ͮ\gn}|š`͵ É`gn} |ʳ`03nf͌&nfp%e&rs_ݾ`!+͈ nfp% 3f͵ e&rsnfp%f{zc3C 3C nfp%nfRAc! Oc! !3͈ ! 3C !͈ gne33go$!63nf͌&3ͮ\*3C !͈ 3C gne33͈ gn}9|c! !8͈ nfR"d!2͈ B3nf͌&gne33͈ nf#=3͌&e&p%03nf͌&7dA3nf͌&!͈ nfp%!͈ e&p%!͈ gn++ufwgnu͵ 6͵  G32nf^Vtunftuݾڻd 3*ݾdgn#uww͈ G)6nfr!Rd!͂gn#fr!Rg!͂3c nfcAݾGgݾGg͈ G) ͹}ݾҮg ,nf!xқgݾڋg!.nf$!Ôg.͈ w6666w6nfnfnfr!R znfRyݾyݾҲygn}yïyŸy8͈ ïygn$!ynfW^!̈́)tuw6wygn}|y6nfunfR'zݾ$zS3S3 ͈ ! 2͈ >zݾ7znfa)͈ ݾjznfr!Rqznfr!Rqz!͂gn#ugn+ugn}|ʗzgn}|v͙izrvvvvvvvvvvvvvvvrrititrrrrjitrImugn}|zgn}|z!~͂gn}|{0znf/rsnfr!Rx͙i &3 !R¥x ,ݾtx8͈ Âxnfa)͈ 6! &nfR$!xݾxgn}|xnfnf%(x 3*! &nf+$!yݾynfRy  ͹}z3c[{gn}({[{(?{!go$![{R{!go$![{!~͂ݾ~{3nf͌&!nf+$!!ʣgn}|ʟ{gn͈ ڭ{gn͈ nftunf#rsgn}|N|nfW^!ڻ͢#rsnf0|!nf/{/_z/W$!! ͈  3C 3jG)nf!xK|6e|3jnf####rsf n 6f n 6gn}( –|!͂||͵ nfr!Rʹ|!͂nf#rsf n 6f n wnff nr+s!nfx P}f n  6 2;ww! LG/s͵ f n , ! LcAgn} |•66f n  ڎ! Na)f n  6͈   fnfr!Rݾ!͂!nfxgn}|!9 p;!9 P}6nf#rsgn} |nfrrsnfr{ (! Lnf#nfr! Rwnf#r{ ( (³nf#rsုnf#snf#s%gngn0*G)!n sgnf n sݾ:nf! Lͻ%f n 6ݾ`nf! Nͻ%f n 6! ʣwgn}|‚͵ Ôgn}|”͵ 6! Ltue&rswwf n  WݾҮ! ?}|f n ,f n  ͈ îf n  +! N}/o|/g#f n  r+sî!X͏6!X͏! N#r!ڻs!X͏! N##rs! N###f n  r+s!rgn}|8!9f n  p;gne3! L͌&ݾnfp%e&rsw͵ f n  W! L/f n  6f n 6îgnf n sݾbnf! Nͻ%ݾuf n 0NFݾ gn}|Vnf V+^nf V+^ͱ)Ӓnf [!)nf W^ͣ*0NFݾ unf W^͎(>NFݾ s>NFݾ gn&nf V+^!>NFݾ gn&nf V+^!3C nf V+^ͱ)>NFݾ ݾR!͈ G)wӒ!)nf V+^nf V+^a)666nf W^ͣ*ҽ3C 3C !͈ 3C Ӓnf W^͎(͈ nf w+wnf w+wnf 6>Nwwgn}f n  w͵ nfr!R9!͂nf#rsݾZf n f n  ڙf n  ڙf n 3*66f n  w+wf n  ʕ! !3͈ ! ! 6! N! Nf n  r+sf n  w+wf n  wif n  w͵ ͒nfr!R>3nf#rrswwgn#unfW^)!͢!͏nf #9!9M ֧6! NnfV+^Rf n  r+snf++V+^rsݾgn^VRUf n  6f n 6Ïgnf n sݾCnf! Lͻ%ݾVf n 0NFݾ 6! ʣ6wwwwww6w6nftuwww666wwwwwnftugnugnugn}Ǔnf}/o|/g#tuÑ ӓwÑ( ( 䓯Ñ4ݾ$3gn#unfnf#r!͢#tunfrsшw6nfRW^)Rtuw6wgnu!) ,66Ñ!;͂nf/rsgn}|nfՔnf++nftunf#tu f n 6wwіݾ!͂͵ i cf n  wwwww͵ nfr!Rdnfr!Rd3nfr!R§w6nf#rrsw6w6w6Gnf#rsnf###rsnf/rswwnf#rrsnfr!RGnf#rsnf###rsnf^Vnf͢tu ͹}nfnf ,ݾҎ%nfnf0*ùnf^Vʹڲnf^VͿҹ!.͂3 !9 0gne3 !9 0gn}|1! N^Vf n  r+sgn}|U! N^VȯRf n  r+sY6 3ci6ݾnf0 կNۚT]F('###v8C(?v8:(6+++ (ˆ#w+> ###v8(G+++ˆ ˎ#Np+y ++Nwy+!premature EO!PY9  4h4h&4P!9w ! h~ݮ w~<ݖ hw !9w#+! +8 +#+,8!*! w#!9~|goR˹T]â!9w >ݮ w !9w !( ! ~ݖ ( OE8y! ~(!  ~( !('yG(!4h+~! 4h+~!4h+~! 4h+~!  !  *ѯݡ!9 PY FfnV gofZ| }~^(Vfn>Ͳf(zȯF+̾̈ Nng)))V^G~ (#X(Nâ#F~++( 8 G âF+Nâ+V^!9 z(6-+goGRw+O'̓̓d̓ ̓E͋G #~-   60 +A~8 ( W â Nâ++++!9ѯɯR0 >0w+ G fnN++Ϣ| z ؠ   +++~( ###v###͌Y}K>+++##H (#a8{0_ ͌+++f###%(6KA4}͌y%4¡fb)~6<(3V' " ^##w}!ƥ !Х ! !Disk erroError in extending filDisk fulDirectory ful͌*^#~ 84 }#6͌*6O  > }͌*6#~P( 4^q}5 >7}~O #͌%~#?ߦfʏ~զV   76<+w_##~}͌ }>}w~/w#~/+~w+ #~wOG F+N ngOG F+N F+n`OG F+N+~=(ۯOG F+N+~ =(rW+sɯRɯR begin lbound := typget( x.typntr+1 ); hbound := typget( x.typntr+3 ) end; (* all value# 7 !9 ~ݾ++8  ##!9 ~ݾ++8 |z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <)+ >#F ###gof â â#F ˆ###œgof####͐8U+++v ~ 2###o+++ˎ˞˦f0 ###+++gof0 | }!`!f#}( ##|#(}#70!9G AN>+ >3 r+{PY_>_~:(DAG*>_~ > :(*5*+~ x8I!g7}L(C O N   S T  }w 8(.(w#}͌Y}͌Vʫ͌%6#6Vx}͌$^͌V|ȧR?|ɧ7R|ȧ7R?|ɧRb$ɯ7?!!?QQ?!9 ~# 7 !9 ~ݾ++8  ##!9 ~ݾ++8 |z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <)ʹf(zȯF+̛̫Z Nng)))V^G~ (#X(y(8 PG uBNu#F~++( STMT D,15 LXI H,513 PUSH H MOV L,8(IX) MOV H,9(IX) PUSH H LXI B,4 ; END CALL L111 STMT M,15 L275 ; END; L171 EXIT D,2 ;(* ; * MAIN PROGRAM ; *) ; BEGIN L99 ENTR D,1,10005 ; COUNT := 1; (* INITIALIZE COUNT *) STMT D,16 MOV -3(IY),A MVI -4(IY),1 ; FOR A := 2 TO 32767 DO BEGIN STMT D,17 MOV 0(IY),A MVI -1(IY),2 PUSH IY LXI H,32767 XTHL L302 MOV D,M DCX H MOV E,M XTHL PUSH H GE D,0 JNC L303 STMT D) JNC L345 STMT D,23 ; WRITE('*1 ***** PRIME *****'); STMT D,24 JR L359 L358 DB '***** EMIRP ***** 1*',33 L359 LXI H,769 PUSH H LXI B,33 PUSH B LXI H,-33 DADD S SPHL XCHG LXI H,L358+0 LXI B,33 LDIR LXI B,37 CALL L111 STMT M,24 ; COUNT := COUNT + 1; STMT D,25 MOV L,-4(IY) MOV H,-3(IY) INX H MOV -3(IY),H MOV -4(IY),L ; PRIMES(. COUNT .) := A STMT D,26 MOV L,-4(IY) MOV ); STMT D,29 JR L396 L395 DB ' EREW EREHT ',12 L396 LXI H,769 PUSH H LXI B,12 PUSH B LXI H,-12 DADD S SPHL XCHG LXI H,L395+0 LXI B,12 LDIR MOV L,-4(IY) MOV H,-3(IY) DCX H PUSH H LXI H,513 XTHL PUSH H JR L417 L416 DB ' SEMIRP ',8 L417 LXI H,769 PUSH H LXI B,8 PUSH B LXI H,-8 DADD S SPHL XCHG LXI H,L416+0 LXI B,8 LDIR LXI B,32 CALL L109 STMT M,29 ; END. STMT D,30 FINI nf^VR`ݾJwnf.!!*e3!nf [!nf ! Å !9!q!9qRhw6w6!V+^TҀ!nf = !!9! 6nf.L"***** EMIRP ***** 1*!!!!9!!%nf#tunfѯjr!i^Vr+s!! e3͢(ͳS;4# 4Ì EREW EREHT ! !9! nf+! SEMIRP !!9! _(  SxDM!=)#0 |8 G uF+Nu+++ݾ~Q8 (8 Gy uOAOuTRUEFALSEF~+++N Ő( 8G u( +Nuy(G++V^!9 z(6-+goGRw+O'55d5 5E=G #~-   60 +A~8 ( W u Nu++++!9ѯɯR0 >0w+ G fnN++́| z   ;+++~(;###v###ʥ@Y1 >+++###@`i### V(f 8###'  +++(C^(?"!5~< #5 #5'"x z## Ư"w#w#w ˆ++`i(  S_xDM!=()8 )0 0)+} E˸$}($0##0""L$q#s#r!(F!#6!*!!4 #4 #4!!+F&( 6##Nq+'6p  6w+(1˞1###% 8o+++v ~ ͙ ####+++ˎ˞˦ 0 ###Ͳ +++go 0 | }! uToo many open output file! uBad output file nam#}"!5~< #5~< #5'"! 6!'+Fˆ"(w#w#w 44~0#4 #4!!4 #4 #4! 6!!%66 )~6<(3 ' " ^##w1! ! !1 !:uDisk erroError in extending filDisk fulDirectory fulBad filename @*^#~ 84 1#6@*6O  ͖ ;1@*6#~P( 4^q15 ͖71~O;#@%~#?“fC### 4~0 |( ͊goR͊OG F+N ngOG F+N F+n`OG F+N+~=(ۯOG F+N+~ =(rW+sɯRɯRj:~,>2#: >2#:#"j:::7j-*:0R|"": .::Y1::Y1>2:2:!":":!0":2#:2:::͵,2B:*j:~U";U"*U", #"j:U">2#:-x1@$^@ ||R?|}7R||7R?|}Rb$ɯ7|z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <)-%1R3bRSUS#:i03 Lc!q02T#'`Q=UR2UT#' ueJr( ##|#(}#7V0!9G AN͖+ ͖ V r+{PY_>_~:(DAG*>_~ > :(*5*+~͢ x8I!HͿ71L(C ͢ O ͢ N  ͢ S ͢ T  ͢ 1w ͢ 8(.(w#H (#Va8{0_ @+++f###%(6  1@y%4 fʬ ### #4 #4!4~0#4 #4!Ó~҉    76<+w_##~1@ 1>1@1@Y1@  @%6#6 x1@$^@ ||R?|}7R||7R?|}Rb$ɯ7|z(z/W{/_|(|/g}/o# ((!= goRW_= DM(go*7ɯt <)!K6#w#q#T!6g]~|# oy25+£+ ‹!%6 + ©!%6 \  \\!"1!"3!"+ j! "&s*&^#V#^#V))"/:%=<#4))"-":(QCA:%_C\!ͤM*&5:5 :*ʑ=2*> ͳʑ ¡2)ͳ 2*Ãͳ*+~#"+*-*/f!"+!(6Zn02 02I}G> 2KWgh>=9I,a$ |N MISSING FILE NAME$ FILE DOES NOT EXIST$ READ/WRITE ERROR$ FILE ALREADY EXISTS. C/R TO CONTINUE. CTRL-@ TO ABORT$ ERROR IN CREATE OR OPEN$ .TEXT file being pr; Copyright (C) 1979 Ronald G. Parsons ; Modified by Robert Bedichek 2-23-80 ; ; Transfers a Pascal file to a CP/M file. ; ; Syntax PASTOCPM ; ; Transferrs the Pascal filename on a Pascal disk in B ; to the CP/M filename. If the CP/M file already exists, ; you will be asked for permission to overwrite. ; If Pascal file is a .TEXT file, then two blocks are skipped ; and indents replaced by spaces. LFs are added after CR. ; If Pascal file is a .COL point to one past last byte in TPA. SPHL ; Mod by RCB - Branch table at the end of this program links ; to branch table at the beginning of CP/M's BIOS. Here we ; modify the high byte of the jump address to adjust for the size ; of the running CP/M system. ; Assumption: The BIOS starts on a 256 byte boundry which is at least ; 3072 bytes from the top of the TPA. lxi d,3072 ; Minimum length of BDOS. dad d mvi l,0 ; Check to see if there are 15 jumps in a row. If not we haven't hi jump table inserting the right values. SETUPL MVI M,0C3H ; Opcode for jump INX H MOV M,A ; Lower byte of address. ADI 3 INX H MOV M,C ; Store high byte. INX H DCR D JNZ SETUPL LXI H,BUFF+1 ;get Pascal file name LXI D,SYSTLE+1 MVI C,0 CALL SCBK ;get second parameter CALL SCBKCH PFN2 MOV A,M CPI 0 JZ PFN3 STAX D INX H INX D INR C JMP PFN2 PFN3 MOV A,C ;get filename length STA SYSTLE ORA A JZ NOFLNM ; Check for .TEXT or .CODE filename LXI D,TE#"-*3#*16# }|{z!m:(;"1w#'f\~ g#]~ #:%¯:)ʃ2)> :*ʑ=2*> ͳʑ ¡2)ͳ 2*Ãͳ*+~#"+*-*/f!"+!(6Zn02 02I}G> 2KWgh>=9I,a$ |N MISSING FILE NAME$ FILE DOES NOT EXIST$ READ/WRITE ERROR$ FILE ALREADY EXISTS. C/R TO CONTINUE. CTRL-@ TO ABORT$ ERROR IN CREATE OR OPEN$ .TEXT file being prDE file, then one block is skipped. ; If neither .CODE or .TEXT, copy is exact. ; ; Pascal disk in B; CP/M disk in A. ; DLE EQU 10H CBOOT EQU 0 ;LOCATION OF CP/M BOOT VECTOR DENTSZ EQU 1AH ;DIR ENTRY SIZE IN BYTES DTITLE EQU 06H ;OFFSET TO ENTRY TITLE BLKBUF EQU 1000H ;TOP OF BLOCK BUFFER DIRTOP EQU 2000H ;TOP OF TEMP RAM DISK DIRECTORY ; ORG 100H LXI D,COPYRIGHT MVI C,9 ;print buffer CALL BDOS JMP START COPYRIGHT DB 'Copyright (C) 1979 Ronald G. Parsons$' START: LHLD 6 ; Ht the ; BIOS. In that case add 256 to the address and try again. TryAg push h mvi b,15 ; Number of jumps to match. Match mov a,m cpi 0c3h jrz JmpOk pop h inr h jmpr TryAg JmpOk inx h inx h inx h ; HL now points to the next table entry. djnz Match ; We found something that is probably the jump table. pop h mov c,h SkipOv MVI D,15 ; Number of jumps. MVI A,0 ; Lower byte starts at zero. LXI H,JMPTAB ; Start of jump table in this program ; Now run through the internalXT+6 DCX H ;HL points to end of filename PUSH H MVI C,5 TEXTLP LDAX D CMP M JNZ NOTEXT ;filename does not end in .TEXT DCX H DCX D DCR C JNZ TEXTLP LXI H,TXTFLG ;got .TEXT file MVI M,2 LXI D,TEXT MVI C,WRITECB CALL BDOS NOTEXT POP H ;point to end of filename LXI D,CODE+6 MVI C,5 CODELP LDAX D CMP M JNZ NOTCODE ;filename does not end in .CODE DCX H DCX D DCR C JNZ CODELP LXI H,TXTFLG ;got .CODE file MVI M,1 LXI D,CODE MVI C,WRITECB CALL BDOS NOTCODE LXI D,FCB ;OPEN FILE MVI C,OPENF CALL BDOS CPI ERNXF ;NON-EXISTENT FILE? JZ CREF ;YES - CREATE IT LXI D,PERMSG ;get permission to delete file MVI C,WRITECB CALL BDOS RDCHR EQU $ MVI C,READC CALL BDOS ;READ CONSOLE CPI MODE JZ CBOOT ;ABORT CPI CR JNZ RDCHR LXI D,FCB MVI C,DELETEF ;KILL FILE CALL BDOS ; CREF EQU $ LXI D,FCB MVI C,CREATEF ;CREATE FILE CALL BDOS CPI ERNDR ;create error? JZ CERROR ; INIT LXI H,BUFF SHLD BOL LXI H,BUFF+127 SHLD skip TXTFLG blocks JM SKPBL2 ; depending on .TEXT or .CODE INX H JMP SKPBL1 SKPBL2 DAD H DAD H SHLD LSN ;first LSN ; LR80B CALL R80B ;read 80 bytes LDA EOFFLAG ORA A ;eof? JNZ FILL1A CALL WB ;write buffer JMP LR80B ; FILL1A LDA TXTFLG CPI 2 ;.TEXT? JNZ FILL2 CALL CT ;fill buffer with 1AH CALL WB ;write buffer FILL2 LXI D,FCB MVI C,CLOSEF CALL BDOS ;close file JMP CBOOT ;boot ; ;******************************************************* ; ; SUBROUTINP ;START COMPARING LDAX D CMP M JNZ FI$CONT ;IT'S NOT THIS ONE INX D INX H DCR B ;IS THIS THE END OF THE STRING JNZ FI$CMP$LP JMP FI$FOUND ;FOUND IT FI$CONT LHLD DENTP ;ON TO THE NEXT ENTRY LXI D,DENTSZ DAD D SHLD DENTP DCR C ;IS THERE ANY DIR LEFT? JNZ FI$SCH$LP FI$HANG ;FILE NOT THERE JMP NOFILE FI$FOUND ;GOT IT RET ; ; SYSRD ;READ BLOCKS FROM PASCAL DISKETTE PUSH D ;SAVE BLOCK COUNT PUSH H ;AND BLOCK NUMBER CALL READ$RX ;BUFFER IS ADVANI C,1 CALL SELDSK CALL READ ;AND READ THE DATA POP H POP D POP B PUSH H ;ADVANCE THE BUFFER ADDRESS LXI H,128 DAD B MOV B,H MOV C,L POP H INX H ;ADVANCE BLOCK COUNT DCR E ;THEN SEE IF WE CONTINUE JNZ RR$LP RET ;LEAVE, WHEN DONE ; ; RDSEC EQU $ ;READ SECTOR GIVEN BY LSN MVI C,DMAADD CALL BDOS LHLD LSN CALL MAP MOV C,L CALL SETSEC MOV C,H CALL SETTRK CALL READ ORA A JNZ RWERR LHLD LSN INX H SHLD LSN RET ; CT LHLD EOB ;clear to end ofMVI C,0 ;write 80H byte buffer CALL SELDSK LXI D,BUFF MVI C,DMAADD CALL BDOS LXI D,FCB MVI C,WRITER CALL BDOS ORA A JNZ RWERR RET ; ; SCBKCH MOV A,M ;scan to char after first blank CPI ' ' JZ SCBK INX H JMP SCBKCH SCBK MOV A,M ;scan to first non-blank CPI ' ' RNZ INX H RET ; ; This has be rewritten by J. Warner, UC Santa Cruz. ; The GETBYT routine is a new single place to get ; characters from the Pascal read buffer. ; RB EQU $ ;read byte LDA TXTFLG CPI EOB LXI H,BLKBUF+512 SHLD BUFADD ; LXI B,DIRTOP ;READ THE DIRECTORY INTO DIRTOP CALL READ$DIR ; LXI H,DIRTOP ;SET THE DIRECTORY ENTRY POINTER LXI D,DENTSZ ; TO FIRST ENTRY AFTER THE VOLUME NAME DAD D SHLD DENTP ; CALL FIND$FILE ;THEN FIND THE FILE ; LHLD DENTP ;start of directory MOV E,M INX H MOV D,M PUSH D ;save first block INX H MOV E,M INX H MOV D,M XCHG ;last block + 1 in HL DAD H DAD H SHLD LSTLSN ;last LSN + 1 POP H LDA TXTFLG SKPBL1 DCR A ;ES ; ;******************************************************* ; READ$DIR ;READ DIRECTORY'S 4 BLOCKS TO BUFFER ;BUFFER ADDRESS IS ALREADY IN BC-REG MVI E,4 ;DIR IS 4 BLOCKS LONG LXI H,2 ;AND STARTS AT BLOCK #2 CALL SYSRD ;GET IT RET ; ; FIND$FILE MVI C,77 ;STOP AFTER THE 77'TH ENTRY LHLD DENTP ;GET STARTING ENTRY FI$SCH$LP LXI D,DTITLE ;ADVANCE TO TITLE STRING DAD D LXI D,SYSTLE ;SET DE-REG TO COMPARISON STRING LDA SYSTLE ;comparison length INR A MOV B,A FI$CMP$LCED BY 512 BYTES POP H POP D INX H ;ADVANCE TO NEXT BLOCK DCR E JNZ SYSRD ;SEE IF WE'RE DONE RET ; ; READ$RX ;READ A PASCAL BLOCK DAD H ;THERE ARE 4 SECTORS TO A BLOCK DAD H ;MULT LOGICAL BLOCK BY 4 MVI E,4 RR$LP ;THIS GETS CONFUSING PUSH B ;SET BUFFER ADDRESS PUSH D PUSH H CALL SETDMA POP H ;NOW COMPUTE TRACK-SECTOR PUSH H CALL MAP ;CONVERTS LOGICAL SECTOR IN HL MOV C,H ;INTO TRACK, H, SECTOR, L PUSH H CALL SETTRK POP H MOV C,L CALL SETSEC MV buffer INX H XCHG LHLD BOL CT1 CALL EQUAL RZ MVI M,CTRLZ INX H JMP CT1 ; EQUAL MOV A,L ;returns zero if (DE) = (HL) CMP E RNZ MOV A,H CMP D RET ; COMPR MOV A,E ;CY set if (DE) less than (HL) SUB L MOV A,D SBB H RET ; R80B MVI B,80H ;read 80H bytes to buffer LXI H,BUFF R80B1 PUSH B PUSH H CALL RB POP H POP B PUSH PSW LDA EOFFLAG ORA A JZ R80B2 ;not eof POP PSW SHLD BOL RET R80B2 POP PSW MOV M,A INX H DCR B JNZ R80B1 RET ; WB 2 ;.TEXT? JNZ NOT$TXT RBCKLF LDA NLF ;need LF? ORA A JZ RBCKTB XRA A STA NLF MVI A,LF RET RBCKTB LDA NTB ;need tab? ORA A JZ RBFB DCR A STA NTB MVI A,' ' RET RBFB CALL GETBYT ;read byte from buffer ORA A ;bypass 0's at end of 1024 byte page JZ RBFB CPI CR JNZ CKDLE STA NLF ;Need Line Feed RET ; CKDLE CPI DLE RNZ CALL GETBYT ;get the space code SUI 32 ;set indentation STA NTB JMP RBCKTB ; NOT$TXT CALL GETBYT RET ; ; Get the next character from the Pascal file. ; Read disk if necessary. ; GETBYT EQU $ LHLD BUFADD LXI D,BLKBUF+512 CALL EQUAL CZ RBLK ;return with HL --> BLKBUF MOV A,M INX H SHLD BUFADD RET ; ; RBLK EQU $ ;read LSN block LHLD LSN XCHG LHLD LSTLSN CALL EQUAL JZ SETEOF ;found last sector MVI C,1 ;select B disk CALL SELDSK LXI D,BLKBUF ;read four sectors CALL RDSEC LXI D,BLKBUF+80H CALL RDSEC LXI D,BLKBUF+100H CALL RDSEC LXI D,BLKBUF+180H CALL RDSEC LXI H,BLKBUF SHLD BUFADD REHYSICAL SECTOR ; ; PUSH B PUSH D ; CALL DIV26 MOV A,L ADD A MOV B,A MVI A,12 CMP L JNC MAPC INR B MAPC MOV C,E XRA A MOV D,A MOV H,A MOV L,B MVI A,6 MAP$LOOP DAD D DCR A JNZ MAP$LOOP PUSH B CALL DIV26 POP B INR L MOV H,C INR H POP D POP B RET ; ; DIV26 LXI B,-26 MVI E,0FFH DIVL INR E DAD B MOV A,H ORA A JP DIVL LXI B,26 DAD B RET ; ; ; NOFNMSG DB CR,LF,'MISSING FILE NAME$' NOFMSG DB CR,LF,'FILE DOES NOT EXIST$' WERMS3 CONOUT DS 3 LIST DS 3 PUNCH DS 3 READER DS 3 HOME DS 3 SELDSK DS 3 SETTRK DS 3 SETSEC DS 3 SETDMA DS 3 READ DS 3 WRITE DS 3 BDOS EQU 5 FCB EQU 5CH BUFF EQU 80H SYSRST EQU 0 ;SYSTEM RESET READC EQU 1 ;READ CONSOLE READRD EQU 3 ;READ READER WRITEP EQU 4 ;WRITE PUNCH WRITEL EQU 5 ;WRITE LIST IOSTAT EQU 7 ;INTERROGATE I/O STATUS ALTIOS EQU 8 ;ALTER I/O STATUS WRITECB EQU 9 ;WRITE CONSOLE BUFFER READCB EQU 10 ;READ CONSOLE BUFFER CONSTAT EQU 11 ;CHECK CONSOLE STATUS LIFTDH EQU 12 ERURA EQU 2 ;READ UNWRITTEN DATA EREXT EQU 1 ;ERROR IN EXTENDING FILE EREOD EQU 2 ;END OF DISK DATA ERNDR EQU 255 ;NO MORE DIRECTORY SPACE CR EQU 13 LF EQU 10 ESC EQU 1BH MODE EQU 0 CTRLZ EQU 1AH QU 22 ;CREATE FILE RENAMEF EQU 23 ;RENAME FILE LOGINV EQU 24 ;GET LOGIN VECTOR LOGGED EQU 25 ;GET LOGGED DISK DMAADD EQU 26 ;SET DMA ADDRESS ALLOCV EQU 27 ;GET ALLOCATION VECTOR ERNXF EQU 255 ;NON-EXISTANT FILE EREOF EQU 1 ;END OF FILE RETURN CODE******************************************************************* * * * * * PASCAL/Z HOT NEWS * * * * * ******************************************************************* This is a collection of itemsT ; SETEOF LXI H,EOFFLAG MVI M,1 RET ; ; Error messages NOFLNM LXI D,NOFNMSG JMP GENERR NOFILE LXI D,NOFMSG JMP GENERR RWERR ORI '0' ;make it ASCII STA WERMSG LXI D,WERMSG GENERR MVI C,WRITECB CALL BDOS JMP CBOOT ; CERROR LXI D,ERRMSG ORI '0' STA ERRMSG JMP GENERR ; MAP ;TURN LSN INTO IBM TRACK-SECTOR ; ; NOTE TRACK 00 IS NOT USED SO BLOCK 0 ; IS AT TRACK 01 SECTOR 1 ; ; ON ENTRY HL-REG HAS LOGICAL SECTOR NO. ; ON EXIT H-REG HAS PHYSICAL TRACK ; L-REG HAS PG DB ' READ/WRITE ERROR$' PERMSG DB CR,LF,'FILE ALREADY EXISTS. ' PMSG1 DB CR,LF,'C/R TO CONTINUE. CTRL-@ TO ABORT$' ERRMSG DB ' ERROR IN CREATE OR OPEN$' TEXT DB CR,LF,'.TEXT file being processed$' CODE DB CR,LF,'.CODE file being processed$' ; ; TXTFLG DB 0 DENTP DW 0 EOFFLAG DB 0 NLF DB 0 NTB DB 0 BUFADD DW 0 LSN DW 0 LSTLSN DW 0 BOL DW 0 EOB DW 0 SYSTLE DS 22 ; Jump table that points to BIOS jump table JMPTAB BOOT DS 3 WBOOT DS 3 CONST DS 3 CONIN DS ;LIFT DISK HEAD RSTDS EQU 13 ;RESET DISK SYSTEM SELECTD EQU 14 ;SELECT DISK OPENF EQU 15 ;OPEN FILE CLOSEF EQU 16 ;CLOSE FILE SEARCHF EQU 17 ;SEARCH FIRST DELETEF EQU 19 ;DELETE FILE READR EQU 20 ;READ RECORD WRITER EQU 21 ;WRITE RECORD CREATEF EQU 22 ;CREATE FILE RENAMEF EQU 23 ;RENAME FILE LOGINV EQU 24 ;GET LOGIN VECTOR LOGGED EQU 25 ;GET LOGGED DISK DMAADD EQU 26 ;SET DMA ADDRESS ALLOCV EQU 27 ;GET ALLOCATION VECTOR ERNXF EQU 255 ;NON-EXISTANT FILE EREOF EQU 1 ;END OF FILE RETURN CODE which are in no particular order but concern changes, additions and clarification of Pascal/Z. 1) New features introduced in Pascal/Z version 3.2 Separate Compilation -- allows a large program to be broken down into separate modules, in order to be compiled and assembled separately and then linked together. (see page 42 of the manual for details) Fixed point package -- performs arbitrary precision arithmetic in signed fixed-point decimal. (see page 79 of the manual for details) Pascal/Z Functions -- Pascal/Z now allows functions to return structured values, as well as scalar values. (see page 58 of the manual for details) WARNING -- Functions returning structured values may be passed as parameters in the same way as functions returning scalars. The exception to this is in the use of the intrinsic Pascal routines WRITE AND WRITELN. If you wish to output the return value of a function returning a structured value, you must first assign that valut. File variables may not be passed by value. 4) CLARIFICATION -- The maximum set size allowed by Pascal/Z is 256 elements. The allowable range of values for a subrange of integers is from 0..255. ( See page 69 of the manual ) 5) A new feature of Pascal/Z version 3.2-1 is that the LST file, generated during compilation, may be output directly to the console or a printer during compilation by specifying so with an 'x' or 'y'. respectively in the LST field of the compiler command. For exampompiler. Thus, in the example on page 41 of the manual, the statement: FILNAM := APPEND( FILNAM, CHR( 13 ) ); is no longer necessary. If you have existing programs which do append the carriage return, these programs will still work without alteration. 8) NOTE -- Console output of Pascal/Z during compilation has been altered slightly. The title of the user program is printed at the beginning of compilation, and again when the main program is entered. Thus, if the user program conring 14; Function RENAME (old file, new file: file string) :Boolean ; External; Function ERASE (old file: filestring): Boolean; External; Oldfile contains an unambiguous file name (ufn) of an existing C/PM file. Newfile contains a ufn. Each function returns TRUE if its operation was successful, FALSE otherwise. Failures can result from files not being found or from illegal file names. The user should also be sure that all files affected are closed when a RENAME or ERASE LDRV.PAS are provided which drive rename and erase. After compiling and linking they may be run to rename or erase files from the console (erase with caution! ). Exit either program by typing ^C instead of a file name. g commands: link /n:myprog myprog renera1a /e Renera1a is the filename for rename and erase (renera1a.rel). It is found on the same side of the disk containing the fixed point package. Two sample programs RENDRV.PAS and DEe to an appropriate variable. If you do attempt to pass a structured return value to WRITE OR WRITELN the compiler will indicate the restriction with an ERROR 3989. 2) NOTE -- Page 35 of the Pascal/Z 3.2 Manual states that compiler error 3980 indicates symbol table overflow. If an error -3980 is generated, it indicates type sector overflow. 3) N0TE -- Page 76 of the Pascal/Z 3.2 Manual displays the stack configuration of a file variable which has been passed by value. This is incorrecle, PASCAL .aay will compile on the 'A' drive, output the .SRC file to the 'A' drive, and output the .LST file to the printer. 6) NOTE -- Due to space considerations CMAIN.SRC, the commented version of MAIN.SRC, is now located on the side of the disk containing the fixed point package. 7) NOTE -- It is no longer necessary to append a carriage return to a variable length string when using the string as a file name in RESET or REWRITE. This is now performed by the ctains no procedure or function declarations, the title of the program will appear on successive lines of the console. 9) RENAME AND ERASE RENAME and ERASE are two external Pascal routines which allow a Pascal program to RENAME and ERASE files from the file directory. In effect they provide a clean interface to the C/PM system functions RENAME (23) and DELETE (19). To incorporate these functions in a Pascal program the following declarations are required: Type filestring = stis attempted. Examples: if RENAME ("P. COM ", "PIP.COM") then writeln ('PIP'); if ERASE ( 'MASTER.BAK' ) then writeln( 'master.bak has been deleted' ); Rename and erase are added at link time by giving the linker the following commands: link /n:myprog myprog renera1a /e Renera1a is the filename for rename and erase (renera1a.rel). It is found on the same side of the disk containing the fixed point package. Two sample programs RENDRV.PAS and DE; Pascal/Z run-time support interface ; COPYRIGHT 1978, 1979, 1980 BY JEFF MOSKOW NAME MAIN ENTRY FLTERR,HPERR,REFERR,STKERR,RNGERR,DIVERR,MLTERR,L98 ENTRY PERROR,STMTMSG,CRLF,CHAIN$,STRERR,MAXOUT,MXOUT,MXOUT1,STRMSG EXT ILODV,ILODV1,ILODV2,ILOD1,ILOD11,ILOD12,ILOD2,ILOD21,ILOD22 EXT ISTOR,ISTOR1,ISTOR2,XADDR,YADDR,FSUB,FADD,ENTRSC,ENTER,EXITF EXT FPEQ,SEQUL,FPNEQ,SNE,FPLTE,SLE,ILE,FPLT,SLT,ILT EXT FPGTE,SGE,IGE,FPGT,SGT,IGT,FMULT,IMULT,QMULT,IDIVD,IMOD EXT ERROR,CSTS,CI,CO,CHKDE, S: SET 0FFFFH D: SET 0FFFFH E: SET 00000H F: SET 0FFFFH T: SET 00000H VALID: SET 00000H MAXOUT EQU 4 MXOUT EQU MAXOUT*256 MXOUT1 EQU MXOUT*2 CR EQU 13 LF EQU 10 EOFMRK EQU 1AH BUFLEN EQU 80 TOPFRM EQU MAXOUT+MAXOUT+BUFLEN+3+1 MARGIN EQU 50 COMPILER EQU 0H MAXDRV EQU 16 CPM EQU 5 START: MVI C,25 CALL CPM LHLD 6 DCX H MOV M,A LXI B,0 LXI H,LAST EXX LHLD 6 LXI D,0-TOPFRM-1 DAD D PUSH H PUSH H POP X POP Y SPHL MVI B,MAXOUT*2+1 XRA A CLRSTK: MOV M,A INX H AD: MACRO WHERE,VALUE IF VALUE IF VALUE&0FF00H LXI B,VALUE CALL WHERE!2 ELSE MVI C,VALUE CALL WHERE!1 ENDIF ELSE CALL WHERE ENDIF ENDMAC ILOD: MACRO Q,SIZE,OFST IF SIZE&8000H MLOAD ILODV,OFST ELSE IF SIZE-1 MLOAD ILOD2,OFST ELSE MLOAD ILOD1,OFST ENDIF ENDIF ENDMAC ISTR: MACRO Q,SIZE,OFST MLOAD ISTOR,OFST IF R JC REFERR ENDIF ENDMAC LPOP: MACRO REG,DISTANCE IF DISTANCE PUSH H LXI H,DISTANCE+2 DAD S MOV E,M INX H MOV D,M PUSH D MOV D,HCALL FADD IF F JC FLTERR ENDIF ELSE IF 'Q'-'C' DAD Q D ELSE IF M XRA A DADC H JV MLTERR ELSE DAD H ENDIF ENDIF ENDIF ENDMAC ENTR: MACRO Q,LVL,VSIZ IF LVL-1 MVI B,LVL LXI D,1-VSIZ IF S CALL ENTRSC ELSE CALL ENTER ENDIF ELSE LXI H,1-VSIZ DAD S SPHL CHAIN$: EXX LXI H,LAST EXX LXI H,-MARGIN DAD S LXI D,LAST DSUB D JC STKERR ENDIF ENDMAC EXIT: MACRO Q,SSIZ LXI H,SSIZ+8 JMP EXITF ENDMAC L98: DAD D DAD D MOV E,M INX H MSLE ENDIF ELSE CALL ILE ENDIF ELSE LXI B,SIZE1*256+SIZE2 CALL STRLEQ ENDIF ENDMAC LESS: MACRO Q,SIZE1,SIZE2 IF 'Q'-'S' IF SIZE1 IF SIZE1&8000H CALL FPLT ELSE LXI B,SIZE1 CALL SLT ENDIF ELSE CALL ILT ENDIF ELSE LXI B,SIZE1*256+SIZE2 CALL STRLSS ENDIF ENDMAC GE: MACRO Q,SIZE1,SIZE2 IF 'Q'-'S' IF SIZE1 IF SIZE1&8000H CALL FPGTE ELSE LXI B,SIZE1 CALL SGE ENDIF ELSE CALL IGE ENDIF ELSE LXI B,SIZE1*256+SIZE2 CALL STRGEQ ENDIF ENDMCHKHL,PSTAT,CONSET,UNION,INN,LTEQ EXT GTEQ,INSECT,ORGAN,COMP,FUSS,FOUT,FXDCVT,CVTFLT,TOUT,TXTYP EXT FDIVD,STREQL,STRNQL,STRLEQ,STRLSS,STRGEQ,STRGRT,LAST EXT WRITELN,L109,L110,L111,L112,L115,L116,L117,L118,L120 EXT READLN,L121,L122,L123,L124,L125,L126,L127,L128,L129 EXT WRITE,L130,L131,L132,L133,L134,L135,L136,L0 EXT READ,L137,ABS,FPABS,SQR,FPSQR,EOLN,EOF,RESET,REWRITE EXT FTXTIN,CHAIN,NEW,MARK,RELEASE,TRUNC,ROUND,ARCTAN,COS EXT EXPFCT,LN,SQRT,SIN R: SET 0FFFFH C: SET 0FFFFH M: SET 0FFFFH DJNZ CLRSTK INX H MOV M,A LXI H,80H CMP M JRZ NOCOM MOV B,M DCR B INX H INITLP INX H MOV C,M CALL TOUT DJNZ INITLP NOCOM MVI C,CR CALL TOUT JMP L99 FINI: MACRO JMP L0 END START ENDMAC EXTD: MACRO INTN,EXTN EXT EXTN INTN: equ EXTN ENDMAC SPSH: MACRO Q,SIZE IF SIZE IF SIZE&8000H LXI H,SIZE DAD S SPHL ELSE MVI A,SIZE CMP M JC STRERR MOV B,A INR B PSHLP: SET $ MOV D,M PUSH D INX S DCX H DJNZ PSHLP XRA A ENDIF ENDIF ENDMAC MLO MOV E,L DCX H DCX H LXI B,DISTANCE LDDR POP D POP H POP B ELSE POP D ENDIF ENDMAC ADDR: MACRO Q TEMP SET 'Q'-'IY' IF 'Q'-'Y'*TEMP CALL XADDR ELSE CALL YADDR ENDIF ENDMAC MIDL: MACRO REG,LEVEL PUSH X MVI A,LEVEL MIDL1: SET $ MOV C,4(X) MOV B,5(X) PUSH B POP X CMP 1(X) JRNZ MIDL1 XRA A ENDMAC DSUB: MACRO Q,SIZE IF 0!SIZE&8000H CALL FSUB IF F JC FLTERR ENDIF ELSE XRA A DSBC Q D ENDIF ENDMAC DADD MACRO Q,SIZE IF 0!SIZE&8000H OV D,M XCHG PCHL EQUL: MACRO Q,SIZE1,SIZE2 IF 'Q'-'S' IF SIZE1 IF SIZE1&8000H CALL FPEQ ELSE LXI B,SIZE1 CALL SEQUL ENDIF ENDIF ELSE LXI B,SIZE1*256+SIZE2 CALL STREQL ENDIF ENDMAC NEQL: MACRO Q,SIZE1,SIZE2 IF 'Q'-'S' IF SIZE1 IF SIZE1&8000H CALL FPNEQ ELSE LXI B,SIZE1 CALL SNE ENDIF ENDIF ELSE LXI B,SIZE1*256+SIZE2 CALL STRNQL ENDIF ENDMAC LE: MACRO Q,SIZE1,SIZE2 IF 'Q'-'S' IF SIZE1 IF SIZE1&8000H CALL FPLTE ELSE LXI B,SIZE1 CALL AC GRET: MACRO Q,SIZE1,SIZE2 IF 'Q'-'S' IF SIZE1 IF SIZE1&8000H CALL FPGT ELSE LXI B,SIZE1 CALL SGT ENDIF ELSE CALL IGT ENDIF ELSE LXI B,SIZE1*256+SIZE2 CALL STRGRT ENDIF ENDMAC FDVD: MACRO Q,SIZE CALL FDIVD IF F JC DIVERR ENDIF ENDMAC MULT: MACRO Q,SIZE IF 0!SIZE&8000H CALL FMULT IF F JC MLTERR ENDIF ELSE IF M CALL IMULT ELSE CALL QMULT ENDIF ENDIF ENDMAC DIVD: MACRO CALL IDIVD IF M&D JC DIVERR ENDIF ENDMAC MMOD: MACRO CALL IMOD IF M JC DIVERR ENDIF ENDMAC NEGT: MACRO REG IF 'REG'-'H' IF 'REG'-'D' POP H POP D MVI A,80H XRA E MOV E,A PUSH D PUSH H ELSE MOV A,E CMA MOV E,A MOV A,REG CMA MOV REG,A INX REG ENDIF ELSE MOV A,L CMA MOV L,A MOV A,REG CMA MOV REG,A INX REG ENDIF XRA A ENDMAC CTRL: MACRO IF C CALL CSTS JRZ $+16 CALL CI CPI 'C'&3FH JZ ERROR MVI C,7 CALL CO XRA A ENDIF ENDMAC RCHK: MACRO REG,LBND,HBND IF R LXI B,LBND IF 'REGFSET DAD B IF SIZE-1 MOV B,M DCX H MOV L,M MOV H,B ELSE MOV L,M MOV H,A ENDIF ENDMAC IF NOT COMPILER STRERR: LXI H,STRMSG JR PERROR HPERR: LXI H,STKMSG JR PERROR REFERR: LXI H,REFMSG JR PERROR RNGERR: LXI H,RNGMSG JR PERROR ENDIF FLTERR: LXI H,FLTMSG JR PERROR STKERR: LXI H,STKMSG JR PERROR DIVERR: LXI H,OUMSG JR PERROR MLTERR LXI H,MLTMSG PERROR: CALL TXTYP JMP ERROR IF NOT COMPILER STRMSG DB 'String too lon','g'+80H REFMSG DB 'Call by reference precis SPHL MVI B,OFF2 CSETCL SET $ MOV M,A INX H DJNZ CSETCL ENDIF ENDMAC UNIN: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI D,OFFSET CALL UNION ENDMAC MEMB: MACRO Q,OFFSET,OFF2 LXI D,OFF2 LXI H,OFFSET CALL INN ENDMAC INCL: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI D,OFFSET CALL LTEQ ENDMAC SBST: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI D,OFFSET CALL GTEQ ENDMAC INTR: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI D,OFFSET CALL INSECT ENDMAC DIFF: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI fxdcvt else call fout endif else call cvtflt endif else xchg call cvtflt endif else pop b pop d pop h push d push b call cvtflt xcfp endif else pop h call cvtflt endif else lxi h,value call cvtflt endif endmac dsb1 macro reg xra a dsbc reg d endmac cmpi macro q,value cpi value endmac svln: macro mov a,m exx mov e,a xra a exx dcx h endmac gtln: macro reg,size exx mov a,e exx mov c,a xra a mov b,a lxi h,size :This submit file will accept as an argument the name of the file :to compile, assemble, link and run. For this file to work correctly, :PASCAL.COM, PAS2, ASMBL.COM, LINK.COM, MAIN.SRC and LIB.REL must be :on drive A. The file to compile must be on the drive specified by the :second argument to this routine: : e.g. submit compile myprog c :will compile myprog.pas on drive c Pascal $1.$2$2$2 asmbl main,$1.$2$2/rel link /n:$2:$1 $2:$1 /g '-'H' IF 'REG'-'S' PUSH H LXI H,HBND CALL CHKDE POP H ELSE MVI A,LBND CMP M JC STRERR XRA A ENDIF ELSE PUSH D LXI D,HBND CALL CHKHL POP D ENDIF ENDIF ENDMAC STMT: MACRO Q,NUMBER IF T+E VALID SET 0FFFFH EXX LXI B,NUMBER IF T IF 'M'-'Q' CALL PSTAT ENDIF ENDIF EXX ELSE IF VALID EXX MOV B,A MOV C,A EXX VALID SET 00000H ENDIF ENDIF ENDMAC GLBP MACRO Q,OFFSET,SIZE PUSH Y POP B DAD B MOV B,M DCX H MOV L,M MOV H,B LXI B,OFion erro','r'+80H RNGMSG DB 'Index or value out of rang','e'+80H ENDIF OUMSG DB 'Attempted divide by zer','o'+80H MLTMSG IF COMPILER DB 'Too many error','s'+80H ELSE DB 'Multiply overflo','w'+80H ENDIF STKMSG IF COMPILER DB 'Program too comple','x'+80H ELSE DB 'Stack overflo','w'+80H ENDIF FLTMSG DB 'Floating point overflow/underflo','w'+80H STMTMSG DB ' -- statement',' '+80H CRLF DB CR,LF+80H CSET: MACRO Q,OFF1,OFF2 IF OFF1 LXI H,OFF1 CALL CONSET ELSE LXI H,-OFF2 DAD SD,OFFSET CALL ORGAN ENDMAC MTCH: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI D,OFFSET CALL COMP ENDMAC NOMT: MACRO Q,OFFSET,OFF1 LXI H,OFF1 LXI D,OFFSET CALL FUSS ENDMAC xcfp: macro pop d pop h pop b xthl push d push h push b endmac cvtf: macro where,value if 'A'-'where' if 'B'-'where' if 'C'-'where' if 'D'-'where' if 'H'-'where' if value-4 mov a,l pop b pop d pop h mov h,a push h push d push b xra a call fout lxi h,13 dad s push h call dsub b dad s mvi m,cr endmac h push d push b call cvtflt xcfp endif else pop h call cvtflt endif else lxi h,value call cvtflt endif endmac dsb1 macro reg xra a dsbc reg d endmac cmpi macro q,value cpi value endmac svln: macro mov a,m exx mov e,a xra a exx dcx h endmac gtln: macro reg,size exx mov a,e exx mov c,a xra a mov b,a lxi h,size ; { new jth datum } rewrite( 'data.dat', data ); { create a new file } for i := 1 to 40 do write( data, i - 3.14159 ); reset( 'book.txt', english ); while not eof( english ) do begin readln( english, line ); { correct for spelling errors and write to new file } end; end. ta.dat', data ); read( data:i, datum ); { get the ith datum } datum := datum + 3.14159; write( data:j, datum )