ÿPASCAL2.KSûäâþyyPASCAL2.KS -- LANCASTER NOVA PASCAL RELEASE 2.1 -- KEY SHEET THE DISTRIBUTION TAPE IS 9-TRACK, 800 BPI IN RDOS DUMP FORMAT. FORMAT: MT0:0 PASCAL RELEASE 2 PROGRAMS MT0:1 DUPLICATE OF MT0:0 MT0:2 PASCAL SOURCES (IF ORDERED) MT0:3 DUPLICATE OF þ§lMT0:2 THIS IS AN EXAMPLE OF CLI COMMANDS FOR LOADING AND RUNNING THE LANCASTER PASCAL COMPILER OUT OF SUB-DIRECTORY 'PASCAL'. WARNING! OMIT THE COMMAND '@MAKESPACE.CM@' TO RETAIN ALL FILES. INIT ALGOL CDIR PASCAL DIR PASCAL LINK (ASM,MAC,XREF,LFE,EDIT,þ^zRLDR).SV/2 LINK MAC.PS/2 LINK RLDR.OL/2 LINK MATH.LB/2 LINK RFPI.RB/2 LINK SYS.LB/2 LINK LIBRARY.CM ALGOL:LIBRARY.CM LINK ALGOL0.LB ALGOL:ALGOL0.LB LINK ALGOL1.LB ALGOL:ALGOL1.LB LINK ALGOL2.LB ALGOL:ALGOL2.LB LINK ALGOL3.LB ALGOL:ALGOL3.LB LINK SMPYD.LB AþTdLGOL:SMPYD.LB LINK NMPYD.LB ALGOL:NMPYD.LB INIT MT0 LOAD MT0:0 RELEASE MT0 @MAKENEWPASCAL.CM@ @MAKESPACE.CM@ PASCAL /Z DEMO.PS $LPT/L DEMO $TTO PASCAL2.KS -- LANCASTER NOVA PASCAL RELEASE 2.1 -- KEY SHEET PREREQUISITES: The following Data General CþÅCorporation RDOS utilities are needed in order to create the NOVA PASCAL system: MATH.LB RFPI.RB RLDR.SV and RLDR.OL ASM.SV MAC.SV and MAC.PS and XREF.SV LIBRARY.CM ALGOL1.LB ALGOL2.LB ALGOL3.LB SMPYD.LB or NMPYD.LB or HMPYD.LB or EMPYD.LB Loadþ­'ing If the system was supplied on disc, then you should be able to use that disc to compile and run NOVA PASCAL programs without any changes. Loading from Disc If you need to move the NOVA PASCAL system to another disc using a different revisiþ¾kon of RDOS the following procedures should be used: 1. Move the NOVA PASCAL system binaries by a command of the form: MOVE/A/V directory @P4BINARIES.CM@ 2. If you require hardware multiply/divide: DELETE/V R2SMPYD.RB LFE X library title RENþØ"AME title.RB R2SMPYD.LB where library is one of NMPYD.LB HMPYD.LB EMPYD.LB and title is one of NMPYD HMPYD EMPYD as appropriate for the multiple/divide unit 3. Create a new systemþqO PASCAL system by the command: @MAKENEWPASCAL.CM@ (over) Loading from Cassette If the system was supplied on cassettes then: 1. Load all cassettes supplied using commands of the form: LOAD/A/V CTn:1 where n is the cassette driveþÜ number. 2. If the PASCAL system is to have provision for a hardware multiply/divide unit, then issue the following command sequence: DELETE/V R2SMPYD.RB LFE X library title RENAME title.RB R2SMPYD.RB where library is one of NMPYD.LB þLÏ HMPYD.LB EMPYD.LB and title is one of NMPYD HMPYD EMPYD as appropriate for the multiple/divide unit. 3. Create the new NOVA PASCAL system using the command: @MAKENEWPASCAL.CM@ In either case the total time takþ%fen to reload the system is about 20 minutes. During the initial creation of the NOVA PASCAL system the following messages will be produced: FILE DOES NOT EXIST: P4LIB.LB $BIND.RB DELETED: $BIND.RB FILE DOES NOT EXIST: P4LIB.LB $BIND.RB þXèDELETED: $BIND.RB FILE DOES NOT EXIST: PASCOVMAP.LD FILE DOES NOT EXIST: P4ASM.LD FILE DOES NOT EXIST: P4MAC.LD FILE DOES NOT EXIST: P4ERRSUM.LD FILE DOES NOT EXIST: PASCAL.LD FILE DOES NOT EXIST: PCODE.LD When the NOVA PASCAL systþÁem has been created to the required specifications, the following command may be issued to remove files which are no longer required: @MAKESPACE.CM@ Having issued this command, however, it is then not possible to reMAKE the system without reloading. þòþ Ref: CSD AF024 ÿR2SDBIN.RBûYU.þ&ÞýÿÓ•¯”GúÿH¤|é`z|ébúÿØ ÌêCCÿnëCCÿñÿœD’8œ$¾õ4Y2Q9! … -Y+Q…2A*A*A ñÿ’Dâ$’$õ•))�')�! #)#1ÄŒ¥ñÿ’D’$’$ Þ) Iö)Rªª¡© ªñÿ’D’$’$r*�ª1P²PÒÎPªŽ+úÿ’D Qš8-09Sþÿÿ û_€ÿDEMO.PSû­ ÷ 'þ5þ[PROGRAM DEMO(OUTPUT); BEGIN WRITELN('HELLO'); END. ÿPASCAL.RBûYY þ%Üýÿ³ãêbÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßþ&Ûÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿþ¨® ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßñÿA¼FÃNÿþFã�ÿ €ƒ  *€ƒ€ƒ ‚ ñÿ’DäÄ’(ZœL€ƒ€ƒ €ƒ  €ƒñÿäHâ(ä$: þ´KZf@    ÿ€ƒ TñÿE9¬8à}h €ƒ ]  ” ñÿ’D'9¦£v€ƒ€r €ƒ  b ñÿ"GE’DÃô„‚ gÿ  ‚ Àƒ€ñÿG’Ä'À ’r ð €a€ƒ €ƒñÿbG¢$’$ƒ“    ÿ€a# ‰#­�­«ñÿ”D¢$’$û×® ªþð¶�#‰Cʼn#ŽCŽ'­�P­ñÿ”D%Â$êµ¼ ªÃŽC¸�#ŽG…’C’#8¥+ñÿ’XG%þ�Ê8f�  ØP…8’+Ž’KÇáñÿG’$â$MbØë8�#’3–…Bº�#ƒ“C €ñÿœDœ$bÅãæ € €ƒ €ƒ + ñÿ’D’8œÄ6„ô€1€ƒ €ƒ €ƒ  ñÿ’H%œ$Ñ<*€þ>Ⴠƒ ‚ €ƒ€ƒ ñÿäD’("GÁ÷€ƒ † €ƒ&@  nñÿÂH¨Äâ8íã 8ƒ#8‰C*8–#8‰C ñÿKb''Ÿ§,� €A €ƒ  €ñÿ,E¤$¢È�×:1ÿ %  €1ÿ %  ÿ ñÿâH’(%íH& ‚ ÿÿ €ƒ€1ƒ@  ñÿ’D¢È”$´V€ƒ€ þáêKÿ €ƒ€€1|ñÿG"'’$½‰d@  €ƒ€ å €1€ƒ€’#ñÿ’D+œ$3r�ƒ ‚z € €ƒ € ñÿœDœ$’D‚²€ €ƒ  €ƒ € R €ƒ €ñÿEœ$œ$;Žƒ€) ‚ #€ƒ€ €ƒ€ƒ€ ñÿâDâ$'Äœ €ƒ €ƒ € €ƒ  €ƒñÿäD’$G¤ª € R €ƒþGY €ƒ€+ ‚ €ƒñÿâDâ$’8œ1¸ € €ƒ €ƒ€ €ƒ €ƒñÿG’89Æ›Æ € €ƒ  €ƒ € R €ñÿ”D’8’8Ôƒ €ƒ€- ‚ €ƒ€ €ƒ€ñÿG’ÄœÄgx⃀ €ƒ €ƒ € €ƒ  ñÿ’D’È%"ð€ƒ € R €ƒ €ƒ€/ ‚ ñÿ’D’ÄâÄ�†þ€ƒ € €ƒ €ƒ€þEÈ €ƒ €ñÿœDâ$ä$^D ƒ € €ƒ  €ƒ € Rñÿ’Dâ(â$ C €ƒ €ƒ€1 ‚ €ƒ€ €ñÿœD''>A(ƒ€ƒ€ €ƒ €ƒ € €ƒñÿG"'”$¥Á6  €ƒ € R €ƒ €ƒ€3 ñÿG''Ÿ>D‚ €ƒ € €ƒ €ƒ€ €ƒñÿ¢X’$âPŽ{R € "�ƒ ‚d8þ—¹ƒ# ñÿìXÅB%n `8ŽC8X € " ‚t8ƒ#ñÿâXÛ”$`Dn 8•C8X €5 " ‚„ñÿâPlÇ’(|8ƒ# 8’C8X € " ‚ñÿBEÇ¢ØK㊔8ƒ# 8“C8X €6 "ñÿ”D‡b;Fg˜ ‚¤8ƒ# 8�C8X €ñÿ’H*ì8‹!¦% " ‚´8ƒ# 8”C8þ14XñÿY’$GZM´ [ÿ €ƒ€1Š@  €5 ñÿ’DâPÇÂ" ‚é8ƒ# 8’C €ƒñÿ"G”$’8_°Ð  * €ƒ€ƒ ‚ €ƒñÿG'+~%Þ € €ƒ €ƒ€ €ƒz € ñÿ’DâPÇ«~ì" ‚8ƒ# 8“C €ƒñÿ"G”$’8ó®ú  R €ƒ€ƒ- ‚ €ƒþ£9ñÿG'+=% € €ƒ €ƒ€ €ƒz €6 ñÿ’DâPÇ[~" ‚=8ƒ# 8�C €ƒñÿ"G”$’8°$  * €ƒ€ƒ ‚ €ƒñÿG'+%2 € €ƒ €ƒ€ €ƒz €7 ñÿ’D’X’ÈË@" ‚a €ƒ  R €ƒñÿ¢D’Ä’ÄïN€ƒ) ‚ #€ƒ € €ƒ €ƒ€ñÿ’Xþö³¢X¬$:\ €ƒz € " ‚… ñÿœD’Dâ(Ÿ!j €ƒ  R €ƒ€ƒ3 ‚ €ñÿœDœ$¬$Ú¹xƒ € €ƒ €ƒ€ €ƒz ñÿEB%Çì�†€% " ‚¯8ƒ# 8”C ñÿœD’Dâ(·"” €ƒ  * €ƒ€ƒ ‚ &€ñÿœDœ$¬$°¹¢ƒ € €ƒ €ƒ€ €ƒz ñÿEB%ÇþÇq°€ " ‚z8ƒ# 8�C8ñÿGä$’$k¾ƒ+8•K €ƒ  R €ƒ€ƒñÿâHâ$â$ô4Ì3 ‚ €ƒ € €ƒ €ƒ€ €ñÿG"'’$å¥Úƒ €ƒ € ò€1 €ƒ€‘#ñÿ”D’Ä’Ä•è ‚ø €ƒ € €ƒ€€ƒñÿbE"'”$1·ön €ƒ  R €ƒ€ƒ8 ñÿG''Ü<þ�l‚ €ƒ € €ƒ €ƒ€ €ƒñÿ’X9’$³ €ƒ € ò€1 €ƒ€‘# ‚ñÿ¬Dœ$’$À / €ƒ € €ƒ€€ƒñÿ"K’$’$ÏŸ.n ò €1€ƒ’#�ƒ ‚ñÿK9¢$¥<Y €ƒ  * €ƒ€ƒ ‚ñÿYœ8’DÊlJ e €ƒ €ƒ  ‚€ƒñÿK9¢$ð¤Xn þíd €ƒ  * €ƒ€ƒ ‚ñÿ’Xœ8œ$«�f €ƒ€ƒ €ƒ €a € ñÿ’H¬$EÚ•t– €a€€ƒ´ e: ‚ ñÿ"GGEÇÛ‚€ e= ‚ € ÿ  ñÿG”ÄbÇß�8–#8X ‚› € ñÿK’È"G¹áž  å€1? ‚ åñÿ¢D’$+rǬ€1B ‚þÓŠ#‹+§ ‚ €rñÿäD’(’Äöº€ uD ‚€r€ €ƒ€ñÿ’X9â$ašÈ €r€ Àƒ€€r€ €ñÿœDœDœ$w¡Öƒ€ 5€ƒ€ €ƒ€ ñÿ’H’Ä’Ä™ ä5€ƒ€ €ƒ€ €r€ñÿYâ$â$Ø­ò Àƒ€€r€ €ƒ€ €ñÿœD’D9ºŽr€ ÃþÏ\€ƒ€€r€ “? ñÿGäÄ¢$\‚ €  å€1G ‚ñÿY’(”$(3 å€1I ‚Š#‹+§ ‚ñÿ’X9’$k:* €r€ uL ‚€r€ÿ`ñÿœP+ÇžÉ8hÏ#€ 6hŒC€ 8’#8ñÿ’X’X’8qŒFX ‚^ €ƒ€ €rñÿ"G’$’X� T€ Àƒ€€r€þÀæo &€ƒñÿG"'’$¡Db€ €r€ Àƒ€€r€…ñÿ’HbÅ9|ñp=à€`€ phŒC€ “G ñÿGâÄbÇ—‚~‚   8•#8X ‚ñÿ¬D”D¬$ÓfŒ™ å€1P ‚Š#¡ ñÿ’H’D+s¹šå€1R ‚Š# ‚ 8ñÿbGb%ä$;¨•#8X ‚½ €rþö€ uñÿEb%ä$ð3¶T ‚€r€É €r€ uñÿE’89a™ÄW ‚€r€ €ƒ€ 5€ñÿG'"'�¹Òƒ€ €ƒ€ €r€ Ãñÿ’D’Ä’ÄNà€ƒ€€r€ &€ƒ€ €r€ñÿYâ$â$ܬî Àƒ€€r€ €ƒ€ €ñÿœD’Dâ8=ür€ Àƒ€€r€ þÁ98•#ñÿ["+¬DEÛ 8X ‚ “P ‚ ñÿ¢HbÅâ8*“R ‚ ®  8•#ñÿ["+%°n&8X ‚6 å€1Y ‚Š#ñÿdE¢$”$» 4> å€1[ ‚Š# ‚­ñÿ’X9â$ÇŒB €r€ u] ‚€r€ &€ñÿœDœ$’Dž,Pƒ€ €r€ Àƒ€€þÛñÿG"''ã8^r€ €ƒ€ 5€ƒ€ €ƒñÿâDä$’$Ìl€ €r€ Àƒ€€r€ñÿ’X9â$˜�z €r€ à ‚€r€ €ñÿœDœ$’Df,ˆƒ€ €r€ Àƒ€€ñÿG;"+‹3–r€ 8•#8X ‚¨ “ñÿ”H¢ÈbÅÚǤY ‚­ “[ ‚ Ð  ñÿþAÞ"G%”Dü² å€1_ ‚ å€1a ñÿ’D9’(½-À‚�#�+§�C å€1c ‚�#�+ñÿ’D’X9ÈÀΧ ‚Ï  €r€ u] ñÿœDœ$œ$ AÜ‚€r€ &€ƒ€ €r€ ñÿ’H'"'°AêÀƒ€€r€ €ƒ€ 5ñÿ¢DℜXcø€ƒ€v`hæ#€ úhŒC€ ñÿ’D’Äþ£—’È× €ƒ€ €r€ Àƒ€ñÿ”Dâ$œXÅ÷ €r€… à€`€  hŒC€ ñÿ’D’È…Z" #€ƒ€ 5€ƒ€8è# à€`ñÿGâÄâ$pj0 € - hŒC€ #€ƒ€ €ñÿœD’D%4I> r€ Àƒ€€r€…3 à€`ñÿGâÄä$¨èL € I hŒC€ €r€ ÃñÿE’89ê þšþZ a ‚€r€ €r€ Ãc ñÿœDœ$œ$�@h ‚€r€ €ƒ€ €r€ ñÿ’H';0Év Àƒ€€r€ 8�#8X ‚ñÿlEâ$’Ä,Ô„ Ê  €ƒ 8‰#­�P­ñÿ[œ(œ$Q%’ 8X ªÉ ƒ�C € € ñÿ’D’È%v�  €ƒ€ƒ e€€ƒ ‚ ñÿ’H'"'/B® zþjò€ƒ€ €r€ Ãñÿ’DǬØ6¼ €ƒ€r€ 8‰'‰C8X‹  ñÿY¬8b'OcÊ  “_ ‚     &€ñÿœD˜Dâ8ûµØ ƒ€ h ‚€ƒ€8�# 8ŠCñÿ”D'ÇÏæ P­‹KÕO àÀ`hŒC€ 8‰S8ñÿGÂ$’Ä?vô –#8”C“C’C‘C�C8–#8•C�CŽC–Cñÿl[äÈ’(Y  8X þŠ¥  Ò  -¬ @ ”# ‚ñÿ¬D’È’$Aš P   ©)€*€+€,€ñÿ’D9ä$÷© -€.€ D &€ƒ ÏñÿE¢$"' ,,  j ‚€ ‚€ + ñÿ¢H%’(÷¯:  m ‚+€o ‚*€o ‚)€ñÿäHì(’D÷ÏH  ‚ ‹   Ÿ’#�ƒñÿ”D’È”$PìV ‚_  þÆî�€ƒ–# ‚v ñÿâPäÈÂ(Kd 8–#8”C  [ I ‚8ƒ#ñÿ”X’È”$ÉVr 8”C   ‚–#�ƒ ‚  ñÿY’D’$å €   l €ƒ–#�ƒŽ+§ ‚ñÿ¬D’D¬$ó[Ž    °�#�ƒ ‚   ñÿ’H’$"+œ „ €ƒ“#�ƒ ‚¬  œ ñÿ’Dl%’Díª €ƒ”# ‚ý þ™·   )€*€ñÿ’D’$¢ÈG¡¸ +€,€-€.€ $  ñÿäD¢(%0©Æ &€ƒ 8   ‚,€ ‚-€ñÿE’(d%ýÔ  ‚.€q ‚–# ‚é  É ñÿEd%¢( â  s ‚ð  á  u ‚ñÿYä(ì(:ãð  ê   ‚ K    ñÿ’X’%–e*–þ îþõðñÿ’E’d’%]´  ÿÿÿ>7ñÿ–L’%²$¬ã 24DLñÿ–E²,’eº„( TX\`dh ñÿ²D²d²d“-6 lpŠš ¨ ñÿ–L–,²$«2D ¶ Â ÎØ€âñÿ²L²,–eŽOR ìöü þB ñÿ–E–$–,¡“` & 06Lñÿ–E²,’$´}n TV b p APCSLAM NOñÿ’D’$’$¸ñ| TIRO... : E TNREDE ñÿ’D’$’$2£Š REOR(R)SI N-POCEDA SSMELBREñÿ’D’$’$2˜ .D EO SON TXESITOC.MMCñÿ’D’$’$t¦ OC.MMCVSSLCPDLCQþ%Öñÿ’D’$’$V,´ BRBLONS UOCR EIFELS EPICñÿ’D’$’$aΠIFDEOC.MMCI NREORR4POCPMñÿ’D’$’$‰Ð LIRES.V4POCPMLIREO.L4POCPMñÿ’D’$’$:ÜÞ LIRE4PRESRMUS.V4PREORSRñÿ’D’$’$AÃì 4PRESRMU4PAM.CVS4PSA.MVSñÿ’D’$’$Åáú 4PAMC4PSAMAM.CVSSA.MVSþÛÌñÿ’D’$’$ºA LRRDS.V4PUC.EBR4PIL.Bñÿ’D’$’$ñ BLT$OTONAVP SAAC LERIVISñÿ’D’$’$ÁË$ NO O N/ IFINHSDEW òÿ’D’$�$ïò2 TI HREORSRS CUECSSUFLLYÿÿ@À³? ñÿ$I]FH¡~£–P!OÚÉTá’ø ?U�:µîYÁN¨ ñÿ$IÊÔtf!�oát³ ŽzAO¥ _ x þ2N,¶·áD® ÷ÿIfŠ�º‚ý³Òá—ñ ðÖÁ˜é ÿÿ û_€ÿR2RFT.RBûU!9þPúýÿ”ü”¯ÔSúÿH+íÄÙŒ&îØŒ÷ÿÛšK\Œÿv§ÃRÿÓÒÿñÿ’D'’$ÕüP…Eÿ A€8;ú) !4!ñÿ’D’$’$¿�Òþ!4!�Ò!B!B ÿñÿ’D’$’$RUÿÿÿÿÿT!4!�Òù)ñÿ’D’$’ÄÎS*!$!@!÷º ϸ Ë X3!ñÿ’D’„’„”A†Õ ? ,) µ(  X)!$)Õ ñÿÌDÓ’$_¸”?ö  0 !û1)¶Qî ñÿ’D’$–$×�¢$!S‚Æ�…1û*ŽûJÀ£!@ `ñÿ’D–$’d°w°OCþb°Ì.MMC |Œðÿãÿÿ@9¿Æÿÿ@7¿È÷ÿR¹k¡¤áGN €ƒ  *€ƒ€ƒs ‚ ñÿ’DäÄ’(÷�L€ƒ€ƒ €ƒ  €ƒñÿäHâ(ä$× þIZf@    ÿ€ƒ TñÿE9¬8�h €ƒ ]  ” ñÿ’D'9C¥v€ƒ€r €ƒ  bƒ ñÿ"GE’Dý÷„‚ gb ƒ ‚ Àƒ€ñÿG’Ä'À ’r ð €a€ƒ €ƒñÿbG¢$’$ •    ÿ€a† ‰#­�­«ñÿ”D¢$’$û×® ªþ�¶�#‰Cʼn#ŽCŽ'­�P­ñÿ”D%Â$êµ¼ ªÃŽC¸�#ŽG…’C’#8¥+ñÿ’XG%þ�Ê8f�  ØP…8’+Ž’KÇáñÿG’$â$MbØë8�#’3–…Bº�#ƒ“C €ñÿœDœ$bÅãæ € €ƒ €ƒ + ñÿ’D’8œÄ6„ô€1€ƒ €ƒ €ƒ  ñÿ’H%œ$n>*€þÆãƒ€ƒs ‚ €ƒ€ƒ ñÿäD’("G^ù€ƒ † €ƒ&@  nñÿÂH¨Äâ8Šå 8ƒ#8‰C*8–#8‰C ñÿKb'''¨, €A €ƒ  €ñÿ,E¤$¢È’ß:1b ˆ  €1b ˆ  b ñÿâH’(%¯ƒH‰ ‚ ÿb €ƒ€1û@  ñÿ’D¢È”$ÙV€ƒ€ þ¼æKb €ƒ€€1ôñÿG'’8À d@  €ƒ€ €ƒ  €ƒñÿ"G”$’8²r€ R €ƒ€ƒ€Œ ‚ #€ƒñÿG'’Äh"€ € €ƒ €ƒ€ €ƒ €ƒ€ñÿ’X’ĒȃîŽ €ƒ  €ƒ € R €ƒñÿ¢D’Ä’Ä8‰œ €ƒ€Ž ‚ €ƒ € €ƒ €ƒ€ñÿœXœ$â$9§ª €ƒ €ƒþLX € €ƒ  €ñÿœD’Dâ(¤¸ƒ € R €ƒ €ƒ€� ‚ €ñÿœDœ$'Dƃ€ €ƒ€ƒ€ €ƒ €ƒñÿäD’$’$˯Ô € å €1€ƒ€•#�ƒ ‚ñÿbE’ÄœÄPöâæ € €ƒ€ €ƒ  ñÿ’D’È%­#ð€ƒ € R €ƒ €ƒ€’ ‚ ñÿ’D’ÄâĈ†þ€ƒ € €ƒ €ƒ€þ# €ƒ €ñÿœDâ$ä$YD ƒ € €ƒ  €ƒ € Rñÿ’Dâ(â$¥D €ƒ €ƒ€” ‚ €ƒ€ €ñÿœD'’$q›(ƒ€ƒ€ €ƒ €d "�ƒ ‚ñÿBEǢدå6@8ƒ# 8ŽC8X € "ñÿ”D‡b;ègD ‚P8ƒ# 8•C8X €ñÿ’H*ì8×#R‚ " ‚`8ƒ# 8þÓ«“C8Xñÿ¢X¨$â8'` €– " ‚p8ƒ# 8�Cñÿb[’DâPêÍn8X €ˆ " ‚€8ƒ# ñÿìX¢È”$ z|8”C8X [b €ƒ€1ñÿG”$‡oŠ@  €– " ‚µ8ƒ# 8ñÿG9¢$.o˜�C €ƒ  * €ƒ€ƒs ‚ñÿ’X’8’8H¦ €ƒ€ €ƒ€ƒ€ €ƒþ ÙñÿK”$œÄÍã´ò €— " ‚Ù €ƒ  ñÿ’H%œ$ÍBÂR €ƒ€ƒŒ ‚ #€ƒ€ ñÿ’D”ÄÅÙÚÐ €ƒ€ƒ€ €ƒò €d " ‚ñÿ¬Dä$’$çÆÞý €ƒ  R €ƒ€ƒñÿâHâ$â$z7ì” ‚ €ƒ€ €ƒ€ƒ€ €ñÿ¬D’(*â«úƒò €ˆ " ‚'8ƒ# þ ñÿGä$’$ÏS8”C €ƒ  * €ƒ€ƒñÿâHâ$â$h7s ‚ &€ƒ€ €ƒ€ƒ€ €ñÿ¬D’(*öª$ƒò € " ‚ò8ƒ# ñÿGâ8"'ÜU28�C8ƒ+8•K €ƒ  Rñÿ’DG'§¢@ €ƒ€ƒ” ‚ €ƒ€ €ƒñÿâD’89TN€ƒ€ €ƒ €ƒ € ò €ñÿ’DþDù¬$œ$G¡\1€ƒ€•# ‚p €ƒ€ ñÿ’D+9Õ«j €ƒ€€ƒæ €ƒ  R €ñÿ”D’8’8jŸxƒ€ƒ˜ ‚ €ƒ€ €ƒ€ñÿG’Ä’ÈC|†ƒ€ €ƒ €ƒ € ò €1ñÿ’Db%â$ ”€ƒ€•# ‚§ €ƒ€ €ñÿ’DY’$þw¢ƒ€€ƒæ ò€1€ƒ‘#�ñÿ’D’X’ÈþÓLj°ƒ ‚Ñ €ƒ  * €ƒñÿ¢D’ÈäÄžn¾€ƒ€ ‚ e €ƒ €ƒ s ñÿ’D’X’È%ïÌ‚€ƒæ €ƒ  * €ƒñÿ¢D’ÄâÄå{Ú€ƒs ‚ €ƒ€ƒ €ƒ €ñÿœD’Dd%©$èa € – €a€€ƒ€ eñÿE9ä85ûöš ‚ € e� ‚ € ñÿEì8¬$åºþ Rb  8–#8X ‚ ñÿbGœXì8gv€ ²  8•#8Xñÿ”D’È”DòR  ‚. å€1Ÿ ‚Š#6ñÿY’(b%@û. å€1¢ ‚Š# ‚± ñÿìX¬$œ$èÃ<8•#8X ‚R €r€ ñÿ¢H¬$œ$å5Ju¤ ‚€r€^ €r€ ñÿ¢H'"'é9Xuþ ”§ ‚€r€ €ƒ€ 5ñÿâDâ$ä$ŒAf€ƒ€ €ƒ€ €r€ Ãñÿ’D’8’8¹§t€ƒ€€r€ &€ƒ€ €rñÿ"Gœ$œ$ÆÀ‚€ Àƒ€€r€ €ƒ€ ñÿ’D’È'ço�€r€ Àƒ€€r€ 8ñÿbGd%”(0ÿž•#8X ‚¬ “Ÿ ‚±ñÿY¬8'I¾¬ “¢ þÈ4‚ C  8ñÿbGd%¢$ �º•#8X ‚Ë å€1© ‚ñÿ¬D”D’$-ØÈŠ#Ó å€1« ‚Š# ‚ñÿK"'œDÖB €r€ u­ ‚€r€ ñÿ’D’Ä’Èú ä&€ƒ€ €r€ Àƒ€ñÿâDä$â$nÁò€r€ €ƒ€ 5€ƒ€ €ñÿœDœ$’Dî-ƒ€ €rþr=€ Àƒ€€ñÿG"'œD”r€ €r€ Ãs ‚€r€ ñÿ’D’Ä’ÈÍ €ƒ€ €r€ Àƒ€ñÿâDbÇd% 2*€r€ 8•#8X ‚= “ñÿEY¬8LÏ8© ‚B “« ‚ e ñÿäD¢$’È(žF  å€1¯ ‚ å€1ñÿ’H"'%'dT± ‚�#�+§�C åþÕV€1³ ‚�#ñÿ’D+"'ßâb�+§ ‚d €r€ uñÿ’H’Ä’Äp­ ‚€r€ &€ƒ€ €r€ñÿYâ$ä$+~ Àƒ€€r€ €ƒ€ 5ñÿ’Dœ0+«+Œ€ƒ€ÿ`hÓ#€ �hŒC€ñÿ’X’89>…š €ƒ€ €r€ Àñÿ’DœD+^•¨ƒ€€r€…–à€`€ þhˆ¬hŒC€ñÿ’X9¢0.5¶ #€ƒ€ 5€ƒ€8Õ#²à€ñÿâDœXœ$üÄ`€ ÂhŒC€ #€ƒ€ ñÿ’D’È¢$„¨Ò€r€ Àƒ€€r€…Èà€ñÿâDœXœ$üà`€ ÞhŒC€ €r€ ñÿ¢H'"'ˆ9îñ ‚€r€ €r€ Ãñÿ’H’Ä’Ä{ü³ ‚€r€ €ƒ€ €rþ&a€ñÿYâ$bÇ)  Àƒ€€r€ 8�#8X ‚ñÿ¬DœÄ’8Wl_ €ƒ 8‰#­�ñÿbG%’Ä'þ&P­8X ª^ƒ�C € €ñÿ’X9¢$u4 €ƒ€ƒ e€€ƒs ‚ñÿYâ$ä$„+B z€ƒ€ €r€ Ãñÿ’Dâ8;ÀpP€ƒ€r€ 8‰'‰C8X þÖñÿ"[GìÄø-^  “¯ ‚ ›   ñÿ’D’ȇQªl&€ƒ€ ¸ ‚€ƒ€8�# 8ñÿ’DâDâ87zŠC­‹KÕäàÀ`hŒC€ 8‰SñÿâP˜$’8›ˆ8–#8”C“C’C‘C�C8–#8•C�CŽCñÿlGÙEŒ5––C8X  g - @ ”#ñÿ”DÙ’$ÏŠ¤ ‚å  ©)€*€+€ñÿþ@ä’D"'œDÝ ²,€-€.€ Df &€ƒ ñÿ¢H”Dä$ÁÀÏf º ‚€} ‚€ ÀñÿE¢$%š¿Îf ¼ ‚+€¾ ‚*€¾ ‚)€ñÿEE’È0¼Üj ‚ f   –#�ñÿ’DY’DL;êƒ ‚  ´ �€ƒ–#ñÿ’D¬$’D¼¦ø�ƒŽ+§ ‚  E�#�ƒñÿ”D’Èþœl”$“é ‚  󀃔# ‚` ñÿ"[’$’$˰   ª)€*€+€,€-€ñÿäD’(¢È_ƒ" .€ ¹f &€ƒ Íf ñÿ’H”D¢$Tœ0 g ‚,€l ‚-€l ‚.€À ‚ñÿ’DY”(]D> –# ‚L  , f à ‚S ñÿYä(¢(cúL  D f Å ‚ M f j ‚ñÿYb;–$�çþÍ~Z  àf   �ñÿ²D–e’%K¦h ¢¤¦ª ´ÿÿñÿ’D²d–,¨¡v ÿ>7¶ÔÖæñÿ’D–,²,sõ„ îöúþñÿ²L–%–%º¸’   (8ñÿ²D²d–e@G  BLRX`hñÿ–E’,²,Û ® þéjr| †Œñÿ²L²d’d¯¼ ¢ª¬ ¸ Æ CPDOñÿ’D’$’$˜Ê EOMINOT.R.. : E TNREñÿ’D’$’$‹ Ø DE REOR(R)SI N-POCEDA SSñÿ’D’$’$tâæ MELBRE.D EO SON TXESITOCñÿ’D’$’$þÂô .MMCOC.MMCVSDLCPCQñÿ’D’$’$Qq BRþÑÃBLONS UOCR EIFELS EPñÿ’D’$’$(Ð ICIFDEOC.MMCI NREORR4PAMñÿ’D’$’$®à .CVS4PSA.MVS4PAMC4PSAMñÿ’D’$’$j7, AM.CVSSA.MVSLRRDS.V4Pñÿ’D’$’$8E: UC.EBR4PIL.BBLT$OTONAVñÿ’D’$’$2¼H P OCEDR VESIOI N O N/ñÿ’D’$’$±^V IFINHSDEþº.TW TI HREORSRS ùÿ’D$“µd CUECSSUFLLYÿÿ@•µj ñÿ$IËFH¡~£–P!OÚÉTá’[ ?U�:�îYÁN ñÿ$IÚÚtf!�oát ŽzAO:_ x% ¶·áDC÷ÿIn��º‚ý³Òá—T ðÖÁ˜~ÿÿ û_€ÿMAKESPACE.CMû£j þÜ«DELETE PCODE.LD,PASCAL.LD,P4ASM.LD,P4MAC.LD,PASCOVMAP.LD,P4ERRSUM.LD,^ MAKENEWPASCAL.CM,MAKEP4LIB.CM,MAKEP4LIBN.CM,MAKEP4COMP.CM,^ MAKEP4ASM.CM,MAKEP4MAC.CM,MAKEP4ERRSUM.CM,MAKEPASCAL.CM,MAKEPCODE.CM,^ R2ROUTL.RB,R2IOUTL.RB,R2SCONSTS.RB,R2SECHKþ‡H.RB,R2SITAB.RB,^ R2SADMIN.RB,R2SINTEGER.RB,R2SBOOLEAN.RB,R2SSET.RB,^ R2STESTS.RB,R2SMISC.RB,R2SSPTAB.RB,R2SHEAP.RB,R2SOPN.RB,R2SIOIN.RB,^ R2SRD.RB,R2STI.RB,R2STP.RB,R2SREWR.RB,R2SRANDOM.RB,R2CRCODE.RB,^ R2IREAL.RB,R2RREAL.RB,R2IFNS.RB,R2RFNþWS.RB,R2IFT.RB,R2RFT.RB,^ R2IFW.RB,R2RFW.RB,R2CSPTAB.RB,R2CITAB.RB,R2SDBIN.RB,R2SDECODER.RB,^ R2SDIV.RB,R2SMEMACC.RB,R2SMPD.RB,R2SMPY.RB,R2SMYP.RB,R2SOVL.RB,^ SWOP.RB,^ P4ASM.RB,P4MAC.RB,P4PASCAL.RB,P4BLOCK.RB,P4BODY.RB,P4INIT.RB,^ P4CODþj–¸EGEN.RB,P4DECLARE.RB,P4ENTERERR.RB,P4ERRSUM.RB,^ PASCAL.RB,PCODE.RB,^ P4BINARIES.CM,MAKESPACE.CM^ ÿR2SOVL.RBûY!9þœ†ýÿSÏ•¯�ýÿ@pyˆØnñÿ’D’$’$Ûj *"( Q! ?( !$¬ 1 ? ñÿ’D’$’,å”! Òï)Íì( ÿÿ 24POCPMûÿ’Dh²LIREO.Lÿÿ û_€ÿR2SIOIN.RBûY!7þä"Àýÿ34bôÿ RÎÌ#Tzê@C¶lAîØ_úÿØT[¹ãBÿ¯ëÃ8ÿþÿˆñwñÿ’D’$’$CP… A !4!�Ò!.RB,^ R2SMYP.RB,R2SDIV.RB,R2SMPD.RB,R2SDBIN.RB,^ $BIND.RB,^ RFPI.RB;^ DELETE/V $BIND.RB^ ÿCOM.CMûââþ6XNSPEEDPASCAL2.KSÿÿR2SDIV.RBûYU.þ¸¡ýÿó•¯tHýÿ@}6ƒé ñÿ’D’$’$€r#Y!QIABÚÑpýPúK‚û©€�ñÿ’D’$’$/CY…ÿ1Cª‚ª 9ƒúø�ƒú©úöÿ’D’$·B!)ýÿ@_cŽ\ÿÿ û_€ÿP4DECLARE.RBûY ÷ $þ‚Ðýÿ£6åYtoåÿ$I ItŠ2Ù uа qŠ(0 QŠ-LPŠ(ÀOŠ-!Š-€%Š®!Š2ÙÿlÛlÛ۳ʊÿû‰2ÿû‰ÿÕ‰ÿü‰#ÿ!Šÿù‰ÿ׉ÿÖ‰ÿû‰ÿ!ŠÿÙ‰-ÿû‰-ÿñÿ’D’$¢$W¦b,bŠ ÈÞÌÿÏ(!e ñÿâDœ$”$ÙÞa ËÿÏ'aÌÿÏ(eþíêªñÿ’D’D’$ªýÌÞe¬9ÌÐ;Ý9Ì ßØÞeñÿ’H’(’$¶*09Ìì9Ôd# Ü Þã ÈÐÈèÞñÿ’D’$’$ÊÕ8ÈèÞÈèÞÞÐÞÐ ñÿG%’$"FaÌÞesÜÞãÈÐÈÝñÿ’D’$’$UITàÈ è ÈÈèÈÈèÈÈñÿ’D'’$ çbèÞ ÈaÈèÐÈÐ aþ®)ñÿ¢X'’$j¶pdw ÞaÌË^Hñÿ’DœD’$Úû~'(!e‘ Þa Ë^Hñÿ’D’Ä’D>—Œ'aÌ ÞeE ÈèÈñÿ’D%ÅøfšÈ9ÔÌ Þe¦ adª ÞñÿG”$’$Vl¨ad—ÌÞe ^ÀñÿœD'¢$­¶Üa aÈØÞe Üñÿ’Dþ_K’$’$ì™ÄÞã ÈÐÈÐÈèÈØÈèÞñÿ’D¢8'5äÒ ÈØa eâ ”ÞaÈèñÿ’D’$’$óàÞÈ èÈèàÈèÞÌÞñÿEÅ’8N†îeõ adù Þa Ë ÜñÿâD’$¢$„êüÜa ÈèÜà ÈØ Èe  ñÿâD’D¢$e kÞadÈØ Ð ÈÞe Èñÿ’D’D’$þâŠ9 ÈØdl ÜÞã ÈèÞ Ëñÿ’D’$œÄá}&^€' ÜÜa Èa ñÿE’8’$uä4e< ”ÞaÞ Ð ÈÐÈè Èñÿ’D’$¢$?PBÈ èÜàÈèÞÌÞeT ñÿGâ$œ$ŒlPadX Þa Ë ÜÜañÿ’D’$œDÃÇ^ ÈèÜà ÈØ Èel kÞañÿ’D’D¢$Núlþ”Ñ ÈÞe— ÈÐÈØÞe—Èñÿ’D’D’(ØìzØÞe—ÈØ,ÌeŒ ^�ñÿG’$’(x¬ˆad—ÈØÈØe— fÞañÿ’X’$œDÈ– È ÈÌË(!e¨ ÞañÿœD’(’$“J¤ Ëad­ ÈÞ b4bñÿ’D’$’$lï²Þ ÐÞÐÌË^€@'(!ñÿE’8’$ŽÀeÐþ@ Þa Ë^€@'ñÿG%”$ÂMÎaÌÞe‡ È ÐÌÞeûñÿ’D’$’$®oÜÜÞãÈÐÈÝàÈ èÞÈèñÿ’D’$'‚Íê ÈÈèÞÈ Ð Èa añÿ¢X'’$ Öødÿ ÞaÌ^€(ñÿ¢D'’$‚¥!e Þa Ë^ €@ñÿâD’$¢$u'aÌþ) ÞPH!e$ ñÿG’(œ(_Õ"aHe×ÌÞe2 añÿE’8’$R0d6 Þa Ë^@'ñÿ”D”$’$­�>ÜÜa€ È Èec ÈÐ È\ñÿâD’$’$ îLa È èÈÈèHÈØñÿ’D”$’$<‡Z ÐHÈPdBÈ ÐÌ ÞñÿE’Ä’$Ìbhe… aÌþü^^€@(!eñÿ’H’Ä’$/v… Þa Ë^€@'añÿ¢X’$’DôÞ„dÐÞ Ð ÈÞe� ÈÐÈØñÿ’D’$’(—Ø’ÐÈè È È ÐÈ Ðd‰Ì!ÞñÿE’$’$.¬ e|Ü ÞãÈÐÈèÞÈèÞñÿ’D’$’8L ®ÈèÞ ÈÈ aÌÞñÿE’$’$¶¼e[ÜÞãÈÐÈþRëÝàÈ èÞñÿ’D’$’$ú6ÊÈèÞÈèÞÈèH ñÿâD’8œ(õ?ØÈa aÌÞeè añÿE’8’(‘¦ædì ÞaÌÞeK ^€ñÿ’D’8”$Åœô Üa ÈØÐÈÞeFñÿ’D'’$\» ÈØ\a ÈèHHñÿ’D’$â$œ”ÈØPÈØÞ þFÌÈa #ñÿE'â$½êeB ,ÌÈae- mÞadñÿ’HÅ'çª,8 Èa e8 ^�aÈ èñÿ’D¢$'’ü:ÈÈèÈdF nÞa añÿ¢X'’$hpHdY Þa Ë^€ ñÿâDœD’$ ÞV'adi Þa Ë^€ñÿ’D’Ä’$i5d 'aÈèHÌ*Þþ5KeñÿœH’(’ħ­rx ad| ÞaÞÐHñÿ’D’$’$pd€ÐHÐÞÐÌ^(!ñÿE’$œ$Že_ Ë^ˆ€'ÜÜañÿ’D’(â$o²œÈØÞe° ÈØØÈa!ñÿE’8’$…øªe° oÞaÜÞãÈÐÈèÈñÿ’D’$’$ü¸ÈèÈÈ èÜàÈèÞÈþãñÿ’D’(”$WÆÐÈÞeÝÈÐÈØÈeØñÿœD”$’$rNÔ ²ÞaÈØÐdÇÈÐÈÐÌñÿ’D”$'¼³â ÞPH!eî aHñÿE%Å'�ðe�ÌÞeü ad ÞñÿG%ʼn•þaÌÞe  ad ÞñÿG’$¢$ ' a Ë^D'Üa®HñÿþM…’D’D¢$a%Èe"HÐÈÞe7Èñÿ’D’$’$³I(ØÐÈèÈÈèHÈÐdñÿ’Hœ(’$Vê6"Ì Þe[ aÌË^ñÿ’D%’8D'(!eY Þa Ë^ñÿ’D'â$©cR'ad_ ÞaÌñÿ’D”$’$+å` ÞPH!eoÈP añÿ’X’Dþÿ±”$yˆnHe„ÈPÈèÈdñÿ’D’$”$eš| ÈÞ b,bšÌûÏ(!e”ñÿœD’$’Äš*Š Þa ËûÏ'aÌûÏ(eñÿ’H’(%Cý˜ÌÿÏ(e¦ Ë È Èad ñÿ’D’D’$¢¦ÌÞeÜÞã ÈÈÈÐÈñÿ’D’$œ$W´èÞÈèÞÈèÞ añÿ’D’D’$:¿þðhÂÌÞeÞ%Ô ^€ÜñÿG”$’$�ÐaÞ%ÔÈÞeñÜÞãÈÐñÿ’D’$’$£UÞÈÝàÈ èÈÈè/ÌÈèÞñÿ’D’D’(çØìÈ/Ôd ÈØÞe ÈØØñÿ”Dâ$’DWþúÞe lÞad ÈèÈØñÿœD’(ÅjŠ ad Þad ÌÞñÿ¢D’8%KFþEÇe, aÌçÏ(!e, ÞñÿGâ$¢$#·$a ËçÏ'aÌÞe ñÿG%Åí‘2aÌ Þe> adB ÞñÿG’$’$Þ@aÞ ÐÜ ÞãÈÐÈè ÈÈñÿ’D’$’$ª;NèÞÈèÞÈ Ð Ë^ñÿ’D%’$\ ' ÜÜa ÈèÈ ÈÞñÿE¢$¢$Yje– ÈþšÀØÞe� È,Ìe ñÿâD%%%)xmÞaÞ ÐdŠ È-ÌeŠ •ÞñÿG’$œD†aÞ ÐÈè Èd– qÞañÿ’D’$%S€”Þ ÐÌ ÞPH!e£ añÿ’X’DâD4~¢HeDÌ Þe± adñÿ’H’ÄâDˆo°µ ÞaÌ*Þe¿ adñÿ’H’Ä’(à¾Ã Þaþß( ËÜÜa€ ÈÐÈñÿ’D’$%£ƒÌØ ÐÈèÈÈØÞeù Èñÿ’D’Ä’(ÿëÚØÜÜa ÈØ+ÌeéÞÐdñÿ’H’8’$ò@èî ÈÜa ÈÈÈèÐÈñÿ’D’$%¶öèÈ ÈÐ È Ð ÈÞeÉdñÿ’DâD’$ÎÌÞeh a9ÌÐ9ÌÞeñÿ’H’$’$ìD'9Ìè9Ô;Ý9Ì ßþ4ãÐÈÞÈèÞñÿ’D%’8[I ÈèÞd+ úÞaÞÐ ñÿ’D’$’$ ¼.Ë^%^' ÜñÿE’$’$»<a®Ü ÞãÈÐÈè;Ý9Ì ßØñÿ’D’$’$U9JÈè ÈÈèÈÈèÞÈ9Ôñÿ’DâDœD„ñXÌ'Þeb adf ÞañÿE%’ÄÇÉfdÌÞe³ aþp‡Ì*ÞeñÿœH’(’Ä¢ tz ad~ Þa Ë ÜÜñÿE%¢$cú‚a ÈÞe  ÈØÞe— ñÿâD%%ý%�sÞaÞ Ðd  È,Ìe  rÞñÿG’$’$­ÄžaÜÞãÈÐÈè ÈÈèÞñÿ’D%%„ܬÈèÞdÌ0ÞeÀ añÿ’X’(”$stºÞPdÃÞPÌÞþ9GeñÿâD¢$¢8"îÈ aÌ*ÞeÕ adÙ ñÿâD¢$”$MÖÞaÌÞeæ Ë ÜÜa€ñÿE’8'à´ädð yÞa ËûÏ'aÜ Þñÿ’D’$’$ÎaòãÈÐÈè ÈÈèÞÈèÈñÿ’D’$’$ö…ÈèH ÈÈÌË(!eñÿ’HœÄ’(å Þa Ëad ÈÞþ<ïñÿ’D’(’(¸õ ÈØÞe' ÈÞd, È ÈØñÿ’D’$%}ö*Ø bbÌÞe€;Ý9Ìñÿ’D’$’$ã„8 ß Ð ÈØÐÞÐÈÞÈ!"eñÿ’H%%ÚùFZÈØÌeRÈØÐdXÞÐñÿœD’(’DpÕT ¦Þad?È!e{ÜÞãÈñÿ’Dœ$’$˜ob Ð ÈèÌ Üa ÈèÞ Èþ¨'ñÿ’D’$œ$¤Up ÈØ ÈèÈ ÈèÈ añÿE’8’$”*~d„ ÞaÌK^ ñÿ’DœD’$úmŒ'(!e  Þa K^ ñÿ’D’8’$xhš'aÌ ÞPH!ñÿE”Ä”$Z#¨e­ aHe1Ì Þe»ñÿâDœD’$uT¶ ad¿ Þa bbÚñÿ’DþÓ0œD’$‡°ÄÌÞeØ Þa K^€ñÿ’D’8’(Ò'aÌÞeKÜÞãñÿ’D’$’$ YàÈ Ð ÈÝà È èÞ ÈèÞ Èñÿ’D’8’$<îèÞ aÌÞÌ Þ"eñÿœH’(’Äáü ad Þa K^ñÿ’Dœ$â$Â, 'ÜÜa ÈaÈñÿ’D’$%þ’#¿ èÈÈèÜàÌ ÞeE añÿ’X’$”$ʃ&ÌK^€'(!eCñÿœD’$’$úa4 Þa K^€'añÿ¢X'’$‹]BdI ÞadØ bb¢ñÿ’DœD’$o¯PÌÞed Þa K^€ñÿ’D’8’(Ë^'aÌÞe÷ÜÞãñÿ’D’$’$~lþ…kÈ Ð ÈÝà È èÞ ÈèÞ ñÿG’$œ(€­zaÌÞÌ Þ"eŠ añÿE’8’$˜èˆdŽ Þa K^ñÿ’DœD’$Ö' Ü Üa€ ÈaÈ è È/Ìñÿ’D’(’(ç2¤ÐÈÞeËÈÈÂeÄÈØèñÿ’D¢$’$i²ÈØÈ/ÌeÁÈèÈØdñÿ’H’$’(¯ÃÀÄÈþžçØ/ÔÈÐÈØÐd¥Ì ÞñÿE’Ä’$ôÑÎeñ aÌK^€'ñÿ”Dâ$’$2Ü(!eï Þa K^€ñÿ’DÅ¢87<ê'adõ Þadd/Ìñÿ”Dâ$’$¤êøÞe/  uÞa\ ã+T PYñÿ’D’$’$µ -EDI Þ Þ\ ã/ÌÞñÿ’D’$’$}ƒ Þ\ ãþrÎ\ ã/ÌØ/Ô/ÌÞeñÿ’H’D’$¡^"  Ì!e/ ^ ÌÞ\ ã ñÿ’D’$’(¼80 bb²ÞÐÌÞeb ÜÞãñÿ’D’$’$Ÿm> È Ð ÈÝà ÈèÈ ÈèÞ Èñÿ’D’$’$ƒKL èÞ ÈèÞ Èè8Ì Èañÿ’X¢8'ÏiZ ÈÐ adf  ÞaÌKñÿ’D’$¢$_©h ^€þ«N'çÏ'(!e†  ñÿâD’$’$…Öv Þa K^ €'çÏ'ñÿG’$%ù„ aÌ ÞPH!e“  añÿ’X’DâD]r’ He6 ÌÞe¡  adñÿ’H’Ä’$ô“  ¥  Þa K^'ñÿ’D’(%º:® çÏ'Ü Üa€ÈØÞe× È^ñÿ”Dœ$’(M¯¼ þeÇ  ^�aþÈd× ÈØeñÿ’H’(’(ê#Ê × È~ÞeÕ ^ Ðd× €Þ ÐÈñÿ”D’$’8ßÛØ ÞeC È Ð È Ýa ÈØÞñÿ¢D’$’$‘Øæ e2 ÌÞ Ô6ÌPÞPHñÿ’D¢$”$ølô ÞH"e HÈÂe ñÿ’D’D%�… ÞPd HØPdó Hñÿ”D’$’(³k Þe H èÈdþ‡�2 \ Þñÿ’D’$’$ÈL ãH Ð ÈÈà ÈèH È èñÿ’D’$’$¢û, ÈHP È èÈ Èè Ìñÿ’D”$”$Yø: Ì È Ô ÈØÐd× Ì Þei ñÿâD’$’$›•H  aÌK^€'(!ñÿE’8’$ÿcV eg  Þa K^€ñÿâDœD’$½d 'adm  ÞaÌÞþ(~ÌçÏñÿ’D’DœDCær (!"e6 /ÌÞe¯  uÞañÿ’D’$’$'—€ \ ã+T PY-EDI Þñÿ’D’$’$xŽ Þ\ ã/ÌÞÞ\ ã\ ã/Ìñÿ’D%’(dôœ Ø/Ô/ÌÞeƒ Ì!e¯ ^ Ìñÿ’D’$’$‚ ª Þ\ ã b*b²Þ ÐÌËñÿ’D’$œD-¾¸ ^€'(!eÓ  Þaþàñÿ’D’$â$–kÆ  KË'^€'aÌñÿ”D¢$'¡¡Ô ÞeÕ H eà  wÞa añÿ’X’$’(Óšâ Ì^€€(!eü  Þañÿ’X’$'xið  K^@€'aÌ^ñÿ’D%%;þ €€(ep ÌÞen  ^ñÿâD’8’(ÕÅ �a aÌÞeG ÜÞãñÿþUr’D’$’$‰k ÈÐÈÝàÈ èÞÈè ÈÈñÿ’D’$’$gð( è8ÌÈèÞÈèÞÈèÞñÿ’D’Ä'l6  ÈaÈ Ð .Ì Ýa  añÿ¢X'’$¼ D dK  ÞaÌK^Lñÿ’D’(’ÄâR '(!eg  Þa K^ñÿ’D'%+M` L'aÌ Þe dJ ñÿ’D’Dþâ ’ÄÒ¡n ÌÞeE  ^�aÞ Ð añÿ’X’(’$•w| ÌÞe° ÜÞãÈÐÈÝàñÿ’D’$’$ûŠ È èÞÈè ÈÈè8ÌÈèñÿ’D’$œ$F˜ ÞÈèÞÈèÞ Èañÿ’D'’Ä”þ¦ È Ð .Ì Ýa  aÌ^€ñÿ’D”$â$iã´ K'(!eÌ  Þa ñÿ’D’$’ăþ& K^L'aÌ Þeñÿ’Hœ(”$f«Ð z ÌÞe?  aÌÞe ñÿ’Dœ$’$)Þ  ^€ÜaÈØÐÈÞñÿ¢D’$”$@Zì e ÈØ^à(!e ñÿœD’$¢$kòú  xÞaÞÐ È Ð ÈÞe Èñÿ’D’$’DЕ èÈ ÈÐ ÈØ Ðd Èè Èñÿ’DÅ’8XÚ Èþß9 Ð ad!  ÞaÌKñÿ’D’$œD“»$ ^D'(!e=  Þañÿ’D’$¢8x˜2  K^D'adC  ñÿâD’D’Dã<@ ÞadJ ÌÞeQ ÞÐ añÿ¢X’$”$عN dS ÞÐÞ ÐÞÐÌÞe„ ñÿ’D’$’$!eE ÞaÌ^�(ñÿ’D’$¢$ CL\)#ÌÞH "#eÈ÷ÿ’D�$ÔÁZãÈ8Ô È9ÔÈ Ô ÿÿ û_€ÿR2SECHK.RBûY!5þœÝýÿ³•¯´Lèÿ$II'‡š¤€iš¤`iš¤ iš¤ jQ>1@UêA ñÿœD’$’$ke*;1.RB,^ R2SMYP.RB,R2SDIV.RB,R2SMPD.RB,R2SDBIN.RB,^ $BIND.RB;^ DELETE/V $BIND.RB^ ÿR2SREWR.RBûU!8þ2#ýÿs•¯ô�úÿHò.ýØKÙŒßÿlÛlÛÀ•1éÃNÿ:éÞÿï½c‚ÿï½C‚ÿbÿD½Ã8ÿUÃ8ÿ[¹ãBÿTxÿÓéÃyÿõéZÿñÿ’Dâ8'»9!4!�ÒPýþZ 8Z? ­ 0 ?ñÿ’D’$â8Ì (  ?( !4!�Ò�ýþZ 8ZñÿâD’$’$„ö, ­ 0 ?(  (  (  ?ñÿâD’8œØþðzp&*( 41 ’ �š…CDD YPñÿl[œØìØ»å8H@0 0 ‚÷0(ñÿ’D’8’$sFYQ! 0 ?,( )1!ä !ñÿb[â$’$ѤT 0)!Ý … !1.ùÿ¶I$�bhÐàÚöÿþÿÿÿ@‘¿nÿÿ@�¿pÿÿ@„¿{ÿÿ û_€ÿR2SCONSTS.RBûY!5þtcýÿ3 •¯4DñÿH’�þ[¹àBܱ@{\Œ@{ܱ\Œúÿ’„ ô»ÿÿ ýÿ ›hc±Fÿÿÿ û_€ÿR2STI.RBûY!8þ×—ýÿ󷕯t˜âÿ$IDRž"šM€™L’MpKŒM ‚JˆN l{N zt§àVv§ÀRnë@Cv§AÄÙ_ ôÿ`Û¿}ܱÿbÿ:éÞÿܱC{ÿýÿ…×z*ñÿ’D’$’$�2I!I1��ÒPB)Lƒþÿÿ!4ñÿ’D’$’Ä„·!�Ò!$!@!,!÷ ÿ2(·292)íñÿ’D’$Â$N½) ¥�(þÐyâç &1&Q…@ ñÿFÂ$’$*'X(Jª “‚'€ªHš‚'`‚ Šª ñÿ’D˜$â$}‘81 •'‚«HÅ‚' 1 ñÿ’D’m’$&!F'0 BšÜÜ ñÿ’D’$’$C°T ñÿ’D’$’$5°b ñÿ’D’$’$'°p þn® ñÿ’D’$’$°~ üÿ�D†ZŒ úÿHbê³Òá— 3éÁy ÿÿ û_€ÿR2STESTS.RBûYL þ„ýÿs¸•¯ô—îÿ$I@Î=ÿ¥‘ÿ¥‡D¥–7¥‡O¦‡ ó¤›÷ÿÛš\ŒÿÓÒÿÐ’ÿñÿ$I’H’$S:Q'QXQ ª@… ªq…ƒñÿ’D’$’$±â @… 6ªƒ  ªA…p… ñÿ’D’(’$Ï¿ªƒ!D Âþ1¶ÿâþ !ñÿ’D’8’$pO*!!$¥!D€0*ª) þ Êš­!ñÿ’D’$’$Üõ8!L‘!$!�‚!,�ª@H$,ñÿâD’$’$ÆfFÓ0ÇÏÕÐ%�5Ó?ô!$!!,ñÿ’D’8’$oUT † ® �7!0 –'P!$!','�ñÿ’D’$’$¤Äb! •ø ­%� �''$' �!Pñÿ’D’$’$·“p­!$!','��÷! •÷Š!Pñÿ’D’$’$¢ø~ !$!','§¥ê! •÷ Šþ:I›!P!ûÿ’DsŒ!!0…ýÿ@½¸¥b&ÿÿ û_€ÿP4ERRSUM.RBûŽŽþä™ýÿÌ\ã\ãd“+T'EH'NE PXñÿ’D’$’$.ßLCEET ÞÞ\ã^DÞ\ñÿ’D’(’$LøZ ã\ãd“+U'TNLI 'XEEPTCñÿ’D’$’$ÀCh ÞÞ\ã+DE ñÿ’D’$¢$Ýbv ÞÞ\ã\ãd“+ñÿ’D’$’$⇄D''OE PXCEþ¶6ET D Þ Þ\ãñÿ’D’D’$V¡’\ãd“+T''O'/ODNWOT ' ñÿ’D’$’$³  Þ Þ\ã+E PXCEET D ñÿ’D’$%þZ® Þ Þ\ã\ãd“+I'ñÿ’D’$’$í[¼'FE PXCEET D Þ Þ\ã\ñÿ”D’$’$õÊãd“+F'LI'EE PXCEET ñÿ’D’$’$2vØÞÞ\ã^DþÉ Þ\ ã\ãñÿE’$’$9åæd“+REOR RNIF CAOT RÞÞñÿ’D¢$’$> ô\ã\ãd“+REOR RNIV ñÿ’D’$’$=ÊRAAILBÞÞ\ã^EÞ\ñÿ’D’(¢$ò³ ã\ãd“q;@Þgdñÿ¢HE¢(Ň d.dQdtdˆdœd°dñÿ¢HE¢( ƒ,Ódçdûdd#þãId7dKdñÿ¢HE¢(·¡:_dsd‡dªdÍdðdAñÿ’D’$’$¨HAAAAAAAñÿ’D’$’$¨VAAAAAAAñÿ’D’$’$ó§dAAAAAAAñÿ’D’$’$å„rAAAAAAdñÿ¢HE¢(qy€d2dFd`dƒd—þâHdºdñÿ¢H’D’$ngŽÎdèdü bb>ÌÖ‘¼ÐÈd3 +UFCNITþH,NOR SELUñÿ’D’$’$�@ä TÞÞ\ã+YTEPM SU TEBñÿ’D’$’$_{òS ACÞÞ\ã+AL,RS BUARñÿ’D’$’$0_GN EROÞÞ\ã+P IOTNREñÿ’D’$’$œL ÞÞ\ã\ãdñÿ’H’$’$H,n +IFELV LAEUP RAMAÞÞ\ñÿ’D’$’$�¥*ã+TEREN TOA LLWODEþL˜ÞÞñÿ’D¢$’$'ð8\ã\ãdn +OFWRRA DEDñÿ’D’$’$ÉxFLCRADEÞÞ\ã+F NUTCOIñÿ’D’$’$àjT;NR PETEÞÞ\ã+TIOI Nñÿ’D’$’$ÑAbFOR SELU TÞÞ\ã+YTEPñÿ’D’$’$å¢pN TOA LLWODEÞÞ\ã\ñÿ¢D’$’$úË~ãdn +IMSSNI GERUSTLT ÞþÜñÿ’D’$’$—êŒÞ\ã+PY ENIF NUTCOI Nñÿ’D’$’$¨bšÞÞ\ã+EDLCRATAOI N ñÿ’D’$’(’¨ Þ Þ\ã\ãdn +-FOFñÿ’D’$’$†�¶MRTAF ROR AEÞÞ\ã+ Lñÿ’D’$’$0×ÄNOYL ÞÞ\ã\ñÿ”D’$’$ï«Òãdn +REOR RNIT PY EFOñÿþOH’D’$’$àÞÞ\ã+S ATDNRA DUFCNITñÿ’D’$’$7§îÞÞ\ã+NOP RAMATERE ñÿ’D’$%Ã&ü Þ Þ\ã\ãdn +UNñÿ’D’$’$T[ BMREO FAPAREMÞÞ\ã+ñÿ’D’$’$"ETSRD EO SON TGAÞÞ\ãñÿ’D’$’$ à&+ER EIWHTD CEALARÞÞ\ñÿ’D’$þ"®’$½ß4ã+ITNO ÞÞ\ñÿ’D%’$—áBã\ãdn +LIELAG LAPARñÿ’D’$’$èPEMETÞÞ\ã+ RUSSBITUTñÿ’D’$”$™ü^ITNO ÞÞ\ã\ãdn ñÿ’D’$’$zl+ERUSTLT PY EFOP ÞÞ\ñÿ’D’$’$:4zã+RAMATEREF NUTCOIÞÞ\ñÿ’D’$’$e«þrÒˆã+ NODSEN TOA RGEEÞÞñÿ’D’$’$Q–\ã+W TI HEDLCRATAOIÞñÿ’D’$’$rà¤Þ\ã^NÞ\ ã\ãdñÿ’H’$’$òϲn +YTEPC NOLFCI TFOÞÞ\ñÿ’D’$’$ÞÚÀã+O EPARDN S Þ Þñÿ’D¢$’$ZÓÎ\ã\ãdn +XERPSEISNOñÿ’D’$’$‡xÜI þ‚ñ SONÞÞ\ã+ TFOS TEñÿ’D’$’$RìêT PY E Þ Þ\ã\ãdñÿ’H’$’$�Ðøn +ETTS SNOE UQLATIÞÞ\ñÿ’D’$’$@a ã+ YLAOLEW DNOYL ÞÞñÿ’D¢$’$+ù \ã\ãdn +TSIRTCI CNñÿ’D’$’$ëw" ULISNOÞÞ\ã+N TOA LLñÿ’D’$’$ö0 WODE þ0% Þ Þ\ã\ãdñÿ’H’$’$KÏ> n +IFELC MOAPIRISNOÞÞ\ñÿ’D’$’$ÛíL ã+N TOA LLWODE Þ Þñÿ’D¢$’$áùZ \ã\ãdn +LIELLGT PYñÿ’D’$’$îth EFOO ÞÞ\ã+EPARDNS(ñÿ’D’$’$2Av ) Þ Þ\ã\ãdñÿ’H’$’$'ñ„ n +YTEPO þP[ FPORENA DÞÞ\ñÿ’D’$’$’s’ ã+UMTSB EOBLOAE NÞÞñÿ’D¢$’$ÐØ  \ã\ãdn +ES TLEMENEñÿ’D’$’$·=® TYTEPÞÞ\ã+M SU TEBñÿ’D’$’$�{¼ S ACAL RÞÞ\ã+ROS BUñÿ’D’$’$rÊ ARGN E Þ Þ\ã\ãñÿE’$’$g¡Ø dn +ES TLEMEþYFNE TYTEPÞÞñÿ’D’$’$IÃæ \ã+ SON TOCPMTABIELÞñÿ’D”$’$¹fô Þ\ã\ãdn +YTEPO Fñÿ’D’$’$]J AVIRBAELÞÞ\ã+I SONñÿ’D’$’$Í TRAAR Y Þ Þ\ã\ãñÿE’$’$"Å dn +NIED XYTEPI SONÞÞñÿ’D’$’$Çú, \ã+ TOCPMTABIþ¸ßELW TIÞñÿ’D’$’$: Þ\ã+ HEDLCRATAOI N ñÿ’D’$’D}®H Þ Þ\ã\ãdn +YTEPO ñÿ’D’$’$8RV FAVIRBAELÞÞ\ã+I Sñÿ’D’$’$Xfd ON TEROCDR ÞÞ\ã\ñÿ¢D’$’$4Ër ãdn +YTEPO FAVIRBAELÞñÿ’D’$’$¯€ Þ\ã+M SU TEBF LIþK/ EROñÿ’D’$’$ÕÃŽ ÞÞ\ã+P OITNRE ñÿ’D’$’(�ùœ ÞÞ\ã\ãdn +LIELñÿ’D’$’$ñª AG LAPAREMETÞÞ\ã+ Rñÿ’D’$’$v¸ USSBITUTITNO ÞÞ\ã\ñÿ”D’$’$¶Æ ãdn +LIELAG LYTEPO Fñÿ’D’$’$Þ0Ô ÞÞ\ã+OLPOC NORTLOV þ~!RAñÿ’D’$’$ðâ ÞÞ\ã+AILB E ñÿ’D’$%æ(ð ÞÞ\ã\ãdn +LIñÿ’D’$’$wVþ ELAG LYTEPO FÞÞ\ã+ñÿ’D’$’$4Ž XERPSEISNO Þ Þ\ãñÿ’D’D’$ÃU \ãdn +YTEPC NOLFCI T ñÿ’D’$’(*C( Þ Þ\ã\ãdn xq‘Wþ§ñÿ”D¢(EnÊ6 xÞg: dÜdd@d�d³ñÿE¢(EêJD dÖddIdld³dÖdùñÿE¢(E0CR d d? db d… d¨ dÚ dý ñÿE¢(Ep;` d dR du d§ dÊ dü d ñÿ’D’$¢$=n bbÞÌ’qŸyÐÈdã +ñÿ’D’$’$}=| SAISMGNE TFOF LIÞÞ\ãñÿ’DþO%’$’$kMŠ +SEN TOA LLWODE ÞÞ\ñÿ’D’(’$Õµ˜ ã\ãd+ALEB LYTEPI CNñÿ’D’$’$®¦ MOÞÞ\ã+APITLB EIWHTñÿ’D’$’$mz´ S LEÞÞ\ã+CEITGNE PXñÿ’D’$’$u– ERSSOIÞÞ\ã^NÞ\ñÿ’D’(’$TÇÐ ã\ãd+USRBNAEGB UODNñÿ’D’$’$þan�RÞ SÞÞ\ã+UMTSB ECSLAñÿ’D’$¢$ª-ì RA ÞÞ\ã\ãd+ñÿ’D’$’$ú NIED XYTEPM SU TÞÞ\ãñÿ’D’$’$ % +ON TEBI TNGERE ÞÞ\ñÿ’D’(’$0¼ ã\ãd+SAISNGEMTNT Oñÿ’D’$’$õ[$ TSÞÞ\ã+NAADDRF NUTCñÿ’D’$’$ƒ2 þÌDOI NÞÞ\ã+SIN TOA LLñÿ’D’$”$@ WODE ÞÞ\ã\ãdñÿ’D’$’$šõN +SAISNGEMTNT OOFÞÞ\ñÿ’D’$’$‘\ ã+MRLAF NUTCOI NSIÞÞ\ñÿ’D’$’$½êj ã+N TOA LLWODE Þ Þñÿ’D¢$’$^øx \ã\ãd+ONS CU HIFñÿ’D’$’$æ^† LE Dþî�NIÞÞ\ã+T IH SERñÿ’D’$’$»ñ” OCDR Þ Þ\ã\ãdñÿ’H’$’$Yé¢ +YTEPE RRROI NERÞÞ\ñÿ’D’$’$qy° ã+DA ÞÞñÿ’D¢$’$ྠ\ã\ãd+CAUTLAP RAñÿ’D’$’$dgÌ MATEREÞÞ\ã+M SU TEBñÿ’D’$’$˜ÌÚ A V RAAIþ+:ÞÞ\ã+LB E ñÿ’D’$’$¬Šè ÞÞ\ã\ãñÿE’$’$˜¥ö d+OCTNOR LAVIRBAELÞÞñÿ’D’$’$1ß \ã+M SU TENTIEH REBÞñÿ’D’$’$O× Þ\ã+F ROAM LON RON Nñÿ’D’$’$¸Â ÞÞ\ã+OLAC L ñÿ’D’$’(Sð. ÞÞ\ãþ…¿\ãd+UMTLñÿ’D’$’${< DIFENIDEC SAÞÞ\ã+ Eñÿ’D’$’$ɲJ ALEB L ÞÞ\ã\ñÿ”D’$’$¯ÞX ãd+OT OAMYNC SASEI ñÿ’D’$’$ªõf ÞÞ\ã+ NACESS ATETEMTNñÿ’D’$’(ét ÞÞ\ã\ãd+IMSSñÿ’D’$’$±4‚ NI GOCRRSEOPÞþð­Þ\ã+DNñÿ’D’$’$í+� NI GAVIRNA TEDÞÞ\ã+ñÿ’D’$’$׫ž LCRATAOI N Þ Þ\ãñÿ’D’D’$_N¬ \ãd+ERLAO RTSIRGNT ñÿ’D’$’$\�º ÞÞ\ã+GAIFLESDN TOA ñÿ’D’$’$ùÜÈ LLÞÞ\ã+WODE ñÿ’D’$¢$tÖ ÞÞ\ã\þ„^ãd’qñÿ’D¢(Eä Ÿ_’Þgê d{ dž dÖ dù ñÿE¢(EÍ*ò d dN d€ d£ dÆ dø d9 ñÿE’(’$Ïùd\ d d± bbÌ q³ñÿ’D’D’$¹ÎuÐÈd¼+RPVEOISUD CEALARñÿ’D’$’$ã¨ÞÞ\ã+ITNOW SAN TOF ñÿ’D’$’$§Ä*ROÞÞ\ã+AWDR þk ñÿ’D’$¢$ÁI8 ÞÞ\ã\ãdé+ñÿ’D’$’$Õ5FGAIA NOFWRRA DEDÞÞ\ãñÿ’D’$’$l¶T+LCRADE ÞÞ\ñÿ’D’(’$>Zbã\ãdé+APAREMET RISEZñÿ’D’$’$ÎnpM ÞÞ\ã+SU TEBC NOTSñÿ’D’$¢$7ô~NA TÞÞ\ã\ãdé+þÚñÿ’D’$’$šùŒIMSSNI GAVIRNA TÞÞ\ãñÿ’D’$’$Šš+NID CEALARITNO ÞÞ\ñÿ’D’(’$†›¨ã\ãdé+USSBITUTITNOO ñÿ’D’$’$ŒY¶ FÞÞ\ã+TSNAADDRP ORñÿ’D’$’$n‰Ä/CUFÞÞ\ã+CNN TOA LLñÿ’D’$”$¦ÿÒWODE ÞÞ\ã\ãdéñÿþLJ’D’$’$ûà+UMTLDIFENIDEL BAÞÞ\ñÿ’D’$’$2îã+LE ÞÞ\ñÿ’D%’$ Úüã\ãdé+UMTLDICEALERñÿ’D’$’$ø½  DALÞÞ\ã+EB L ñÿ’D’$”$ÑS ÞÞ\ã\ãdéñÿ’D’$’$¹&+NUEDLCRADEL BALEÞÞ\ñÿ’D’(þtÐ’$_œ4ã\ãdé+NUEDIFEN DALEBñÿ’D’$%ÿöB LÞÞ\ã\ãdé+REñÿ’D’$’$!"POR RNIB SA EESÞÞ\ã^ñÿ’D’$’D8 ^TÞ\ ã\ãdé+AVUL Eñÿ’D’$’$ólAPAREMET RÞÞ\ã+XEEPñÿ’D’$’$�zTCDE ÞÞ\ã\ñÿ¢D’$’$§Ðþ›èˆãdé+TSNAADDRF LI EAWÞñÿ’D’$’$Ö&–Þ\ã+ SEREDLCRADE ñÿ’D’$’D¶‹¤ Þ Þ\ã\ãdé+NUEDLCñÿ’D’$’$”]²RADEE TXREÞÞ\ã+AN Lñÿ’D’$’$aøÀIFEL ÞÞ\ã\ñÿ¢D’$’$LŽÎãdé+OFTRAR NRPCODERUÞñÿ’D’$’$;ðÜÞþ“§\ã+ EROF NUTCOI NXEñÿ’D’$’$ÁÂêÞÞ\ã+EPTCDE ñÿ’D’$’(ÉàøÞÞ\ã\ãdé+APCSñÿ’D’$’$ ŽLAP ORECUDERÞÞ\ã+O ñÿ’D’$’$09 RUFCNITNOE PXÞÞ\ã+ñÿ’D’$’$Ôè"CEET D ÞÞ\ãñÿ’D’D’$Q60\ãþíždé+IMSSNI GIFEL' Iñÿ’D’$’$ém>ÞÞ\ã+PNTU 'NIP ORRGñÿ’D’$’$‡sL AÞÞ\ã+ MEHDANI G ñÿ’D’$¢$•GZ Þ Þ\ã\ãdé+ñÿ’D’$’$ã3hIMSSNI GIFEL' OÞÞ\ãñÿ’D’$’$ÈÄv+TUUP'TI NRPGO RÞÞ\ñÿ’D’$’$ò¡„ã+MAH AEþ�HIDGN Þ Þ\ñÿ’D%’$ÇÚ’ã\ãdé+LIELAG LATFGñÿ’D’$’$¾M EIDLÞÞ\ã+I NAVIRNAñÿ’D’$”$+® T Þ Þ\ã\ãdéñÿ’D%¢(ļ q²v ÞgÃddEdhdñÿ¢HE¢(!Ê‹d®dàdd&d:dNdñÿ¢HE¢(Ì0Øhd‹d®dÑþEûdd5dgAñÿ¢D’$¢$Å)æd™ b b(Ì‘ÞeÌñÿ”D%%C)ôŸÞeý ad ao dñÿ¢D’$’$b> aÐ bbšÌ´qï¤ÐÈñÿE’$’$ÚÛd¼+REOR RNIR AE LOCÞÞñÿ’D’$’$É\ã+SNATTN :IDIG TXEÞñÿ’D’$’$�Ÿ,Þ\ã+EPTCDE þ÷µ ñÿ’D’$’DEr:ÞÞ\ã\ãdË+TSIRGNñÿ’D’$’$äAHC NOTSNA TÞÞ\ã+UMTSñÿ’D’$’$ôuVN TOE CXEE DÞÞ\ã+OSñÿ’D’$’$<‚dRUECL NI E Þ Þ\ã\ñÿ”D’$’$ÜqrãdË+NIETEG ROCSNATTNñÿ’D’$’$ƒo€ÞÞ\ã+E CXEESDR þÜ€NAEG ñÿ’D’$’(SúŽÞÞ\ã\ãdË+ 8ROñÿ’D’$’$ñmœ9 I NCOAT LÞÞ\ã+UNñÿ’D’$’$]ÖªBMRE ÞÞ\ã\ñÿ”D’$¢(œJ¸ãdËÉqÌæÉÞgÃddñÿ¢H’D’$®'ÆDdvd™ bbNÌðq+òñÿ”D’$’$åèÔÐÈd�+OT OAMYNN SEET Dþ,ßñÿ’D’$’$ âÞÞ\ã+CSPOSEO FDINEITñÿ’D’$’$ýÚðÞÞ\ã+IFRE S ñÿ’D’$%§þ ÞÞ\ã\ãdœ+OTñÿ’D’$’$\Q  OAMYNN SEET DÞÞ\ã+ñÿ’D’$’$¼GRPCODERUSEA DNO/ÞÞ\ãñÿ’D’$’$aÿ(+ RUFCNITNO S Þ Þ\þ¯"ñÿ’D’(’$�‘6ã\ãdœ+OT OAMYNF ROAWñÿ’D’$’$aDDRÞÞ\ã+R FERENEEC Sñÿ’D’$’$Í}RFOP ÞÞ\ã+ORECUDERE ñÿ’D’$”$,È`TNIRSEÞÞ\ã\ãdœñÿ’D’$’$·­n+RPCODERU EOT OOLÞÞ\ñÿ’D’$’$© |ã+GN ÞÞ\ñÿ’DþO$%’$òëŠã\ãdœ+OT OAMYNL NOñÿ’D’$’$Ë!˜ GOCÞÞ\ã+SNATTN SNIñÿ’D’$’$šC¦T IH SÞÞ\ã+RPCODERUñÿ’D’$’$ô´ E Þ Þ\ã\ãdñÿ’H’$’$ưœ+OT OAMYNE RRRO SÞÞ\ñÿ’D’$’$~Ðã+NOT IH SOSRUECL ÞÞñÿ’D’$’$þ½9ÈÞ\ã+NI E Þñÿ’D”$’$¤!ìÞ\ã\ãdœ+OT OAMYNñÿ’D’$’$XHúE TXREANÞÞ\ã+ LEREFñÿ’D’$’$ÿþERCNSE Þ Þ\ã\ãñÿE’$’$дdœ+OT OAMYNE TXREANÞÞñÿ’D’$’$ïé$\ã+SL Þñÿ’D”$’$_!2þXÞ\ã\ãdœ+OT OAMYNñÿ’D’$’$¹@L COLAF ÞÞ\ã+LISE ñÿ’D’$’$D„N ÞÞ\ã\ãñÿE’$’$Eò\dœ+XERPSEISNOT OOC ÞÞñÿ’D’$’$Gj\ã+MOLPCITADE Þñÿ’D”$’$’"x Þ\ã\ãdœúq‘úÞñÿE¢(EUù†gˆþêYdØd d<dnd‘dÃñÿE¢(’$Tß”dõdd;d^ bbÌñÿ’D¢$’$ÿH¢r,g£ÐÈdù+IDIVISNOB ñÿ’D’$”$J¥° YEZORÞÞ\ã\ãdjñÿ’D’$’$;ø¾+ONC SA ERPVODIDEÞÞ\ñÿ’D’$’$[%Ìã+F ROT IH SAVUL EÞÞ\ñÿ’D%’$ÇÖÚã\þ‚ãdj+NIED XXERPSEñÿ’D’$’$HwèISNOÞÞ\ã+O TUO FOBñÿ’D’$”$ûðöNUSD ÞÞ\ã\ãdjñÿ’D’$’$'å+AVUL EOTB ESAISÞÞ\ñÿ’D’$’$&%ã+NGDEI SUO TFOB ÞÞ\ñÿ’D’$’$Æ ã+UODN S ÞÞñÿ’D¢$’$3Ò.\ã\ãþ¸Õdj+LEMENE TXEñÿ’D’$’$¾i<RPSEISÞÞ\ã+NOO TUO ñÿ’D’$’$ ”J FARGN EÞÞ\ã\ãdñÿ’H’$’$†BXj+LGBOLAL BALE Þ Þ\ñÿ’D’$’$¾+fã+ON TLAOLEW DHWNEÞÞñÿ’D’$’$ct\ã+D CEALIRGN Þñÿ’D’$’$–‚ Þ\ã+XEETNRþFÝLAP OR/C ñÿ’D’$’$Dâ�ÞÞ\ã+UFCN ñÿ’D’$’(œäžÞÞ\ã\ãdj+LGBOñÿ’D’$’$ãå¬LAV RA Þ Þ\ã+ONñÿ’D’$’$zº TLAOLEW D Þ Þ\ã+ñÿ’D’$’$VSÈHWNED CEALIRGN ÞÞ\ãñÿ’D’$’$¸aÖ+E TXREAN L þ=¾ Þ Þ\ñÿ’D’$’$±oäã+RPCOF/NU C Þ Þ\ñÿ’D%’$ˆÖòã\ãdjr,_ ^,ñÿE¢(EÀ#gdªd¾dádd6Añÿ’D’$’$I–AAAAAAAñÿ’D’$’$;–AAAAAAAñÿ’D’$’$-–*AAAAAAþ%Añÿ’D’$’$–8AAAAAAAñÿ’D’$’$–FAAAAAAAñÿ’D’$’$–TAAAAAAAñÿ’D¢(’$”BdQrôõ°^ôgMddñÿ’H’$’$¿ÊP0 b’b +UOPTTU ñÿ’D’$’$¹^ ÞÜã+4PREORSR ñÿ’D’$¢$õjlÞCÜãÞÔ ÞGÐÌGÈe‡CÝñÿ’D’$¢$ë»zãÝÌ ñÍßCÏ ÌèÔdt^ñÿ’D’$’$¾.þ’ˆ ÞÜ ã+REOR RUSMMRA Y ñÿ’D’$’$‡– Þ ÞÜãÜã^ ÞÜ ã+****ñÿ’D’$’$ŽR¤******** * Þ ÞÜãÜãÜñÿ’D’$’D�²ãÞÔ ÞGÐÌGÈe;ÞÔ;ÞHÐñÿ’D’D’$¹nÀÌHÈe6ÌÝÌ ñ ßÛ(eñÿ’H’$’$´ Î1Ì<ÞÌÔ^ ÞÜ ãÌÞñÿ’D’$’$0ÜÜþYXã^:ÞÜ ã^ ÞÜ ãÌdñÿ”H”(”(ræê ad1 a”d1 aêñÿEEEz>ød1 ad1 aÌd1 añÿ¢H¢(¢(w`�d1 akd1 ad1dñÿ’H%¢(U1 ñ6 Þgdëdðdõdñÿ¢HE¢(YÕ"údÿdd ddddñÿ’H’(’(î–0Ìèþ!äÔdÀÌèÔd·CÜãÜùÿ’DDËÂ>ã aR*ÿÿ@»¨Dÿÿ û_€þ¸¸ÿMAKEP4COMP.CMûdU GþDELETE PASCOVMAP.LD;^ RLDR R2IOUTL,R2SCONSTS,R2SECHK,R2SDECODER,^ R2CITAB,R2SMEMACC,R2SADMIN,R2SINTEGER,R2SBOOLEAN,^ R2SSET,R2STESTS,R2SMISC,R2CSPTAB,R2SHEAP,^ R2SOPN,R2SIOIN,R2SRD,R2STI,R2STP,R2IREAL,^ R2IFNS,R2IFT,R2IFW,R2SOVL,^ R2SMYP,R2SDIV,R2SMPD,R2SDþbŸ¥BIN,MATH.LB,^ P4PASCAL,P4BLOCK[P4INIT,^ P4DECLARE,P4BODY P4CODEGEN] P4COMPILER/S PASCOVMAP.LD/L^ ÿR2ROUTL.RBûU!4þÈwýÿtÏ”¯ô€ñÿH’FÆï½‚ ÓéÀy õéZ1éÀN:éÀžëÿlÛØØܱÿ\ŒÿD½Ã8ÿUÃ8ÿï½c‚ÿ[¹ãBÿTxÿôÿ¤„$IDûìÿÿ AIAEñÿG’$'­÷Y(’ÒÁ‚Àª:¿žZY(’ÒÀªñÿ’D’8â8ý¥"§À‚  Y(ÿ"Å�Pª8ç@ñÿÈD„Â$' !( Hþ“» ,Í ƒû) (�ñÿ[è$:p½*H,1µ (0•P0•"õÿ’P’$ ÿ÷8 03( €üÿÿÿ@¹¿Fÿÿ@µ¿Jûÿ¶Mc¬Jœ$¬4ÿÿ@m¿’ÿÿ@)¿Öÿÿ@å¾ÿÿ@¡¾^ñÿ’D’$’$úYNÿ $@¥#H"H!H!$8#\ ñÿ’D’$’$aöþ4z\Õ­Q! ?( ë12P)¶TQ & ñÿÂD’$ÈÄfcj N1 PN1 *O!¥PÒPH!HA 0 ñÿZ’˜Â$xgx0 ‚ ?÷º ϸ Ë X4!ñÿ’D’„’„‘A†Õ ? -) µ(  X*!%)Õ ñÿÌDÓ’$[¸”?ö  0 "û1)¶Qî ñÿ’D’$’$;¢%!S‚Æ�…1û*ŽûJÀÿ¢!@ ñÿ’L’$’lcI°bþxò?OC.MMC ~ŽðÿþÿD-ؾãÿÿ@8¿Çÿÿ@6¿Éôÿ@QÀn¡¤áGN à]®%Þìß+EGRTñÿ’D’$’$ VLNAOD à]®&Þìß+ñÿ’D’$’$Ý ZAPEG  à]®'Þìñÿ’D’$’$Îhß+OE R à]®ñÿ’D’$’$O/vþOÆ(Þìß+ORNU D àñÿ’D’$’$žæ„]®)Þìß+AHTL ñÿ’D’$’$ÌÒ’à bbl-ÝÞã-ÌÐÈèñÿ’D’$’$9ó ÞÈèÞÈèÞ,ÝÞã,Ìñÿ’D’$’$R®ÐÈèÞÈèÞÈèÞ+Ýñÿ’D’$’$;6¼Þã+ÌÐÈèÞÈèÞÈèñÿ’D’$’$+ÊÞþÆš*Ý Þã*ÌÐÈèÞÈèÞñÿ’D’$’$ÿØÈèÞ)ÝÞã)ÌÐÈèÞñÿ’D’$’$ã@æÈèÞÈèÞ.ÝÞã.ÌÐÈñÿ’D’$’$×ôèÞÈèÞÈèÞ(Ý Þãñÿ’D’$’$Ó"(ÌÐÈè+ÌÈèÞÈèÞñÿ’D’$’$pÌÈèÞ bb‚ÜÞãÈ Ðñÿ’D’$’$Ÿ4 È+NIETþ,EG R à È èñÿ’D’$’ĶÊ,-Ì ÈèÞ ÈaÜÞãÈñÿ’D’$’$­¯: Ð È+ERLA à Èñÿ’D’$’8–6H è,Ì ÈèÞ ÈaÜÞãñÿ’D’$’$оVÈ Ð È+HCRA àñÿ’D’$'öbd È è+Ì ÈèÞ ÈaÜÞñÿ’D’$’$L[rãÈ Ð È+OBþ¬‡LOAE N ñÿ’D’$â$ a€à È è*Ì ÈèÞ ÈaÞñÿ’D’$’D´¾ŽÐÞÐÞ ÐÈ ÈeÁÜÞãÈñÿ’D’$’$ŒÏœ Ð È]®Èìßà È è*Ì Èèñÿ’D’$’$]ǪÈ ÈèÈÞ ÈèÞ ÈñÿG”$’$)+¸aÈÐÈèÐd“*ÌèÈÜñÿ’D’$’$5ÇÆÞãÈ Ð È+IN Lþ*{ ñÿ’D’$’$ ÞÔà È è)Ì ÈèÞ ÈèÞñÿ’Dâ$’$•¶â ÈèÞ Èa$ÞÐ%Þ ÐÈ Èñÿ¢D’$’$=ðeÜÞãÈ Ð È]®Èìßñÿ’D’$’$ëüþà È èÞ ÈèÞ ÈèÈÞñÿ’D’$â$®<  ÈèÞ ÈèÞ ÈaÈñÿ”D’$’$5'èÐdîÜÞãÈ Ð Èþýa]®&Þìñÿ’D’$’$Êì(ßà È èÞ ÈèÞ ÈèÞñÿ’D’$'AP6 ÈèÞ ÈèÞ ÈaÜÞñÿ’D’$’$ý«DãÈ Ð È]®)Þìßà È èÞñÿ’D’$’$ˆûR ÈèÞ ÈèÞ ÈèÞ Èèñÿ’D’8’$â`Þ ÈaÜÞãÈ Ð È]®ñÿ’D’$’$ln'Þìßà È èÞ ÈèÞþa• Èèñÿ’D’$œ$„&| Þ ÈèÞ ÈèÞ Èañÿ’D’$’$›×ŠÜÞãÈ Ð È]®(Þìßà È èñÿ’D’$’$aŘÞ ÈèÞ Èè Þ ÈèÞñÿ’Dâ$’$¶¦ ÈèÞ ÈaÞÐÞ ÐÈ Èñÿ¢D’$’$µ ´eâÜÞãÈ Ð È]®Èìßñÿ’D’$’$9üÂà È èÞ ÈèÞ ÈèÈÞþ4åñÿ’D’$â$ê;Ð ÈèÞ ÈèÞ ÈaÈñÿ”D’$’$°%ÞèÐd²ÜÞãÈ Ð È]®#Þìñÿ’D’$’$ ììßà È èÞ ÈèÞ Èè Þñÿ’D’$'y[ú ÈèÞ ÈèÞ ÈaÞÐñÿ’D%’$$dÞ ÐÈ Èe:ÜÞãÈ Ð È]ñÿ’D’$’$F®Èìßà È èÞ ÈèÞ ÈñÿþcO’D’$’$Ì�$èÈÞ ÈèÞ ÈèÞ ñÿâD¢$’$Un2ÈaÈèÐd ÞÐÞ ÐÈ Èñÿ¢D’$’$� @enÜÞãÈ Ð È]®Èìßñÿ’D’$’$¡ûNà È èÞ ÈèÞ ÈèÈÞñÿ’D’$â$];\ ÈèÞ ÈèÞ ÈaÈñÿ”D’$’$ÃjèÐd>ÜÞãÈ Ð È+ ñÿ’D’$þ.’$ßÙx à È è,Ì ÈèÞñÿ’D’$’$xÚ† ÈèÞ ÈèÞ ÈèÞ Èñÿ’D’$%ʆ”èÞÞÐ Þ ÐÈ ÈeßÜ Þñÿ’D’$’$’Ò¢ãÈ Ð È]®Èìßà È è,Ìñÿ’D’$’$° ÈèÈ ÈèÞ ÈèÞ Èèñÿ’D’$’$,Ó¾Þ ÈèÞ ÈèÈ Þ Èèñÿ’D’$œ$3%þ¡ÌÞ ÈèÞ ÈèÞ Èañÿ’D’D’$4%ÚÈèÐd› bb 5ÝÞã5Ìñÿ’D’$’$YèÐÈ+ àÈñÿ’D’$’$±Úö èÞÈèÞ4ÝÞã4ÌÐÈ+ñÿ’D’$’$=õ àÈ èÞñÿ’D’$’$µîÈèÞÈèÞÈèÞ3ÝÞñÿ’D’$’$ôø ãþ8¡3ÌÐÈ+ ñÿ’D’$’$á.àÈ èÞÈèÞÈèÞÈñÿ’D’$’$‰Ó<èÞÈèÞÈèÞ2ÝÞãñÿ’D’$’$ËûJ2ÌÐÈ+ àñÿ’D’$’$«ùXÈ èÞÈèÞÈèÞÈèñÿ’D’$’$¼·fÞ1Ý Þã1ÌÐÈ+ ñÿ’D’$’$C7t þ2§àÈ èÞÈèÞÈñÿ’D’$’$pµ‚èÞÈèÞÈèÞ ÈèñÿG’$’$ôE�aÈèÞÈèÞÈèÞñÿ’D’$’$I]ž0Ý Þã0ÌÐÈ+ ñÿ’D’$’$=±¬ àÈ èÞÈèÞÈèÞñÿ’D’$’$@•ºÈèÞÈèÞÈèÞ ñÿœD’$’$~ÈÈèaÈþÇÞèÞÈèÞÈèñÿ’D’$’$)¿ÖÞ bbÐÞ/ÔÞ"ÔÞ$ÔÞñÿ’D’$”$îËä#ÔÞ'ÔÞáÔÞÔ ÞÐÌÈeñÿ’D’$’$B¡ò¹ÝÌìß^ ÌèÔdñÿ’H’$’$s®íÞ&ÔÞ%ÔÞ¤ÔÞT®ÞÔÞ6Ôñÿ’D’$’$²E ÞÞÞ ÔÞÔÞÔÞ!Ô^ ñÿ’D’$’$=ÔÞÔÞ7Ô^ÿþƒ˜ ÞT­ÞÞñÿ’D’$’$.™*T¬ b b>^òWñÿ’D’$’$ß8^€O'ÿ×^|€ñÿ’D’$’$MÉFÿÏ'û×^\ç×^�>ñÿ’D’$’$^ÐT÷×^#ó×^ øï×^ñÿ’D’$’$Wšbþë× b bZ]GÞìñÿ’D’$’$nøpß+FI þ‹J à]Gñÿ’D’$’$›‘~Þìß+OD àñÿ’D’$’$RŒ]GÞìß+FO  ñÿ’D’$’$vcšà]GÞìß+OT ñÿ’D’$’$hn¨ à]GÞìß+NI ñÿ’D’$’$Uh¶ à]GÞìß+RO ñÿ’D’$’$x—Ä à]GÞþ¶ìß+ñÿ’D’$’$ÒNE D à]GÞìñÿ’D’$’$õÈàß+OF R à]Gñÿ’D’$’$2Mî Þìß+AV R àñÿ’D’$’$ØÜü]G Þìß+ID V ñÿ’D’$’$ÿE à]G Þìß+OM D ñÿ’D’$’$ú/ à]G Þìß+ES T þL ñÿ’D’$’$âQ& à]G Þìß+NA Dñÿ’D’$’$—4  à]GÞìß+ñÿ’D’$’$‹þBON T à]GÞìñÿ’D’$’$^ÇPß+HTNE à]Gñÿ’D’$’$‹\^Þìß+LEES àñÿ’D’$’$9Ël]GÞìß+IWHT þ­#ñÿ’D’$’$Y;zà]GÞìß+OGOT ñÿ’D’$’$b@ˆ à]GÞìß+ACES ñÿ’D’$’$;2– à]GÞìß+YTEPñÿ’D’$’$Š–¤ à]GÞìß+ñÿ’D’$’$õ ²IFEL à]GÞìñÿ’D’$’$ö¨Àß+EBIG N à]Gñÿ’DþO(’$’$ÎÞìß+NUIT L àñÿ’D’$’$¿°Ü]GÞìß+HWLI E ñÿ’D’$’$í êà]GÞìß+RAAR Y ñÿ’D’$’$Ïø à]GÞìß+OCSN T ñÿ’D’$’$ÜG à]GÞìß+ALEBñÿ’D’$’$j L à]GÞìß+ñÿ’D’$’$þó!NÜ" EREPTA à]GÞìñÿ’D’$’$\˜0 ß+EROCDR à]Gñÿ’D’$’$b$> Þìß+ODNWOT àñÿ’D’$’$,½L ]GÞìß+APKCDE ñÿ’D’$’$WZ à]G Þìß+ARDNMO ñÿ’D’$’$"øh à]G!Þìß+OFWRRA Dñÿ’D’$’$R6v þ¿’ à]G"Þìß+RPGOñÿ’D’$’${6„ AR M à]G#Þìß+ñÿ’D’$’$¦§’ UFCNITNO à]G$Þìñÿ’D’$’$­r  ß+XEETNRLA à]Gñÿ’D’$’$Ìù® %Þìß+RPCODERU àñÿ’D’$’$ÚŒ¼ ]ÛÞìßÞ]ÛÞìßÞñÿ’D’$’$´ŒÊ ]ÛþdÞìßÞ]ÛÞìßÞñÿ’D’$’$†ŒØ ]ÛÞìßÞ]ÛÞìßÞñÿ’D’$’$bŒæ ]ÛÞìß!Þ]ÛÞìß#Þñÿ’D’$’$³Gô ]Û Þìß&Þ b b°]äñÿ’D’$’$9Œ Þìß Þ]äÞìß+Þ]äñÿ’D’$’$Œ Þìß*Þ]äÞìß,Þ]äñÿ’D’$’$SŒ ÞìßÞþE]äÞìßÞ]äñÿ’D’$’$Œ, Þìß'Þ]äÞìß$Þ]äñÿ’D’$’$"Œ: ÞìßÞ]ä ÞìßÞ]äñÿ’D’$’$ ŒH ÞìßÞ]ä ÞìßÞ]äñÿ’D’$’$ŒV ÞìßÞ]äÞìßÞ]äñÿ’D’$’$°‹d Þìß.Þ]äÞìß(Þ]äñÿ’D’$’$©‹r Þìß%Þ]þ,»äÞìß&Þ]äñÿ’D’$’$­‹€ Þìß!Þ]äÞìßÞ]äñÿ’D’$’$”‹Ž ÞìßÞ]äÞìßÞ]äñÿ’D’$’$r‹œ Þìß)Þ]äÞìß#Þ]äñÿ’D’$’$~‹ª ÞìßÞ]äÞìßÞ]äñÿ’D’$’$f‹¸ ÞìßÞ]äÞìß"Þ]äñÿ’D’$’$?‹Æ ÞìßÞ]äÞþB=ìß-Þ]äñÿ’D’$’$,‹Ô ÞìßÞ]ä Þìß0Þ]äñÿ’D’$’$/‹â !ÞìßÞ]ä"ÞìßÞ]äñÿ’D’$’$ ‹ð #ÞìßÞ]ä$Þìß1Þ]äñÿ’D’$’$ þ %ÞìßÞ] ^+.ßÞ]ñÿ’D’$’$* ^-.ßÞ] ^*.ßÞñÿ’D’$’$$m ] ^/.ßÞ]þ5: ^(.ñÿ’D’$’$ ( ßÞ] ^).ß Þ] ^ñÿ’D’$’$Þ6 $.ß/Þ] ^=.ßÞ]ñÿ’D’$’$ÂD ^ .ß/Þ] ^,.ß Þñÿ’D’$’$ãnR ] ^..ßÞ] ^'.ñÿ’D’$’$¨Ù` ß/Þ] ^[.ß Þ] ^ñÿ’D’$’$ÁÏn ].ß Þ] ^:.ßÞþ6I]ñÿ’D’$’$¯Ñ| ^^.ßÞ] ^<.ßÞñÿ’D’$’$²JŠ ] ^>.ßÞ] ^;.ñÿ’D’$’$e㘠ß Þ bbôÞÐ%ÞÐÈÈñÿ¢D’$’$}3¦ eµ ]IÈìßÞÈèÐdñÿ’H’$’$G‚´ ¤ ]IÞìßÞ]I ÞìßÞñÿ’D’$’$á‰Â ]I ÞìßÞ]IÞìßÞþ"ãñÿ’D’$’$æUÐ ]I ÞìßÞÞ0Ð?Þ0.ñÿ’D%’$jFÞ ÐÈ.Èeñ ]nÈ.ßÞñÿ’D’D’$ì ÈêÐdß ]n^+.ßÞ]ñÿ’D’$’$wú n^-.ßÞ]n^*.ßÞñÿ’D’$’$pV ]n^/.ßÞ]n^=.ñÿ’D’$’$L÷ ß Þ]n^<.ßÞ]n^ñÿþMF’D’$’${8$ >.ß Þ b bÊ]ÐÞìñÿ’D’$’$ôô2 ß+G TE à]Ðñÿ’D’$’$ª{@ Þìß+P TU àñÿ’D’$’$Ö N ]ÐÞìß+R ID ñÿ’D’$’$ük\ à]ÐÞìß+R RD ñÿ’D’$’$ükj à]ÐÞìß+R CD ñÿ’D’$þGa’$â]x à]ÐÞìß+W IRñÿ’D’$’$3�† à]ÐÞìß+ñÿ’D’$’$‚'” W OR à]ÐÞìñÿ’D’$’$vç¢ ß+W RR à]Ðñÿ’D’$’$=~° Þìß+W CR àñÿ’D’$’$Pý¾ ]Ð Þìß+W SR ñÿ’D’$’$Œ_þ—êÌ à]Ð Þìß+O NP ñÿ’D’$’$ujÚ à]Ð Þìß+N WE ñÿ’D’$’$e\è à]Ð Þìß+R TSñÿ’D’$’$¼�ö à]ÐÞìß+ñÿ’D’$’$- E NL à]ÐÞìñÿ’D’$’$ð ß+S NI à]Ðñÿ’D’$’$Ê€ Þþþ;ìß+C SO àñÿ’D’$’$îö. ]ÐÞìß+E PX ñÿ’D’$’$ ^< à]ÐÞìß+S TQ ñÿ’D’$’$`J à]ÐÞìß+L GO ñÿ’D’$’$[X à]ÐÞìß+A NTñÿ’D’$’$E�f à]ÐÞìß+ñÿ’D’$’$š,t R NL þ( à]ÐÞìñÿ’D’$’$šì‚ ß+W NL à]Ðñÿ’D’$’$@Ž� Þìß+S VA àñÿ’D’$’$vž ]ÐÞìß+C SL ñÿ’D’$’$’j¬ à]ÐÞìß+W RD ñÿ’D’$’$ˆ\º à]ÐÞìß+R RR ñÿ’D’$’$†mÈ þÒ©à]ÐÞìß+P GAñÿ’D’$’$ÎŽÖ à]ÐÞìß+ñÿ’D’$’$,)ä E RO à]ÐÞìñÿ’D’$’$8åò ß+R ES à]Ðñÿ’D’$’$ÎwÞìß+R RW àñÿ’D’$’$ÿÿ]ÐÞìß+R DN  ñÿ’D’$’$Àà b bŠþÄ]RÞß+A IBñÿ’D’$’$ÓZ* à]RÞß+A ñÿ’D’$’$³88RB à]RÞß+ñÿ’D’$’$lAFA ID à]RÞßñÿ’D’$’$XõT+A RD à]RÞñÿ’D’$’$Xêbß+A DN à]Rñÿ’D’$’$’pÞß+D FI þþ à]ñÿ’D’$’$.a~RÞß+D IV àñÿ’D’$’$äŒ]RÞß+D RV ñÿ’D’$’$ šà]RÞß+E FO ñÿ’D’$’$.¨à]R Þß+F OL ñÿ’D’$’$.¶ à]R Þß+F TL ñÿ’D’$’$ù+Ä à]R Þß+I NNþ€_ ñÿ’D’$’$ä+Ò à]R Þß+I TN ñÿ’D’$’$×*à à]R Þß+I RO ñÿ’D’$’$Ò*î à]RÞß+M DOñÿ’D’$’$çYü à]RÞß+M ñÿ’D’$’$Ü) IP à]RÞß+ñÿ’D’$’$w4M RP à]RÞþ+Áßñÿ’D’$’$tñ&+N IG à]RÞñÿ’D’$’$kð4ß+N RG à]Rñÿ’D’$’$š BÞß+N TO à]ñÿ’D’$’$HrPRÞß+O DD àñÿ’D’$’$2÷^]RÞß+S IB ñÿ’D’$’$là]RÞß+S RB þ©"ñÿ’D’$’$(2zà]RÞß+S SG ñÿ’D’$’$#(ˆ à]RÞß+S IQ ñÿ’D’$’$ (– à]RÞß+S RQ ñÿ’D’$’$ÿ$¤ à]RÞß+S OT ñÿ’D’$’$û&² à]RÞß+T CR ñÿ’D’$’$å*À à]RÞß+U INñÿ’DþI'’$’$YÎ à]RÞß+S ñÿ’D’$’$õ$ÜPT à]RÞß+ñÿ’D’$’$£0êC PS à]RÞßñÿ’D’$’$¤òø+D CE à]R Þñÿ’D’$’$ èß+E TN  à]Rñÿ’D’$’$Æ!Þß+F PJ à]ñÿ’D’$’$þ¹og"R"Þß+I CN àñÿ’D’$’$aê0]R#Þß+I DN ñÿ’D’$’$S>à]R$Þß+I AX ñÿ’D’$’$S7Là]R%Þß+L OA ñÿ’D’$’$R5Z à]R&Þß+L AC ñÿ’D’$’$54h à]R'Þß+L OD ñÿ’D’$’$)vþ[ð à]R(Þß+M VO ñÿ’D’$’$%„ à]R)Þß+M TS ñÿ’D’$’$ý2’ à]R*Þß+R TEñÿ’D’$’$!X  à]R+Þß+S ñÿ’D’$’$&®OR  à]R,Þß+ñÿ’D’$’$®8¼X PJ à]R-Þßñÿ’D’$’$½îÊ+C þLKH à]R.Þñÿ’D’$’$ÔàØß+C PU à]Rñÿ’D’$’$â æ/Þß+E UQ à]ñÿ’D’$’$ƒoôR0Þß+G QE àñÿ’D’$’$så]R1Þß+G TR ñÿ’D’$’$pà]R2Þß+L AD ñÿ’D’$’$3à]Rþ¤†3Þß+L CD ñÿ’D’$’$b2, à]R4Þß+L QE ñÿ’D’$’$Q2: à]R5Þß+L SE ñÿ’D’$’$Q(H à]R6Þß+L DO ñÿ’D’$’$32V  à]R7Þß+N QE ñÿ’D’$’$#d à]R8Þß+S RTñÿ’D’$’$?Wr þŠÆà]R9Þß+U ñÿ’D’$’$5-€PJ à]R:Þß+ñÿ’D’$’$ã/ŽO DR à]R;Þßñÿ’D’$’$Öíœ+C RH à]R<Þñÿ’D’$’$ýêªß+U CJ à]Rñÿ’D’$’$ ¸=Þß+C PX à]ñÿ’D’$’$ŸgÆR>Þß+H TL þ¯% àñÿ’D’$”$ß"Ô bbFÞÐ?ÞÐÈÈeïñÿ’D’$¢$iÄâ]È0.ßÞÈèÐdÝ]ñÿ’D’$’$Uäð^A.ßÞ]^B.ßÞñÿ’D’$’$I8þ]^C.ßÞ]^D.ñÿ’D’$’$9ë ßÞ]^E.ßÞ]^ñÿ’D’$’$2ÔF.ßÞ]^G.þ0�ßÞ]ñÿ’D’$’$Ö(^H.ßÞ]^I.ßÞñÿ’D’$’$*6]^J.ßÞ]^K.ñÿ’D’$’$äDßÞ]^L.ßÞ]^ñÿ’D’$’$úÅRM.ßÞ]^N.ßÞ]ñÿ’D’$’$åÇ`^O.ßÞ]^P.ßÞñÿ’D’$’$Ùn]^Q.ßÞ]^þ/hR.ñÿ’D’$’$ÉÜ|ßÞ]^S.ßÞ]^ñÿ’D’$’$·ŠT.ßÞ]^U.ßÞ]ñÿ’D’$’$­¹˜^V.ßÞ]^W.ßÞñÿ’D’$’$¡ ¦]^X.ßÞ]^Y.ñÿ’D’$’$‘Õ´ßÞ]^Z.ßÞ]^ñÿ’D’$’$ˆÿÂ0.ßÞ]^1.ßÞ]þéñÿ’D’$’$sÐ^2.ßÞ]^3.ßÞñÿ’D’$’$hUÞ]^4.ßÞ]^5.ñÿ’D’$’$WùìßÞ]^6.ßÞ]^ñÿ’D’$’$Pñú7.ßÞ]^8.ßÞ]ñÿ’D’$’$:^9.ßÞ]^+.ßÞñÿ’D’$’$/g]^-.ßÞ]^*.ñÿþOS’D’$’$$ßÞ]^/.ßÞ]^ñÿ’D’$’$2(.ßÞ]^).ßÞ]ñÿ’D’$’$@^$.ßÞ]^=.ßÞñÿ’D’$’$÷qN]^ .ßÞ]^,.ñÿ’D’$’$å\ßÞ]^..ßÞ]^ñÿ’D’$’$ÞÝj'.ßÞ]^[.ßÞ]ñÿ’D’$þeü’$ÉÎx^].ßÞ]^:.ßÞñÿ’D’$’$¿$†]^^.ßÞ]^;.ñÿ’D’$’$­ò”ßÞ]^<.ßÞ]^ñÿ’D’$’$Cî¢>.ßÞ]l^0.ßÞ]ñÿ’D’$’$Èû°l^1.ßÞ]l^2.ßÞñÿ’D’$’$¼O¾]l^3.ßÞ]l^4.ñÿ’D’$’$¦òþ±ÌßÞ]l^5.ßÞ]l^ñÿ’D’$’$ïÚ6.ßÞ]l^7.ßÞ]ñÿ’D’$’$‚íèl^8.ßÞ]l^9.ß Þñÿ’D’$’$¼ö b bx]ÞßÞ]ñÿ’D’$’$,hÞßÞ]ÞßÞ]Þñÿ’D’$’$6ßÞ]ÞßÞ]Þñÿ’D’$’$6 ßþ1Þ]ÞßÞ]Þñÿ’D’$’$ôf.ßÞ]ÞßÞ] Þßñÿ’D’$’$àg<Þ] ÞßÞ] ÞßÞñÿ’D’$’$Ï5J] ÞßÞ] ÞßÞñÿ’D’$’$À5X]ÞßÞ]ÞßÞñÿ’D’$’$®=f]ÞßÞ]ÞßÞñÿ’D’$’$�ôt]Þþ ÏßÞ]ÞßÞ]ñÿ’D’$’$ug‚ÞßÞ]ÞßÞ]Þñÿ’D’$’$qf�ßÞ]ÞßÞ]Þßñÿ’D’$’$dgžÞ]ÞßÞ]ÞßÞñÿ’D’$’$O5¬]ÞßÞ]ÞßÞñÿ’D’$’$Bðº]ÞßÞ]ÞßÞ]ñÿ’D’$’$sÈÞßÞþUG] ÞßÞ]!Þñÿ’D’$’$fÖßÞ]"ÞßÞ]#Þßñÿ’D’$’$gäÞ]$ÞßÞ]%ÞßÞñÿ’D’$’$óïò]&ÞßÞ]'ÞßÞ]ñÿ’D’$’$Ö@(ÞßÞ])ÞßÞ]ñÿ’D’$’$§f*ÞßÞ]+ÞßÞ],Þñÿ’D’$’$½eßÞ]-Þþ,¦ßÞ].Þßñÿ’D’$’$¬f*Þ]/ÞßÞ]0ÞßÞñÿ’D’$’$š48]1ÞßÞ]2ÞßÞñÿ’D’$’$…—~ßÞ]<ÞßÞ]=ÞßÞñÿ’D’$’$*XŒ]>ÞßÞ]MÞìßÞñÿ’D’$’$š]MÞìßÞ]MÞìñÿ’D’$’$&¨ßÞ]MÞìßÞ]Mñÿ’D’$’$>½¶ÞìßÞ]MÞìßÞñÿ’D’$’$ÝsÄ]MÞìßÞ]MÞþB…ìßÞñÿ’D’$’$ÑÒ]M ÞìßÞ]M Þìñÿ’D’$’$Æ%àßÞ]M ÞìßÞ]Mñÿ’D’$’$ú¼î ÞìßÞ]M ÞìßÞñÿ’D’$’$ž{ü]MÞìßÞ]MÞìßÞñÿ’D’$’$Œ{ ]MÞìßÞ]MÞìßÞñÿ’D’$’$z{]MÞìßÞ]MÞìßÞþ9ðñÿ’D’$’$gs&]MÞìßÞ]MÞìßÞñÿ’D’$’$UI4]MÞìßÞ]MÞìßñÿ’D’$’$E&BÞ]MÞìßÞ]MÞñÿ’D’$’$–=PìßÞ]MÞìßÞ]ñÿ’D’$’$ À^MÞìßÞ]MÞìßÞñÿ’D’$’$Il]MÞìßÞ]MÞìßþ±%ñÿ’D’$’$]¤zÞ]MÞìßÞ b bñÿ”D%¢DPˆ ah aü aœ a ñÿE¢D’$¬ð–a* aÕ aø bb| ñÿE¢D’$껤aÙ a- a…Þ8ÔÞ9Ô;ÝÞñÿ’D’$’$|Ʋ ßÐÈÞÈèÞÈèÞ ñÿE¢D’(?óÀa• a a aàÞ9ÔÞñÿ’DþFŠù’$’$í(Î8Ô;ÝÞ ßÐÈÞÈèÞÈèüÿ�D–±ÜÞ ÿÿ û_€ÿR2SADMIN.RBûY!6þ½$ýÿ“•¯Ô8ßÿ$I$I@Twl§A[ä§‚Vl§‚N¥‚JD§‚Q¥¤‚F練;ð¤–$ª¤‚§¤‚ 5¦–ñÿ’D’$’$xxÕÿ!8S" C% C!ž!X !8ñÿ’D’$’$´}½)½"X CP 2" 9�ñÿ’D’$’$$‰"�‚¥í) b�Ò•ªª  ñÿ’D’$’$)Å*" ­Ñ !!LÓý! þ¢ƒGÆ%@$(#�ñÿ’D’$’$î×8 ) "0Î!H!"@"%@""@ ñÿ’D’$’$èF!–ÿ!,! ª P !,! ªöÿ’D’$ÀÜT ù!,!Pª¶ô) úÿH¼In¹�8I+éá’ÿÿ û_€ÿR2SSPTAB.RBûU!7þñ5ýÿ¼•¯T”ýÿ@În¹€8ñÿ’D’$’$erÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’D’$’$Wrÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ”D?;ÿÿÿÓÿ$I$I$ISp§HýØKÙŒñÖŒ›ØUÄÙŒ üØŒžÖ‘‚ØxøØFýؖ٠OØ¥#Ù–ÙxÓÿ$I$I$Iy‘þz[þ ØUúÖ‚¡Ö‘VÖxîÖx¯Ø–7×–öØxîØŒ îØ_ îØA ÄÙ‘¶ÙŒÄÙ_ÄÙA ýÿ@:n¾Ùxÿÿ û_€ÿR2CRCODE.RBûU!8þÚÀýÿÃÂ…¯´�ôÿ@R§Ú¸¥A¤¤™^éFeé–üÿ ‰Ðv ñÿ’D’$’$SÇX &X ' &8+3ÿB&Xñÿ’D’D’$WW &8+3 'P&& &AIQøÿ’D€$Ì!)1ýÿ@àC+éá’ÿÿ û_€ÿR2SITAB.RBûU!5þ¶ýÿ“핯Ôbúÿ�m{{@<@{{ <ñÿ’„’$†ÒÐÿÿÿÿÿÿÿÿÿÿ ÿÿñÿ’„’$’$W2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„’$’$I2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„È$H†HÏ*ÿÿÿÿÿÿÿ12ÿ356ñÿH’H’H2Ý&8789:;<=>?ÿñÿþ7%’È�H†àÓFÿHIJÿLMNÿPQRñÿH†Â0’$v¢TÿTUVÿXÿYÿÿÿÿÿÿñÿ’„Â$†ÈÎbÿÿÿÿÿÿÿ@ÿiÿkÿmñÿ’„H†H’NÞpÿÿÿÿoÿtvwxyz{|ýÿ’ˆl~}~ÓÿH’H’H’ÏÍY¦x¸¥A4„¦�G/„¦¡G.„¦aG-„¦aH,š¤Œ0f¥–&§‚*¿¤¡Bn¿¤þëKAlý¥7+1¦ `ФŒ Ф_ÓÿH’H’H’"2¦Œ2¦_v¦F1¦F�¥x(p§_'�¥–&äP%‘¥Œ#P¤F"Y¦–!D¤ŒD¤_#§Œ#§_ÓÿH’H’H’öQ¦ŒQ¦_L§A¥}¥–§‘$§Œ§_F¤ŒF¤_ñ¤P)š¤¡isš¤�irš¤aiqš¤¡jpÓÿH’H’H’±l§AAD§‚fþÚnêä§‚g¥‚el§‚dÿ¥‘Gÿ¥‡FD¥–E7¥‡DO¦‡Có¤›Bš¥7_¥¤‚c練 ð¤–bÓÿH’’H’ª¤‚u§¤‚a5¦– �¥¡Bj�¥Ah&§¡~ �¥¡GZ�¥F[ý¥_ÿþ¥A^&§} û¥}]þ¥7\$§}W&§ŒSúÿ�^`þ¥}O ¦FKÿÿ û_€ÿP4BODY.RBûY`þÝEýÿòöN¯Óÿ$I$I$I½¸žŠ#€ îŠ P Ö‰ -‹ Ö‰ ë Ö‰€¯ Ö‰`M Õ‰À2·Õ‰ .bÕ‰ --Õ‰€#¸Õ‰@ýîŠfÓ‰ #,Ó‰@#Ó‰`#ÓÿlÛlÛlÛŽåìŠ-ÿÄŠ-ÿü‰#ÿû‰ÿêŠÿëŠÿŠÿû‰2ÿêŠ2ÿŸŠ2ÿû‰ÿíŠÿŸŠÿîŠÿÄŠÿÜÿlÛlÛØw¡ŠÿìŠÿÊŠÿ!ŠþŸÿÈŠ#ÿÅŠ#ÿù‰ÿ׉ÿÅŠÿ!ŠÿëŠ(ÿ‹ ÿñÿ’D’$œDÍôb&bèÌïÏ(!e :Þañÿ’D’8¢$ … ËïÏ'aÞâÔÌïÏ(eÌñÿE’$œ8vodñ ^t Üa añÿ’D’(’8Óô* ÈØÞeG Ë ÈaÞãÔâÌñÿ”D’$’DáC8ÞeEâÌØÞeEâÌØþ"âÔdñÿ’H%’$»ÇFo ÈØÞeZ ÈÐÈØâÔÞãÔñÿ’D’(’8|ÙTäÝÈèàdo Ë ÈaâÌÞñÿE’$’D–�beoâÌÐÈØÞeoÈØâÔdñÿ’H’$¢8�Ép -ÌâÔÞãÔäÝÝà ad ,Ìñÿ’Dœ$’(ÓË~âÔÞãÔäÝÝà ad ÌÞñÿE’(’$|PŒe’+ÌâÔd©Ü ÞãÈÐÈè+Ìþ!Ýñÿ’D’$’$PñšÈèÞÈèÞÈèÌÈñÿ’Dœ$œ(� ¨âÔÞãÔäÝÝà ad  añÿ’D’$’DÎ~¶ Ë^@'afÌ ÞeñÿœH’(Å#ØÄÊ adÎ Þad  añÿ’XâD'uŸÒ Ëa a Þa âÌÞñÿ¢D¢$'^àeîâÌ*Ìeî ‡ÞaÞâÔñÿþ×JE’Ä’$—Bîd  a^ ÓÞ ÐÜñÿ’D’$’$â;üÞãÈÐÈèÞÈèÞÈèñÿ’D%œ$˜» ÞÌ ÞeÈâÔÞãÔ añÿE’$%)žd¥ Ë^'afâÌÞñÿ¢D”$â$‚ñ&e†âÌØÞe7 ˆÞaÞñÿ¢Dœ$’(6E4âÔd† ÈØâÌae‚ãÌÞñÿE’$þS@’(¤¯Be[åÌÞåÌ?Þ#eT ^0ñÿG’$œ(xPadY ËåÌ$' Ódz añÿ’D¢Äâ$Ù^ âÌ-Ìa!ek :ÞâÌa ñÿâD’(żÿlÞa Èex Þa dzÞ Ðñÿ’D¢$'ñzÈèâÌÈâÔd† ‰ÞaÌ Þñÿ’D¢$’8ÒˆPH!e“ aHeñÿ’Hœ(’( 3þ²á–Ì Þe¡ ad¥ Þañÿ”X’$¢$œ¾¤ Èeã Ë^eá Üñÿ’D’$’$Úí² Þã Èè Ë ÈÞHPAÞeñÿ’HÅ’$”;ÀÇ þÞadáHPèPP\ñÿ’D’$â$,ÎHPìß È 3ÞÞHPa ñÿâD%’$zôÜÞa ÞãÔdï Ü Þã Èè Ë ñÿ’D%¢(tê ÈþºtÞ ÈåÔd  ñ¦$gõddñÿ¢HE’$ˆöøqd}d‰dÐAAAdñÿ’H’D’(m³AdðÌË(!e Þañÿ’X'’${ó ËïÏ'ad b bðñÿ’D’$’D~" Ë^'aÌÞeñÿœH’$''0+ a ÜâÝàÌÐ a Ëñÿ’D¢$’8Ú[>^þ �'a a ÈÞñÿ’D”(’$ŠÕLâÌÞ"e'Èd È-ÌâÌ-Ìñÿ”Dâ$’DBZ"ed Þa d£ È-Ìeñÿ’H”Ä”$yhq Þa ,Ì Ðd|âÌ-Ìe|ñÿœD’$’$_Ëv Þa ,ÌâÔ È,ÌâÌ,Ì"eñÿ’HÅ’$ö„‹ Þa d£ ÈØÞ ÈâÌñÿGœD’(Ga’a"e�þB” Þa d£ †Þañÿ’X’DœD°³ ÞâÔd%âÌ-Ìe° Þa ñÿ’D%’8É ®,ÌâÔ È-Ìe» Þa ,Ì Ð Èñÿ’D¢$'ȼ,ÌâÌ,Ì"eÊ Þa dÐñÿœD¢$’$yØÊ †ÞaÞâÔd% È-ÌâÌ-Ìñÿ¢D'â$Ø"eá Þa dç †ÞaÞñÿ¢D’$%€�æâÔd% È-ÌâÌþIà-Ì"eø ÞñÿGâ$%'ªôa dþ †ÞaÞâÔd% È*Ìñÿ’D%¢8ouâÌ*Ì"e Þa d ñÿâD%¢(ËņÞaÞâÔd%ñ„%gdUdñÿ¢HE¢$†¥ddÒdéd)ÞâÔd, ñÿ’D’$’$‹,b"b<ÞÐÌÞÌ^ñÿ’D’D'Ú:("eFÌÞÐþìõ a Ëñÿ’D¢$œ(6ãH^'aÈer añÿ’DœD’(ÛùVâÌ-Ìea Þa drâÌ,ÌñÿE¢8'^>del Þa dr †ÞaÞâÔñÿ’DâD’$ç‰rÌÞee a ÜâÝàÌÐ ñÿG’$%–Ü€a Ë^'a añÿ’X’$¢Dâ_Ž ÈÞâÌÞ"eaÈþ_<dR Èñÿ’D¢$'=Åœ-ÌâÌ-Ì"eª Þa déñÿ’DœD¢$¬3ª È-Ìe· Þa ,Ì ÐdÂâÌñÿ”Dâ$’$è¸-Ìe Þa ,ÌâÔ È,ÌâÌñÿ’DœD’(yÀÆ,Ì"eÑ Þa dé ÈØÞñÿ’D”8â$'Ô ÈâÌa"eã Þa dñÿ’H”Ä’$\0âé †ÞaÞâÔd_ È-ÌâÌþ^¬-Ìñÿ”Dâ$’D{ð"eú Þa d9 È-Ìeñÿ’H”Ä”$Ærþ Þa ,Ì ÐdâÌ-ÌeñÿœD’$’$ÊÉ  Þa ,ÌâÔ È,ÌâÌ,Ì"eñÿ’HÅ’$<ñ! Þa d9 ÈØÞ ÈâÌñÿGœD’(Ž\(a"e3 Þa d9 †Þañÿ’X’D”$4b6ÞâÔd_ È*ÌâÌ*Ì"eJþÿ ñÿœD’(”͝D Þa dP †ÞaÞâÔd_ñÿ’D%¢(ÖÝRqr&ÞgYd›dëd;dñÿ’H’D’$P!`cÞâÔdr b$bÀ Ë^ñÿ’D’(’(¼n'a,ÌÞeüâÌÞñÿE¢$¢8™|eŒâÌØÞe‰ adŒ ñÿG’$%éŠa ÜâÝàÌÐÈÞe£ âÌñÿâDþ1’(œ8F˜-Ìa!e£ :ÞâÌa añÿ”D”$’$ë,¦ Ëa,âÌÞe½âÌØÞeñÿœHœ(’$üÉ´º ad½ a ÈÞâÌÞñÿ”D”$’$ŸáÂ"eøÈÞeïâÌØÞeñÿ’H'â$ÙnÐç ÈâÌØaeß Þa dñÿ’H”Äâ$:3Þå �ÞaÞâÔdí ‚ÞaÞñÿ¢D¢$¢$þ_ % ìâÔdø ÈâÌe  È-Ìe ñÿâD%%ˆ8ú Þa ,Ì Ðd âÌ-Ìe  ÞñÿGœ$’(¡‡a ,ÌâÔ ÈâÌaeô ÈØÐñÿ”D”$”$ñy ÈØd” È,Ìe$^RÐd;ñÿ’D’D’DGX$ È*Ìe.^BÐd; È+Ìeñÿ’H’(’(êy28^CÐd;^IÐd¦È^ðñÿ’D’(’Ä@þ€>(eJ ƒÞa^AÐdñÿ’H’$œD¼>N¦È^�(e\ „Þañÿ’DœD’$å\^SÐd¦ Èa!È^ðñÿ’D’(’ÄËéj("et ƒÞa^MÐdñÿ’H’$œD >x¦È^ð(e† ƒÞañÿ’DœD”$¹>†^MÐd¦ …Þa^FÐd¦ñÿ”D’(EDÝ”ñV'þîœg˜dAd=dOdañÿE%œ$L]¢dyd‹Èdß 5ÞÈ.ÈañÿEœ$’(ŒØ°dò 4ÞÈ.Èadò 1ÞÈñÿœD’(â$Ã9¾.Èadò 0ÞÈ.Èadñÿ’Hâ$’D©îÌò 7ÞÈ.Èadò /ÞÈ.ñÿâD’D%[\ÚÈadòq Ž'Þgæd©ñÿE¢(E âèd²dÄþ‘d»dÍdÖdø �ÞñÿG’$’$v‹öa*ÌâÔÞãÔ bb@ Kñÿ’Dœ$”$Tf^@'ÈaÌÞe³ñÿ’D’D’$muâÌÞe$äÌÞâÌØÞ#eñÿœH’$’Ää• $ aÜâÝà a Kañÿ’H’(%ñä.fâÌÞeBâÌØÞe? añÿ¢X’8’$­Ž<dB aþ¾ÌÈÞâÌÞ"eñÿ’H’8%!9J± ,ÌÈaâÌ-Ì"e\ ÞñÿGœ$’(®ñXa ,ÌâÔ ÈâÌae­ÈØdñÿ”Hâ$'>f™'Ìen Èa Üad«ñÿ¢D’$’8°t'Ìe -ÞÞ^ÿ)Ìa Üañÿ¢X'’$‡K‚d« Üad« (ÞÈØañÿ¢X'¢$aI� d« ’Þadþy—«ñ(g�dñÿ¢HE¢(§Yžgdgdtd…d‹d‹d“dñÿ’HÅ’8Â;¬± �Þad· 3Þa bñÿ’D%’$>!ºb ÌÞe(ÞÐ9ÌÐ;ÝÈ ßñÿ’D’D’D�ÚÈØÞeÒÈìÐdÅÈ Ð;Ý Èñÿ’D’(’(^ìÖ ßØÞeá Èì ÐdÔ;Ý È ßñÿ’D’$’D,KäØÐÈÞÈ!"eþGËÈ Ð ÈØñÿ”D’$’(ÝÎòÌe ÞÐ ÈÈe 9Þ ÈñÿâD’DÅ­.Øa d  ^�ad ÈØñÿ¢D’$¢$>åÐdæ Èì ÐÈ ÈÞ#eÔÈñÿ¢D'Åð,!e# §Þa ad, ÞñÿG’$’$1€*a b bF K^ñÿ”D’$’Dxh8'aP ÌëÏ(!e1Ì Þþ&7Pñÿ’Dœ(¢$¤FH!eO aHe1Ìñÿ”D'â$ ëT'Þe] ada Þa ñÿ’D’$’$Yibbbx K^'añÿ’HœÄ”$‹+pf Üa  ÈaÌ.ÞeƒñÿâDœD’$†q~ ad‡ 4Þa K^ñÿ’D’(’(ÿkŒ€'aP Ì(Þe² Üaþáñÿ’X’8âÄâàš  9ÞÈa  Èa a ñÿ”Dâ$œD ¼¨KaP  Èad¶ Èañÿ’D’$’$ë9¶ b(bX K^€ 'ñÿE’Ä%%¤Äaf aâÌÐÈÞeïÈØñÿ’D¢$'(gÒÞÈ,Ì#eâ �ÞaÞÐñÿE'’D9àdï È-Ìa!eï :ÞÈañÿþWM’X’Ä’Ä¥¨î Üa  9ÞÈa Ì*ÞeñÿœH’(’Äîÿü ad ÞaÞ Ð ÜñÿGâ$’$0ä a ÞÐ Üa Ì^ñÿ”D’$’$i{(!e¹ K^€'ÜñÿâD¢$â$̳& ÜaÈÞe{ ÈÈaeñÿ’H’$’Dô¨4w È ÐÞ Ð ÈÞeY ÈÐÈØñÿ”D’$þ.<œDëB ÈeRÈØ ÈeP œÞañÿE”$’$–SPdY È ÐÈØ Ðd9ÜÞãÈÐñÿ’D’$’$…)^È ÈÈè ÈÈèÈ ÈÞñÿE’(’(MŸlerÈ Ðdu ÈÈd{ “Þañÿ’X’$œ(ÛzÌ ÞPH!eˆ añÿ”D”$'±¾ˆHeÌÞe– adšñÿœDâ$’$4þ€_– Þa Èa K^ñÿ’D’D’(·µ¤'aP ÌëÏ(!ežÈÞñÿE'’$P ²e¹ 9ÞÈa Ì ÞPHñÿ¢D’8œD]OÀ!eÆ aHe  Èañÿ’D’D’$öÛÎ ÈÞe> ÈØÐ È ÐÞ Ð ÈØñÿ’D’$¢$1óÜ Ð È È È Ð È Ð ÈÞeÚ Èñÿ’D’$’DаêØþþÐÈÈ^èe:  -ÞÈÈñÿâDœ$â$ëòø-Ìa 3ÞÞÈa Þa  ñÿâDâ$'‡H Üa  ,ÞÈa  Èa ÈÐñÿ’D’(’Ä�º ÈØÈe#  <Þa ÈèÐdñÿ’H'’$ÿµ"   9ÞÈØa ÈØ ÐÈèÐ Èñÿ”Dâ$œD˜ 0 Þe  Èad>  �Þañÿ’DâDœD²è> Ì'ÞþúàeH  adL  Þañÿ’Dœ$â$ð L bb~ Üa  Èa ñÿ’D’$’D^âZ K^@'aP ÌëÏ(eñÿ’H’Ä’(ãlh m  ÞaÌëÏ(!eY Ì ÞñÿE’Ä’$cv e—  a K^@'ñÿE%’8ͤ„ aP ÌëÏ(e�  ÞaÌëÏ(ñÿ¢D’DâDy—’ !e{ ds þÊæÌ)Þeª  a ñÿ”Dâ$œDÞ©  Kaf Èad®  5Þañÿ’Dœ$â$­ ® bb\ Üa  Èa ñÿ’D’$œD÷ɼ K^'af Üa ñÿœD”$'è:Ê  ÈaÌ+ÞeØ  adÜ ñÿœD”$œ$nEØ  6Þa KaP  9ÞÈa ñÿœD’$’$Ô6æ  Èa b"þb ÌÐÞÐÞñÿ’D’$%+ô ÐÞÐ8Ì ÐÞ ÐÌÞeD  ^ñÿ’Dâ$’$§ \ aH ÐÈØÐñÿ’D¢$’$¸ä ÞÐÈ ØÞe" ÞÐÈ Ø ÐÈñÿ”Dâ$’$ãI Ø Ðd(  ›ÞaÞÐÈÞeñÿ’H’$¢ÄQ—, ? ÈØÞ ,ÌÈa#e?  ñÿâDâ$œD@3: �ÞaÞÐ adþˆ¯S  Þañÿ’D’$’8¶*H  K^@'aÌÞñÿE’Ä’$¶V e�  a K^'ñÿE%¢$§âd afâÌÞe‹ âÌØÞew  ñÿâD’DÅfr �Þad‹  ÈâÌae‡  añÿ’XÅ¢8>!€  Üad‹  ‘Þadœ  ñÿâD’$œ$ðêŽ 3Þa K^þ5 'añÿ’D”$œ$"œœ Ì^ (e7 Ì Ð añÿ’D’$’(Atª  K^'afâÌÞñÿE¢$'ÍC¸ e5 âÌØÞeÆ  �Þad5 ñÿ’DÅ’Ä�FÆ  ÈâÌae1  a È-Ìañÿ”Xœ$œ$”Ô !eÝ  :ÞâÌa -Ì Ýañÿ’D'’8%â  8ÞÞ Ì-Ìa Üa  Èþ/Eañÿ’X''7»ð âÝÜà a âÌ-Ìa!eñÿ’H’8â$žþ   :ÞâÌa 6ÞÞ Ì-Ìa Ìñÿ’D”$’$âZ Þ Ô ÌHXe ÌPX È,Þñÿ¢D’$¢8zg e'  4Þ^I.Þad/  ñÿ’D'â$8S( 0Þ^I.Þad5  ‘Þadñÿ’H’Ä’$l�6 F  7Þa K^'þ´&ñÿG’8’8ïÒD a Üa  !ÞÈa Ì+ÞñÿEÅ’8ÞÂR eY  ad]  6Þa KñÿEâ$¢$Í` aP âÝÜà a È,Þeu  ñÿ’DÅâ$‰jn "ÞÞâÌad{  ÞÞâÌa ñÿâDâ$'üA| Üa 9Þ Èa  ÈaÈ Ôñÿ’D’$”$&-Š bb¦ÞÐ ÌÐÌÞe¦ ñÿ’DþùHœ$'G°˜  ^0Üa ad¬ ñÿœD’$’$.ʦ  Þa3ÌÐ K^ñÿœD”$’$ˆ ´ 'ÈaâÌÞe% âÌØÞeñÿ’H’(’$~ ! 9ÌÞe 9Ìè9ÔÈèÐ;Ý9Ìñÿ’D’$’$–šÐ ß Ð ÈâÌØ ÈèÞäÌÞeñÿ’H’$’$öÞ ñ ;Ý9Ì ß Ð ÈèÞ ÈèåÌ Èñÿ’DâDâ$þ¶å[‰ì èæÌd  a )Ì Ýa ñÿ’D’8’$*®ú 8ÞÞ Ì)Ìa;Ý9Ì ß Ð ÈèÞñÿ’D’$”$HË Èè Ì ÌÞ Ô ÌHXe ñÿ’DœD’(Ó­ ÌPXd  úÞad%  ŒÞañÿ’X’$œ(‡ $ Ì ÞPH!e2  añÿ”D”$'!°2 He“ Ì+Þe@  adD ñÿœD”$’$Ü@ þ'I 6Þa KaP 9ÌÈ9ÔÈñÿ’D’$’(�N Ô bbÌÞeš ;Ý9Ì ßñÿ’D%’$ž7\ Ø Ð ÈÞe… È Ð ÈØÌeñÿ’HœDœ$ùÊj € ÈØes  ¥Þa ÈØañÿ’D¢(¢$,þx ÈèÞd‰ dƒ ÈØ Ðd^  ñÿâD’8œ(Ô† §Þa aÌÞe–  añÿE’8’$où” dš þg ÞaÌË^€'ñÿ”Dâ$'‰¢ (!e®  Þa ËaÌëÏñÿ’D”$%p° ^€'(e Ìd  ^ñÿ’D'’ÄÆ\¾ < Üa a ÈØÞñÿE'¢$“àÌ eÕ Ë ÈadÙ ÈaýdñÿœH%'>$Ú m  a a-dm  a añÿ¢H”8œ(3è ¸dm  þ•a abdm  añÿ¢DâD¢(˜ùö a·dm  a a¯ dm  ñÿGE¢Äu a aM dm  a aë dñÿœH%¢$  m  a a‹ dm &ñÞ,g dñÿ’H’$’${� ¼ AAAAAAAñÿ’D’$’$)ž. AAAAAAAñÿ’D’$’$ž< AAAþHGAAAAñÿ’D’$’$ žJ AAAAAAAñÿ’D%¢(±¶X AAdÛ dë dó d dñÿ¢HE’$ŒŒf û d d dã Ì^À(ñÿ¢D'’8çÇt !e  Þa Ëa b¸ñÿ’D¢$”$‰ÿ‚ bšH Þe� H ØRÐd” ñÿœD%”$åá�  RÜa #Ìe÷ \þíããH e¹ ñÿ’D’$’$_¨ž +. NE T ? ÞÞ\ñÿ’D’$¢$Zb¬ ãH ÞÞ\ã\ãdô +ñÿ’D’$’$=㺠. NE T L ÞÞ\ãñÿ’D’$’$û¢È RÈÞ\ã^;Þ\ ãH Þñÿ¢D’$%©ÀÖ eâ H ÞÞ\ãdñ +AMñÿ’D’$’$Eä NI ÞÞþ5 \ã\ñÿ’D”$’$ °ò ã\ãH e^?Þ\ñÿ’D’$’$‰ ãH ÞÞ\ã^:Þ\ ãñÿ’D’$’$»\ãÞPÞPÐ ÞUÐ ÞTÐ RÈñÿG’8’Ät)a QÜa  VÜa ÞÞQÈñÿGâ$”$÷q*a ÞÞVÈaH ÞeÉñÿ’D’$’DÜ 8 ÞWÐH ØYÐH eN \þM?añÿ’Xâ$¢$çøF ÞÞHaYÈÞeÇYÈñÿ’D%¢$máT[Ð[ÈØÞeÂ[ÈØÞeÂ[Èñÿ’D’$’(Æîb ØÞ[ÈØØÞ"eŒ 2ÞÞñÿœD’$’8z`p[È Øa 6ÞÞWÈ)ÌaHèñÿ’Dœ$”$¯\~P (Þ[ÈØØa WÈèWÐdÂñÿ’D’(’$“Œ[È ØÞe­WÈ[ÈØØWÐHþ&áñÿ’D’$'Sš[ÈØØP )Ì\a )ÌñÿâD’D’$`†¨WÜadÂWÈèWÐHèP ñÿ’D’8'„e¶[ÈØ\a [ÈØWÜaYÈØñÿ¢D’D’$²ÄYÐdNdE ÜÝà6ÌPHÞñÿ¢D’$’$KÄÒe>H[ÐÝ[Èà ^ ñÿœD’$’Dãºà Üa ÈØÞe7 ÈØØÞñÿþòJ¢D’$’$¢‘îe7\ ã^ Þ\ ã+NUñÿ’D’$’$«ÎüEDLCRADE Þ Þ\ ã+ñÿ’D’$’$qº XEETNRLA Þ Þ\ ãñÿ’D’$’$ÜÌ+IFEL ÞÞ\ ñÿ’D’$’$±6&ãÝÞÞ\ ã\ ã^ Ìèñÿ’D’$’Dñ{4\ ãHØPdÏÝ Üà ñÿâDâ$þtå’$¤®B6Ìa Ha ÌXÐ Ë^ñÿ’D’(%ËÅP'aP ÌëÏ(!eLÌ Þñÿ’D¢$’8:^PH!ei aHeñÿ’Hœ(’(DûlLÌ'Þew ad{ Þañÿ’X’$’(Èšz;Ý9Ì ßØZÐZÈÞe·ZÈ[Ð[Èñÿ”Dâ$’$i݈Ø!e² ¨Þa\ ã+L BAñÿ’D’$’$Váþ±–LE ÞÞ\ ã[ÈØñÿ’D’$’$=•¤ Þ\ ã\ ã^ Ìè\ ãñÿ’D’D’Ä@à²[ÈØZÐd€ Ha H ÞñÿE”$’$'²ÀeÛH ØÞeÒ *Þ^P.ñÿG’$¢8ß‹Îa dÙ *ÞH Øadæ ñÿâD’$’Ä(XÜ6Ìa *Þ^P.a  .ÌXÜañÿ”X’$’$ú�êþYj#Ìe,^LÞ\ ã^ Þ\ñÿ’D’$’$gø ãQÈÞ\ã^=Þ\ ãXÈñÿ’D’$’$á Þ\ã\ã^LÞ\ ã^ñÿ’D’$’$³j Þ\ ãVÈÞ\ã^=Þ\ñÿ’D’$’$b$" ãTÈ Þ\ã\ãH #Ì"ñÿE’$’$Š0eS^LÞ\ ã^ Þ\ ãñÿ’D’$’$·ü>HÞþÄmð\ã^=Þ\ ãHñÿ’D’$¢$œL Þ\ã\ãH Þe#ÌñÿE’$’$ Zen+CPDO:E ÞÞñÿ’D’$â$ üh\ã\ãÞÔ )ÞÞa õÿ’DœÄ ±ˆv.ÞÞRÈa Þa ÿÿ û_€ÿR2IFNS.RBûY!:þ’ƒýÿ]ý‹¯Sëÿ$IH”SøØF #Ù– Ùx ØUúÖ‚¡Ö‘VÖxñÿ”D¢(E™ªÿ  ýÿ@€Ðp§H ÿÿ û_€ÿR2SHEAP.RBûY!7þª’ýÿsô•¯ô[÷ÿIxQÙ ýØ–OØ¥ñÿ’D’$’$öJ!$!�‚ý�$$\ƒý$(!4!�ÒPªñÿ’D’$’$Ê(J�ª% Œ ) !,!�ª$H $(!4úÿ’D 5¸!Pª�ÒJ ÿÿ û_€ÿR2IFW.RBûY!:þl`ýÿ=ü‹¯4TúÿPÖ¥bÓÒþÿ„|ýÿ€D�6ÿýÿ@ŒÐp§Hÿÿ û_€ÿSWOP.RBû é ~þº¢ýÿgÃ�º‚úÿHÚ…tf ��º‚÷ÿÛg·Kÿv±ƒžÿâëÿñÿ’X’$’$! €‚€­‰# ÕÐñÿœD;’$ß?Ö�Ò8‹S  €‰3 þÿDäºÿÿ û_€ÿP4ASM.RBûY üþ2£ýÿµÈS£ô“ÿÿ ÿßÿÿ ÿßÿÿ ÿßýÿ@Ž©¡¤àGñ)ÿÿ ÿßñÿ’D’$’$ãòb bvÝÞìß+SR T ñÿ’D’$’$°" àÝÞìßèÞÝÞñÿ’D’$’$mTìßèÞÝÞìß+CC P ñÿ’D’$’$‡* àÝÞìßè^þ<"5ñÿ’D’$’$æ8ÝÞìßèðÞÝÞìß+NA Dñÿ’D’$’$)F àÝÞìßè^ñÿ’D’$’$¼BT"ÝÞìßèÞÝÞìß+ñÿ’D’$’$žªbRW I àÝÞìßñÿ’D’$’$ŽÉpèÞÝÞìßèÞÝ Þìßñÿ’D’$’$’t~+ID F àÝ Þìþ.ãñÿ’D’$’$tŒßè^%Ý ÞìßèÞÝÞñÿ’D’$’$xhšìß+HC R àÝñÿ’D’$’$cö¨Þìßè^0ÝÞìßèÞñÿ’D’$’$r¶ÝÞìß+NIID ñÿ’D’$’$1÷ÄàÝÞìßè^XÝÞìßèñÿ’D’$’$Í–ÒFÞÝÞìß+RSSO ñÿþaL’D’$’$ý¡à àÝÞìßè^TÝÞìñÿ’D’$’$âîßèdÞÝÞìß+ELAQ ñÿ’D’$’$«yü àÝÞìßè^Ýñÿ’D’$’$t› ÞìßèÞÝÞìß+CL A ñÿ’D’$’$dù àÝÞìßè^+ñÿ’D’$’$w&ÝÞìßèÞÝÞìß+OEñÿ’D’$þQv’$4 F àÝÞìßèñÿ’D’$’$¨B^)ÝÞìßèÞÝÞìßñÿ’D’$’$´pP+DL A àÝÞìñÿ’D’$’$qØ^ßè^\ÝÞìßèÞÝÞñÿ’D’$’$šmlìß+TA N àÝñÿ’D’$’$TÈzÞìßèÞÝÞìßèÞÝñÿ’D’$’$„lþ¶µˆÞìß+DL C àñÿ’D’$’$•ñ–ÝÞìßè^^ÝÞìßè´Þñÿ’D’$’$Q`¤ÝÞìß+JF P ñÿ’D’$’$-ѲàÝÞìßè^eÝÞìßñÿ’D’$’$¼èÀè–ÞÝÞìß+EDCC ñÿ’D’$’$ØRÎ àÝÞìßè^nÝÞñÿ’D’$’$"RÜìþ<ßènÞÝÞìß+DA R ñÿ’D’$’$«$ê àÝÞìßè^ñÿ’D’$’$zÕøÝÞìßèÞÝ Þìß+LF Oñÿ’D’$’$N àÝ Þìßè^ñÿ’D’$’$ÈHÝ ÞìßèÞÝ!Þìß+ñÿ’D’$’$˵"LE N àÝ!Þìßñÿ’D’$’$�Ç0èÞþq–Ý!ÞìßèÞÝ"Þìßñÿ’D’$’$Áa>+AL O àÝ"Þìñÿ’D’$’$AÖLßè^]Ý"ÞìßèFÞÝ#Þñÿ’D’$’$­hZìß+SC P  àÝñÿ’D’$’$ÛÀh#Þìßè^cÝ#Þìßè Þñÿ’D’$’$TvvÝ$Þìß+EDIC ñÿ’D’$’$Iá„àÝ$Þìßþ;Þè^lÝ$Þìßèñÿ’D’$’$ ž’nÞÝ%Þìß+NE T ñÿ’D’$’$’  àÝ%Þìßè^bÝ%Þìñÿ’D’$’$#®ßè‚ÞÝ&Þìß+VD I ñÿ’D’$’$àg¼ àÝ&Þìßè^Ýñÿ’D’$’$ƒ“Ê&ÞìßèÞÝ'Þìß+UC P ñÿ’D’$’$•ÁØ àþ0Ý'Þìßè^añÿ’D’$’$hæÝ'Þìßè2ÞÝ(Þìß+NJñÿ’D’$’$8ô C àÝ(Þìßèñÿ’D’$’$äù^4Ý(ÞìßèæÞÝ)Þìßñÿ’D’$’$åh+DO D àÝ)Þìñÿ’D’$’$§ßè^Ý)ÞìßèÞÝ*Þñÿ’D’$’$íc,ìß+AP G þ?” àÝñÿ’D’$’$nÆ:*ÞìßèÞÝ*ÞìßèÞÝñÿ’D’$’$­_H+Þìß+LF T àñÿ’D’$’$k5VÝ+Þìßè^Ý+ÞìßèÞñÿ’D’$’$|$d b b”Ý-Þìß+LH T ñÿ’D’$’$õ r àÝ-Þìßè^ñÿ’D’$’$ú€Ý-ÞìßèÞÝ.ÞìþŠRß+HCñÿ’D’$’$wŽAK àÝ.Þìßèñÿ’D’$’$‚ïœ^ Ý.ÞìßèªÞÝ/Þìñÿ’D’$’$4qªß+NI N àÝ/Þñÿ’D’$’$0ü¸ìßè^(Ý/ÞìßèÞÝñÿ’D’$’$/bÆ0Þìß+GN I àñÿ’D’$’$ã=ÔÝ0Þìßè^Ý0Þìßèþ<ÀÞñÿ’D’$’$ßeâÝ1Þìß+HCBK ñÿ’D’$’$ÇÂðàÝ1Þìßè^qÝ1Þìßñÿ’D’$’$SßþèªÞÝ2Þìß+HCCK ñÿ’D’$’$rN  àÝ2Þìßè^pÝ2Þñÿ’D’$’$€OìßèªÞÝ3Þìß+XC P ñÿ’D’$’$YÄ( àÝ3Þìßè^uþ¿'ñÿ’D’$’$êÒ6Ý3Þìßè2ÞÝ4Þìß+DR Cñÿ’D’$’$ï€D àÝ4Þìßè Þñÿ’D’$’$RÝ4ÞìßèÞÝ5Þìß+OIñÿ’D’$’$¿ ` R àÝ5Þìßèñÿ’D’$’$D n^#Ý5ÞìßèÞÝ6Þìßñÿ’D’$’$Xp|+XI A àÝ6Þìñÿ’Dþ_)’$’$³ÑŠßè^_Ý6ÞìßènÞÝ7Þñÿ’D’$’$sh˜ìß+OM D àÝñÿ’D’$’$¦7Þìßè^Ý7ÞìßèÞñÿ’D’$’$ÿl´Ý8Þìß+HCIK ñÿ’D’$’$ãÙÂàÝ8Þìßè^qÝ8Þìßèñÿ’D’$’$‚”ЪÞÝ9Þìß+GN R ñÿ’D’$’$þ4±ÕÞ àÝ9Þìßè^Ý9Þìñÿ’D’$’$HìßèÞÝ:Þìß+BS I ñÿ’D’$’$Žlú àÝ:Þìßè^Ýñÿ’D’$’$$‡:ÞìßèÞÝ;Þìß+NI T ñÿ’D’$’$Cú àÝ;Þìßè^&ñÿ’D’$’$=$Ý;ÞìßèÞÝ<Þìß+EDñÿ’D’$’$Å2þbîAC àÝ<Þìßèñÿ’D’$’$ö¿@^lÝ<ÞìßènÞÝ=Þìßñÿ’D’$’$‡[N+PJ T àÝ=Þìñÿ’D’$’$«²\ßè^}Ý=Þìßè–ÞÝ>Þñÿ’D’$’$ bjìß+PM I àÝñÿ’D’$’$5 x>Þìßè^Ý>ÞìßèÞñÿ’D’$’$Gj†Ý?Þþ²âìß+PJ F ñÿ’D’$’$Ì”àÝ?Þìßè^~Ý?Þìßèñÿ’D’$’$�Ž¢–ÞÝ@Þìß+TSCR ñÿ’D’$’$Ñ ° àÝ@Þìßè^PÝ@Þìñÿ’D’$’$#¾ßèÞÝAÞìß+HCRK ñÿ’D’$’$µ Ì àÝAÞìßè^pÝñÿ’D’$’$m”ÚAÞìßèþ•éªÞÝBÞìß+HCSK ñÿ’D’$’$j¯è àÝBÞìßè^pñÿ’D’$’$¶ öÝBÞìßèªÞÝCÞìß+BSñÿ’D’$’$  R àÝCÞìßèñÿ’D’$’$ƒ^ÝCÞìßèÞÝEÞìßñÿ’D’$’$¼O +AS V àÝEÞìñÿ’D’$’$IÃ.ßèÞÝEÞþ:­ìßèÞÝGÞìñÿ’D’$’$ˆf<ß+PM R àÝGÞñÿ’D’$’$†Jìßè^ÝGÞìßèÞÝñÿ’D’$’$|SXIÞìß+OM V àñÿ’D’$’$§êfÝIÞìßè^`ÝIÞìßèxÞñÿ’D’$’$ZVtÝJÞìß+DR I ñÿ’D’$’$ôÈ‚àÝJÞìßè ÞþˆªÝJÞìßèñÿ’D’$’$R‘�ÞÝKÞìß+ON T ñÿ’D’$’$ÍΞ àÝKÞìßè^!ÝKÞìñÿ’D’$’$n¬ßèÞÝLÞìß+JU C ñÿ’D’$’$¼8º àÝLÞìßè^AÝñÿ’D’$’$¹€ÈLÞìßèŒÞÝMÞìß+IS N ñÿ’D’$’$c–Ö àÝMÞìþQßèÞñÿ’D’$’$‡äÝMÞìßèÞ b b”ÝNÞñÿ’D’$’$!Qòìß+GS S àÝñÿ’D’$’$�ûNÞìßè^$ÝNÞìßèÞñÿ’D’$’$¬WÝOÞìß+SM T ñÿ’D’$’$[<àÝOÞìßè^ ÝOÞìßèñÿ’D’$’$`š*<ÞÝPÞìß+EGAQ þ|$ ñÿ’D’$’$$ë8 àÝPÞìßè^ÝPÞìñÿ’D’$’$²FßèÞÝQÞìß+EGBQ ñÿ’D’$’$uT àÝQÞìßè^Ýñÿ’D’$’$‚‰bQÞìßèÞÝRÞìß+EGCQ ñÿ’D’$’$Ñp àÝRÞìßè^ñÿ’D’$’$­~ÝRÞìßèÞÝSÞìß+MJþ/àñÿ’D’$’$u Œ P àÝSÞìßèñÿ’D’$’$Ü÷š^2ÝSÞìßèÞÝTÞìßñÿ’D’$’$`¨+SR E àÝTÞìñÿ’D’$’$šÁ¶ßèÞÝTÞìßèÞÝUÞìñÿ’D’$’$ø_Äß+JT P àÝUÞñÿ’D’$’$Z¹Òìßè^fÝUÞìßè–ÞÝñÿþ`J’D’$’$çaàVÞìß+OL G àñÿ’D’$’$lÁîÝVÞìßèÞÝVÞìßèÞñÿ’D’$’$ÅNüÝWÞìß+DW R ñÿ’D’$’$Cé àÝWÞìßèÞÝWÞìßèÞñÿ’D’$’$~WÝXÞìß+EGIQ ñÿ’D’$’$B+&àÝXÞìßè^ÝXÞìßñÿ’D’$þg’$ÁÄ4èÞÝYÞìß+JU P ñÿ’D’$’$îUB àÝYÞìßè^dÝYÞñÿ’D’$’$(OPìßè–ÞÝZÞìß+DLCC ñÿ’D’$’$üÖ^ àÝZÞìßè^^ñÿ’D’$’$¾ÇlÝZÞìßèÈÞÝ[Þìß+VO Lñÿ’D’$’$ˆ|z àÝ[ÞìßèÞñÿ’D’$’$™þk¶ˆÝ[ÞìßèÞÝ\Þìß+EGñÿ’D’$’$5 –MQ àÝ\Þìßèñÿ’D’$’$¶$¤^Ý\Þìßè ÞÝ]Þìßñÿ’D’$’$V²+SR N àÝ]Þìñÿ’D’$’$�ûÀßè^1Ý]ÞìßèÞÝ^Þñÿ’D’$’$:^Îìß+RT C àÝñÿ’D’$’$‘Ü^Þþ1¼ìßè^Ý^ÞìßèÞñÿ’D’$’$­gêÝ_Þìß+DLBC ñÿ’D’$’$_èøàÝ_Þìßè^^Ý_Þìßèñÿ’D’$’$ë  ¾ÞÝ`Þìß+DLIC ñÿ’D’$’$-� àÝ`Þìßè^^Ý`Þìñÿ’D’$’$" ßè¾ÞÝaÞìß+QS R ñÿ’D’$’$1Z0 þñÊàÝaÞìßè^Ýñÿ’D’$’$v‡> aÞìßèÞÝbÞìß+EGSQ ñÿ’D’$’$âL àÝbÞìßè^ñÿ’D’$’$­Z ÝbÞìßèÞÝcÞìß+QSñÿ’D’$’$‰h T àÝcÞìßèñÿ’D’$’$Î|v ÞÝcÞìßèÞÝdÞìß+ñÿ’D’$’$ §„ RW C þ^ç  àÝdÞìßñÿ’D’$’$²¿’ è ÞÝdÞìßèÞÝeÞìßñÿ’D’$’$M  +JX P àÝeÞìñÿ’D’$’$ Ä® ßè^gÝeÞìßè–ÞÝfÞñÿ’D’$’$)R¼ ìß+TSAO àÝñÿ’D’$’$“Ê fÞìßè^ÝfÞìßèÞñÿ’D’$’$¦]Ø ÝgÞìß+EGRQþBì ñÿ’D’$’$_Aæ àÝgÞìßè^ÝgÞìßèñÿ’D’$’$±£ô ÞÝhÞìß+NIAC ñÿ’D’$’$/„ àÝhÞìßè^hÝhÞìñÿ’D’$’$S ßènÞÝiÞìß+DLRC ñÿ’D’$’$; àÝiÞìßè^^Ýñÿ’D’$’$£‘, iÞìßèÜÞÝjÞìþ{ïß+NICC ñÿ’D’$’$ð°: àÝjÞìßè^jñÿ’D’$’$>H ÝjÞìßènÞÝkÞìß+TSñÿ’D’$’$“V P àÝkÞìßèñÿ’D’$’$Z²d ^*ÝkÞìßèÞ b bñÿ’D’$’$ydr ”ÝlÞìß+NICD ñÿ’D’$’$ÁÔ€ àÝlÞìßè^XÝþ²=lÞìßñÿ’D’$’$ôÂŽ èPÞÝoÞìß+WR R ñÿ’D’$’$JKœ àÝoÞìßèÞÝoÞìñÿ’D’$’$ª ßèÞÝpÞìß+NIIC ñÿ’D’$’$š ¸ àÝpÞìßè^hÝñÿ’D’$’$t‚Æ pÞìßènÞÝqÞìß+DLBO ñÿ’D’$’$OÎÔ  àÝqÞìßè^þ=,Lñÿ’D’$’$Î â ÝqÞìßèFÞÝrÞìß+DLñÿ’D’$’$Ïð CO àÝrÞìßèñÿ’D’$’$ôÙþ ^LÝrÞìßèFÞÝsÞìßñÿ’D’$’$‘J +RW R àÝsÞìñÿ’D’$’$ ¾ ßè ÞÝsÞìßèÞÝtÞìñÿ’D’$’$mV( ß+RW S àÝtÞþÀ$ñÿ’D’$’$ñ½6 ìßèÞÝtÞìßèÞÝvÞñÿ’D’$’$±WD ìß+DLAO àÝñÿ’D’$’$¥ÎR vÞìßè^LÝvÞìßèFÞñÿ’D’$’$ÿQ` ÝwÞìß+TSRO ñÿ’D’$’$¹:n àÝwÞìßè^ ÝwÞìßèñÿ’D’$’$“| ÞÝxÞìß+DLIO ñÿ’Dþ`(’$’$‡žŠ àÝxÞìßè^LÝxÞìñÿ’D’$’$æ ˜ ßèFÞÝyÞìß+QEBU ñÿ’D’$’$ r¦ àÝyÞìßè^Ýñÿ’D’$’$Ô‚´ yÞìßèÞÝzÞìß+QECU ñÿ’D’$’$W àÝzÞìßè^ñÿ’D’$’$ Ð ÝzÞìßèÞÝ{Þìß+NIñÿ’D’$’$þ¥FÉÞ RD àÝ{Þìßèñÿ’D’$’$àÌì ^XÝ{ÞìßèZÞÝ|Þìßñÿ’D’$’$†Sú +ELAS àÝ|Þìñÿ’D’$’$" ßè^Ý|ÞìßèÞÝ}Þñÿ’D’$’$ÝR ìß+ELBS àÝñÿ’D’$’$$ }Þìßè^Ý}ÞìßèÞñÿ’D’$’$:Y2 þÇÓÝ~Þìß+QEAU ñÿ’D’$’$Ô@@ àÝ~Þìßè^Ý~Þìßèñÿ’D’$’$H�N ÞÝÞìß+ELBQ ñÿ’D’$’$¤ã\ àÝÞìßè^ÝÞìñÿ’D’$’$X j ßèÞÝ€Þìß+ELIQ ñÿ’D’$’$Émx àÝ€Þìßè^Ýñÿ’D’$’$ò€† €Þìþ`üßèÞÝ�Þìß+DLRO ñÿ’D’$’$Ì” àÝ�Þìßè^Lñÿ’D’$’$Ú ¢ Ý�ÞìßèZÞÝ‚Þìß+DLñÿ’D’$’$ï° SO àÝ‚Þìßèñÿ’D’$’$ö×¾ ^LÝ‚ÞìßèdÞ݃Þìßñÿ’D’$’$ÇLÌ +LW N à݃Þìñÿ’D’$’$1¼Ú ßèÞþÍ݃ÞìßèÞÝ„Þìñÿ’D’$’$qdè ß+QEMU àÝ„Þñÿ’D’$’$“ö ìßè^Ý„Þìßè ÞÝñÿ’D’$’$q` …Þìß+DLNC àñÿ’D’$’$)å Ý…Þìßè^^Ý…ÞìßèÒÞñÿ’D’$’$

àÝ¥ÞìßèÞÝ¥Þìßèñÿ’D’$’$™LÞݨÞìß+OLCD ñÿ’D’$’$W�Z àݨÞìßè^HݨÞìñÿ’D’$’$$hßèÞÝ©Þìß+ENBQ ñÿ’D’$’$ lv àÝ©Þìßè^Ýñÿ’D’$’$¥|„©ÞìßèÞþäþݪÞìß+RGAT ñÿ’D’$’$S’ àݪÞìßè^ñÿ’D’$’$Ö ݪÞìßèÞÝ«Þìß+ROñÿ’D’$’$Ù ®BD àÝ«Þìßèñÿ’D’$’$ ñ¼^/Ý«ÞìßèÞݬÞìßñÿ’D’$’$wZÊ+ROCD àݬÞìñÿ’D’$’$æõØßè^.ݬÞþE-ìßèÞÝ®Þñÿ’D’$’$üMæìß+ELSS àÝñÿ’D’$’$Õ ô®Þìßè^Ý®ÞìßèÞñÿ’D’$’$DHݯÞìß+ERBT ñÿ’D’$’$¦0àݯÞìßè^ ݯÞìßèñÿ’D’$’$?›ÞݰÞìß+NIAD ñÿ’D’$’$uŒ, àݰÞìßè^þØçXݰÞìñÿ’D’$’$:ßèFÞݲÞìß+ROID ñÿ’D’$’$ÈBH àݲÞìßè^,Ýñÿ’D’$’$ÍpV²ÞìßèÞÝ´Þìß+ERAT ñÿ’D’$’${d àÝ´Þìßè^ ñÿ’D’$’$]RrÝ´ÞìßèÞ b b”Ýñÿ’D’$’$ÈD€¶Þìß+ERIT þ?½ àñÿ’D’$’$2ŽݶÞìßè^ ݶÞìßèÞñÿ’D’$’$»OœݸÞìß+MC S ñÿ’D’$’$ÿñªàݸÞìßè^3ݸÞìßñÿ’D’$’$âĸèÞݹÞìß+EG T ñÿ’D’$’$©CÆ àݹÞìßèÞݹÞìñÿ’D’$’$Ñ ÔßèÞݼÞìß+OC S þ^þ ñÿ’D’$’$Yâ àݼÞìßèÞݼÞñÿ’D’$’$­.ðìßèÞݽÞìß+ERPT ñÿ’D’$’$ùþ  àݽÞìßè^ ñÿ’D’$’$þ² ݽÞìßèÞÝ¿Þìß+ERRTñÿ’D’$’$›ò àÝ¿Þìßè^ñÿ’D’$’$tD( Ý¿ÞìßèÞÝÀÞìß+þ¿!ñÿ’D’$’$üš6ELCQ àÝÀÞìßñÿ’D’$’$XDè^ÝÀÞìßèÞÝÂÞìñÿ’D’$’$ÆkRß+NISD àÝÂÞñÿ’D’$’$‘¼`ìßè^XÝÂÞìßèdÞÝñÿ’D’$’$ìRnÃÞìß+OE R àñÿ’D’$’$ùµ|ÝÃÞìßèÞÝÃÞìßèÞñÿ’Dþ]%’$’$¦MŠÝÄÞìß+ELCS ñÿ’D’$’$ô4˜àÝÄÞìßè^ÝÄÞìßèñÿ’D’$’$™“¦ÞÝÊÞìß+ROAD ñÿ’D’$’$¹µ´ àÝÊÞìßè^-ÝÊÞìñÿ’D’$’$Ë ÂßèÞÝÍÞìß+VD R ñÿ’D’$’$%MÐ àÝÍÞìßè^ Ýñÿ’D’$’$þ®vÞÍÞìßèÞÝÎÞìß+ELMS ñÿ’D’$’$Ú ì àÝÎÞìßè^ñÿ’D’$’$7úÝÎÞìßè ÞÝÏÞìß+ELñÿ’D’$’$KþRQ àÝÏÞìßèñÿ’D’$’$f^ÝÏÞìßèÞÝÐÞìßñÿ’D’$’$E$+ERCT àÝÐÞìñÿ’D’$’$B2þ*eßè^ ÝÐÞìßèÞÝÓÞñÿ’D’$’$ÂU@ìß+XE P àÝñÿ’D’$’$µNÓÞìßèÞÝÓÞìßèÞÝñÿ’D’$’$ÊK\ÔÞìß+ELMQ àñÿ’D’$’$û6jÝÔÞìßè^ÝÔÞìßè Þñÿ’D’$’$Ç>xÝØÞìß+EN W ñÿ’D’$’$Ûº†àþ.–ÝØÞìßèÞÝØÞìßèñÿ’D’$’$–ˆ”ÞÝÚÞìß+ELSQ ñÿ’D’$’$§Û¢ àÝÚÞìßè^ÝÚÞìñÿ’D’$’$Ö°ßèÞÝÞÞìß+LC S ñÿ’D’$’$0 ¾ àÝÞÞìßèÞÝÞÞñÿ’D’$’$°0ÌìßèÞÝàÞìß+RSAO ñÿ’D’$’$úÔÚ þÇÉàÝàÞìßè^Tñÿ’D’$’$š´èÝàÞìßèFÞÝáÞìß+RSBOñÿ’D’$’$�ðö àÝáÞìßè^ñÿ’D’$’$ûTÝáÞìßèFÞÝâÞìß+ñÿ’D’$’$ñ“RSCO àÝâÞìßñÿ’D’$’$ð¾ è^TÝâÞìßèFÞÝçÞìñÿ’D’$’$ø`.ß+NR D þú8 àÝçÞñÿ’D’$’$ö³<ìßèÞÝçÞìßèÞÝèÞñÿ’D’$’$•GJìß+RSIO àÝñÿ’D’$’$»¼XèÞìßè^TÝèÞìßèFÞñÿ’D’$’$½MfÝéÞìß+PO N ñÿ’D’$’$ºÛtàÝéÞìßèÞÝéÞìßèÞñÿ’D’$’$y@‚ÝêÞìß+TSCOþG¬ ñÿ’D’$’$µ�àÝêÞìßè^ ÝêÞìßñÿ’D’$’$Á¼žèÞÝíÞìß+LR N ñÿ’D’$’$X@¬ àÝíÞìßèÞÝíÞìñÿ’D’$’$“øºßèÞÝîÞìß+TSAR ñÿ’D’$’$ È àÝîÞìßè^PÝñÿ’D’$’$²mÖîÞìßèÞÝïÞìßþå+TSBR ñÿ’D’$’$Á¿ä àÝïÞìßè^Pñÿ’D’$’$ªPòÝïÞìßèÞ b bxÝñÿ’D’$’$ÿDðÞìß+TSIO àñÿ’D’$’$)3ÝðÞìßè^ÝðÞìßèÞñÿ’D’$’$Ë?ÝñÞìß+RSRO ñÿ’D’$’$ Í*àÝñÞìßè^TÝñÞþE©ìßñÿ’D’$’$ÒÑ8èZÞÝòÞìß+BA I ñÿ’D’$’$¸™F àÝòÞìßè^ÝòÞñÿ’D’$’$AGTìßèÞÝöÞìß+DA I ñÿ’D’$’$\b àÝöÞìßè^ñÿ’D’$’$Q·pÝöÞìßèÞÝøÞìß+NU Iñÿ’D’$’$þî~ àÝøÞìßè^þ+Üñÿ’D’$’$ &Œ'ÝøÞìßèÞÝùÞìß+ñÿ’D’$’$Q’šTSBO àÝùÞìßñÿ’D’$’$„ ¨è^ÝùÞìßèÞÝúÞìñÿ’D’$’$$S¶ß+TSSO àÝúÞñÿ’D’$’$YÄìßè^ ÝúÞìßèÞÝñÿ’D’$’$]SÒûÞìß+BA R àñÿþbE’D’$’$AàÝûÞìßè^ÝûÞìßèÞñÿ’D’$’$õ;îÝüÞìß+TSIR ñÿ’D’$’$%ÐüàÝüÞìßè^PÝüÞìßñÿ’D’$’$+· èÞÝýÞìß+RR R ñÿ’D’$’$¶> àÝýÞìßèÞÝýÞìñÿ’D’$’$÷&ßèÞÝÿÞìß+TSRR ñÿ’D’$þ2Ü’$�4 àÝÿÞìßè^PÝñÿ’D’$’$) BÿÞìßèÞÝ^ìß+TSSRñÿ’D’$’$$ÌP àÝ^ìßèñÿ’D’$’$¥a^^PÝ^ìßè(Þ b ñÿ’D¢D”( lb a af aì ao ñÿ¢D”(’$y z aó a{ aû b bÚñÿ’D’$’$tÖþÏ}ˆ^+ Þ\ã\ã]\ ãñÿ’D’D’$–\ãe‘]\ ã+T.TX' ñÿ’D’$’$tó¤NIUP'T Þ Þ\ã\ãñÿ’D’$’$�²^ú" Þ\ã\ã^ë Þñÿ’D’$’$bÓÀ\ã\ã^ú" Þ\ã\ñÿ’D’$’$IÎã^^ Þ\ã\ã^ Þñÿ’D’$’$8þÜ\þKã\ã^ Þ\ã\ñÿ’D’$’$Hûêã^ø" Þ\ã\ã^ÿ!ñÿ’D’$’$ ø Þ\ã\ã^ Þ\ã\ñÿ’D’$’$sáã^+ Þ\ã\ã+T.TXñÿ’D’$’$±£' UOPTTU ' Þ Þ\ã\ñÿ’D’$’$%"ã^÷" Þ\ã\ã^ëñÿ’D’$’$îP0 Þ\þ@ªã\ã^õ" Þ\ãñÿ’D’$’$â%>\ã^^ Þ\ã\ã^€ñÿ’D’$’$ÇkL Þ\ã\ã^ Þ\ãñÿ’D’$’$rÝZ\ã^+ Þ\ã\ã+T.ñÿ’D’$’$w–hTX' RP'D Þ Þ\ã\ñÿ’D’$’$Ìvã^ô" Þ\ã\ã^ëñÿ’D’$’$£#„ Þ\ãþÒ\ã^ô" Þ\ñÿ’D’$’$†Â’ã\ã^^ Þ\ã\ã^ñÿ’D’$’$s[  Þ\ã\ã^ Þ\ãñÿ’D’$’$€Ð®\ã^ò" Þ\ã\ã^ñÿ’D’$’$`,¼ÿ! Þ\ã\ã^ Þ\ñÿ’D’$’$N(Êã\ã^+ Þ\ã\ã+ñÿ’D’$’$´µØT.TX' RP'R þ½M Þ Þ\ãñÿ’D’$’$IÐæ\ã^ñ" Þ\ã\ã^ñÿ’D’$’$Uôë Þ\ã\ã^ï" Þ\ñÿ’D’$’$ ã\ã^^ Þ\ã\ãñÿ’D’$’$p^€ Þ\ã\ã^ Þ\ñÿ’D’$’$ŠÛã\ã\ã b btLñÿ’D’$’$¬³,&ÞT&+******þÏW**** ñÿ’D’$’$Y¦: Þ Þ\ ã+I SNRT .ON . ñÿ’D’$’$…¦H Þ Þ\ ãL%Þ\ ã+ñÿ’D’$’$ã]V' ÞÞ\ ãñÿ’D’$’$”d\ÞÞ\ ã+ 'AH SON TEYñÿ’D’$’$Òkr TEBÞÞ\ ã+NEC TAREDEñÿ’D’$’$Ò3€F RO ÞÞ\ ã\ þ/"ã\ñÿ’D’$’$ïæŽã b bŒÞPL&ÞTñÿ’D’$’$Ã=œ&ÞP+NITS.RN .O= ñÿ’D’$’$†ª Þ Þ\ ãL%Þ\ ã+ ñÿ’D’$’$µA¸ ÞÞ\ ã\ñÿ’D’$’$'4ÆÞÞ\ ã]\ ãLÞ\ñÿ’D%’$ɼÔ ã\ãeË]\ ã\þ@ç ñÿ’D’$’$](âã+** ÞÞ\ñÿ’D’$’$Oð ã\ÞÞ\ ã+* *LIELñÿ’D’$’$÷þAG LOCEDÞÞ\ ã\ ã ñÿ’D’$’$úú bb$ÞÐ\ÞìßÚ.Þñÿ’D’$’$ü\ÞìßÚ.Þ\Þñÿ’D’$’$½(ìßÚ.Ð\ÞìßÚ.Þþµ(ñÿ¢D’$’$­6eEÈÞ\ÞìßÚ.ñÿ’D’$’$ϨDÐÈ^ÞÐÞÐL$Þñÿ’D’$’$dRT$L#ÞT#ÞÐ\+ ñÿ’D’$”(®` Âep a�ñÿE’D’$¨Mnd¹Èe¹ÝÈìß Ð\ ÈÂñÿE’$¢$ö…|e‰ÞÐ ÈØP ÈØÐdš Èñÿ’DþR,’$¢$àŠ+ Âeš ñÿE’D’$Óâ˜a�Èe·ÈÞÐÈ^Ðñÿ’D’$’$jƦÈÈÐÈ^ÞÐL#Þñÿ’D’D’$›U´T#dp bbZÈ^ñÿ’D%’$«ÂÈÞ"!eÛÈ Þ\ã\ñÿ’D’$’(c)ÐãÈ Þ\ã\ãdè^€Èñÿ’D’$’$þ1![ÞÈ Þ\ã\ã]\ñÿ’D’$’$Õ©ì ã bbfÈ^ÈÞ"ñÿ¢D’$’$üõú!eÈÈ Þ\ã\ãÈñÿ’D”$’$õ Þ\ã\ãd ^€ÈÈñÿ’D’$’$èZÈ Þ\ã\ã]\ñÿ’D’$’$–«$ ã bblÈÞÈ^"ñÿ’D%’$&02þìZÈÞ"!eMÈÈ Þ\ãñÿ’D’$¢$o@\ãÈÞ\ã\ãdZ^ñÿ’D’$’$¹nN€ÈÈ Þ\ã\ã]ñÿ’D’$’$Ax\\ ã bbxÈÞÈ^ñÿ’D”$’$BNj"ÈÞ"!e‰È ÈÈñÿ’D’$’$‡ºx Þ\ã\ãÈ Þ\ã\ñÿ¢D’$’$ø[†ãdþ¸˜^€ÈÈ È Þ\ñÿ’D’$’$†Ã”ã\ã]\ ã bbÞñÿ’D’D’$ª¯¢ÈÞeóÈÞÈ^"eñÿ’H’$’$®R°ÀÈ^€È Þ\ã\ãñÿE’$%µÍ¾dñÈÞÈ^"eÖÈÈñÿ’D’$’DqÌ Þ\ã\ãdéÈ^ñÿ’D’$’$%ºÚ Þ\ãþš\ãÈ Þ\ã\ñÿ’D’$’(#"èãÈ Þ\ã\ãd ÈÞñÿE’$”$�GöeÈÞ Þ\ã\ãd ñÿ’D’$’$ð¼È Þ\ã\ãL%Þ Þ\ñÿ’D’$’$¾ã\ã bb4\H ñÿ’D’$’$‹ ìßÚ^ \H ìßÚ^ñÿ’D’$’(À¢.,#H Hþõ‡ "eAH Þñÿ’D’D’$Ó—<P d\H ìßÚ.Kñÿ’D’D’$ãgJ<(!e¾+**A SSMELBREC DOñÿ’D’$’$ЇXÞÞ\ ã+ EREOR R : ñÿ’D’$’$Іf Þ Þ\ ã\ ãÞP Hñÿ’D¢$’$ÿ€t ÐH ÈeŽ\H ìßñÿ’D’$%Ÿ‚ÚÞ\ ãH èþ·¤P dv\ ñÿ’D’$’$š#�ã+**L SA TEROCDRDEÞÞ\ñÿ’D’$’$)Áž ã+P OCEDC UOTNRE= ÞÞñÿ’D’$’$¬\ ãL% Þ\ ã\ ãL&ñÿ’D’$’$/KºÞT&\H ìßÚ.L(ñÿ’D’$’$UÈÐH ÞP H H \ñÿ’D’$¢$]ÖH ìßÚ.K<(þ"m"eûÈñÿ’D’$’$"ä Þ\H ìßÚ.L(ñÿ’D”$’$\{òÐH ÞP dÐÈÐ bñÿ’D¢$’$¬¹bJH Þe!ÞÐH ÐÈñÿ”D’$’$ï Èe!\ÈìßÚÞ\ ãñÿ’D’D’$z£ÈèÐd  b‚bX+R.XD ñÿ’D’$’$`c* 8 ÞÞ\ã\þ6Æãñÿ’D’$’$ 8+E.TX DC.TS. LC DÞÞ\ñÿ’D’$’$¨žFã+CPTR N ÞÞ\ñÿ’D’$’$ÃÚTã\ãÞ Ð^0T^9.ñÿ’D¢$’$„#b@ÐL.@Èex<ËL.$'ñÿ’D¢$’$õÀp<ÓLêTdc^AT^Zñÿ’D”$’$]~.@ÐL.@Èe•8ËL.$þÜñÿ’D”$’$§Œ'8ÓLêTd€8Ë^ñÿ’D’$’D}yš'<Ë'8Ó\)eþ+**A SSñÿ’D’$’$™a¨MELB YOCEDÞÞ\ ã+S CEñÿ’D’$’$QY¶ITNON TOP ORÞÞ\ ã+EPñÿ’D’$’$ùDÄLR YNEED.D Þ Þ\ ã\ñÿ’D’$’$P~Ò ã+**L SA TEROCDRDEÞÞñÿþTM’D’$’$õAà\ ã+P OCEDC UOTNRE= Þñÿ’D’$’$ð-îÞ\ ãL% Þ\ ã\ ã^ñÿ’D%%Þoü7\ãe\ãdþ]ñÿ’D’$’Dïý \ ãL^;e\ãLñÿ’D’(’$Èì.8Ë(eþÜÞìßL Þñÿ’D¢$’$àÐ& ÐPÞ@Ð È@Èe:Ü Èìß^ ñÿ’D’(þ'—’$¥â4 Èè Ðd)Þ ÐÞ Ð\ã Èñÿ’D’$%§>BPÞ#L^;#!ep]ñÿ’D’$’DLP\ ãL^;en ÈÞ Ðñÿ’D’$”$>^Ü ÈìßL L^:enñÿ”D’$%b(l È Ðd>\ã ÈÞe† ÈÞñÿ’D’$%²{z ÐÜ ÈìßÚ^ exÞ Ðñÿ’D’$’(c‹þ稈 È Ð ÈÞ@Ð È@Èe¦Ü Èìñÿ’D’$’$|–ßÜ ÈìßÚ ÈÞ Ð Èè ÐñÿE’$’$c»¤dŽÜ+PJ C ÂñÿE’D’$⡲eÍ aþÞ Ð+SJ R@ CPTR Nñÿ’D’$¢$ zÀ Þ Þ\ã\ãddÜñÿ’D’$¢$(wÎ+OP P Âe ñÿE’$’$¼×Üaþþ ÈÞ Ð+SD Z4 1 ñÿ’D’$’$œ!ê ÞÞ\ã\ã+DL A ñÿ’D’$”$‹0ø ÞÞ\ã añÿ’D’$’$ ÷Þ\ã+@ 14 ñÿ’D’$’D ÌÞÞ\ã\ãddÜ+UPHSñÿ’D’$¢DéÜ" Âeo aþ Èñÿ’D’$’$Ê0Þ ÐþçH+SI Z4 1 Þñÿ’D’$’$ÿ·>Þ\ã\ã+TS A ñÿ’D’$’(ŽRL ÞÞ\ã aÞ\ñÿ’D’$’$ºZã+@ 14  ÞÞ\ñÿ’D%’$í¸hã\ãddÜ+OLDA ñÿ’D%’D €v ÂeÚ aþ ÈÞ Ðñÿ¢D%’(“Ñ„ aÐ þšaÐ aÐ+SJñÿ’D’$’$X¯’ R@ C.DL Þ Þ\ã\ñÿ’D’$’$^J ãÈ Þ\ã\ãÈ Þ\ñÿ’D’$’$n¸®ã\ã+DL A ñÿ’D’$’$ÏÓ¼ÞÞ\ãÈÞ\ã+@ 74 ñÿ’D’$’$ÆxÊ ÞÞ\ã\ãñÿE’$’$#£ØddÜ+TSRO þ¤� Âñÿ’D’$¢$õÆæÜ ÈÞìßÚ^E"eJ ñÿE’$’$¶ñôaþ ÈÞ Ð+TS A ñÿ’D’$’Dðr ÞÞ\ã aÞ\ãñÿ’D’$’$#ø+4 7 ÞÞ\ñÿ’D’$’$zgã\ã+SJ R@ C.TS ñÿ’D’$’(ÌR, Þ Þ\ã\ã þCÿa Þ\ñÿ’D%’$CL:ã\ã a Þ\ã\ãñÿE’$’( ÚHddÞ Ð È@Ð È@ÈeaÜ Èìñÿ’D’$’(w6VßÚÞ\ ã Èè ÐdN\ãñÿ¢D’$’$µ»d ÈeŸ+R.XD 01 Þñÿ’D’$’$¼frÞ\ã\ã b$bÌÜÞñÿ’D’$’$€¯€ìßL ÜÞìß\þTr ãÜÞñÿ’D’$’Dàߎìß\ ã\ãe¡ÜÞìßñÿ’D’D’$ãõœ^ d¨ÜÞìß\ ã añÿ¢H’(’DB ª d #Èe´ÞÐd¿ È Þ\ñÿ’D”$%¼X¸ã\ã\ãdˆ% a'dˆ%ñÿ’D’$%œêÆÜ\ ã È È^@aºdˆ%ñÿ¢D’D’$ƒáÔ a'dˆ%Ü\ ãÜ\ ãþ1ò ñÿ’D%%ùñâÈÈÞ Èa&dˆ% a'dˆ%ñÿ’D’$’$ÄðÜ\ ãÜ\ ã ÈÈÞ Èñÿ”D”(’(¤Ÿþ^a`dˆ% a'dˆ%Ü\ñÿ’D’$’$¿ ãÜ\ ã ÈÈÞ ÈÞ^ñÿ¢D¢D’DaÎ a`dˆ% a'dˆ%Ü\ ãñÿ’D’$%Î( ]\ ãL^Le; ]þ6*ñÿ’D’D’$¦Á6 \ ãd- Ü\ ã ÈÈÞñÿ’D’$’$ºÀD Þ\ã\ãLÞ\ ãÈñÿ’D’$”$)ÌR Þ\ã\ã]\ ãdˆ%ñÿ¢D’D’$þ/` a'dˆ%Ü\ ã ÈÈ Þ\ñÿ’D’$%‘˜n ã\ã]\ ãdˆ% añÿ¢H’$”$-†| 'dˆ%Ü\ ã ÈÞ ÈaºñÿEþÑ+E’$gአdˆ% a'dˆ%Ü\ ã È Èñÿ’D¢(¢(o˜ Þ^aîdˆ% a'dˆ%Üñÿ’D’$%‹¦ \ ã ÈÞ È^aîdˆ%ñÿ¢D’D’$³w´ a'dˆ%Ü\ ã ÈÞ Èñÿ’D¢(¢(D ^Þaîdˆ% a'dˆ%Üñÿ’D¢$¢DÓhÐ \ ã È Èaºdˆ% a'dñÿ’H’$”$þ5×Þ ˆ%Ü\ ã ÈÞÞ ÈaºñÿEE’$ü¿ì dˆ% a'dˆ%Ü\ ã]\ñÿ’D”$’$íJú  ãL^Le !]\ ãñÿE’$’$‡™!dü Ü\ ã ÈÈ Þ\ã\ñÿ’D’$’$ñ¿!ãLÞ\ ãÈÞ\ã\ñÿ’D”$%95$!ã]\ ãdˆ% a'dˆ%ñÿ’D’$’$×Õ2!þ›k È Þ\ã\ãÞ Þ\ã\ñÿ’D”$%5@!ã]\ ãdˆ% a'dˆ%ñÿ’D’$%ÉËN!]\ ãL^Lea!]ñÿ’D’D’$Hl\!\ ãdS!Ü\ ã È Þ\ãñÿ’D’$’$�¿j!\ãLÞ\ ãÈÞ\ãñÿ’D’$¢DàÞx!\ã]\ ãdˆ% a'dñÿ’H’$¢$VÓ†!ˆ%]þÕö\ ãL^ eš!]ñÿ’D’(’$È­”!\ ãdŒ! ÈÐ ÜÜàÜÞìñÿ’D’$’$^­¢!ßL ÜÞìß\ ãÜÞìñÿ’D’$”$hŸ°!ß\ ãÜÞìß^ a ñÿ’D’$’$Xš¾!Ð ÈÈ^€ Þ\ã\ãñÿ’D%E¿Ì!]\ ãdˆ% a'dˆ%Ü\ñÿ’D’$’$NÚ! ãÜ\þ ã\ã ÈÈÈañÿ¢H¢(’$[§è!ždˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$”$Èö!ã\ã]\ ã\ãeú!ñÿ’D’$”$Ã6"]\ ãÞÐÞÐÈÈe$"ñÿ’D’$’$÷_"]Èìߨ Þ\ã\ãÈñÿ”D”(’(Ñ9 "èÐd "dˆ% a'dˆ%Ü\ñÿ’D%%«Þ." ã ÞÈ Èaþam&dˆ% a'dˆ%ñÿ’D’$%æg<"]\ ãL.ÞeO"]ñÿ’D’D’$�ÑJ"\ ãdA" ÜÞìßL ÜÞñÿ’D’$’$£ÛX"ìß\ ã ÜÞìß\ ã È Þñÿ’D’$’$¼bf"\ã\ã ÜÞìßÚÞ0ñÿE’$’$J™t"e§"+T.TX ÞÞñÿ’D’$’$…�‚"\ãÞ0Þ\þ&Ð ãÞ0Þ\ñÿ’D’$’$K8�" ã'ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D”$’$R ž"Þ\ ã\ãd5# ÜÞìßÚñÿ’D’D’$T%¬" Þ0eâ"+T.TX ñÿ’D’$’$Mº"ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D’$’$ïÈ"Þ\ ã,ÞÞ\ãÞ0Þ\ñÿ’D’$%�ÀÖ" ãÞ0Þ\ ã\ãþ]Çd5# ÜÞñÿ’D¢$’$ä"ìßÚÞ0e#+T.TX ñÿ’D’$’$Û«ò" ÞÞ\ãÞ0Þ\ñÿ’D’$’$±7# ãÞ0Þ\ ã<ÞÞ\ãÞ0ñÿ’D’$’$ d#Þ\ ãÞ0Þ\ ã\ãdñÿ’H’$’$“�#5#+T.TX ÞÞ\ñÿ’D’$’$Û˜*#ã ÜÞÞ\ã\ã]þHG\ñÿ”D%’$=â8# ãdˆ% a'dˆ% ÞÞ Èañÿ¢H¢(’$w¦F#&dˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$’$©ÆT#ã^.Þ\ ã\ã]!\ñÿ’D’$’$¡öb# ã\ã^0Þ\ ãM!Þ\ñÿ’D%’$“ap# ã\ãdˆ% È Þ\ã\ñÿ’D%’$r4~#ã\ã a"dˆ% È Þ\ãþÑñÿ’D’$’$r³Œ#\ãÜ\ ã\ãÈ Þ\ñÿ’D’(%虚#ã\ãdˆ%ðñrÞg¦#d­ñÿE¢(ET�¨#dÁdÁdÁdÁdÁdÁdÁñÿE¢(Eõ޶#dÁdÁdÆdÔdÔdÔdÔñÿE¢(E—ŽÄ#dÔdÔdÔdÔdÔdÙdëñÿE¢(EŽÒ#dëdëdëdëdëdëdëñÿþÛPE¢(Et�à#dëdðd d d d d ñÿE¢(EþŒî#d d d d d d d ñÿE¢(EnŒü#d d d d d d d ñÿE¢(EÕŠ $d$ d` d` d` d` d` d` ñÿE¢(E8Š$d` d` d` de dz dz dz ñÿE¢(E‰&$dz dz dz dz dz dz d ñÿE¢(þþŸE;‰4$dŒ dŒ dŒ dŒ dŒ dŒ dŒ ñÿE¢(E؈B$dŒ dŒ d‘ d  d  d  d  ñÿE¢(EzˆP$d  d  d  d  d  d¥ d´ ñÿE¢(Eù‡^$d´ d´ d´ d´ d´ d´ d´ ñÿE¢(Ex‡l$d´ d¹ dÊ dÊ dÊ dÊ dÊ ñÿE¢(E‡z$dÊ dÊ dÊ dÊ dÏ dÚ dÚ ñÿE¢(Eņþ¿[ˆ$dÚ dÚ dÚ dÚ dÚ dÚ dÚ ñÿE¢(E:†–$dß dî dî dî dî dî dî ñÿE¢(E[…¤$dî dî dî dó d-!d-!d-!ñÿE¢(EQ„²$d-!d-!d-!d-!d-!d-!d2!ñÿE¢(E„ƒÀ$dI!dI!dI!dI!dI!dI!dI!ñÿE¢(E�‚Î$dI!dI!dN!d‚!d‚!d‚!d‚!ñÿE¢(Eƒ�Ü$dþ«X‚!d‚!d‚!d‚!d‚!d‡!dÓ!ñÿE¢(E”ê$dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!ñÿE¢(E ø$dÓ!dØ!dë!dë!dë!dë!dë!ñÿE¢(EU~%dë!dë!dë!dë!dð!d&"d&"ñÿE¢(E%}%d&"d&"d&"d&"d&"d&"d&"ñÿE¢(E¬|"%d+"d7"d7"d7"d7"d7"d7"ñÿE¢(E~y0%d7"dþu•7"d7"d<"d<#d<#d<#ñÿE¢(E\u>%d<#d<#d<#d<#d<#d<#dA#ñÿE¢(EøtL%dI#dI#dI#dI#dI#dI#dI#ñÿE’(’$›®Z%dI#dI#dN#AAAAñÿ’D’$%ø>h%AAAAAdw#Añÿ’D’$’$á…v%AAAAAAAñÿ”D’$’$Bb„%Ad‡# þ½„b^bŽ+UOPTTU ñÿ’D’$’$V’% ÞÜã+RP R ñÿ’D’$’$Ö % Þ Üã+NIUP T ñÿ’D’$’$ÿË®% ÞÜãÜãÜãÜã+ ;ñÿ’D’$’$;Õ¼%====P A4MSB GEÞÞ Üã+NIñÿ’D’$’$O™Ê% SON W ÞÞ Üã Üãñÿ’D’$’$Ø•Ø%ÞT+^0.Tþ �(ÞT%ÞT*ñÿ’D’$’(¤:æ%^P-L*H-e &ÝL*ñÿ’D’$’$Ñô%ìßP.L.+ ñÿ’D’$¢Dz1& àL*èT*dê% aj]ñÿ’D’$’$°Ÿ&Ü ã]Ü ã]ÞìßÜ ãñÿ’D’$’$̹&]ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$¸,&L^.]+ITþ¸t T ñÿ’D%’$ö|:& Ã"er&+********** ñÿ’D’$’$8ÂH& Þ Þ Üã+N OITLT EOFñÿ’D’$’$pV&NU DÞÞ Üã+********** ñÿ’D’$’$7²d& Þ Þ Üã Üã Üã^7ñÿ’D’$’$^Er&LÞÜ ã]ÞÞÜã]Üñÿ’D’$’Dìð€& ãLÞÜ ãÜãe}&ÜþCFã]ñÿ’D’$¢$¶ Ž&Ü ã]Ü ãL^Ie &Þñÿ”D’$’(̦œ&T,dÑ&L^Le¬&ÞT,ñÿE’$’$.Iª&dÑ&L^PL^?#eñÿ’H’(’$™_¸&¾&ÞT,dÑ&]Ü ãL^.ñÿ¢D¢$’$HJÆ&eÎ&ÞT,dÑ&ÞT,L,,ñÿE’$’$ðËÔ&dY)])Ü ãL%L)L)þ5ÀÞñÿ”D’$’$ð¤â&"e''L'ÞT'^IÞ Üñÿ’D’$’$šºð& ãL)Þ Üã^ Þ Ü ã+ ;??ñÿ’D’$’$“Ñþ& ?CPDO E Þ Þ Üã+C UOñÿ’D’$’$ÑÁ 'TNO TUO FTSÞÞ Üã+PE? ñÿ’D’$’$1å'?? ÞÞ Üã ÜãLñÿ’D”$’$T(')T%]Ü ãdi)LÞÜ ãþ¸(ñÿ’D’$’$rÑ6']*Ü ãL*ÞÜã]Ü ãLñÿ’D¢$”$ýRD'ÞÜ ãÜãe?'ÜãÜãdi)ñÿ’D’$’$š¸R']ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$#`']ÞìßÜ ã]+IF L ñÿ’D¢$¢( n' Âe{' a„d2)]ñÿ’D’$’$s³|'+WS 1  Â]ñÿ’DþÈ+’$’$|“Š'+WS 2 Â#]ñÿ’D’$’$n’˜'+WS 3 Â#]ñÿ’D’$”$Oe¦'+WS 4 Â#e&(ñÿ’D’$’$Di´']Ü ãL^0L^1ñÿ¢D’$’$‰ˆÂ'#e´']ÞìßL L^ñÿ”D’$’Dx„Ð'1eÚ'ÞT)dÝ'ÞT)Þñÿ’D’$%þä/Þ'T*ÞP-L*H-e (]ñÿ’D’$’$ʆì'Ü ã]L*ìßL L)Þñÿ’D’$’$Ëeú'L.L(T)L*èTñÿ¢D’$’$îô(*dã']ÞìßÚ.L(Tñÿ’D’$’$~Q(*]L*ìßL)]Ü ãñÿE’$’$2Ç$(d2)]+XT T ñÿ’D¢$’$*Ø2(þéÀÂÌ^M"eÆ(^.ÞÜ ã]ñÿ’D’$’$’½@(ÞÞÜã]Ü ãLÞÜ ãñÿ’D%’$Å6N(L^ eE(ÞT*ÞP-Lñÿ’D’(’$£ã\(*H-e·(]Ü ãLÞ0ñÿ¢D’$’$ß…j(e}(Þ0ÞÜ ã"ÞÞÜãÞ0ñÿ’D’D%¹x(ÞÜ ãd°(LÞ0e”(Þ0ñÿ’D’$”$Žù†(ÞÜþ1š ã<ÞÞÜãÞ0ÞÜ ãd°(ñÿ’D%’$õó”(LÞ0e«(Þ0ÞÜ ã>ÞÞñÿ’D”$’$™e¢(ÜãÞ0ÞÜ ãd°(LÞÜ ãñÿ’D%’$5°(L*èT*d[(]Ü ãÜãLñÿ’D¢$’$|¾(ÞÜ ãÜãd2)]+NE T ñÿ’D”$¢$ÜÌ(  Âeÿ(L+eé(Þñÿ’D’$’$ˆÚ(T+^.þÕ¦ÞÜ ã]ÞÞÜãdñÿ’H’$’$d/è(ý(+ ; . ÞÞÜñÿ’D”$’$�çö(ã]ÞÞÜãd)]+NE Dñÿ’D’$’(u©) Â!e)^.Þñÿ’D’$¢$·â)Ü ã]ÞÞÜãÜã!e,)]ñÿ’D’$%ê )Ü ãLÞÜ ãÜãe)]ñÿ’D”(’$ö.)Ü ãÜãdi)þ š azL%ÞTñÿ¢D’$’$ Z<)%di)LÞÜ ã]Ü ãLñÿ’D%’$ãJ)ÞÜ ãÜãeD)Üã]Ü ãdñÿ’H%¢(™ˆX)i)ñ¯Þg_)dÖ&d1'dR'dñÿ¢H%’$&ýf)4)d?)Üãeu)Üã]Ü ãdñÿ’H’D’(¸t)i)Ü)e�&L'Þe¢)+-;--ñÿ’D’$’$–«‚) -ON .FOW RAÞþʼÞ Üã+INGNñÿ’D’$’$’«�) S = Þ Þ ÜãL'Þñÿ’D’$’D0.ž) Üã ÜãL&ÞeË)+*;** *ñÿ’D’$’$HÁ¬)ON .FOF TAÞÞ Üã+LAE RRñÿ’D’$’$LÀº)RO S= Þ Þ ÜãL&Þ Üñÿ’D’$’$`È)ã Üã+E.DN Þñÿ’D’$’( ÆÖ)ÞÜãÜãL&Þeþb/ßä)^7ñÿ’D’$’$ã´ä)ÜãÜãÜãÜã ÜãÜã üÿEwàò)a‰%*ÿÿ@ –õ)ÿÿ û_€ÿR2SMEMACC.RBûY!6þ§.ýÿsÛ•¯ôtÙÿ$I$IJÉ1¦ gý¥7^ý¥_\þ¥ARþ¥7Mû¥}K&§}:&§Œ+$§}) ¦Fþ¥}�¥F+éà’ úÿØÆé\Œÿܱÿþÿˆxñÿ’D’$’$¹©"(¶'X"8;«þö'"Cñÿ’D’$’$Lî« Óûú!,!�ª#(¶æ *ñÿ’D’$’$›”!!Lõ)ŧ þ«‰Ó"!!D«û #(ñÿ’D’$’$Œ*¶Õ ç)ħ!,!J Ú!0”!PÓñÿ’D’$’$Ro8ˆÓÙ)ħ!,!!‚ØxåÿlÛ`Û¶Zï½c‚ÿ[¹ãBÿÓéÃyÿõéZÿï½C‚ÿbÿTxÿܱÿ\ŒÿñÿœDœ$’$·¥ *"( PÀÊ! ã^'Þ\ ã\ãd‚^(ñÿ’D’$’$*ãLÞ\ ã^ Þ\ ã+1WW 2ñÿ’D’$’$ä#Z3WW 4 Þ Þ\ã^)Þñÿ’D¢$”$K®h\ ã\ãd‚qaìgvñÿE¢(EãvdÆdÜd d"dJdþùß-d£ñÿ’D%¢$v „-q8k-Þg‹d—Ad¬dñÿ¢HE¢(‚’¬d¬d—dÃd¬d¬d—dñÿ¢H’$’D V ¬d—ÌèÔ Èa bbñÿ’D’(%¥%®àÈÞe3ÈÐÈØdÈ-Ìñÿ¢D’$’(y@¼eÇ^IÞ\ ãdõÈ*ÌñÿE’$’DòÇÊeÔ^BÞ\ ãdõÈ+Ìþ-Eeñÿ’H”$’$^Øá^CÞ\ ãdõÈØÞeñÿ’H”$’$]Sæï^IÞ\ ãdõ^RÞ\ñÿ¢D¢$’Dµô ãd3 ÈØa«d3^AÞ\ñÿ”D’$%9D ãd3^SÞ\ ãd3^Mñÿ’D’(¢8¯­Þ\ ãd3 ^ôad3ññÿ¢DE¢(ábÒg!dºd÷dþdddþ´)ñÿ¢HE’$Õ,ddd bb@#Ìeñÿ”H’$’$4ì:N a]RÈßÞÞ\ã ñÿ¢D’$¢$ß9HÈa«\ãÌèÔ Èa ñÿ’D%’DáVbbL#Ìeu a]RÈßñÿ’D”$’$òVdÞÞ\ã Èa«È Þ\ãñÿ’D’$’Dq�r\ãÌèÔ Èa bbñÿ”DþsG%’$µ¬€X#Ìe¡ a]RÈßÞÞ\ñÿ’D’(’$ÉhŽã Èa«ÈÞ\ãÈÞ\ñÿ’D’$%Çœã\ãÌèÔ Èa bñÿ’D¢$’(}7ª b¬âÌÞebãÌdVâÌØÞñÿ’D%%™V¸âÌ,Ì"eáâÌ*ÌeÌ 3Þñÿ”D’(’(‰%ÆÞåÌadßâÌ+ÌeÙ 3ÞÞñÿ¢D’D¢(þë6S‡ÔåÌadß 3ÞÞåÌadâÌñÿ”D’$E^â)Ìeî 3ÞÞÞadHPñÿ”Dâ$’DbÎðAÞeú þÞadHPèPñÿ’D’$”$–%þP\HPìßåÌâÌ,Ìeñÿ’D%’$‚‚  3ÞÞHPad 3ÞÞHPñÿE%%Øhad`äÌdHåÌÞe. 'Þñÿ”D’(’$µv(þ=üæÌâÌaVd7 6Þ8ÌåÌæÌâÌañÿ¢H”$’(>6}dR #ÞåÌâÌaVdR ^�ñÿG¢$E ÕDadRñ²gLd!d9dAñÿE¢$EóÏRd`d`ñ»gZdµddTñÿ’D’$’$k`ÞãÔ bbàÈÐÈØÞeñÿ’H’D’(º˜n·ÈØd­ÈØÞeƒ +ÞÈñÿ’DE’$æÚ|ØÈþøØaVd� 8Þ8ÌÈØÈñÿ’DE¢$NŠØÈØa}d·ÈØÞež ñÿœD’(%éè˜^�ad¤ ÞÈØa4d·ñÿ’DÅ¢(¬R¦ ^�ad·ñþg±dsdñÿ¢H’$¢$5E´‘d¦ b büâÌÞeBãÌñÿE¢8”$Ž·Âd2 âÌa eëHPAÞeÖñÿœD’(’$Ø�Ð þÞaþ¶.déHPèPP\Hñÿ’D’$¢(jÀÞPìßåÌ &ÞHPaZdð ñÿœD”(”$Ÿîì^�ad<äÌdåÌÞeñÿ’DE’$3 ú %ÞæÌaZd  2Þ8ÌåÌæÌañÿ¢H¢$”$gÿd)åÌÞe "ÞåÌ)ÌaVñÿE'¢$Îñd) ^�ad)ñPg#dñÿ¢HE'÷Ï$õd ddþ.ç< ^�ad<ñÿ”D¢(’DÕ22ñ\g6dÄdòd+ÞãÔÞäÔñÿ’D’$’DE@ÞåÔ bb| a©âÌÞeñÿ’H’(¢Äÿ*NXâÌ*ÌeX �Þa#Ìe{ ñÿE’$’$Âj\a]R!ÞßÞÞ\ã^LÞñÿ’D’$’$“­j\ ã^ Þ\ ãÈÞ\ãñÿ’D’$’DTix\ãÌèÔ !Þþ)a bbñÿ”D%’$¢¨†\#Ìeª a]RÈßÞÞ\ñÿ’D’$’$q'”ã^LÞ\ ã^ Þ\ ãñÿ’D’$’$4‹¢ÈÞ\ã\ãÌèÔ Èañÿ’H”$%8’° bbh#ÌeÞ a]Rñÿ’D’$’$L;¾ÈßÞÞ\ãÈÞ\ã^Lñÿ’D’$’$4²ÌÞ\ ã^ Þ\ ãþ<ÈÞ\ñÿ’D’$’(Úã\ãÌèÔ Èa bñÿ’D%%r^èbnÈÞe È-Ìe È,Ìñÿ¢D”$’$ "öe ÈØÞe  ÈÜÜañÿ’X¢$’$ø  -ÞÈÈÈa} bbH#ÌñÿE’$’$_že.^LÞ\ ã^ Þ\ ãñÿ’D’$’$â’ ÈÞ\ã^:Þ\ ã\þFÉãñÿ’D’$’D.œ. bbÈÞe£ÈÐ#Ìeñÿ”H’$’$á<} a]R&ÞßÞÞ\ã\ñÿ’D’$’$¨8Jã+. XT T ÞÞñÿ’D’$’$¤¯X\ã^"Þ\ ãÈÞÞ\ñÿ’D’$’$©ôfã^ Þ\ ã^"Þ\ ã\ñÿ’D”$’$VÏtãÌèÔ &ÞaÈØÞeþ-ßñÿ’H’$¢$³V‚žÈØÐ 3ÞÞÈØØìa ñÿ’D”$”$”æ�2Þ8ÌÈ ØÈ Øa Þ ÞaZñÿ’D’D’$Ñ‘žÈØÐd3 bb„ÈÞeñÿ’H”$’$¶�¬ÌÈÐÈØÞeÂÈØÐ 2Þñÿ’D¢$¢$lüº8ÌÈ ØÈ Øa ÞÞaZÈñÿ”D’$’$luÈØÐd¨ b,b& ÈÐÈØâÔñÿþãC’D’(%® ÖÞãÔÈØdeÈ ØÞeìÞäÔñÿ’D¢$’$Ò°äÈ ØåÔÈ ØæÔdû 6Þ8ÌÈ Øñÿ’D’D’(ßòÈ Ø)Ìa}ÞäÔÞåÔdt;Ý:Ì ßñÿ’D%’$›æÐÈØÞeÞäÔÈØåÔÈØñÿ’D’(’(}ªÈ ØæÔd/8ÌÞe" 'ÞÈñÿ”D’(”$ŽZØ)ÌaVd* 6ÞÞÈØ)Ìa}ñÿ’D%þóÜ¢$áÞ*ÞäÔÈ ØåÔdtÈ ØÞe? ñÿâD%¢$ì8–ÞaÞâÔdcÈ ØÞeK ñÿâD’D’$S5F—Þad[È Øè8ÌH Èñÿ¢D'’$tŸT#e[ ±ÞaÞäÔÈ ØèåÔÞñÿ¢D’$E¬MbæÔdtqÞgldÜdýñÿ”D’$%d�pAd1ÌóÏË'(!e† ;ÞñÿGâ$¢$ÏÙþ3æ~a óÏË'aÌóÏ(e Ìñÿ”D’$%6ÍŒ ÞeU ÜâÝà ÈÞe¤ ÈØñÿ”Dâ$¢$T¥šÞe¤ ŠÞaÞ Ð a¸ ñÿG’$'�Ú¨a Ë^'a añÿ’H’(%šf¶©âÌÞeÕâÌØÞeÈ qÞñÿGœ$%„ÄadÕ âÌ-Ìa!eÕ :Þñÿ¢D¢$’$âÒâÌþf¢a4 ÈÞe@ ÈÐ ÈØâÌñÿG’$’D~àaeÈØÞe ÈØÜñÿâD’(¢$¶|îÜa 'Ìeû -ÞÈÈ-Ìa}Èñÿ”D’$EñüÞe ÞÈ-ÌaVdÈÞñÿ¢D’$ECŒ e "ÞÈ-ÌaVd ‹ÞñÿG’$’$)ËaÈØâÔÞãÔÞäÔÞåÔâÌÞñÿE’$Å�Å&e@âÌþp2ØÐ âÌ+Ìae6ÞÐñÿE'%³&4d; âÌÜa $ÞÈaZÌ Þñÿ¢D¢$¢8‡çBe�Ì ÞeO adS ñÿâD’D’DêPP ÞadõÌÞe½âÌÞeñÿ’H%’8 ¸âÌÞeN âÌØÞeN  tÞñÿG¢$”$~×L aH Þe\  ÞH aZñÿE’$’D]ŠZ dd  ÞH ÞaZ bbñÿ’Dœ(’$–$h BÌÞe•  a K^Hñÿ’D’(’$Ç_v 'a âÌ ÐÞPþ:' ÈÞñÿE¢$’$Ý„ e ÈØÞeë È Ð ÈØ+ÌñÿE%'’q’ e¤ äÌÞež  ^�aåÌÐñÿ”Dœ$”$žv  æÌÐd©  ^�aÌ Þe½ ñÿ’D’(’ÄHP® H Þe¸  tÞaÞPdñÿ’H’(’ÄLš¼ Ñ Ì ÞeÑ  tÞa K^ñÿ’D'%4UÊ H'aÌ Þeæ  þ.Eañÿ’X’$%®ŸØ  K^H'a dé ñÿ’D’D’$RŒæ ÞPd \ ÝàÝ]®Þìñÿ’D’$'¬±ô ßà ^ \ a ÞÐñÿ’D%¢$d� H ØÞe H ØÐd  ñÿâD’$”$uˆ ¯ÞaÞÐÝ\ àH!e… ñÿ¢D’$’(ñŒ  a¸ 2Þ8ÌÈÈaâÌÞþ¬%ñÿE¢$â$€”, ei âÌØÞee  -ÌâÌaeñÿ’H¢(â$‚R: B  ÞÞaZdc  ,ÌâÌaeñÿ’H¢(â$fRH P  ÞÞaZdc  +ÌâÌaeñÿ’H¢(â$ÃŒV ^  ÞÞaZdc  ^�adñÿ’H’Ä’$Å¢d i  tÞaÌ ÞPH!eñÿœH’$’$ù®r �  a K^H'añÿ’HþU*’DâD—v€ He Ì Þe�  adñÿ’HÅ¢$[Ž “  ÞadÏ H Þe¡  ñÿâD’D’$/yœ tÞadÏ \ ÝàÝ]®Þìñÿ’D’$'ö°ª ßà ^ \ a ÞÐñÿ’D%¢$B‹¸ H ØÞeÅ H ØÐdË  ñÿâD’$’$AÓÆ ¯ÞaÞÐÝ\ àH Þeñÿ’H”$”$þ]ÏuwÔ â  2Þ8ÌÈÈa ÞÞaZñÿ’D’$¢$9Pâ bbH ÐÌÞeÑ  ñÿG’$â$Wyð a K^H€'aâÌñÿ’D”$’$‹jþ ÐÞPÈÞe™ ÈØÞeñÿ’H”$”$_Ä k È Ð ÈØ+Ìe% äÌÞe ñÿ’D’Ä’(â  ^�aåÌ ÐæÌ Ðd*  ^�ñÿG%%‹ã( þˆžaÌ Þe= È Þe8  tÞñÿG%%L]6 aÞPdQ Ì ÞeQ  tÞñÿG’$â$ÍùD a K^H'aÌñÿ”D'’$²qR Þef  a K^H€ñÿœD’(’(­�` 'adi ÞPd™ \ Ýñÿ’D’$’$7n àÝ]®Þìßà ^ ñÿœD’$¢$ñA| \ þEœa Þ ÐH ØÞe� Hñÿ’DœD’$üŠ Ø Ðd•  °ÞaÞ ÐÝ\ ñÿ’D’(¢$+)˜ àH!eÁ âÌÐÈÞe³ Èñÿ’D¢D¢D±Û¦ ØÞe°  a©d³  a¸Ìñÿ”D'’$×p´ ÞeÛ  a K^H€ñÿœD”$”$߲ 'aâÌÞeÔ âÌ-ÌeÔ ñÿœD%’(Ó Ð  tÞaþŸ a©ÞÐdÝ ÞÐÌñÿ”D'’$wðÞ Þe  a K^HñÿœD”$”$a²ì 'aâÌÞeþ âÌ-Ìeþ ñÿœD”$â$¸ºú  tÞaÈ,Ìe  |Þa ñÿE'”$ü¹ a© ^�ad¥ È-Ìe. ñÿ¢D”$’$7— Èe  3ÞÞ Þa 2Þ8Ì Èñÿ¢D¢$’Dކ$ Èa ÞÞþÄaZd¥ È,Ìeñÿ”H’$’D¹u2 K Èe<  3ÞÞÞa 2Þ8Ì Èñÿ”D”$’(�ø@  Èa ÞÞaZd¥ È+ÌñÿE’D’(ØN eh ÈeY  3ÞÞÞa 2Þ8Ìñÿ’D’DEä\ È Èa Þ ÞaZd¥ ÈÞñÿ¢D”$œ$ 3j e¥ ÈØÞez  ^�añÿE¢8”$M�x d¥  Èa e¡ þz2ÈØ ÐÈeŒ ñÿ’D’(%d’†  3ÞÞ Èa 3ÞÞ Èa 2Þñÿ’D’(¢(ê” 8Ì È Èa Þ ÞaZd¥  ñÿâD’$¢$ÓA¢ tÞaÌ ÞPH!e½  ñÿG’$â$uü° a K^H€'aHñÿ¢D¢$¢8÷ؾ ež Ì ÞeË  adÏ  ñÿâD’D’(»«Ì Þad H Þeþ…>Ý  tÞañÿ¢X’$’$]Ú d \ ÝàÝ]®Þìßàñÿ’D’$’Ä4ˆè  ^ \ a Þ ÐH ñÿ’D’D’(tiö ØÞe H Ø Ðd  °Þañÿ’X’$%0… Þ ÐÝ\ àÈ Þe  2Þñÿ’D’(’(7÷ 8Ì È Èa ÞÞaZ bñÿ’D'’$‹} b< ^�a K^Hþ/ãñÿ”D’$¢$äŠ. 'a ÞÐÞÐâÌÞeO âÌñÿ’D%’$^< ÐÈØÞeK ÈØÐÈØÐdñÿ’H’ÄâDlXJ O  tÞaÌ ÞeY  adñÿ’H’Ä’$.ŒX ]  Þa K^H'ñÿG%¢$ Üf aâÌÞe… âÌØÞey  ñÿâD’D¢ÄRt tÞad…  ÈâÌa!e…  þàñÿâD¢$¢8š‚ tÞaÌ Þe�  ad“  ñÿâD’$”$ß� Þa K^@'a ñÿ’D’D¢$=ˆž âÌÞeÆ âÌÐÈØÞe  ñÿ’D’Ä'û¾¬ ÈØÈa! ÈØÈa!#ñÿE¢8'cº eÀ  tÞadÆ  tÞa bñÿ’Dâ$’$È b< ^�a K^Hñÿþ_€’D’D”$…6Ö 'a ÞÐÞÐâÌÞeø ñÿ’D¢$’$Rôä âÌÐÈØÞeô ÈØÐÈØÐñÿE’8œ(8ò dø  tÞaÌ Þe añÿE’8’$^Ýd Þa K^Hñÿ¢D¢$’$•'a âÌÞe9âÌÐÈØÞñÿEâ$’$%e5 ÈØÈa! ÈØÈañÿ’XœDþ¼ž’(»k*!#e3 tÞad9 tÞañÿ’Xœ(’(Bþ8Ì ÞeC adG Þañÿ’X’$'XeF K^@'aâÌÞñÿ¢D”$â$eDTeoâÌØÞec tÞadñÿ’H”8â$TNbo ÈâÌa!eo tÞa ñÿ’D’$’$Ÿ`pb bÎ K^H'añÿ”H’$’$ÈþŠÃ~  a¸ÞÐÞ ÐÞ ÐâÌÞeñÿ’H”$’$QÚŒ°âÌÐÈØÞe¬ÈØÞeñÿ’H’$%žœšªÈØØ ÐÈØØÞeªÈØñÿ”Dâ$¢$ÃШØÐd° tÞaÌ Þe+ ñÿG’$’$­ ¶a K^H'Ü Üañÿ’X’$œDæCÄ ÈÞ ÐÈÞeÔ žÞañÿE¢$'‚9Òdþïx)ÈØÞeà ¢Þad)ñÿ’D’(’ÄóÛàÈØÞe) Èa È,Ì#ñÿE¢8’$ónîeö ŸÞad) ÈØØÈañÿ¢X’$’(Æéüe%ÈØÐÈÞeÈÐÈñÿ’D’D¢$±u ØÈeÈØ ÐÈØÐd)dñÿ’H’(¢$¯ËÈØÐdÈØ ÐÞÐd) ñÿâD’D’(,Ò&tÞaþéd° 3ÞÞ Èa Þ ÞñÿE’$’$£z4aZ b bJ K^@ñÿ”D”$’$ÖÅB'a âÌÞe_âÌØÞeñÿ”H”$’(wñP[ a¸ ÞÞaZd_ }Þañÿ’X’$’$OÈ^ b bJ K^@ñÿ¢D¢$”$áµl'a âÌÞeˆâÌØÞe„ñÿ¢D¢$œDléz a© ÞþœG ÞaZdˆ }Þañÿ’D’$’$Õ´ˆ bbÒ K^'ñÿE%'.\–a äÌÞe¢ ^�aâÌÞñÿ¢D’$’(x¤eüâÌÐÈØÞeµ tÞañÿ¢X’$%ô²düåÌÐæÌÐÈØ!e tÞñÿG%¢8?ýÀaÌ ÞeÍ tÞadÐ ñÿG’$â$`µÎa K^@þÒe'a ñÿE%%ÞÜa©âÌÞeìâÌ-Ìeì tÞñÿG’$’D%õêa 2Þ8ÌÈÈa ÞH ñÿ”D’$’$_Žø ÞaZ b b< K^@ñÿ’D’8’(.'aâÌÞe#âÌ-ÌñÿE”D’(ÛLe a© >Þa<d# tÞañÿ’X’$’(Œº" b bPâÌÞþw£eIâÌ-ÌñÿE¢(¢$m 0e8 Þa<dIâÌ,ÌeC ñÿ¢DœD’$Ó2>Þa<dI }Þa-ÌâÔ b ñÿ’D%%ÖàLbPâÌÞeoâÌ-Ìe^ ÞñÿE”$¢$èËZa<doâÌ,Ìei Þa<dñÿ’H’Ä’$ŸDho }Þa-ÌâÔ b bXâÌÞñÿ¢D¢$'�Ave‚âÌ,Ìe‚ }ÞaþeH ñÿ”D”$’(å„ Þe� ÞÞaZd“ Þañÿ’H’$¢$®ú’<-ÌâÔ b b<âÌÞe¨âÌñÿ”Dâ$%"ä -Ìe¨ }Þa Þa<*ÌâÔñÿ’D’$’D¿Å® b bJâÌÞeÂâÌØÞñÿE’8’(l¾¼e }Þa :ÞâÌa4-ÌâÔ ñÿ’D”$”$‹gÊb b<âÌÞeÜâÌ-ÌeþðÜñÿœD¢$’$EXØ }Þa ;Þa<+ÌâÔ b bñÿ’D’(%IRænâÌÞeöâÌØÞeö }ÞñÿG¢$”$TfôaH Þe ÞÞâÌaVñÿE¢$’$¢Ad  "ÞÞâÌaV bb¢Þñÿ’D¢$’8£èÐÞÐÌÞeY a Kñÿ’D¢$¢$wC^@'a Ì Þe0 þµ#ñÿGâ$¢$äK,ad4 ÞaâÌÞeSâÌñÿ’DœD’(`:ØÞeE }ÞadSâÌØHñÿ’D%’8ÖýH Þ!"eS tÞaæÌÐåÌñÿ¢D’$¢$d†VÐd­\ ÝàH ÞelÝñÿ’D¢$’$àd]®ÞìßàdsÝ]®Þìßñÿ’D%’8FøràH Þe} tÞa ^ ñÿ’DþÒM'”$„*€\ a H ØÞežñÿ’D’(Å„qŽH Þeš °Þadž ¯ÞñÿG’$’$ÈËœaH ÐÈ ØÐÈ ØÐÝ\ ñÿ’D¢$’$œTªàÞäÔäÌÞeº 2Þ8ÌÈÈñÿE¢$¢$iѸaH ÞeÇ ÞÞaZdñÿ’H%%B ÆåH ÞeÔ ÞÞaZdåñÿ’D’(Eþ(‡¾ñÔH Þeà Þa<då Þñÿ¢D”$’$ÆpâÞaZH Þeí*ÌâÔ bñÿ’D’$’$ÝŒðbÞ ÐH Ð ÈØÐ È Ø Ð Èñÿ”D’$%Ï~þ Ø!e  )Þ8Ì È ØaZÌÞñÿ¢D’$%Ö eA Ì ÐÞ Ð ÈÞe.ÈÞñÿ¢D'’$»e# ~Þad,ÈØ^ ñÿ’D’(œ8C (þ�¨( Ðd3 ^�a añÿ¢Dâ$¢$#6 Èe� ^�aÌÞeT ñÿâD’$œ$SãDÞa K^H'añÿE¢$’$YRd›ÈØÞee ^ñÿâD’Dœ$ñà`Üa d| ^Üa ñÿ’D'œD6¬n ÈØÈØa!e| €ÞañÿâD’$’$ | aþ\ÌK^H'(!ñÿE’8’$JÓŠe› Þa K^HñÿâD’D’$ôc˜'ad  K^H'ñÿG%%ô¦aâÌÞe  ÈÞe ÈÞñÿ¢D’$’( Ñ´eÈØÐÈÞeÈ ØÞñÿ¢D”$%/GÂeÈØÞeò a©'Ìeñÿ’H’D’Äp�ÐÕ Èaþæ ,ÌÈaâÌ-Ì"ñÿE’(’$•¤Þeæ Þa<,ÌâÔ ÈÈØ Ð ñÿœD”(’$DÙì.Ì Üadþ a¸ ÈÞ Ð ñÿœD’(”(N@ú.Ì ÜadãÌÞe a¸ñÿ’D’(’Ä�r ÈÞ Ðd šÞa ÈâÌañÿ”Xâ$’D_!e ŽÞad  ÈÞÈñÿ’D’D¢$¢g$Þ"e,Èþ§RØÐÌ Þe Èñÿ’Dœ(’(M/2 ÔÌ Þe= adA Þañÿ’X’(’(¶µ@ ÈÞerÈÞeO ~Þañÿ’X¢$’$úfNH Ð ÈØe_ =Þ È È Øañÿ¢H%¢$u\²dr È Øek Þ È ØaZdñÿ’H¢$’$m*jr .Þ È È Øa²H ØâÔ bñÿ’D”$’$ òxbÐ È ØÞeþùu¤ È Ø Ð ÈØñÿ”D’$”$â—†Þe È^€(!e¢ñÿ’DâDœDñÉ”ÌÞež ad¢ Þañÿ¢D¢(¢(.¢ ÈdÜ a- d ae d ñÿE%%M”°aã d a d aÇ dñÿ¢D¢D¢DZV¾ apd a`d a7dñÿ”H”(”(èÖÌ a‰d a dþ% aýñÿE¢$E×cÚdq¬"ìgâd¥d¥d¥ñÿE¢(Eoóèd¥dªd¯d´d¹d¾dÃñÿE¢(Eéòödªd¯dÈdÍdÍdÒd×ñÿ’D’$’Dõ¾ È^€(!eÌ ÞeñÿœH’(źR ad Þad¢ ÈÞñÿ’D%%Œ~  È Þ#eBÌÞe1þ%M añÿ¢X'’$O.d5 Þa Ë^@ñÿâD”(%p*<'a a© Èdm a$d‹ñÿ¢D¢D¢DwPJ aJd‹ apd‹ a–dñÿ”H”(”(üÒX‹ a¯d‹ aÊd‹ aãñÿEE¢$?nfd‹ a d‹q #ìgsdñÿ¢HE¢(õêtEdJdOdTdYd^dcdþÀ¯ñÿ¢HE’$.ñ‚cdhdhdhdO ÈÞ È Þñÿ”D”$'9¯�#e¢Ì Þež ad¢õÿœD”( —ž Þad§ aî ÿÿ û_€ÿPASCAL.ALû{Y þúBEGIN COMMENT - PROGRAM TO MONITOR THE PASCAL COMPILER ASSEMBLER ETC. BY ARTHUR FOSTER ON THE 20TH. MAY 1977... END; LITERAL NIL (0); POINTER LIBLIST; INTEGER REVISION,UPDATE; INTEGER (2) SWITCHES; BOOLEAN LOAD,LOADMAP,LIþÓBRARY; BOOLEAN BINARY,LISTING,PCODE,MONITOR,EXTN,FAILED; STRING PROGFILE,PCODEFILE,LISTFILE,LOADFILE,QCODEFILE,BINARYFILE; STRING LIBFILE,SAVEFILE,MONITORFILE; EXTERNAL PROCEDURE FERROR; EXTERNAL PROCEDURE GTIME; EXTERNAL PROCEDURE SWOP; STRIþoCNG PROCEDURE CAT(B,C); STRING B,C; BEGIN STRING A; A := B; SUBSTR(A,LENGTH(A)+1,LENGTH(A)+LENGTH(C)) := C; CAT := A END; PROCEDURE ERRORMESSAGE(TEXT); VALUE TEXT; STRING TEXT; BEGIN FAILED := TRUE; OPEN(3,MONITORFILE); WRITþ†&E(3,"PASCAL MONITOR...",TEXT,"<15>"); CLOSE(3) END; PROCEDURE SWOPPROG(PROGNAME); VALUE PROGNAME; STRING PROGNAME; BEGIN INTEGER ERRORNUMBER; IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; þ„h GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PASCAL MONITOR...",HOUR,":",MINUTE,":",SECOND, " ",PROGNAME," ENTERED ","<15>"); CLOSE(3) END; CLOSE(0); PROGNAME := Cþ×(AT(PROGNAME,"<0>"); SWOP(PROGNAME,ERRORNUMBER); IF ERRORNUMBER <> -1 THEN BEGIN COMMENT - OTHER ERROR TRAPS ARE POSSIBLE HERE!; IF ERRORNUMBER < 255 THEN FERROR(ERRORNUMBER) þm ELSE IF ERRORNUMBER = 318 THEN BEGIN EXTN := TRUE; LOAD := FALSE END ELSE IF ERRORNUMBER = 311 THEN ERRORMESSAGE("ERROR(S) IN P-CODE ASSEMBLER") ELSE FAILED := TRUE END END; þ¢õSTRING PROCEDURE EXTENSION(PROGNAME,EXTENT); VALUE PROGNAME,EXTENT; STRING PROGNAME,EXTENT; BEGIN INTEGER I; I := INDEX(PROGNAME,"."); IF I <> 0 THEN SETCURRENT(PROGNAME,I-1); PROGNAME := CAT(PROGNAME,"."); PROGNAME := CAT(PROGNAMþÉ{E,EXTENT); EXTENSION := CAT(PROGNAME,"<0>") END; PROCEDURE APPENDCOM(PARAMNAME,SWITCHES); VALUE PARAMNAME,SWITCHES; STRING PARAMNAME; INTEGER (2) SWITCHES; BEGIN WRITE(0,PARAMNAME); BYTEWRITE(0,ADDRESS(SWITCHES),4); END; BOOLEAN þµAPROCEDURE EXISTS(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); EXISTS := TRUE; GOTO QUIT; NOFILE: ERRORMESSAGE(CAT(FILENAME," DOES NOT EXIST")); EXISTþ S := FALSE; QUIT: END; PROCEDURE CREATEFILE(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); DELETE(FILENAME); NOFILE: OPEN(4,FILENAME); CLOSE(4) END;þè3 PROCEDURE CREATECOM(PROGNAME,SWITCHES); VALUE PROGNAME,SWITCHES; STRING PROGNAME; INTEGER (2) SWITCHES; BEGIN DELETE("COM.CM<0>"); OPEN(0,"COM.CM<0>"); APPENDCOM(PROGNAME,SWITCHES) END; PROCEDURE GENERATELIST(PT,FILENAME); VALþtÕUE FILENAME; POINTER PT; STRING FILENAME; BEGIN POINTER PT1,PT2; BASED STRING BSTRING; BASED POINTER BPT; INTEGER I; ALLOCATE(PT1,20); IF PT = NIL THEN PT := PT1 ELSE BEGIN PT2 := PT; þÇ LOOP : IF PT2 -> BPT <> NIL THEN BEGIN PT2 := PT2 -> BPT; GOTO LOOP END; PT2 -> BPT := PT1 END; FOR I := 0 STEP 1 UNTIL 19 DO (Pþõ²T1 + I)->BPT := NIL; (PT1+1)->BSTRING := FILENAME END; BOOLEAN PROCEDURE TESTFILE(TESTNAME); VALUE TESTNAME; STRING TESTNAME; BEGIN TESTNAME := CAT(TESTNAME,"<0>"); OPEN(4,TESTNAME,NOFILE); CLOSE(4); TESTFILE þÊ—:= TRUE; GOTO FINIS; NOFILE : TESTFILE := FALSE; FINIS: END; PROCEDURE READCOM(ERROR); LABEL ERROR; BEGIN STRING FILENAME; BOOLEAN ARRAY PSWITCH,PROGSWITCH [25]; OPEN(0,"COM.CM"); COMARG(0,FILENAME,PROGSWITCH,ERR2); þ;à COMARG(0,PROGFILE,PSWITCH,ERR1); IF NOT EXISTS(PROGFILE) THEN GOTO ERROR; COMMENT - SET THE INITIAL NAMES FOR EACH OF THE FILES; SAVEFILE := EXTENSION(PROGFILE,"SV"); LISTFILE := EXTENSION(PROGFILE,"LS"); PCODEFILE :=þ]# EXTENSION(PROGFILE,"PC"); LOADFILE := EXTENSION(PROGFILE,"LD"); QCODEFILE := EXTENSION(PROGFILE,"QC"); BINARYFILE := EXTENSION(PROGFILE,"RB"); COMMENT - AND NOW THE SWITCHES; IF NOT PROGSWITCH[1] THEN LOAD := TRUE; þè IF PROGSWITCH[4] THEN EXTN := TRUE; IF PROGSWITCH[11] THEN LISTING := TRUE; IF PROGSWITCH[15] THEN PCODE := TRUE; IF PROGSWITCH[12] THEN LOADMAP := TRUE; IF PROGSWITCH[25] THEN MONITOR := TRUE; COMMENT - AND THE LOCAþ¨ L SWITCHES,WHICH DEFINE THE FILES; LOOP: BEGIN COMARG(0,FILENAME,PROGSWITCH,QUIT); IF PROGSWITCH[11] THEN BEGIN LISTING := TRUE; LISTFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[15] THEN þ9} BEGIN PCODE := TRUE; PCODEFILE := EXTENSION(FILENAME,"PC") END ELSE IF PROGSWITCH[12] THEN BEGIN LOADMAP := TRUE; LOADFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[18] THEN þ€´ SAVEFILE := EXTENSION(FILENAME,"SV") ELSE IF PROGSWITCH[1] THEN BINARYFILE := EXTENSION(FILENAME,"RB") ELSE IF PROGSWITCH[25] THEN BEGIN MONITOR := TRUE; MONITORFILE := CAT(FILENAME,"<0>") þh END ELSE IF PROGSWITCH[4] THEN BEGIN LIBRARY := TRUE; EXTN := TRUE; LIBFILE := EXTENSION(FILENAME,"RB"); IF TESTFILE(LIBFILE) THEN FILENAME := LIBFILE ELSE Bþ+OEGIN LIBFILE := EXTENSION(FILENAME,"LB"); IF TESTFILE(LIBFILE) THEN  FILENAME := LIBFILE ELSE IF NOT TESTFILE(FILENAME) THEN BEGIN ERRORMESSþÿSAGE(CAT(FILENAME," DOES NOT EXIST")); FILENAME := "<0>" END ELSE FILENAME := CAT(FILENAME,"<0>") END; GENERATELIST(LIBLIST,FILENAME) END þOÐ END; GOTO LOOP; ERR1: ERRORMESSAGE("NO SOURCE FILE SPECIFIED");  GOTO ERROR; ERR2: ERRORMESSAGE("COM.CM IN ERROR"); GOTO ERROR; QUIT: CLOSE(0); IF FAILED THEN GOTO ERROR END; PROCEDURE GENCOMPCALL; IF EXISTS("P4COMPILER.SþhàV") AND EXISTS("P4COMPILER.OL") THEN BEGIN CREATECOM("P4COMPILER",SWITCHES); APPENDCOM(PROGFILE,SWITCHES); CREATEFILE(LISTFILE); CREATEFILE(PCODEFILE); APPENDCOM(LISTFILE,SWITCHES); APPENDCOM(PCODEFILE,SWITCHES); SWOPPROG("P4CþÁ·OMPILER.SV") END; PROCEDURE GENERRCALL; IF EXISTS("P4ERRSUM.SV") AND EXISTS("P4ERRORS") THEN BEGIN CREATECOM("P4ERRSUM",SWITCHES); SWITCHES := -17777777777R8; IF LISTING THEN APPENDCOM(LISTFILE,SWITCHES) ELSE APPENDCOM(MONITORFþ™ILE,SWITCHES); SWITCHES := 0; SWOPPROG("P4ERRSUM.SV") END; PROCEDURE GENPASMCALL; IF (IF EXTN THEN EXISTS("P4MAC.SV") ELSE EXISTS("P4ASM.SV")) THEN BEGIN IF EXTN THEN CREATECOM("P4MAC",SWITCHES) ELSE CREATECOM("P4ASM",SWITCHES); þîª CREATEFILE(QCODEFILE); APPENDCOM(QCODEFILE,SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); APPENDCOM(PCODEFILE,SWITCHES); IF EXTN THEN SWOPPROG("P4MAC.SV") ELSE SWOPPROG("P4ASM.SV") END; PROCEDURE GENASMCALL; IF (IF EXTN THEN Eþ®ùXISTS("MAC.SV") ELSE EXISTS("ASM.SV")) THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(BINARYFILE); APPENDCOM(BINARYFILE,SWITCHES); APPENDCOM("<0>",SWITCHES); APPENDCOM(QCODEFILE,SWITCHES); IF EXþŸ²TN THEN SWOPPROG("MAC.SV") ELSE SWOPPROG("ASM.SV") END; PROCEDURE GENRLDRCALL; IF EXISTS("RLDR.SV") AND EXISTS("P4CUE.RB") AND EXISTS("P4LIB.LB") THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(LOADFþ…sILE); SWITCHES := 4000000R8; APPENDCOM(LOADFILE,SWITCHES); SWITCHES := 0; CREATEFILE(SAVEFILE); SWITCHES := 20000R8; APPENDCOM(SAVEFILE,SWITCHES); SWITCHES := 0; APPENDCOM("P4CUE.RB",SWITCHES); APPENDCOM("P4LIB.LB",SWITþMLCHES); APPENDCOM(BINARYFILE,SWITCHES); IF LIBRARY THEN BEGIN BASED STRING BSTRING; BASED POINTER BPT; STRING FILENAME; LOOP : IF LIBLIST <> NIL THEN BEGIN FILENAME := (LIBLIST+1)->BSTRþ̺ING; SETCURRENT(FILENAME,INDEX(FILENAME,"<0>")); APPENDCOM(FILENAME,SWITCHES); LIBLIST := LIBLIST->BPT; GOTO LOOP END END; SWOPPROG("RLDR.þ«˜SV") END; PROCEDURE INIT; BEGIN INTEGER I; MONITORFILE := "$TTO<0>"; REVISION := 2; UPDATE := 1; SWITCHES := 0; LIBLIST := NIL; LIBRARY := BINARY := LISTING := PCODE := MONITOR := FALSE; FAILED := LOAD := LOADMAP := EXTN := FALþ›ŒSE END; BEGIN INIT; READCOM(ABSEND); IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"NOVA PASCAL REVISION ",REVþ϶ISION,".",UPDATE); WRITE(3," ON ",DAY,"/",MONTH,"/",YEAR,"<15>"); CLOSE(3) END; GENCOMPCALL; IF NOT LISTING THEN DELETE(LISTFILE); IF FAILED THEN BEGIN MONITOR := FALSE; GENERRCALL; þšQ DELETE("P4ERRORS"); MONITOR := TRUE END ELSE BEGIN GENPASMCALL; IF NOT FAILED THEN BEGIN GENASMCALL; DELETE(QCODEFILE); IF LOAD AND NþÕ.OT FAILED THEN BEGIN GENRLDRCALL; IF NOT LOADMAP THEN DELETE(LOADFILE) END END END; IF NOT PCODE THEN DELETE(PCODEFILE); ABSEND: IF MONITORþPa THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PASCAL MONITOR...",HOUR,":",MINUTE,":",SECOND," FINISHED"); IF FAILED THEN WRITE(3þe K," WITH ERRORS") ELSE WRITE(3," SUCCESSFULLY"); WRITE(3,"<15>"); CLOSE(3) END; END; ÿMAKEP4MAC.CMûY 0þA:&DELETE/V P4MAC.LD;^ RLDR P4CUE P4LIB.LB P4MAC P4MAC/S P4MAC.LD/LÿPCODE.ALû é é -þ›ÖBEGIN COMMENT - PROGRAM TO MONITOR THE PCODE ASSEMBLER ETC. BY ARTHUR FOSTER ON THE 20TH. MAY 1977... END; LITERAL NIL (0); POINTER LIBLIST; INTEGER REVISION,UPDATE; INTEGER (2) SWITCHES; BOOLEAN LOAD,LOADMAP,LIBRARY; þG4BOOLEAN BINARY,LISTING,PCODE,MONITOR,EXTN,FAILED; STRING PROGFILE,PCODEFILE,LISTFILE,LOADFILE,QCODEFILE,BINARYFILE; STRING LIBFILE,SAVEFILE,MONITORFILE; EXTERNAL PROCEDURE FERROR; EXTERNAL PROCEDURE GTIME; EXTERNAL PROCEDURE SWOP; STRING PROCEDUþHûRE CAT(B,C); STRING B,C; BEGIN STRING A; A := B; SUBSTR(A,LENGTH(A)+1,LENGTH(A)+LENGTH(C)) := C; CAT := A END; PROCEDURE ERRORMESSAGE(TEXT); VALUE TEXT; STRING TEXT; BEGIN FAILED := TRUE; OPEN(3,MONITORFILE); WRITE(3,"PCODEþ:Œ MONITOR...",TEXT,"<15>"); CLOSE(3) END; PROCEDURE SWOPPROG(PROGNAME); VALUE PROGNAME; STRING PROGNAME; BEGIN INTEGER ERRORNUMBER; IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAþ=ëR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PCODE MONITOR...",HOUR,":",MINUTE,":",SECOND, " ",PROGNAME," ENTERED ","<15>"); CLOSE(3) END; CLOSE(0); PROGNAME := CAT(PROGNAME,þf¨"<0>"); SWOP(PROGNAME,ERRORNUMBER); IF ERRORNUMBER <> -1 THEN BEGIN COMMENT - OTHER ERROR TRAPS ARE POSSIBLE HERE!; IF ERRORNUMBER < 255 THEN FERROR(ERRORNUMBER) ELSE Iþ®ûF ERRORNUMBER = 318 THEN BEGIN EXTN := TRUE; LOAD := FALSE END ELSE IF ERRORNUMBER = 311 THEN ERRORMESSAGE("ERROR(S) IN P-CODE ASSEMBLER") ELSE FAILED := TRUE END  END; STRING PROCEþ\¥DURE EXTENSION(PROGNAME,EXTENT); VALUE PROGNAME,EXTENT; STRING PROGNAME,EXTENT; BEGIN INTEGER I; I := INDEX(PROGNAME,"."); IF I <> 0 THEN SETCURRENT(PROGNAME,I-1); PROGNAME := CAT(PROGNAME,"."); PROGNAME := CAT(PROGNAME,EXTENT); þ*¦ EXTENSION := CAT(PROGNAME,"<0>") END; PROCEDURE APPENDCOM(PARAMNAME,SWITCHES); VALUE PARAMNAME,SWITCHES; STRING PARAMNAME; INTEGER (2) SWITCHES; BEGIN WRITE(0,PARAMNAME); BYTEWRITE(0,ADDRESS(SWITCHES),4); END; BOOLEAN PROCEDURE EXþmßISTS(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); EXISTS := TRUE; GOTO QUIT; NOFILE: ERRORMESSAGE(CAT(FILENAME," DOES NOT EXIST")); EXISTS := FALSE; þ$ QUIT: END; PROCEDURE CREATEFILE(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); DELETE(FILENAME); NOFILE: OPEN(4,FILENAME); CLOSE(4) END; PROCEDURE þæˆCREATECOM(PROGNAME,SWITCHES); VALUE PROGNAME,SWITCHES; STRING PROGNAME; INTEGER (2) SWITCHES; BEGIN DELETE("COM.CM<0>"); OPEN(0,"COM.CM<0>"); APPENDCOM(PROGNAME,SWITCHES) END; PROCEDURE GENERATELIST(PT,FILENAME); VALUE FILENAME;þ× POINTER PT; STRING FILENAME; BEGIN POINTER PT1,PT2; BASED STRING BSTRING; BASED POINTER BPT; INTEGER I; ALLOCATE(PT1,20); IF PT = NIL THEN PT := PT1 ELSE BEGIN PT2 := PT; LOþd@OP : IF PT2 -> BPT <> NIL THEN BEGIN PT2 := PT2 -> BPT; GOTO LOOP END; PT2 -> BPT := PT1 END; FOR I := 0 STEP 1 UNTIL 19 DO (PT1 + I)->BPTþÈ« := NIL; (PT1+1)->BSTRING := FILENAME END; BOOLEAN PROCEDURE TESTFILE(TESTNAME); VALUE TESTNAME; STRING TESTNAME; BEGIN TESTNAME := CAT(TESTNAME,"<0>");  OPEN(4,TESTNAME,NOFILE); CLOSE(4); TESTFILE := TRUE; þóŒ GOTO FINIS; NOFILE : TESTFILE := FALSE; FINIS: END; PROCEDURE READCOM(ERROR); LABEL ERROR; BEGIN STRING FILENAME; BOOLEAN ARRAY PSWITCH,PROGSWITCH [25]; OPEN(0,"COM.CM"); COMARG(0,FILENAME,PROGSWITCH,ERR2); COMARG(0,þ:sPROGFILE,PSWITCH,ERR1); COMMENT - SET THE INITIAL NAMES FOR EACH OF THE FILES; SAVEFILE := EXTENSION(PROGFILE,"SV"); LOADFILE := EXTENSION(PROGFILE,"LD"); PCODEFILE := EXTENSION(PROGFILE,"PC"); COMMENT - þz1ENSURE THAT THE FILE EXISTS; IF NOT EXISTS(PCODEFILE) THEN GOTO ERROR; QCODEFILE := EXTENSION(PROGFILE,"QC"); BINARYFILE := EXTENSION(PROGFILE,"RB"); COMMENT - AND NOW THE SWITCHES; IF NOT PROGSWITCH[1] THEN LOAD := TRþ5“UE; IF PROGSWITCH[4] THEN EXTN := TRUE; IF PROGSWITCH[15] THEN PCODE := TRUE; IF PROGSWITCH[12] THEN LOADMAP := TRUE; IF PROGSWITCH[25] THEN MONITOR := TRUE; COMMENT - AND THE LOCAL SWITCHES,WHICH DEFINE THE FILES; LOþndOP: BEGIN COMARG(0,FILENAME,PROGSWITCH,QUIT); IF PROGSWITCH[12] THEN BEGIN LOADMAP := TRUE; LOADFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[18] THEN SAVEFILE := EXTENSION(FILENAMEþRÄ,"SV") ELSE IF PROGSWITCH[1] THEN BINARYFILE := EXTENSION(FILENAME,"RB") ELSE IF PROGSWITCH[25] THEN BEGIN  MONITOR := TRUE; MONITORFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[4] THEN þÜy BEGIN LIBRARY := TRUE; EXTN := TRUE; LIBFILE := EXTENSION(FILENAME,"RB"); IF TESTFILE(LIBFILE) THEN FILENAME := LIBFILE ELSE BEGIN LIBFILE := EXTENSION(FILENAME,"LBþAŽ"); IF TESTFILE(LIBFILE) THEN FILENAME := LIBFILE ELSE IF NOT TESTFILE(FILENAME) THEN BEGIN ERRORMESSAGE(CAT(FILENAME," DOES NOT EXIST")); þ›Ÿ FILENAME := "<0>" END ELSE FILENAME := CAT(FILENAME,"<0>") END; GENERATELIST(LIBLIST,FILENAME) END END; GOTO LOOP; ERR1: ERRORMESSAþ‡ÄGE("NO SOURCE FILE SPECIFIED"); GOTO ERROR; ERR2: ERRORMESSAGE("COM.CM IN ERROR"); GOTO ERROR; QUIT: CLOSE(0); IF FAILED THEN GOTO ERROR END; PROCEDURE GENPASMCALL; IF (IF EXTN THEN EXISTS("P4MAC.SV") ELSE EXISTS("P4ASM.SV")) THþþ·EN BEGIN IF EXTN THEN CREATECOM("P4MAC",SWITCHES) ELSE CREATECOM("P4ASM",SWITCHES); CREATEFILE(QCODEFILE); APPENDCOM(QCODEFILE,SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); APPENDCOM(PCODEFILE,SWITCHES); IF EXTN THEN SWOPPRþ¸ÂOG("P4MAC.SV") ELSE SWOPPROG("P4ASM.SV") END; PROCEDURE GENASMCALL; IF (IF EXTN THEN EXISTS("MAC.SV") ELSE EXISTS("ASM.SV")) THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(BINARYFILE); APPENDCOþšåM(BINARYFILE,SWITCHES); APPENDCOM("<0>",SWITCHES); APPENDCOM(QCODEFILE,SWITCHES); IF EXTN THEN SWOPPROG("MAC.SV") ELSE SWOPPROG("ASM.SV") END; PROCEDURE GENRLDRCALL; IF EXISTS("RLDR.SV") AND EXISTS("P4CUE.RB") AND EXISTS("P4LIB.LB")þüM THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(LOADFILE); SWITCHES := 4000000R8; APPENDCOM(LOADFILE,SWITCHES); SWITCHES := 0; CREATEFILE(SAVEFILE); SWITCHES := 20000R8; APPENDCOM(SAVEFþefILE,SWITCHES); SWITCHES := 0; APPENDCOM("P4CUE.RB",SWITCHES); APPENDCOM("P4LIB.LB",SWITCHES); APPENDCOM(BINARYFILE,SWITCHES); IF LIBRARY THEN BEGIN BASED STRING BSTRING; BASED POINTER BPT; STRING FILENAME; LOOP : Iþ˜¿F LIBLIST <> NIL THEN BEGIN FILENAME := (LIBLIST+1)->BSTRING; SETCURRENT(FILENAME,INDEX(FILENAME,"<0>")); APPENDCOM(FILENAME,SWITCHES); LIBLIST := LþIBLIST->BPT; GOTO LOOP END END; SWOPPROG("RLDR.SV") END; PROCEDURE INIT; BEGIN INTEGER I; MONITORFILE := "$TTO<0>"; REVISION := 2; UPDATE := 0; SWITCHES := 0; LIBLIST := NIL; LIBRþWúARY := BINARY := LISTING := PCODE := MONITOR := FALSE; FAILED := LOAD := LOADMAP := EXTN := FALSE END; BEGIN INIT; READCOM(ABSEND); IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTþÁšH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"NOVA PCODE REVISION ",REVISION,".",UPDATE); WRITE(3," ON ",DAY,"/",MONTH,"/",YEAR,"<15>"); CLOSE(3) END; BEGIN GENPASMCALL; IF NOþCºT FAILED THEN BEGIN GENASMCALL;  DELETE(QCODEFILE); IF LOAD AND NOT FAILED THEN BEGIN GENRLDRCALL; IF NOT LOADMAP THEN DELETE(LOADFþøÄILE) END END END; ABSEND: IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PCODE þ¹öJMONITOR...",HOUR,":",MINUTE,":",SECOND," FINISHED");  IF FAILED THEN WRITE(3," WITH ERRORS") ELSE WRITE(3," SUCCESSFULLY"); WRITE(3,"<15>"); CLOSE(3) END; END; ÿR2CSPTAB.RBûYU-þp%ýÿ#¼…¯T”ýÿ@În¹€8ñÿ’D’$’$erÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’D’$¢$-òÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ$IR¶Óÿ$I$I$IZ‡p§HˆØn›ØUžÖ‘‚ØxøØFýؖ٠OØ¥#Ù–Ùx ØUúÖ‚¡Ö‘VÖxÜÿ$I$IH}þVÔóîÖx¯Ø–7×–öØxîØŒ îØ_ îØA ÄÙ‘ÄÙŒ ÄÙ_ÄÙA ¾Ùxÿÿ û_€ÿR2SINTEGER.RBûY!6þ7×ýÿSbÙÿ$I$IILŽ¿¤ B�¥ B¿¤A Ф_12¦_)v¦F$1¦FD¤_#§_Q¦_§_ F¤_�¥Añÿ’D’$’$ÊîÀÒ!4!!,Î!L ÀÒ!4!!,Íñÿ’D’$’$’Ã!L !,©!L !4!,Zª©!L !4ñÿ’D’$’$á!!,Jª„… !D !,€ªp­!L !4ñÿ’D’$’$×’*!!, … þNþL!L ÿ!4!!,Jª„… üÿ�Dúê8!L ÿúÿH ”ƒé :òê¯0ÿÿ û_€ÿR2CITAB.RBûYY þà7ýÿ£í…¯Ôbúÿ�m{{@<@{{ <þÿ$íØñÿ’„’$†ÒÐÿÿÿÿÿÿÿÿÿÿ ÿÿñÿ’„’$’$W2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„’$’$I2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„È$H’C*ÿÿÿÿÿÿÿ123456ñÿH’H’H2Ý&8789:;<=>þkè?ÿñÿ’È�H†àÓFÿHIJÿLMNÿPQRñÿH†Â0’$v¢TÿTUVÿXÿYÿÿÿÿÿÿñÿ’„Â$†ÈÎbÿÿÿÿÿÿÿ@ÿiÿkÿmñÿ’„H†H’NÞpÿÿÿÿoÿtvwxyz{|ýÿ’ˆl~}~ÓÿH’H’H’j‚Y¦x„¦�G/„¦¡G.„¦aG-„¦aH,š¤Œ0f¥–&§‚þ¡_*¿¤¡Bn¿¤Alý¥7+1¦ `ФŒ Ф_2¦ŒÓÿH’H’H’2¦_v¦F1¦F�¥x(p§_'�¥–&äP%‘¥Œ#P¤F"Y¦–!D¤ŒD¤_#§Œ#§_Q¦ŒÓÿH’H’H’È?Q¦_L§A¥}¥–§‘$§Œ§_F¤ŒF¤_ñ¤P)š¤¡isš¤�irš¤aiqš¤¡jpl§AAÓÿH’H’þäÛH’?ÆD§‚fä§‚g¥‚el§‚dÿ¥‘Gÿ¥‡FD¥–E7¥‡DO¦‡Có¤›Bš¥7_¥¤‚c練 ð¤–bª¤‚uÓÿH’È�H’% §¤‚a5¦– �¥¡Bj�¥Ah&§¡~ �¥¡GZ�¥F[ý¥_ÿþ¥A^&§} û¥}]þ¥7\$§}W&§ŒSþ¥}Oýÿ€©“ ¦FKÿÿ û_€ÿR2IFT.RBûY!:þ\Oýÿ�ü‹¯ÔSúÿHQíÄÙŒîØŒýÿ€D�6ÿýÿ@ŒÐp§Hÿÿ û_€ÿPASCFLS.û£m þ~4PASCFLS,^ P4COMPILER.,^ P4ASM.SV,^ P4MAC.SV,^ P4LIB.LB,^ PCMESSAGE.ER,^ P4CUE.RB,^ P4ERRSUM.SV,^ PASCAL.SV,^ PCODE.SV^ ÿR2RFNS.RBûU!9þ‹ÛýÿTý”¯Sßÿ$I$I@‚0øØF$#Ù–!Ùx ØUúÖ‚¡Ö‘VÖx¥M ¥@O ¥ N ¥býÿÀ*íÓÒÿñÿâD’$â$)ŠYý0Z!ÿ!,!D€!0:ñÿ’D’$’$™Xú ) î  õë 0 òè � ïå ñÿ’D’$’$À– ìâ P éß   æÜ §!DiÿúÿHÓL§Aþ¢)pf–ÿÿ û_€ÿR2SSET.RBûY!6þÝýÿs½•¯ô’îÿ$‰@ þÐ’�¥x>p§_/�¥–"äP§‘ýÿ€„u{üÿñÿ’P’$’$�<0!,!«©…„‚!!D€‚Ó «ñÿ’DÂ$’$嫸!!D4Óô !8 ž'X!4!',Ðñÿ’DÂ$’$ïÏ'L'ƒø !8 ž'X!4!',Ïñÿ’D&’$�*'L'ƒù !8 ž'X!4!',ÐÏñÿþVJ’DÂ$&±}8Ì'L'ƒ÷ !8 ž!X#(û¥õÿ’D’$ ºèFþ­@ªƒþ#�P­!L ÿÿ û_€ÿR2RFW.RBûŽŽ þ ÷ýÿ4ü”¯4Týÿ€-­ÓÒþÿˆxÿÿ@›¿dÿÿ û_€þþþÿMAKEPASCAL.CMûR /þ?û­DELETE/V PASCAL.LD;^ RLDR PASCAL SWOP @LIBRARY.CM@ PASCAL.LD/LÿP4BLOCK.RBûYN7þ“Æýÿ¿m‰N´Cîÿ$I@¯`û‰-¬!Š�Šxÿ‰-Rü‰#$û‰2âÿlÛlÛñÅtŠ2ÿ!ŠÿžŠ#ÿù‰ÿQŠ-ÿ׉ÿOŠÿÙ‰-ÿqŠ(ÿPŠ(ÿñÿ’D’$’DÙ¢bb"\)!e#ÌË(!ñÿ’D%Åÿ;\)!"e ad ÌËñÿ”D'’$ÙÒ(!e# a b$þȯb†Þ Ðñÿ’D’$’(–Â* ÈèÞÌO(!e@ 2Þañÿ’X¢$”$˜8 ËO'aÌO(eNñÿ’D’D”D|FÌÞeqÌÞeT+Ì Ðdiñÿ’D’$’$`ZT Ü Þã ÈÐÈè+ÌÈèÞÈñÿ’D’$â$OÉbèÌÈèÞ ÈÝà adñÿ’H’$’$j˜p@ÞÐÌÞÌ^þ30("ñÿE%’(ý(~eŽÌÞe‰ÞÐd‹ÞÐ ñÿG%’$œuŒaÌÞe ^@ ÜñÿG’$’$²ša ÈÐÈØ Ð ÈÈèàÈÞñÿE%%ZP¨e È-Ìe¼ÈÞeº Èèñÿ’D’(’(E¨¶ ÈØd È,ÌeÿÈÞñÿE’$”$ÄeýÜÞã ÈØèÚ^-eÙþ.åñÿ’D%’$óÕÒÈè^+ dÞÈè^- ÞÐñÿ’D%’$ŒãàÞÐÈÈeùÈèÈìß ÈØñÿ’D’$’(6±îèÈìßÚ ÈèÐdâ ÈèÈñÿ¢D'Å�™üd iÞa ad@ÌÞñÿ¢D¢$’$yæ eÈÞeÌÔ-Ì Ð Èñÿ’DÅ%ˆˆÝà ad@ÌÞe8ÈÞñÿþÔP¢D’$’$€’&e.Ìè^- ,Ì Ð ÈÝà ñÿGâ$%ûŒ4ad@ jÞa ËaÌËñÿ”Dâ$%Ç­B(!eN Þa Ëa È Èñÿ’D’$’$u¿P bb`ÈÞÈÞ#eñÿ’H’D’8å†^cÞÐdw È Ü Üa È ÜñÿâD’$’$B®lÜa È È ÈÈ"Ð bñÿ’D%þx�’(CQzbæÈÈe…ÞÐd�ÈÞñÿ’D’(¢$£ÈˆÈÞ"e�ÈØÈØekÈñÿ¢D%”$ßn–ØdWÞÐdi ÈØÈØaxñÿ¢D’$”$ÐC¤ÐdiÞ Ð7Ì Ð7Ì Ð ÈÞeÈñÿ’D’$’$TͲ È Ð ÈØÈØ ÈØÈØ"eñÿ’H¢$%mÜÀÃÞ Ð ÈØ Ðd­ È!eè ÜÞñÿ’D’$’$,}þ~AÎã È Ð ÈèÈØ ÈÈØ Èèñÿ’D’$’(_åÜ7Ì È7Ô ÈØÈØax Ð ÈÐñÿ”D’$”(Ç„ê È7Ôdi ÈØÈØaxÐdiñÿ’D%”$¿ø ÈØÈØax ÈØÈØaxñÿ’D’$”Dj�" Ð È ÈØÈØaR"Ðdiñÿ’D’$’$ù�ÈØ ÐÈØÐÞ Ð ÈÞÈÞñÿ¢D’$’(9²""þðe7 È ÈØÈØax" Ð Èñÿ’D%’$D¹0Ø ÐÈØÐd È ÈÞ"ÈÞñÿ’D’$’$õÓ>"ÈØÞ"ÈØÞ"Ðdñÿ’H¢$’(Ä Li ÈØÈØaxÐdiñÑgñÿ¢HE¢()~Z[d™d�d§dîdøddñÿ¢H”$’$nFhMd‹ÈØÞez ÈØÈañÿ”H’$’D7¸vxÐdþV¤‹ÈØÞe‰ ÈÈØñÿE”D’$¬„„axÐd‹ÞÐd�ÞÐ bñÿ’D”$’$²i’bLÞÐÈÞe«ÈØÞeñÿ’H%’$  « ÈØ+Ìaxe«ÞÐ b,ñÿ’D’$”(ad®bDÞÐÞ&ÔÌÞeÓ ÈeÄñÿâD¢8â$ªA¼ a adÓ ^^a ñÿ’D”$”$xŒÊË^ þ %aÌÞeÞñÿâD’8œ(üØ a a ÌÞeé añÿâD¢$œ(ÊLæ aÌÞe Èeù añÿâD’D’Ä”Ùô a d ^_a Ë^ñÿ’D’(’$¼'%aÌ^€(eñÿ’H’8ÅdáÌÐ a Èad Èeñÿ’H’(”Ä‹+,ÌÞe, þ({Þa Ëañÿ’D’$’$÷ä,ÌëÏ(\)#ÌÞ È"#eñÿ’H”(’$ÑÞ:´ÌÞe� ÈeˆÞ&ÔÞãÌñÿ”D'â$[øHÞeQ adU Þa ñÿ’Dœ$’$«RVË^@'aÌ È ÈÌñÿ’D%’8Û)dÞ"!"es Þa Ëañÿ’H’$’$—±rÌ ÈÌ÷Ï(#\þZ61)# ÈÌñÿ’D¢('’y€Þ"#eUd� ®ÞaÞ ÐúÿE bŽd;Þã ÿÿ û_€ÿMAKEP4ERRS.CMûY 0þM ™DELETE/V P4ERRSUM.LD;^ RLDR P4CUE P4LIB.LB P4ERRSUM P4ERRSUM/S P4ERRSUM.LD/LÿR2SMISC.RBûYU-þÛýÿóÚ•¯tuÜÿ$I$IHPÛ�¥ G&§ ~ „¦`HA„¦€G;š¤Œ+„¦ GB„¦`G7„¦F6Y¦xHf¥–%&§‚š¥7úÿØFóܱC{ÿ\ŒC{ÿñÿ’D’Ä’$<è!,!�¶* ‚ÀªÀ§!!D !,!!4ñÿG’$’$K! �“ÒÁ‚Àª:Ÿ¾Z !,!!$ñÿ’D’$’$dÿ!L  (  !4! ñÿþŒx’D’8’$@Þ* !$!)¦(À§!!D  !$ñÿ’D’$’$ÙI8�‚!D !$­€‚@ª!L  !$!ñ)¥ûÿ’X@øF(éÿúÿH74p§HIó“ÿÿ û_€ÿR2SMPY.RBû  &þ˜„ýÿÚ•¯TvñÿHJÅâòêà²òê`°ó“7ó“›ó“ ýÿ‰wñÿ’D’$’$Xÿ0…Y´Úº²’ÒæÒþûŠ…ýÿ€Dr¶ÿÿ û_€ÿMAKEPCODE.CMûŽŽþ£ëDELETE/V PCODE.LD;^ RLDR PCODE SWOP @LIBRARY.CM@ PCODE.LD/LþþþÿPCMESSAGE.ERûY èþ®0ILLEGAL INSTRUCTION ENCOUNTERED BY THE INTERPRETER STACK SPACE EXHAUSTED ûEOF SET FOR 'GET' INSTRUCTION EOF SET FOR 'READ' INSTRUCTION ûþH–EOF NOT SET FOR 'PUT' INSTRUCTION 'WRITE' BUFFER EMPTY ûUNDER/OVERFLOW FLAG SET ON RETURN FROM RFPI OVERFLOW ON TRUNCATE INSTRUCTION ûþdZMISSING LABEL IN CASE STATEMENT - UJC ENCOUNTERED TOO MANY TEXT FILES REQUESTED AT ONE TIME ûILLEGAL EXTERNAL PROCEDURE CALL VALUE OUT OF RANGE...AT RANGE CHECK INSTRUCTION ûþŒðHEAP SPACE EXHAUSTED...PROCEDURE NEW FIELD WIDTH IS NEGATIVE OR EXCEEDS 120 ûINPUT ERROR...FLOATING POINT INTERPRETER OUTPUT ERROR...FLOATING POINT INTERPRETER ûÿR2IREAL.RBûY!:þŒ~ýÿ}‹¯ô�âÿ$I$IGÌФŒ2¦ŒD¤Œ#§ŒQ¦ŒL§A¥}¥–§ŒF¤Œýÿ€D�6ÿýÿ@ŒÐp§Hÿÿ û_€ÿR2SMYP.RBûYU-þ‚rýÿ󨕝twúÿˆ)íèëòê¯þÿ„|òÿ’D’$�$¯ YýJªÞJÒ¾Yÿ9åýÿ@,ó“ÿÿ û_€ÿP4MAC.RBûY üþ1£ýÿé#_£´8ÿÿ ÿßÿÿ ÿßÿÿ ÿßýÿ@«©¡¤àGÔ)ÿÿ ÿßñÿ’D’$’$ãòb bvÝÞìß+SR T ñÿ’D’$’$°" àÝÞìßèÞÝÞñÿ’D’$’$mTìßèÞÝÞìß+CC P ñÿ’D’$’$‡* àÝÞìßè^þ<"5ñÿ’D’$’$æ8ÝÞìßèðÞÝÞìß+NA Dñÿ’D’$’$)F àÝÞìßè^ñÿ’D’$’$¼BT"ÝÞìßèÞÝÞìß+ñÿ’D’$’$žªbRW I àÝÞìßñÿ’D’$’$ŽÉpèÞÝÞìßèÞÝ Þìßñÿ’D’$’$’t~+ID F àÝ Þìþ.ãñÿ’D’$’$tŒßè^%Ý ÞìßèÞÝÞñÿ’D’$’$xhšìß+HC R àÝñÿ’D’$’$cö¨Þìßè^0ÝÞìßèÞñÿ’D’$’$r¶ÝÞìß+NIID ñÿ’D’$’$1÷ÄàÝÞìßè^XÝÞìßèñÿ’D’$’$Í–ÒFÞÝÞìß+RSSO ñÿþaL’D’$’$ý¡à àÝÞìßè^TÝÞìñÿ’D’$’$âîßèdÞÝÞìß+ELAQ ñÿ’D’$’$«yü àÝÞìßè^Ýñÿ’D’$’$t› ÞìßèÞÝÞìß+CL A ñÿ’D’$’$dù àÝÞìßè^+ñÿ’D’$’$w&ÝÞìßèÞÝÞìß+OEñÿ’D’$þQv’$4 F  àÝÞìßèñÿ’D’$’$¨B^)ÝÞìßèÞÝÞìßñÿ’D’$’$´pP+DL A àÝÞìñÿ’D’$’$qØ^ßè^\ÝÞìßèÞÝÞñÿ’D’$’$šmlìß+TA N àÝñÿ’D’$’$TÈzÞìßèÞÝÞìßèÞÝñÿ’D’$’$„lþ¶µˆÞìß+DL C àñÿ’D’$’$•ñ–ÝÞìßè^^ÝÞìßè´Þñÿ’D’$’$Q`¤ÝÞìß+JF P ñÿ’D’$’$-ѲàÝÞìßè^eÝÞìßñÿ’D’$’$¼èÀè–ÞÝÞìß+EDCC ñÿ’D’$’$ØRÎ àÝÞìßè^nÝÞñÿ’D’$’$"RÜìþ<ßènÞÝÞìß+DA R ñÿ’D’$’$«$ê àÝÞìßè^ñÿ’D’$’$zÕøÝÞìßèÞÝ Þìß+LF Oñÿ’D’$’$N àÝ Þìßè^ñÿ’D’$’$ÈHÝ ÞìßèÞÝ!Þìß+ñÿ’D’$’$˵"LE N àÝ!Þìßñÿ’D’$’$�Ç0èÞþq–Ý!ÞìßèÞÝ"Þìßñÿ’D’$’$Áa>+AL O àÝ"Þìñÿ’D’$’$AÖLßè^]Ý"ÞìßèFÞÝ#Þñÿ’D’$’$­hZìß+SC P àÝñÿ’D’$’$ÛÀh#Þìßè^cÝ#Þìßè Þñÿ’D’$’$TvvÝ$Þìß+EDIC ñÿ’D’$’$Iá„àÝ$Þìßþ;Þè^lÝ$Þìßèñÿ’D’$’$ ž’nÞÝ%Þìß+NE T ñÿ’D’$’$’  àÝ%Þìßè^bÝ%Þìñÿ’D’$’$#®ßè‚ÞÝ&Þìß+VD I ñÿ’D’$’$àg¼ àÝ&Þìßè^Ýñÿ’D’$’$ƒ“Ê&ÞìßèÞÝ'Þìß+UC P ñÿ’D’$’$•ÁØ àþ0Ý'Þìßè^añÿ’D’$’$hæÝ'Þìßè2ÞÝ(Þìß+NJñÿ’D’$’$8ô C àÝ(Þìßèñÿ’D’$’$äù^4Ý(ÞìßèæÞÝ)Þìßñÿ’D’$’$åh+DO D àÝ)Þìñÿ’D’$’$§ßè^Ý)ÞìßèÞÝ*Þñÿ’D’$’$íc,ìß+AP G þ?” àÝñÿ’D’$’$nÆ:*ÞìßèÞÝ*ÞìßèÞÝñÿ’D’$’$­_H+Þìß+LF T àñÿ’D’$’$k5VÝ+Þìßè^Ý+ÞìßèÞñÿ’D’$’$|$d b b”Ý-Þìß+LH T ñÿ’D’$’$õ r àÝ-Þìßè^ñÿ’D’$’$ú€Ý-ÞìßèÞÝ.ÞìþŠRß+HCñÿ’D’$’$wŽAK àÝ.Þìßèñÿ’D’$’$‚ïœ^ Ý.ÞìßèªÞÝ/Þìñÿ’D’$’$4qªß+NI N àÝ/Þñÿ’D’$’$0ü¸ìßè^(Ý/ÞìßèÞÝñÿ’D’$’$/bÆ0Þìß+GN I àñÿ’D’$’$ã=ÔÝ0Þìßè^Ý0Þìßèþ<ÀÞñÿ’D’$’$ßeâÝ1Þìß+HCBK ñÿ’D’$’$ÇÂðàÝ1Þìßè^qÝ1Þìßñÿ’D’$’$SßþèªÞÝ2Þìß+HCCK ñÿ’D’$’$rN  àÝ2Þìßè^pÝ2Þñÿ’D’$’$€OìßèªÞÝ3Þìß+XC P ñÿ’D’$’$YÄ( àÝ3Þìßè^uþ¿'ñÿ’D’$’$êÒ6Ý3Þìßè2ÞÝ4Þìß+DR Cñÿ’D’$’$ï€D àÝ4Þìßè Þñÿ’D’$’$RÝ4ÞìßèÞÝ5Þìß+OIñÿ’D’$’$¿ ` R àÝ5Þìßèñÿ’D’$’$D n^#Ý5ÞìßèÞÝ6Þìßñÿ’D’$’$Xp|+XI A àÝ6Þìñÿ’Dþ_)’$’$³ÑŠßè^_Ý6ÞìßènÞÝ7Þñÿ’D’$’$sh˜ìß+OM D àÝñÿ’D’$’$¦7Þìßè^Ý7ÞìßèÞñÿ’D’$’$ÿl´Ý8Þìß+HCIK ñÿ’D’$’$ãÙÂàÝ8Þìßè^qÝ8Þìßèñÿ’D’$’$‚”ЪÞÝ9Þìß+GN R ñÿ’D’$’$þ4±ÕÞ àÝ9Þìßè^Ý9Þìñÿ’D’$’$HìßèÞÝ:Þìß+BS I ñÿ’D’$’$Žlú àÝ:Þìßè^Ýñÿ’D’$’$$‡:ÞìßèÞÝ;Þìß+NI T ñÿ’D’$’$Cú àÝ;Þìßè^&ñÿ’D’$’$=$Ý;ÞìßèÞÝ<Þìß+EDñÿ’D’$’$Å2þbîAC àÝ<Þìßèñÿ’D’$’$ö¿@^lÝ<ÞìßènÞÝ=Þìßñÿ’D’$’$‡[N+PJ T àÝ=Þìñÿ’D’$’$«²\ßè^}Ý=Þìßè–ÞÝ>Þñÿ’D’$’$ bjìß+PM I àÝñÿ’D’$’$5 x>Þìßè^Ý>ÞìßèÞñÿ’D’$’$Gj†Ý?Þþ²âìß+PJ F ñÿ’D’$’$Ì”àÝ?Þìßè^~Ý?Þìßèñÿ’D’$’$�Ž¢–ÞÝ@Þìß+TSCR ñÿ’D’$’$Ñ ° àÝ@Þìßè^PÝ@Þìñÿ’D’$’$#¾ßèÞÝAÞìß+HCRK ñÿ’D’$’$µ Ì àÝAÞìßè^pÝñÿ’D’$’$m”ÚAÞìßèþ•éªÞÝBÞìß+HCSK ñÿ’D’$’$j¯è àÝBÞìßè^pñÿ’D’$’$¶ öÝBÞìßèªÞÝCÞìß+BSñÿ’D’$’$  R àÝCÞìßèñÿ’D’$’$ƒ^ÝCÞìßèÞÝEÞìßñÿ’D’$’$¼O +AS V àÝEÞìñÿ’D’$’$IÃ.ßèÞÝEÞþ:­ìßèÞÝGÞìñÿ’D’$’$ˆf<ß+PM R àÝGÞñÿ’D’$’$†Jìßè^ÝGÞìßèÞÝñÿ’D’$’$|SXIÞìß+OM V àñÿ’D’$’$§êfÝIÞìßè^`ÝIÞìßèxÞñÿ’D’$’$ZVtÝJÞìß+DR I ñÿ’D’$’$ôÈ‚àÝJÞìßè ÞþˆªÝJÞìßèñÿ’D’$’$R‘�ÞÝKÞìß+ON T ñÿ’D’$’$ÍΞ àÝKÞìßè^!ÝKÞìñÿ’D’$’$n¬ßèÞÝLÞìß+JU C ñÿ’D’$’$¼8º àÝLÞìßè^AÝñÿ’D’$’$¹€ÈLÞìßèŒÞÝMÞìß+IS N ñÿ’D’$’$c–Ö àÝMÞìþQßèÞñÿ’D’$’$‡äÝMÞìßèÞ b b”ÝNÞñÿ’D’$’$!Qòìß+GS S àÝñÿ’D’$’$�ûNÞìßè^$ÝNÞìßèÞñÿ’D’$’$¬WÝOÞìß+SM T  ñÿ’D’$’$[<àÝOÞìßè^ ÝOÞìßèñÿ’D’$’$`š*<ÞÝPÞìß+EGAQ þ|$ ñÿ’D’$’$$ë8 àÝPÞìßè^ÝPÞìñÿ’D’$’$²FßèÞÝQÞìß+EGBQ ñÿ’D’$’$uT àÝQÞìßè^Ýñÿ’D’$’$‚‰bQÞìßèÞÝRÞìß+EGCQ ñÿ’D’$’$Ñp àÝRÞìßè^ñÿ’D’$’$­~ÝRÞìßèÞÝSÞìß+MJþ/àñÿ’D’$’$u Œ P àÝSÞìßèñÿ’D’$’$Ü÷š^2ÝSÞìßèÞÝTÞìßñÿ’D’$’$`¨+SR E àÝTÞìñÿ’D’$’$šÁ¶ßèÞÝTÞìßèÞÝUÞìñÿ’D’$’$ø_Äß+JT P àÝUÞñÿ’D’$’$Z¹Òìßè^fÝUÞìßè–ÞÝñÿþ`J’D’$’$çaàVÞìß+OL G àñÿ’D’$’$lÁîÝVÞìßèÞÝVÞìßèÞñÿ’D’$’$ÅNüÝWÞìß+DW R ñÿ’D’$’$Cé àÝWÞìßèÞÝWÞìßèÞñÿ’D’$’$~WÝXÞìß+EGIQ ñÿ’D’$’$B+&àÝXÞìßè^ÝXÞìßñÿ’D’$þg’$ÁÄ4èÞÝYÞìß+JU P ñÿ’D’$’$îUB àÝYÞìßè^dÝYÞñÿ’D’$’$(OPìßè–ÞÝZÞìß+DLCC ñÿ’D’$’$üÖ^ àÝZÞìßè^^ñÿ’D’$’$¾ÇlÝZÞìßèÈÞÝ[Þìß+VO Lñÿ’D’$’$ˆ|z àÝ[ÞìßèÞñÿ’D’$’$™þk¶ˆÝ[ÞìßèÞÝ\Þìß+EGñÿ’D’$’$5 –MQ àÝ\Þìßèñÿ’D’$’$¶$¤^Ý\Þìßè ÞÝ]Þìßñÿ’D’$’$V²+SR N àÝ]Þìñÿ’D’$’$�ûÀßè^1Ý]ÞìßèÞÝ^Þñÿ’D’$’$:^Îìß+RT C àÝñÿ’D’$’$‘Ü^Þþ1¼ìßè^Ý^ÞìßèÞñÿ’D’$’$­gêÝ_Þìß+DLBC ñÿ’D’$’$_èøàÝ_Þìßè^^Ý_Þìßèñÿ’D’$’$ë  ¾ÞÝ`Þìß+DLIC ñÿ’D’$’$-� àÝ`Þìßè^^Ý`Þìñÿ’D’$’$" ßè¾ÞÝaÞìß+QS R ñÿ’D’$’$1Z0 þñÊàÝaÞìßè^Ýñÿ’D’$’$v‡> aÞìßèÞÝbÞìß+EGSQ ñÿ’D’$’$âL àÝbÞìßè^ñÿ’D’$’$­Z ÝbÞìßèÞÝcÞìß+QSñÿ’D’$’$‰h T àÝcÞìßèñÿ’D’$’$Î|v ÞÝcÞìßèÞÝdÞìß+ñÿ’D’$’$ §„ RW C þ^ç àÝdÞìßñÿ’D’$’$²¿’ è ÞÝdÞìßèÞÝeÞìßñÿ’D’$’$M  +JX P àÝeÞìñÿ’D’$’$ Ä® ßè^gÝeÞìßè–ÞÝfÞñÿ’D’$’$)R¼ ìß+TSAO àÝñÿ’D’$’$“Ê fÞìßè^ÝfÞìßèÞñÿ’D’$’$¦]Ø ÝgÞìß+EGRQþBì ñÿ’D’$’$_Aæ àÝgÞìßè^ÝgÞìßèñÿ’D’$’$±£ô ÞÝhÞìß+NIAC ñÿ’D’$’$/„ àÝhÞìßè^hÝhÞìñÿ’D’$’$S ßènÞÝiÞìß+DLRC ñÿ’D’$’$; àÝiÞìßè^^Ýñÿ’D’$’$£‘, iÞìßèÜÞÝjÞìþ{ïß+NICC ñÿ’D’$’$ð°: àÝjÞìßè^jñÿ’D’$’$>H ÝjÞìßènÞÝkÞìß+TSñÿ’D’$’$“V P  àÝkÞìßèñÿ’D’$’$Z²d ^*ÝkÞìßèÞ b bñÿ’D’$’$ydr ”ÝlÞìß+NICD ñÿ’D’$’$ÁÔ€ àÝlÞìßè^XÝþ²=lÞìßñÿ’D’$’$ôÂŽ èPÞÝoÞìß+WR R ñÿ’D’$’$JKœ àÝoÞìßèÞÝoÞìñÿ’D’$’$ª ßèÞÝpÞìß+NIIC ñÿ’D’$’$š ¸ àÝpÞìßè^hÝñÿ’D’$’$t‚Æ pÞìßènÞÝqÞìß+DLBO ñÿ’D’$’$OÎÔ àÝqÞìßè^þ=,Lñÿ’D’$’$Î â ÝqÞìßèFÞÝrÞìß+DLñÿ’D’$’$Ïð CO àÝrÞìßèñÿ’D’$’$ôÙþ ^LÝrÞìßèFÞÝsÞìßñÿ’D’$’$‘J +RW R àÝsÞìñÿ’D’$’$ ¾ ßè ÞÝsÞìßèÞÝtÞìñÿ’D’$’$mV( ß+RW S àÝtÞþÀ$ñÿ’D’$’$ñ½6 ìßèÞÝtÞìßèÞÝvÞñÿ’D’$’$±WD ìß+DLAO àÝñÿ’D’$’$¥ÎR vÞìßè^LÝvÞìßèFÞñÿ’D’$’$ÿQ` ÝwÞìß+TSRO ñÿ’D’$’$¹:n àÝwÞìßè^ ÝwÞìßèñÿ’D’$’$“| ÞÝxÞìß+DLIO ñÿ’Dþ`(’$’$‡žŠ àÝxÞìßè^LÝxÞìñÿ’D’$’$æ ˜ ßèFÞÝyÞìß+QEBU ñÿ’D’$’$ r¦ àÝyÞìßè^Ýñÿ’D’$’$Ô‚´ yÞìßèÞÝzÞìß+QECU ñÿ’D’$’$W àÝzÞìßè^ñÿ’D’$’$ Ð ÝzÞìßèÞÝ{Þìß+NIñÿ’D’$’$þ¥FÉÞ RD àÝ{Þìßèñÿ’D’$’$àÌì ^XÝ{ÞìßèZÞÝ|Þìßñÿ’D’$’$†Sú +ELAS àÝ|Þìñÿ’D’$’$" ßè^Ý|ÞìßèÞÝ}Þñÿ’D’$’$ÝR ìß+ELBS àÝñÿ’D’$’$$ }Þìßè^Ý}ÞìßèÞñÿ’D’$’$:Y2 þÇÓÝ~Þìß+QEAU ñÿ’D’$’$Ô@@ àÝ~Þìßè^Ý~Þìßèñÿ’D’$’$H�N ÞÝÞìß+ELBQ ñÿ’D’$’$¤ã\ àÝÞìßè^ÝÞìñÿ’D’$’$X j ßèÞÝ€Þìß+ELIQ ñÿ’D’$’$Émx àÝ€Þìßè^Ýñÿ’D’$’$ò€† €Þìþ`üßèÞÝ�Þìß+DLRO ñÿ’D’$’$Ì” àÝ�Þìßè^Lñÿ’D’$’$Ú ¢ Ý�ÞìßèZÞÝ‚Þìß+DLñÿ’D’$’$ï° SO àÝ‚Þìßèñÿ’D’$’$ö×¾ ^LÝ‚ÞìßèdÞ݃Þìßñÿ’D’$’$ÇLÌ +LW N à݃Þìñÿ’D’$’$1¼Ú ßèÞþÍ݃ÞìßèÞÝ„Þìñÿ’D’$’$qdè ß+QEMU àÝ„Þñÿ’D’$’$“ö ìßè^Ý„Þìßè ÞÝñÿ’D’$’$q` …Þìß+DLNC àñÿ’D’$’$)å Ý…Þìßè^^Ý…ÞìßèÒÞñÿ’D’$’$

àÝ¥ÞìßèÞÝ¥Þìßèñÿ’D’$’$™LÞݨÞìß+OLCD ñÿ’D’$’$W�Z àݨÞìßè^HݨÞìñÿ’D’$’$$hßèÞÝ©Þìß+ENBQ ñÿ’D’$’$ lv àÝ©Þìßè^Ýñÿ’D’$’$¥|„©ÞìßèÞþäþݪÞìß+RGAT ñÿ’D’$’$S’ àݪÞìßè^ñÿ’D’$’$Ö ݪÞìßèÞÝ«Þìß+ROñÿ’D’$’$Ù ®BD àÝ«Þìßèñÿ’D’$’$ ñ¼^/Ý«ÞìßèÞݬÞìßñÿ’D’$’$wZÊ+ROCD àݬÞìñÿ’D’$’$æõØßè^.ݬÞþE-ìßèÞÝ®Þñÿ’D’$’$üMæìß+ELSS àÝñÿ’D’$’$Õ ô®Þìßè^Ý®ÞìßèÞñÿ’D’$’$DHݯÞìß+ERBT ñÿ’D’$’$¦0àݯÞìßè^ ݯÞìßèñÿ’D’$’$?›ÞݰÞìß+NIAD ñÿ’D’$’$uŒ, àݰÞìßè^þØçXݰÞìñÿ’D’$’$:ßèFÞݲÞìß+ROID ñÿ’D’$’$ÈBH àݲÞìßè^,Ýñÿ’D’$’$ÍpV²ÞìßèÞÝ´Þìß+ERAT ñÿ’D’$’${d àÝ´Þìßè^ ñÿ’D’$’$]RrÝ´ÞìßèÞ b b”Ýñÿ’D’$’$ÈD€¶Þìß+ERIT þ?½ àñÿ’D’$’$2ŽݶÞìßè^ ݶÞìßèÞñÿ’D’$’$»OœݸÞìß+MC S ñÿ’D’$’$ÿñªàݸÞìßè^3ݸÞìßñÿ’D’$’$âĸèÞݹÞìß+EG T ñÿ’D’$’$©CÆ àݹÞìßèÞݹÞìñÿ’D’$’$Ñ ÔßèÞݼÞìß+OC S þ^þ ñÿ’D’$’$Yâ àݼÞìßèÞݼÞñÿ’D’$’$­.ðìßèÞݽÞìß+ERPT ñÿ’D’$’$ùþ àݽÞìßè^ ñÿ’D’$’$þ² ݽÞìßèÞÝ¿Þìß+ERRTñÿ’D’$’$›ò àÝ¿Þìßè^ñÿ’D’$’$tD( Ý¿ÞìßèÞÝÀÞìß+þ¿!ñÿ’D’$’$üš6ELCQ àÝÀÞìßñÿ’D’$’$XDè^ÝÀÞìßèÞÝÂÞìñÿ’D’$’$ÆkRß+NISD àÝÂÞñÿ’D’$’$‘¼`ìßè^XÝÂÞìßèdÞÝñÿ’D’$’$ìRnÃÞìß+OE R àñÿ’D’$’$ùµ|ÝÃÞìßèÞÝÃÞìßèÞñÿ’Dþ]%’$’$¦MŠÝÄÞìß+ELCS ñÿ’D’$’$ô4˜àÝÄÞìßè^ÝÄÞìßèñÿ’D’$’$™“¦ÞÝÊÞìß+ROAD ñÿ’D’$’$¹µ´ àÝÊÞìßè^-ÝÊÞìñÿ’D’$’$Ë ÂßèÞÝÍÞìß+VD R ñÿ’D’$’$%MÐ àÝÍÞìßè^ Ýñÿ’D’$’$þ®vÞÍÞìßèÞÝÎÞìß+ELMS ñÿ’D’$’$Ú ì àÝÎÞìßè^ñÿ’D’$’$7úÝÎÞìßè ÞÝÏÞìß+ELñÿ’D’$’$KþRQ àÝÏÞìßèñÿ’D’$’$f^ÝÏÞìßèÞÝÐÞìßñÿ’D’$’$E$+ERCT àÝÐÞìñÿ’D’$’$B2þ*eßè^ ÝÐÞìßèÞÝÓÞñÿ’D’$’$ÂU@ìß+XE P àÝñÿ’D’$’$µNÓÞìßèÞÝÓÞìßèÞÝñÿ’D’$’$ÊK\ÔÞìß+ELMQ àñÿ’D’$’$û6jÝÔÞìßè^ÝÔÞìßè Þñÿ’D’$’$Ç>xÝØÞìß+EN W ñÿ’D’$’$Ûº†àþ.–ÝØÞìßèÞÝØÞìßèñÿ’D’$’$–ˆ”ÞÝÚÞìß+ELSQ ñÿ’D’$’$§Û¢ àÝÚÞìßè^ÝÚÞìñÿ’D’$’$Ö°ßèÞÝÞÞìß+LC S ñÿ’D’$’$0 ¾ àÝÞÞìßèÞÝÞÞñÿ’D’$’$°0ÌìßèÞÝàÞìß+RSAO ñÿ’D’$’$úÔÚ þÇÉàÝàÞìßè^Tñÿ’D’$’$š´èÝàÞìßèFÞÝáÞìß+RSBOñÿ’D’$’$�ðö àÝáÞìßè^ñÿ’D’$’$ûTÝáÞìßèFÞÝâÞìß+ñÿ’D’$’$ñ“RSCO àÝâÞìßñÿ’D’$’$ð¾ è^TÝâÞìßèFÞÝçÞìñÿ’D’$’$ø`.ß+NR D þú8 àÝçÞñÿ’D’$’$ö³<ìßèÞÝçÞìßèÞÝèÞñÿ’D’$’$•GJìß+RSIO àÝñÿ’D’$’$»¼XèÞìßè^TÝèÞìßèFÞñÿ’D’$’$½MfÝéÞìß+PO N ñÿ’D’$’$ºÛtàÝéÞìßèÞÝéÞìßèÞñÿ’D’$’$y@‚ÝêÞìß+TSCOþG¬ ñÿ’D’$’$µ�àÝêÞìßè^ ÝêÞìßñÿ’D’$’$Á¼žèÞÝíÞìß+LR N ñÿ’D’$’$X@¬ àÝíÞìßèÞÝíÞìñÿ’D’$’$“øºßèÞÝîÞìß+TSAR ñÿ’D’$’$ È àÝîÞìßè^PÝñÿ’D’$’$²mÖîÞìßèÞÝïÞìßþå+TSBR ñÿ’D’$’$Á¿ä àÝïÞìßè^Pñÿ’D’$’$ªPòÝïÞìßèÞ b bxÝñÿ’D’$’$ÿDðÞìß+TSIO àñÿ’D’$’$)3ÝðÞìßè^ÝðÞìßèÞñÿ’D’$’$Ë?ÝñÞìß+RSRO ñÿ’D’$’$ Í*àÝñÞìßè^TÝñÞþE©ìßñÿ’D’$’$ÒÑ8èZÞÝòÞìß+BA I ñÿ’D’$’$¸™F àÝòÞìßè^ÝòÞñÿ’D’$’$AGTìßèÞÝöÞìß+DA I ñÿ’D’$’$\b àÝöÞìßè^ñÿ’D’$’$Q·pÝöÞìßèÞÝøÞìß+NU Iñÿ’D’$’$þî~ àÝøÞìßè^þ+Üñÿ’D’$’$ &Œ'ÝøÞìßèÞÝùÞìß+ñÿ’D’$’$Q’šTSBO àÝùÞìßñÿ’D’$’$„ ¨è^ÝùÞìßèÞÝúÞìñÿ’D’$’$$S¶ß+TSSO àÝúÞñÿ’D’$’$YÄìßè^ ÝúÞìßèÞÝñÿ’D’$’$]SÒûÞìß+BA R àñÿþbE’D’$’$AàÝûÞìßè^ÝûÞìßèÞñÿ’D’$’$õ;îÝüÞìß+TSIR ñÿ’D’$’$%ÐüàÝüÞìßè^PÝüÞìßñÿ’D’$’$+· èÞÝýÞìß+RR R ñÿ’D’$’$¶> àÝýÞìßèÞÝýÞìñÿ’D’$’$÷&ßèÞÝÿÞìß+TSRR ñÿ’D’$þ2Ü’$�4 àÝÿÞìßè^PÝñÿ’D’$’$) BÿÞìßèÞÝ^ìß+TSSRñÿ’D’$’$$ÌP àÝ^ìßèñÿ’D’$’$¥a^^PÝ^ìßè(Þ b ñÿ’D¢D”( lb a af aì ao ñÿ¢D”(’$y z aó a{ aû b bÚñÿ’D’$’$tÖþÏ}ˆ^+ Þ\ã\ã]\ ãñÿ’D’D’$–\ãe‘]\ ã+T.TX' ñÿ’D’$’$tó¤NIUP'T Þ Þ\ã\ãñÿ’D’$’$�²^ú" Þ\ã\ã^ë Þñÿ’D’$’$bÓÀ\ã\ã^ú" Þ\ã\ñÿ’D’$’$IÎã^^ Þ\ã\ã^ Þñÿ’D’$’$8þÜ\þKã\ã^ Þ\ã\ñÿ’D’$’$Hûêã^ø" Þ\ã\ã^ÿ!ñÿ’D’$’$ ø Þ\ã\ã^ Þ\ã\ñÿ’D’$’$sáã^+ Þ\ã\ã+T.TXñÿ’D’$’$±£' UOPTTU ' Þ Þ\ã\ñÿ’D’$’$%"ã^÷" Þ\ã\ã^ëñÿ’D’$’$îP0 Þ\þ@ªã\ã^õ" Þ\ãñÿ’D’$’$â%>\ã^^ Þ\ã\ã^€ñÿ’D’$’$ÇkL Þ\ã\ã^ Þ\ãñÿ’D’$’$rÝZ\ã^+ Þ\ã\ã+T.ñÿ’D’$’$w–hTX' RP'D Þ Þ\ã\ñÿ’D’$’$Ìvã^ô" Þ\ã\ã^ëñÿ’D’$’$£#„ Þ\ãþÒ\ã^ô" Þ\ñÿ’D’$’$†Â’ã\ã^^ Þ\ã\ã^ñÿ’D’$’$s[  Þ\ã\ã^ Þ\ãñÿ’D’$’$€Ð®\ã^ò" Þ\ã\ã^ñÿ’D’$’$`,¼ÿ! Þ\ã\ã^ Þ\ñÿ’D’$’$N(Êã\ã^+ Þ\ã\ã+ñÿ’D’$’$´µØT.TX' RP'R þ½M Þ Þ\ãñÿ’D’$’$IÐæ\ã^ñ" Þ\ã\ã^ñÿ’D’$’$Uôë Þ\ã\ã^ï" Þ\ñÿ’D’$’$ ã\ã^^ Þ\ã\ãñÿ’D’$’$p^€ Þ\ã\ã^ Þ\ñÿ’D’$’$ŠÛã\ã\ã b btLñÿ’D’$’$¬³,&ÞT&+******þÏW**** ñÿ’D’$’$Y¦: Þ Þ\ ã+I SNRT .ON . ñÿ’D’$’$…¦H Þ Þ\ ãL%Þ\ ã+ñÿ’D’$’$ã]V' ÞÞ\ ãñÿ’D’$’$”d\ÞÞ\ ã+ 'AH SON TEYñÿ’D’$’$Òkr TEBÞÞ\ ã+NEC TAREDEñÿ’D’$’$Ò3€F RO ÞÞ\ ã\ þ/"ã\ñÿ’D’$’$ïæŽã b bŒÞPL&ÞTñÿ’D’$’$Ã=œ&ÞP+NITS.RN .O= ñÿ’D’$’$†ª Þ Þ\ ãL%Þ\ ã+ ñÿ’D’$’$µA¸ ÞÞ\ ã\ñÿ’D’$’$'4ÆÞÞ\ ã]\ ãLÞ\ñÿ’D%’$ɼÔ ã\ãeË]\ ã\þ@ç ñÿ’D’$’$](âã+** ÞÞ\ñÿ’D’$’$Oð ã\ÞÞ\ ã+* *LIELñÿ’D’$’$÷þAG LOCEDÞÞ\ ã\ ã ñÿ’D’$’$úú bb$ÞÐ\ÞìßÚ.Þñÿ’D’$’$ü\ÞìßÚ.Þ\Þñÿ’D’$’$½(ìßÚ.Ð\ÞìßÚ.Þþµ(ñÿ¢D’$’$­6eEÈÞ\ÞìßÚ.ñÿ’D’$’$ϨDÐÈ^ÞÐÞÐL$Þñÿ’D’$’$dRT$L#ÞT#ÞÐ\+ ñÿ’D’$”(®` Âep a�ñÿE’D’$¨Mnd¹Èe¹ÝÈìß Ð\ ÈÂñÿE’$¢$ö…|e‰ÞÐ ÈØP ÈØÐdš Èñÿ’DþR,’$¢$àŠ+ Âeš ñÿE’D’$Óâ˜a�Èe·ÈÞÐÈ^Ðñÿ’D’$’$jƦÈÈÐÈ^ÞÐL#Þñÿ’D’D’$›U´T#dp bbZÈ^ñÿ’D%’$«ÂÈÞ"!eÛÈ Þ\ã\ñÿ’D’$’(c)ÐãÈ Þ\ã\ãdè^€Èñÿ’D’$’$þ1![ÞÈ Þ\ã\ã]\ñÿ’D’$’$Õ©ì ã bbfÈ^ÈÞ"ñÿ¢D’$’$üõú!eÈÈ Þ\ã\ãÈñÿ’D”$’$õ Þ\ã\ãd ^€ÈÈñÿ’D’$’$èZÈ Þ\ã\ã]\ñÿ’D’$’$–«$ ã bblÈÞÈ^"ñÿ’D%’$&02þìZÈÞ"!eMÈÈ Þ\ãñÿ’D’$¢$o@\ãÈÞ\ã\ãdZ^ñÿ’D’$’$¹nN€ÈÈ Þ\ã\ã]ñÿ’D’$’$Ax\\ ã bbxÈÞÈ^ñÿ’D”$’$BNj"ÈÞ"!e‰È ÈÈñÿ’D’$’$‡ºx Þ\ã\ãÈ Þ\ã\ñÿ¢D’$’$ø[†ãdþ¸˜^€ÈÈ È Þ\ñÿ’D’$’$†Ã”ã\ã]\ ã bbÞñÿ’D’D’$ª¯¢ÈÞeóÈÞÈ^"eñÿ’H’$’$®R°ÀÈ^€È Þ\ã\ãñÿE’$%µÍ¾dñÈÞÈ^"eÖÈÈñÿ’D’$’DqÌ Þ\ã\ãdéÈ^ñÿ’D’$’$%ºÚ Þ\ãþš\ãÈ Þ\ã\ñÿ’D’$’(#"èãÈ Þ\ã\ãd ÈÞñÿE’$”$�GöeÈÞ Þ\ã\ãd ñÿ’D’$’$ð¼È Þ\ã\ãL%Þ Þ\ñÿ’D’$’$¾ã\ã bb4\H ñÿ’D’$’$‹ ìßÚ^ \H ìßÚ^ñÿ’D’$’(À¢.,#H Hþõ‡ "eAH Þñÿ’D’D’$Ó—<P d\H ìßÚ.Kñÿ’D’D’$ãgJ<(!e¾+**A SSMELBREC DOñÿ’D’$’$ЇXÞÞ\ ã+ EREOR R : ñÿ’D’$’$Іf Þ Þ\ ã\ ãÞP Hñÿ’D¢$’$ÿ€t ÐH ÈeŽ\H ìßñÿ’D’$%Ÿ‚ÚÞ\ ãH èþ·¤P dv\ ñÿ’D’$’$š#�ã+**L SA TEROCDRDEÞÞ\ñÿ’D’$’$)Áž ã+P OCEDC UOTNRE= ÞÞñÿ’D’$’$¬\ ãL% Þ\ ã\ ãL&ñÿ’D’$’$/KºÞT&\H ìßÚ.L(ñÿ’D’$’$UÈÐH ÞP H H \ñÿ’D’$¢$]ÖH ìßÚ.K<(þ"m"eûÈñÿ’D’$’$"ä Þ\H ìßÚ.L(ñÿ’D”$’$\{òÐH ÞP dÐÈÐ bñÿ’D¢$’$¬¹bJH Þe!ÞÐH ÐÈñÿ”D’$’$ï Èe!\ÈìßÚÞ\ ãñÿ’D’D’$z£ÈèÐd  b‚bX+R.XD ñÿ’D’$’$`c* 8 ÞÞ\ã\þ6Æãñÿ’D’$’$ 8+E.TX DC.TS. LC DÞÞ\ñÿ’D’$’$¨žFã+CPTR N ÞÞ\ñÿ’D’$’$ÃÚTã\ãÞ Ð^0T^9.ñÿ’D¢$’$„#b@ÐL.@Èex<ËL.$'ñÿ’D¢$’$õÀp<ÓLêTdc^AT^Zñÿ’D”$’$]~.@ÐL.@Èe•8ËL.$þÜñÿ’D”$’$§Œ'8ÓLêTd€8Ë^ñÿ’D’$’D}yš'<Ë'8Ó\)eþ+**A SSñÿ’D’$’$™a¨MELB YOCEDÞÞ\ ã+S CEñÿ’D’$’$QY¶ITNON TOP ORÞÞ\ ã+EPñÿ’D’$’$ùDÄLR YNEED.D Þ Þ\ ã\ñÿ’D’$’$P~Ò ã+**L SA TEROCDRDEÞÞñÿþTM’D’$’$õAà\ ã+P OCEDC UOTNRE= Þñÿ’D’$’$ð-îÞ\ ãL% Þ\ ã\ ã^ñÿ’D%%Þoü7\ãe\ãdþ]ñÿ’D’$’Dïý \ ãL^;e\ãLñÿ’D’(’$Èì.8Ë(eþÜÞìßL Þñÿ’D¢$’$àÐ& ÐPÞ@Ð È@Èe:Ü Èìß^ ñÿ’D’(þ'—’$¥â4 Èè Ðd)Þ ÐÞ Ð\ã Èñÿ’D’$%§>BPÞ#L^;#!ep]ñÿ’D’$’DLP\ ãL^;en ÈÞ Ðñÿ’D’$”$>^Ü ÈìßL L^:enñÿ”D’$%b(l È Ðd>\ã ÈÞe† ÈÞñÿ’D’$%²{z ÐÜ ÈìßÚ^ exÞ Ðñÿ’D’$’(c‹þ稈 È Ð ÈÞ@Ð È@Èe¦Ü Èìñÿ’D’$’$|–ßÜ ÈìßÚ ÈÞ Ð Èè ÐñÿE’$’$c»¤dŽÜ+PJ C ÂñÿE’D’$⡲eÍ aþÞ Ð+SJ R@ CPTR Nñÿ’D’$¢$ zÀ Þ Þ\ã\ãddÜñÿ’D’$¢$(wÎ+OP P Âe ñÿE’$’$¼×Üaþþ ÈÞ Ð+SD Z4 1 ñÿ’D’$’$œ!ê ÞÞ\ã\ã+DL A ñÿ’D’$”$‹0ø ÞÞ\ã añÿ’D’$’$ ÷Þ\ã+@ 14 ñÿ’D’$’D ÌÞÞ\ã\ãddÜ+UPHSñÿ’D’$¢DéÜ" Âeo aþ Èñÿ’D’$’$Ê0Þ ÐþçH+SI Z4 1 Þñÿ’D’$’$ÿ·>Þ\ã\ã+TS A ñÿ’D’$’(ŽRL ÞÞ\ã aÞ\ñÿ’D’$’$ºZã+@ 14 ÞÞ\ñÿ’D%’$í¸hã\ãddÜ+OLDA ñÿ’D%’D €v ÂeÚ aþ ÈÞ Ðñÿ¢D%’(“Ñ„ aÐ þšaÐ aÐ+SJñÿ’D’$’$X¯’ R@ C.DL Þ Þ\ã\ñÿ’D’$’$^J ãÈ Þ\ã\ãÈ Þ\ñÿ’D’$’$n¸®ã\ã+DL A ñÿ’D’$’$ÏÓ¼ÞÞ\ãÈÞ\ã+@ 74 ñÿ’D’$’$ÆxÊ ÞÞ\ã\ãñÿE’$’$#£ØddÜ+TSRO þ¤� Âñÿ’D’$¢$õÆæÜ ÈÞìßÚ^E"eJ ñÿE’$’$¶ñôaþ ÈÞ Ð+TS A ñÿ’D’$’Dðr ÞÞ\ã aÞ\ãñÿ’D’$’$#ø+4 7 ÞÞ\ñÿ’D’$’$zgã\ã+SJ R@ C.TS ñÿ’D’$’(ÌR, Þ Þ\ã\ã þCÿa Þ\ñÿ’D%’$CL:ã\ã a Þ\ã\ãñÿE’$’( ÚHddÞ Ð È@Ð È@ÈeaÜ Èìñÿ’D’$’(w6VßÚÞ\ ã Èè ÐdN\ãñÿ¢D’$’$µ»d ÈeŸ+R.XD 01 Þñÿ’D’$’$¼frÞ\ã\ã b$bÌÜÞñÿ’D’$’$€¯€ìßL ÜÞìß\þTr ãÜÞñÿ’D’$’Dàߎìß\ ã\ãe¡ÜÞìßñÿ’D’D’$ãõœ^ d¨ÜÞìß\ ã añÿ¢H’(’DB ª d #Èe´ÞÐd¿ È Þ\ñÿ’D”$%¼X¸ã\ã\ãdˆ% a'dˆ%ñÿ’D’$%œêÆÜ\ ã È È^@aºdˆ%ñÿ¢D’D’$ƒáÔ a'dˆ%Ü\ ãÜ\ ãþ1ò ñÿ’D%%ùñâÈÈÞ Èa&dˆ% a'dˆ%ñÿ’D’$’$ÄðÜ\ ãÜ\ ã ÈÈÞ Èñÿ”D”(’(¤Ÿþ^a`dˆ% a'dˆ%Ü\ñÿ’D’$’$¿ ãÜ\ ã ÈÈÞ ÈÞ^ñÿ¢D¢D’DaÎ a`dˆ% a'dˆ%Ü\ ãñÿ’D’$%Î( ]\ ãL^Le; ]þ6*ñÿ’D’D’$¦Á6 \ ãd- Ü\ ã ÈÈÞñÿ’D’$’$ºÀD Þ\ã\ãLÞ\ ãÈñÿ’D’$”$)ÌR Þ\ã\ã]\ ãdˆ%ñÿ¢D’D’$þ/` a'dˆ%Ü\ ã ÈÈ Þ\ñÿ’D’$%‘˜n ã\ã]\ ãdˆ% añÿ¢H’$”$-†| 'dˆ%Ü\ ã ÈÞ ÈaºñÿEþÑ+E’$gአdˆ% a'dˆ%Ü\ ã È Èñÿ’D¢(¢(o˜ Þ^aîdˆ% a'dˆ%Üñÿ’D’$%‹¦ \ ã ÈÞ È^aîdˆ%ñÿ¢D’D’$³w´ a'dˆ%Ü\ ã ÈÞ Èñÿ’D¢(¢(D ^Þaîdˆ% a'dˆ%Üñÿ’D¢$¢DÓhÐ \ ã È Èaºdˆ% a'dñÿ’H’$”$þ5×Þ ˆ%Ü\ ã ÈÞÞ ÈaºñÿEE’$ü¿ì dˆ% a'dˆ%Ü\ ã]\ñÿ’D”$’$íJú  ãL^Le !]\ ãñÿE’$’$‡™!dü Ü\ ã ÈÈ Þ\ã\ñÿ’D’$’$ñ¿!ãLÞ\ ãÈÞ\ã\ñÿ’D”$%95$!ã]\ ãdˆ% a'dˆ%ñÿ’D’$’$×Õ2!þ›k È Þ\ã\ãÞ Þ\ã\ñÿ’D”$%5@!ã]\ ãdˆ% a'dˆ%ñÿ’D’$%ÉËN!]\ ãL^Lea!]ñÿ’D’D’$Hl\!\ ãdS!Ü\ ã È Þ\ãñÿ’D’$’$�¿j!\ãLÞ\ ãÈÞ\ãñÿ’D’$¢DàÞx!\ã]\ ãdˆ% a'dñÿ’H’$¢$VÓ†!ˆ%]þÕö\ ãL^ eš!]ñÿ’D’(’$È­”!\ ãdŒ! ÈÐ ÜÜàÜÞìñÿ’D’$’$^­¢!ßL ÜÞìß\ ãÜÞìñÿ’D’$”$hŸ°!ß\ ãÜÞìß^ a ñÿ’D’$’$Xš¾!Ð ÈÈ^€ Þ\ã\ãñÿ’D%E¿Ì!]\ ãdˆ% a'dˆ%Ü\ñÿ’D’$’$NÚ! ãÜ\þ ã\ã ÈÈÈañÿ¢H¢(’$[§è!ždˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$”$Èö!ã\ã]\ ã\ãeú!ñÿ’D’$”$Ã6"]\ ãÞÐÞÐÈÈe$"ñÿ’D’$’$÷_"]Èìߨ Þ\ã\ãÈñÿ”D”(’(Ñ9 "èÐd "dˆ% a'dˆ%Ü\ñÿ’D%%«Þ." ã ÞÈ Èaþam&dˆ% a'dˆ%ñÿ’D’$%æg<"]\ ãL.ÞeO"]ñÿ’D’D’$�ÑJ"\ ãdA" ÜÞìßL ÜÞñÿ’D’$’$£ÛX"ìß\ ã ÜÞìß\ ã È Þñÿ’D’$’$¼bf"\ã\ã ÜÞìßÚÞ0ñÿE’$’$J™t"e§"+T.TX ÞÞñÿ’D’$’$…�‚"\ãÞ0Þ\þ&Ð ãÞ0Þ\ñÿ’D’$’$K8�" ã'ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D”$’$R ž"Þ\ ã\ãd5# ÜÞìßÚñÿ’D’D’$T%¬" Þ0eâ"+T.TX ñÿ’D’$’$Mº"ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D’$’$ïÈ"Þ\ ã,ÞÞ\ãÞ0Þ\ñÿ’D’$%�ÀÖ" ãÞ0Þ\ ã\ãþ]Çd5# ÜÞñÿ’D¢$’$ä"ìßÚÞ0e#+T.TX ñÿ’D’$’$Û«ò" ÞÞ\ãÞ0Þ\ñÿ’D’$’$±7# ãÞ0Þ\ ã<ÞÞ\ãÞ0ñÿ’D’$’$ d#Þ\ ãÞ0Þ\ ã\ãdñÿ’H’$’$“�#5#+T.TX ÞÞ\ñÿ’D’$’$Û˜*#ã ÜÞÞ\ã\ã]þHG\ñÿ”D%’$=â8# ãdˆ% a'dˆ% ÞÞ Èañÿ¢H¢(’$w¦F#&dˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$’$©ÆT#ã^.Þ\ ã\ã]!\ñÿ’D’$’$¡öb# ã\ã^0Þ\ ãM!Þ\ñÿ’D%’$“ap# ã\ãdˆ% È Þ\ã\ñÿ’D%’$r4~#ã\ã a"dˆ% È Þ\ãþÑñÿ’D’$’$r³Œ#\ãÜ\ ã\ãÈ Þ\ñÿ’D’(%虚#ã\ãdˆ%ðñrÞg¦#d­ñÿE¢(ET�¨#dÁdÁdÁdÁdÁdÁdÁñÿE¢(Eõ޶#dÁdÁdÆdÔdÔdÔdÔñÿE¢(E—ŽÄ#dÔdÔdÔdÔdÔdÙdëñÿE¢(EŽÒ#dëdëdëdëdëdëdëñÿþÛPE¢(Et�à#dëdðd d d d d ñÿE¢(EþŒî#d d d d d d d ñÿE¢(EnŒü#d d d d d d d ñÿE¢(EÕŠ $d$ d` d` d` d` d` d` ñÿE¢(E8Š$d` d` d` de dz dz dz ñÿE¢(E‰&$dz dz dz dz dz dz d ñÿE¢(þþŸE;‰4$dŒ dŒ dŒ dŒ dŒ dŒ dŒ ñÿE¢(E؈B$dŒ dŒ d‘ d  d  d  d  ñÿE¢(EzˆP$d  d  d  d  d  d¥ d´ ñÿE¢(Eù‡^$d´ d´ d´ d´ d´ d´ d´ ñÿE¢(Ex‡l$d´ d¹ dÊ dÊ dÊ dÊ dÊ ñÿE¢(E‡z$dÊ dÊ dÊ dÊ dÏ dÚ dÚ ñÿE¢(Eņþ¿[ˆ$dÚ dÚ dÚ dÚ dÚ dÚ dÚ ñÿE¢(E:†–$dß dî dî dî dî dî dî ñÿE¢(E[…¤$dî dî dî dó d-!d-!d-!ñÿE¢(EQ„²$d-!d-!d-!d-!d-!d-!d2!ñÿE¢(E„ƒÀ$dI!dI!dI!dI!dI!dI!dI!ñÿE¢(E�‚Î$dI!dI!dN!d‚!d‚!d‚!d‚!ñÿE¢(Eƒ�Ü$dþ«X‚!d‚!d‚!d‚!d‚!d‡!dÓ!ñÿE¢(E”ê$dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!ñÿE¢(E ø$dÓ!dØ!dë!dë!dë!dë!dë!ñÿE¢(EU~%dë!dë!dë!dë!dð!d&"d&"ñÿE¢(E%}%d&"d&"d&"d&"d&"d&"d&"ñÿE¢(E¬|"%d+"d7"d7"d7"d7"d7"d7"ñÿE¢(E~y0%d7"dþ™•7"d7"d<"d<#d<#d<#ñÿE¢(E\u>%d<#d<#d<#d<#d<#d<#dA#ñÿE¢(EøtL%dI#dI#dI#dI#dI#dI#dI#ñÿE’(’$›®Z%dI#dI#dN#AAAAñÿ’D’$%ø>h%AAAAAdw#Añÿ’D’$’$á…v%AAAAAAAñÿ”D’$’$fb„%Ad‡# þ™„b^bj+UOPTTU ñÿ’D’$’$V’% ÞÜã+RP R ñÿ’D’$’$Ö % Þ Üã+NIUP T ñÿ’D’$’$ÿË®% ÞÜãÜãÜãÜã+ ;ñÿ’D’$’$9ç¼%====P M4CAB GEÞÞ Üã+NIñÿ’D’$’$O™Ê% SON W ÞÞ Üã Üãñÿ’D’$’$Ø•Ø%ÞT+^0.Tþ �(ÞT%ÞT*ñÿ’D’$’(¤:æ%^P-L*H-e &ÝL*ñÿ’D’$’$Ñô%ìßP.L.+ ñÿ’D’$¢Dz1& àL*èT*dê% aj]ñÿ’D’$’$°Ÿ&Ü ã]Ü ã]ÞìßÜ ãñÿ’D’$’$̹&]ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$¸,&L^.]+ITþ¸t T ñÿ’D%’$ö|:& Ã"er&+********** ñÿ’D’$’$8ÂH& Þ Þ Üã+N OITLT EOFñÿ’D’$’$pV&NU DÞÞ Üã+********** ñÿ’D’$’$7²d& Þ Þ Üã Üã Üã^7ñÿ’D’$’$^Er&LÞÜ ã]ÞÞÜã]Üñÿ’D’$’Dìð€& ãLÞÜ ãÜãe}&ÜþCGã]ñÿ’D’$¢$¶ Ž&Ü ã]Ü ãL^Ie &Þñÿ”D’$’(̦œ&T,dÑ&L^Le¬&ÞT,ñÿE’$’$.Iª&dÑ&L^PL^?#eñÿ’H’(’$™_¸&¾&ÞT,dÑ&]Ü ãL^.ñÿ¢D¢$’$HJÆ&eÎ&ÞT,dÑ&ÞT,L,,ñÿE’$’$ ÌÔ&d<)])Ü ãL%L)L)þ5ÀÞñÿ”D’$’$ð¤â&"e''L'ÞT'^IÞ Üñÿ’D’$’$šºð& ãL)Þ Üã^ Þ Ü ã+ ;??ñÿ’D’$’$“Ñþ& ?CPDO E Þ Þ Üã+C UOñÿ’D’$’$ÑÁ 'TNO TUO FTSÞÞ Üã+PE? ñÿ’D’$’$1å'?? ÞÞ Üã ÜãLñÿ’D”$’$9T(')T%]Ü ãdL)LÞÜ ãþ¸)ñÿ’D’$’$rÑ6']*Ü ãL*ÞÜã]Ü ãLñÿ’D¢$”$SD'ÞÜ ãÜãe?'ÜãÜãdL)ñÿ’D’$’$š¸R']ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$#`']ÞìßÜ ã]+IF L ñÿ’D¢$¢(2 n' Âe{' a„d)]ñÿ’D’$’$s³|'+WS 1 Â]ñÿ’DþÈ+’$’$|“Š'+WS 2 Â#]ñÿ’D’$’$n’˜'+WS 3 Â#]ñÿ’D’$”$Oe¦'+WS 4 Â#e&(ñÿ’D’$’$Di´']Ü ãL^0L^1ñÿ¢D’$’$‰ˆÂ'#e´']ÞìßL L^ñÿ”D’$’Dx„Ð'1eÚ'ÞT)dÝ'ÞT)Þñÿ’D’$%þä/Þ'T*ÞP-L*H-e (]ñÿ’D’$’$ʆì'Ü ã]L*ìßL L)Þñÿ’D’$’$Ëeú'L.L(T)L*èTñÿ¢D’$’$îô(*dã']ÞìßÚ.L(Tñÿ’D’$’$~Q(*]L*ìßL)]Ü ãñÿE’$’$OÇ$(d)]+XT T ñÿ’D¢$’$*Ø2(þéÀÂÌ^M"eÆ(^.ÞÜ ã]ñÿ’D’$’$’½@(ÞÞÜã]Ü ãLÞÜ ãñÿ’D%’$Å6N(L^ eE(ÞT*ÞP-Lñÿ’D’(’$£ã\(*H-e·(]Ü ãLÞ0ñÿ¢D’$’$ß…j(e}(Þ0ÞÜ ã"ÞÞÜãÞ0ñÿ’D’D%¹x(ÞÜ ãd°(LÞ0e”(Þ0ñÿ’D’$”$Žù†(ÞÜþÁö ã<ÞÞÜãÞ0ÞÜ ãd°(ñÿ’D%’$õó”(LÞ0e«(Þ0ÞÜ ã>ÞÞñÿ’D”$’$™e¢(ÜãÞ0ÞÜ ãd°(LÞÜ ãñÿ’D%’$5°(L*èT*d[(]Ü ãÜãLñÿ’D¢$’$™¾(ÞÜ ãÜãd)]+NE T ñÿ’D”$’$ñ/Ì( Âeâ(^.ÞÜ ãñÿ’D¢$’$ ªÚ(]ÞÞþ\úÜãdý(]+NE D ñÿ’D’$’DÆÑè( Â!eý(^.ÞÜñÿ’D’$%rºö( ã]ÞÞÜãÜã!e)]ñÿ’D’$’(Ô)Ü ãLÞÜ ãÜãe)]Üñÿ’D¢D’$ Ù) ãÜãdL) azL%ÞT%ñÿE’$’$ú )dL)LÞÜ ã]Ü ãLÞñÿ’D’(”$OÌ.)Ü ãÜãe')þLÜã]Ü ãdL)ñÿ’D¢(E3m<)ñ ÞgB)dÖ&d1'dR'd)ñÿE’(”$rýJ)d")ÜãeX)Üã]Ü ãdL)ñÿ”D’$’D8X)Ü)e�&L'Þe…)+-;-- -ñÿ’D’$’$²…f)ON .FOW RAÞÞ Üã+INGN Sñÿ’D’$’$Ã"t) = Þ Þ ÜãL'Þ Üñÿ’D”$’$#Ü‚)ã ÜãL&Þeþª®)+*;** *ONñÿ’D’$’$aÀ�) .FOF TAÞÞ Üã+LAE RRROñÿ’D’$’$²,ž) S= Þ Þ ÜãL&Þ Üãñÿ’D’$’$>e¬) Üã+E.DN ÞÞñÿ’D’$’DU¬º)ÜãÜãL&ÞeÇ)^7Üñÿ’D’$’$0È)ãÜãÜãÜã ÜãÜã aýÿ€H">Ö)‰%*ÿÿ@'–Ø)þ ü ÿÿ û_€ÿR2SBOOLEAN.RBûY!6þŠzýÿ3•¯4?÷ÿI¸^‘¥ŒP¤FY¦–ñÿ’D’$’$Œ\!,ª­«!L !4!!,…€Ï@‚!D õÿ’D’$ sC!4!!,…ÐÏ€Ì@‚!D ÿÿ û_€ÿP4PASCAL.RBûYN7þÒbýÿ3U¤tBÓÿ$I$I$IJÏØ‰À() ׉ -yû‰kû‰RÚ‰(ÑÙ‰-—׉Ö‰òÕ‰œ!ŠÔKŠx%Š(þ‰þù‰´ Šýÿ@Ê¡¤àGz úÿØË¾û‰-ÿ؉c(ÿñÿ’D”$’$Øbbd¤ÌÞe}+* ** * ñÿ’D’$’$‹š ÞÞ\ ãÞ ÐÞ Ðñÿ’D”$’$þ~ï:ëÞÐ¤Ì ÐÈ Èex¥ÝÈìß Ðñÿ’D’$’(®.* ÈØ Ð ÈØÐ È Èe=^,Þñÿ’D’D’DQÚ8\ ãdU È ÈeM^ Þ\ñÿ’D%’$ F ã Èè Ðd=^^Þ\ ã Èñÿ’D’(’D©FT ÐÈ Þe^ÞÐdiÈdÞeñÿ’H’D’$Þ-bgÞÐdiÞÐÈÈ\ ã ÈÈñÿ’D¢$’$Æ pþÀ«è ÐÈèÐd \ ãÞ¤Ô$Ìñÿ’D%’$)µ~\)!"e±!Ìè!Ô!ÌÞ\ ñÿ’D’$’$¾JŒã+ ÞÞ\ñÿ’D’D%TDš ã&Ìe¦ ÌÞ\ ãd«ÌÞñÿ’D’$’$Uv¨\ ã^ Þ\ ãÞÔ bñÿ’D’$’$·4¶b”È<ÞйÝÈìßÈ<Þ$ñÿ’D’$”$K,ĹÝÈþ~LìßÛ' ÞáÔ¤Ì Þeíñÿ’D’$’$£Ò¥Ý ÞìßèÿÞ Þ¤Ô¹ÝÞìß¹Ýñÿ’D’$¢$»+àÞìßÛ^' d÷¤Ìñÿ’D’$’$Fîè¤Ô¥Ý¤ÌìßèȥݤÌìßÌñÿ’D’$’$xÒü bb<+4PREORSR ñÿ’D’$”$¥[  ÞÜãÞ Ð Þ Ð È Èe%ñÿ’D’$¢$Ò¹Ý Èìßþ?“ÛÓÜã Èè ÐdÜñÿ’D”$%wû&ã b bVÌe8$Ìe5\ ñÿ”D’$’D�á4ã a\)!eS\ãÔñÿ’D%’$�„BÝ\ ã$ÌeNÌÞ\ ãÌèñÿ¢D’$’$øóPÔdw+ * **E FO Þñÿ’D’$’$ ^ Þ\ ã+NEOCNUETER D ñÿ’D’$’$‰™l Þ Þ\ ã\þõP ãÞP b ñÿ’D’D’(@zbŽ a(Ì^*eÍÌ^Tñÿ¢D’(¢$Ë8ˆe• a(Ì^+"ÔdÊÌñÿ’D¢D’$vØ–^Le¬ a(Ì^+$Ô$Ìñÿ¢D¢$”$2m¤!eª\ ãdÊÌ^De¼ñÿ¢D’$’DAâ² a(Ì^+'ÔdÊÌ^CñÿE’D¢$�ÀeÊ a(Ì^+þp&#Ô a(Ìñÿ’D’D’$”9Î^,e| b8b Ì^ ñÿ’D¢D’DÜÌ!"eæ a(dØÌÐÈeñÿ”H¢$’$/�êî a(È!eØ]Ì.ߨñÿ”D’$¢$—ëøÞe /ÞÔÞÔ ^�a´ ñÿE¢$’$²€a(d›Ì.dÞÐÈÞeñÿ’H’$¢$¥ØÈèÐÝÈìßÌ þÝå a(]ñÿ’D’$¢$çØ"Ì.ߨ^0(eÈñÿ”D¢$’$%D0Ìe8ÈÔdGÝÌìß^ ñÿ’D”$’$¢ê> ÌìÔÌÈe8]ÛÈìßñÿ’D’$’$âÃLØÐ]ÛÈèìߨìÐÈÈñÿE’$’(-åZez]GÈìßÝÂeu]äÈñÿ’D’$¢$ß+hìߨÔ]IÈìߨÔdþº¬~Èñÿ”D’$’DˆvèÐdWÞÔÞÔd›ÞÔÞÐñÿ’D”$’$N.„ÈèÐÈL¬e“ÜÈìßÌñÿ”D’$”$ a(]Ì.ߨÞe„ñÿ’D’$’(ž° Ì^.Ì^E#e¶ÈÐÌñÿ’D’D”$(S®^.eüÈèÐÈL¬eÂñÿ’D”$’$(ý¼ÜÈìßÌ a(Ì^.eþ$Þñÿ’H’(’$Ä ÊÐ^:Ôd¶]Ì.ߨÞñÿE¢(’$Õ¶Øeà ÉÞa´düÈèÐÈL¬ñÿ¢D’$%–ïæeïÜÈìßÌ a(]ñÿ’D¢$”$×›ôÌ.ߨÞeàÌ^Ee]ñÿ’D”$’$V-ÈèÐÈL¬eÜÈìßÌñÿ”D’$’$ã¾ a(Ì^+Ì^-#eñÿþ]N’H’$’D Ò1ÈèÐÈL¬e.ÜÈìßñÿ’D’D’$Àµ,Ì a(]Ì.ߨÞeñÿ’HE’$Àô:A ÉÞa´d]ÈèÐÈL¬ñÿE’$’(È$HePÜÈìßÌ a(]Ìñÿ’D%’$âJV.ߨÞeAÜÞãÞÔÈÞñÿ’D’$%RÃdÈÐÞÐÞÐÈÈe}Èèñÿ’D’$þ^¤’(°OrÈìß^ ÈèÐdkÈL¬ñÿ¢D’$¢$ €eŸÞÐÈèÐÈÈe�Èñÿ’D’$’$�¼ŽèÈìßÜÈìßÚ ÈèÐdñÿ¢H%’$9ºœˆd² ËÞa´Èè^0 Èèñÿ’D’$%éwª^. Èè^0 ÈÔdóÈLñÿ”D¢$%þ⸬eÄ ËÞa´ÞÔdóÞÔñÿ’D”$’$’¡þ„cÆÞÐÈÐÈÈeñÌL­eñÿ’H’$’$ÔæÌ Þ]lÜÈìßÚ.ߨñÿ”D¢$’$¿AâÔdì ËÞa´ÞÔÈèÐdñÿ’H’D”$x¦ðÊÞÔd›ÞÔÞÔÞÔ a(ñÿ’D¢$’$¥ƒþÌèÔÌÞe ÜÌìßÌ ñÿ’D¢$’(> ÌÌ^'#eûÌe ÊÞañÿ¢H’(%‚´þ^^d  a(Ì^'eûÌìñÿ’D’(%•¥(ÔÌÞe4ÜÚ.ÔdgÜÞñÿ’D”$”$M÷6ãÈÞÌÞeF ^�a´ñÿ’D’$’$.ÅDÞÔÈÐÈèÌÞÐÌÐÈÈñÿ¢D’$’$OhReeÈèÈìßÜÈìßÚ ñÿ’D”D”$‚?`ÈèÐdPÈÔd›ÞÔ a(ñÿ’D’(¢(i,nÌ^=þÓÂe{ÞÔ a(d}Þñÿ¢D¢$”$L|Ôd›ÞÔ a(Ì^.e‘ñÿ’DE”(‹6ŠÞÔ a(d“ÞÔd› a(ñÿ’D¢$¢$~d˜ÞÔÌ^=e§ ÞÔ a(dñÿ’H%%+¦¶Ì^>e´ ÞÔ a(d¶ñÿ”D%’$ c´ÞÔd› a(ÞÔÌ^=eñÿ’H¢(%qNÂÊ ÞÔ aþÂ¥(dÌ ÞÔd› añÿ’H%’D�ÉÐ(Ì^*eü a(Ì^$ñÿE’D”(iAÞeã axÌ^*eî a(ñÿE’D”(¶Dìdã a(Ì^)eã a(ñÿE¢$’$÷(údØÞÔÞÔd›] Ì.ߨñÿ’D’$¢(œúÔ]nÌ.ߨÔ a(d›/Þñÿ¢D%’$�¡Ôd›>ñgþßdAAAñÿ¢D”$¢(Jà$dAAdõdÎddñÿ¢HE¢(zh2dddddd€dñÿ¢HE¢(õv@€d€d€d€d€d€d€dñÿ¢HE¢(­ŽN€d€didd•dd¸Añÿ’DE¢(#¥\Addddddñÿ¢HE¢(éyjddddþmßdddñÿ¢HE¢(Ûyxdddddddñÿ¢HE¢(Íy†dddddddñÿ’HE’$Eº”Add bbÌÜÈñÿ’D’$’(ä¼¢à;Ý9Ì ßØ Ð ÈÞe´;Ý9Ì ßñÿ”D’$’(Wz°Èdé È Ð ÈÜÂeÆ eÞañÿ’H¢$¢$ÌA¾´ ÈØ ÐÞ Ðd× ÈÜÇþÞHeÒ Èñÿ’D’(’$[âÌØ ÐÞ Ðd× ÈØ ÐÞ Ð ÈÞñÿE’D’(:HÚe´ Èeå È èÈdé ÈèÈñÿ’D’$’$òfèÈ èÞÈèÞ bbLñÿ’D’DEtqöÈÞeÈÝÂeddñÿ’D’D’Dî¦ÈÝÇeÈØÐdÈØÐdñÿ’H’$’$€ÝöÈÈ bbì9Ì:ÔÞ Ðþt¬:Ìñÿ”D’$”$×ï  Èe];Ý:Ì ßØ Ð ÈÞeXñÿ’D’D¢(½¨. ÈÝÂeI ÈØË(e=d“dñÿ”H¢$¢$±;<G%ÌeD gÞa´ ÈØ ÐdV Èñÿ”D”$”$á§JÝÇeS ÈØ ÐdV ÈØ Ðd)ñÿ’D¢D%ÿ'X:Ìì:Ôd%Ìe“ hÞa´ÞËñÿ¢D%%å÷f(em5Ì Ðd“ÞË(ev3Ì ÐþË$ñÿE%’(ñçtd“ÞË(e2Ì Ðd“ÞË(ñÿE’(’($´‚eˆ4Ì Ðd“ÞË(e‘1Ì Ðdñÿ’H’$’$­�“0Ì Ð È È bb¾ÈÞñÿ’D¢$’$ª�žÈÞÈÞeÐÈ Ð ÈØÞñÿE’$%Ŭe¸È ÈØÈ ÈØdÐÈ+Ìñÿ¢D’$’(˜´ºeÅÈÞÈ?ÞdÐ ÈØÞñÿ¢DþÙ.’$’$ŸÈeÐÈ ÈØ Ø bbØÞñÿ’D’(%!JÖÐÈÞeQÈÐÈØd;È-Ìñÿ¢D%%43äeëÞÐdÈ*ÌeôÞÐñÿE¢$%ôeòdÈØÞeþÞÐdÈ+Ìñÿ¢D%%Þ2eÞÐdÈ,ÌeÞÐñÿE’(”(4�dÞÐdQ ÈØaÑÐdQñÿ”D¢$%þN¨JÞÐdQÞÐdQÞÐdQ Èñÿ¢D’(’D¬å*ØaÑÐdQÞÐdQ ^õañÿ¢H%¢(‚ì8´dQñ�g?dâdddñÿ¢HE’(e´F d(d0d$d4d4 bñÿ’D’(’$§DTbP ÈaÑ ÐÈØìÐÈÈ Èñÿ’D’$’$¢¯b ÈÈ È bb(Lñÿ’D’$’$epþ•X®èT®ÈL® b$b˜Ìñÿ”D%’(%~Þe‰ aÔÞÐd‹ÞÐÌñÿ”D%’$®�ŒÞe“#ÌeÁ+. ITLT ñÿ’D’$’$!Wš ÞÞ\ãÝÞÞ\ãñÿ’D%’$ ¨\ãÈ!eÁ+. NE TCPDO Eñÿ’D’$”$K�¶ Þ Þ\ã\ã aÔñÿ’D’$”$ .ÄÞ ÐþL’Þ ÐÌ^„(!eÖñÿ”D”$%ÐëÒ Þa´ÌÞek aÔÌÞñÿ¢D’$’$óàeV Ü Þã ÈÐÈÝàÈ]®ñÿ’D’$’$r$îÞìßÂÈ]®ÞìßÂ#È]ñÿ’D’$’$Š#ü®!ÞìßÂ#È]®"ÞìßÂ#ñÿE’$’$ÝÒ e=ÜÞãÈÐÈÈàÈ è(Ìñÿ’D’$’$³÷ÈèÞþ™£ÈèÞÈèÞÈèñÿ’D’$’$Úˆ& ÞÞ ÈÞÈèÞ Èèñÿ’D’D’$êr4 Ð ÈaœÈ èÈÈè6Ì Èñÿ”D’$”$UFB6Ô aÔÌ^H(!eTñÿ”D’(’D 0P Þa´dZ Þa´Ì Þeñÿ’H’(¢Dé˜^ÛÌ Þeh Þa´ aÔÌñÿ”D¢$¢D3öl Þev Þþa´dy aÔÞñÿ’D’(’$Ôz Ð ÈÞe� È Ð ÈÐÈØ ÐÈñÿ’D%”(ôeˆè È È Ðd{ È6Ôd¨#Ìe¨ñÿ’D’$’$·*–+. ITLTE TXES G Þ Þ\ñÿ’D%’$Ѹ¤ã\ã#Ìeá+. XTMT1 ñÿ’D’$’$ºQ² ÞÞ\ã\ã+. DRñÿ’D’$’$“À X01 Þþx¯Þ\ã\ñÿ’D’$’$ ïÎã+. RNLE ÞÞ\ñÿ’D’$œ$ ¢Üã\ã ËÞÞÈ!Èañÿ’D”D’$bÚêÌÞeó Þa´ÌÞ\ñÿ”D%’$Ì?ø)#eá#Ìe +. NE D ñÿ’D’$’$ͯ ÞÞ\ã\ã\ ãñÿ’D”$’$>Ù \ ãáÌ!È"e ^þæÌ>¤ÌÞñÿ¢D’(’$õå" e(  aÔ b^ b.+NIUPñÿ’D’$’$Q³0 T ÞÜã+UOPTTUñÿ’D’$’$§> Þ Üã+RP R ñÿ’D’$â$þ>L ÞÜãÞã aÞñÿ”D’$’$+�Z ã aÔ ÷ÏëÏ'^@%ñÿE¢D’$&;h ayáÌes aþ^?Üþ0+êã Ü÷ÿ’D%ˆ=v ãÜã a) *ÿÿ û_€ÿR2SDECODER.RBûY!5þš‚ýÿs•¯ôGýÿ@€Ðp§Húÿب¸{{C<ÿ{{#<ÿþÿ(Þ× ñÿ’Dœ$œ$Þ?ÿ$ý9ÀŸü)�K†K‚²­ûÿG©p4) ÿÿ û_€üÿPASCAL2.KSûäâþyyPASCAL2.KS -- LANCASTER NOVA PASCAL RELEASE 2.1 -- KEY SHEET THE DISTRIBUTION TAPE IS 9-TRACK, 800 BPI IN RDOS DUMP FORMAT. FORMAT: MT0:0 PASCAL RELEASE 2 PROGRAMS MT0:1 DUPLICATE OF MT0:0 MT0:2 PASCAL SOURCES (IF ORDERED) MT0:3 DUPLICATE OF þ§lMT0:2 THIS IS AN EXAMPLE OF CLI COMMANDS FOR LOADING AND RUNNING THE LANCASTER PASCAL COMPILER OUT OF SUB-DIRECTORY 'PASCAL'. WARNING! OMIT THE COMMAND '@MAKESPACE.CM@' TO RETAIN ALL FILES. INIT ALGOL CDIR PASCAL DIR PASCAL LINK (ASM,MAC,XREF,LFE,EDIT,þ^zRLDR).SV/2 LINK MAC.PS/2 LINK RLDR.OL/2 LINK MATH.LB/2 LINK RFPI.RB/2 LINK SYS.LB/2 LINK LIBRARY.CM ALGOL:LIBRARY.CM LINK ALGOL0.LB ALGOL:ALGOL0.LB LINK ALGOL1.LB ALGOL:ALGOL1.LB LINK ALGOL2.LB ALGOL:ALGOL2.LB LINK ALGOL3.LB ALGOL:ALGOL3.LB LINK SMPYD.LB AþTdLGOL:SMPYD.LB LINK NMPYD.LB ALGOL:NMPYD.LB INIT MT0 LOAD MT0:0 RELEASE MT0 @MAKENEWPASCAL.CM@ @MAKESPACE.CM@ PASCAL /Z DEMO.PS $LPT/L DEMO $TTO PASCAL2.KS -- LANCASTER NOVA PASCAL RELEASE 2.1 -- KEY SHEET PREREQUISITES: The following Data General CþÅCorporation RDOS utilities are needed in order to create the NOVA PASCAL system: MATH.LB RFPI.RB RLDR.SV and RLDR.OL ASM.SV MAC.SV and MAC.PS and XREF.SV LIBRARY.CM ALGOL1.LB ALGOL2.LB ALGOL3.LB SMPYD.LB or NMPYD.LB or HMPYD.LB or EMPYD.LB Loadþ­'ing If the system was supplied on disc, then you should be able to use that disc to compile and run NOVA PASCAL programs without any changes. Loading from Disc If you need to move the NOVA PASCAL system to another disc using a different revisiþ¾kon of RDOS the following procedures should be used: 1. Move the NOVA PASCAL system binaries by a command of the form: MOVE/A/V directory @P4BINARIES.CM@ 2. If you require hardware multiply/divide: DELETE/V R2SMPYD.RB LFE X library title RENþØ"AME title.RB R2SMPYD.LB where library is one of NMPYD.LB HMPYD.LB EMPYD.LB and title is one of NMPYD HMPYD EMPYD as appropriate for the multiple/divide unit 3. Create a new systemþqO PASCAL system by the command: @MAKENEWPASCAL.CM@ (over) Loading from Cassette If the system was supplied on cassettes then: 1. Load all cassettes supplied using commands of the form: LOAD/A/V CTn:1 where n is the cassette driveþÜ number. 2. If the PASCAL system is to have provision for a hardware multiply/divide unit, then issue the following command sequence: DELETE/V R2SMPYD.RB LFE X library title RENAME title.RB R2SMPYD.RB where library is one of NMPYD.LB þLÏ HMPYD.LB EMPYD.LB and title is one of NMPYD HMPYD EMPYD as appropriate for the multiple/divide unit. 3. Create the new NOVA PASCAL system using the command: @MAKENEWPASCAL.CM@ In either case the total time takþ%fen to reload the system is about 20 minutes. During the initial creation of the NOVA PASCAL system the following messages will be produced: FILE DOES NOT EXIST: P4LIB.LB $BIND.RB DELETED: $BIND.RB FILE DOES NOT EXIST: P4LIB.LB $BIND.RB þXèDELETED: $BIND.RB FILE DOES NOT EXIST: PASCOVMAP.LD FILE DOES NOT EXIST: P4ASM.LD FILE DOES NOT EXIST: P4MAC.LD FILE DOES NOT EXIST: P4ERRSUM.LD FILE DOES NOT EXIST: PASCAL.LD FILE DOES NOT EXIST: PCODE.LD When the NOVA PASCAL systþÁem has been created to the required specifications, the following command may be issued to remove files which are no longer required: @MAKESPACE.CM@ Having issued this command, however, it is then not possible to reMAKE the system without reloading. þòþ Ref: CSD AF024 ÿR2SDBIN.RBûYU.þ&ÞýÿÓ•¯”GúÿH¤|é`z|ébúÿØ ÌêCCÿnëCCÿñÿœD’8œ$¾õ4Y2Q9! … -Y+Q…2A*A*A ñÿ’Dâ$’$õ•))�')�! #)#1ÄŒ¥ñÿ’D’$’$ Þ) Iö)Rªª¡© ªñÿ’D’$’$r*�ª1P²PÒÎPªŽ+úÿ’D Qš8-09Sþÿÿ û_€ÿDEMO.PSû­ ÷ 'þ5þ[PROGRAM DEMO(OUTPUT); BEGIN WRITELN('HELLO'); END. ÿPASCAL.RBûYY þ%Üýÿ³ãêbÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßþ&Ûÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßÿÿþ¨® ÿßÿÿ ÿßÿÿ ÿßÿÿ ÿßñÿA¼FÃNÿþFã�ÿ €ƒ  *€ƒ€ƒ ‚ ñÿ’DäÄ’(ZœL€ƒ€ƒ €ƒ  €ƒñÿäHâ(ä$: þ´KZf@    ÿ€ƒ TñÿE9¬8à}h €ƒ ]  ” ñÿ’D'9¦£v€ƒ€r €ƒ  b ñÿ"GE’DÃô„‚ gÿ  ‚ Àƒ€ñÿG’Ä'À ’r ð €a€ƒ €ƒñÿbG¢$’$ƒ“    ÿ€a# ‰#­�­«ñÿ”D¢$’$û×® ªþð¶�#‰Cʼn#ŽCŽ'­�P­ñÿ”D%Â$êµ¼ ªÃŽC¸�#ŽG…’C’#8¥+ñÿ’XG%þ�Ê8f�  ØP…8’+Ž’KÇáñÿG’$â$MbØë8�#’3–…Bº�#ƒ“C €ñÿœDœ$bÅãæ € €ƒ €ƒ + ñÿ’D’8œÄ6„ô€1€ƒ €ƒ €ƒ  ñÿ’H%œ$Ñ<*€þ>Ⴠƒ ‚ €ƒ€ƒ ñÿäD’("GÁ÷€ƒ † €ƒ&@  nñÿÂH¨Äâ8íã 8ƒ#8‰C*8–#8‰C ñÿKb''Ÿ§,� €A €ƒ  €ñÿ,E¤$¢È�×:1ÿ %  €1ÿ %  ÿ ñÿâH’(%íH& ‚ ÿÿ €ƒ€1ƒ@  ñÿ’D¢È”$´V€ƒ€ þáêKÿ €ƒ€€1|ñÿG"'’$½‰d@  €ƒ€ å €1€ƒ€’#ñÿ’D+œ$3r�ƒ ‚z € €ƒ € ñÿœDœ$’D‚²€ €ƒ  €ƒ € R €ƒ €ñÿEœ$œ$;Žƒ€) ‚ #€ƒ€ €ƒ€ƒ€ ñÿâDâ$'Äœ €ƒ €ƒ € €ƒ  €ƒñÿäD’$G¤ª € R €ƒþGY €ƒ€+ ‚ €ƒñÿâDâ$’8œ1¸ € €ƒ €ƒ€ €ƒ €ƒñÿG’89Æ›Æ € €ƒ  €ƒ € R €ñÿ”D’8’8Ôƒ €ƒ€- ‚ €ƒ€ €ƒ€ñÿG’ÄœÄgx⃀ €ƒ €ƒ € €ƒ  ñÿ’D’È%"ð€ƒ € R €ƒ €ƒ€/ ‚ ñÿ’D’ÄâÄ�†þ€ƒ € €ƒ €ƒ€þEÈ €ƒ €ñÿœDâ$ä$^D ƒ € €ƒ  €ƒ € Rñÿ’Dâ(â$ C €ƒ €ƒ€1 ‚ €ƒ€ €ñÿœD''>A(ƒ€ƒ€ €ƒ €ƒ € €ƒñÿG"'”$¥Á6  €ƒ € R €ƒ €ƒ€3 ñÿG''Ÿ>D‚ €ƒ € €ƒ €ƒ€ €ƒñÿ¢X’$âPŽ{R € "�ƒ ‚d8þ—¹ƒ# ñÿìXÅB%n `8ŽC8X € " ‚t8ƒ#ñÿâXÛ”$`Dn 8•C8X €5 " ‚„ñÿâPlÇ’(|8ƒ# 8’C8X € " ‚ñÿBEÇ¢ØK㊔8ƒ# 8“C8X €6 "ñÿ”D‡b;Fg˜ ‚¤8ƒ# 8�C8X €ñÿ’H*ì8‹!¦% " ‚´8ƒ# 8”C8þ14XñÿY’$GZM´ [ÿ €ƒ€1Š@  €5 ñÿ’DâPÇÂ" ‚é8ƒ# 8’C €ƒñÿ"G”$’8_°Ð  * €ƒ€ƒ ‚ €ƒñÿG'+~%Þ € €ƒ €ƒ€ €ƒz € ñÿ’DâPÇ«~ì" ‚8ƒ# 8“C €ƒñÿ"G”$’8ó®ú  R €ƒ€ƒ- ‚ €ƒþ£9ñÿG'+=% € €ƒ €ƒ€ €ƒz €6 ñÿ’DâPÇ[~" ‚=8ƒ# 8�C €ƒñÿ"G”$’8°$  * €ƒ€ƒ ‚ €ƒñÿG'+%2 € €ƒ €ƒ€ €ƒz €7 ñÿ’D’X’ÈË@" ‚a €ƒ  R €ƒñÿ¢D’Ä’ÄïN€ƒ) ‚ #€ƒ € €ƒ €ƒ€ñÿ’Xþö³¢X¬$:\ €ƒz € " ‚… ñÿœD’Dâ(Ÿ!j €ƒ  R €ƒ€ƒ3 ‚ €ñÿœDœ$¬$Ú¹xƒ € €ƒ €ƒ€ €ƒz ñÿEB%Çì�†€% " ‚¯8ƒ# 8”C ñÿœD’Dâ(·"” €ƒ  * €ƒ€ƒ ‚ &€ñÿœDœ$¬$°¹¢ƒ € €ƒ €ƒ€ €ƒz ñÿEB%ÇþÇq°€ " ‚z8ƒ# 8�C8ñÿGä$’$k¾ƒ+8•K €ƒ  R €ƒ€ƒñÿâHâ$â$ô4Ì3 ‚ €ƒ € €ƒ €ƒ€ €ñÿG"'’$å¥Úƒ €ƒ € ò€1 €ƒ€‘#ñÿ”D’Ä’Ä•è ‚ø €ƒ € €ƒ€€ƒñÿbE"'”$1·ön €ƒ  R €ƒ€ƒ8 ñÿG''Ü<þ�l‚ €ƒ € €ƒ €ƒ€ €ƒñÿ’X9’$³ €ƒ € ò€1 €ƒ€‘# ‚ñÿ¬Dœ$’$À / €ƒ € €ƒ€€ƒñÿ"K’$’$ÏŸ.n ò €1€ƒ’#�ƒ ‚ñÿK9¢$¥<Y €ƒ  * €ƒ€ƒ ‚ñÿYœ8’DÊlJ e €ƒ €ƒ  ‚€ƒñÿK9¢$ð¤Xn þíd €ƒ  * €ƒ€ƒ ‚ñÿ’Xœ8œ$«�f €ƒ€ƒ €ƒ €a € ñÿ’H¬$EÚ•t– €a€€ƒ´ e: ‚ ñÿ"GGEÇÛ‚€ e= ‚ € ÿ  ñÿG”ÄbÇß�8–#8X ‚› € ñÿK’È"G¹áž  å€1? ‚ åñÿ¢D’$+rǬ€1B ‚þÓŠ#‹+§ ‚ €rñÿäD’(’Äöº€ uD ‚€r€ €ƒ€ñÿ’X9â$ašÈ €r€ Àƒ€€r€ €ñÿœDœDœ$w¡Öƒ€ 5€ƒ€ €ƒ€ ñÿ’H’Ä’Ä™ ä5€ƒ€ €ƒ€ €r€ñÿYâ$â$Ø­ò Àƒ€€r€ €ƒ€ €ñÿœD’D9ºŽr€ ÃþÏ\€ƒ€€r€ “? ñÿGäÄ¢$\‚ €  å€1G ‚ñÿY’(”$(3 å€1I ‚Š#‹+§ ‚ñÿ’X9’$k:* €r€ uL ‚€r€ÿ`ñÿœP+ÇžÉ8hÏ#€ 6hŒC€ 8’#8ñÿ’X’X’8qŒFX ‚^ €ƒ€ €rñÿ"G’$’X� T€ Àƒ€€r€þÀæo &€ƒñÿG"'’$¡Db€ €r€ Àƒ€€r€…ñÿ’HbÅ9|ñp=à€`€ phŒC€ “G ñÿGâÄbÇ—‚~‚   8•#8X ‚ñÿ¬D”D¬$ÓfŒ™ å€1P ‚Š#¡ ñÿ’H’D+s¹šå€1R ‚Š# ‚ 8ñÿbGb%ä$;¨•#8X ‚½ €rþö€ uñÿEb%ä$ð3¶T ‚€r€É €r€ uñÿE’89a™ÄW ‚€r€ €ƒ€ 5€ñÿG'"'�¹Òƒ€ €ƒ€ €r€ Ãñÿ’D’Ä’ÄNà€ƒ€€r€ &€ƒ€ €r€ñÿYâ$â$ܬî Àƒ€€r€ €ƒ€ €ñÿœD’Dâ8=ür€ Àƒ€€r€ þÁ98•#ñÿ["+¬DEÛ 8X ‚ “P ‚ ñÿ¢HbÅâ8*“R ‚ ®  8•#ñÿ["+%°n&8X ‚6 å€1Y ‚Š#ñÿdE¢$”$» 4> å€1[ ‚Š# ‚­ñÿ’X9â$ÇŒB €r€ u] ‚€r€ &€ñÿœDœ$’Dž,Pƒ€ €r€ Àƒ€€þÛñÿG"''ã8^r€ €ƒ€ 5€ƒ€ €ƒñÿâDä$’$Ìl€ €r€ Àƒ€€r€ñÿ’X9â$˜�z €r€ à ‚€r€ €ñÿœDœ$’Df,ˆƒ€ €r€ Àƒ€€ñÿG;"+‹3–r€ 8•#8X ‚¨ “ñÿ”H¢ÈbÅÚǤY ‚­ “[ ‚ Ð  ñÿþAÞ"G%”Dü² å€1_ ‚ å€1a ñÿ’D9’(½-À‚�#�+§�C å€1c ‚�#�+ñÿ’D’X9ÈÀΧ ‚Ï  €r€ u] ñÿœDœ$œ$ AÜ‚€r€ &€ƒ€ €r€ ñÿ’H'"'°AêÀƒ€€r€ €ƒ€ 5ñÿ¢DℜXcø€ƒ€v`hæ#€ úhŒC€ ñÿ’D’Äþ£—’È× €ƒ€ €r€ Àƒ€ñÿ”Dâ$œXÅ÷ €r€… à€`€  hŒC€ ñÿ’D’È…Z" #€ƒ€ 5€ƒ€8è# à€`ñÿGâÄâ$pj0 € - hŒC€ #€ƒ€ €ñÿœD’D%4I> r€ Àƒ€€r€…3 à€`ñÿGâÄä$¨èL € I hŒC€ €r€ ÃñÿE’89ê þšþZ a ‚€r€ €r€ Ãc ñÿœDœ$œ$�@h ‚€r€ €ƒ€ €r€ ñÿ’H';0Év Àƒ€€r€ 8�#8X ‚ñÿlEâ$’Ä,Ô„ Ê  €ƒ 8‰#­�P­ñÿ[œ(œ$Q%’ 8X ªÉ ƒ�C € € ñÿ’D’È%v�  €ƒ€ƒ e€€ƒ ‚ ñÿ’H'"'/B® zþjò€ƒ€ €r€ Ãñÿ’DǬØ6¼ €ƒ€r€ 8‰'‰C8X‹  ñÿY¬8b'OcÊ  “_ ‚     &€ñÿœD˜Dâ8ûµØ ƒ€ h ‚€ƒ€8�# 8ŠCñÿ”D'ÇÏæ P­‹KÕO àÀ`hŒC€ 8‰S8ñÿGÂ$’Ä?vô –#8”C“C’C‘C�C8–#8•C�CŽC–Cñÿl[äÈ’(Y  8X þŠ¥  Ò  -¬ @ ”# ‚ñÿ¬D’È’$Aš P   ©)€*€+€,€ñÿ’D9ä$÷© -€.€ D &€ƒ ÏñÿE¢$"' ,,  j ‚€ ‚€ + ñÿ¢H%’(÷¯:  m ‚+€o ‚*€o ‚)€ñÿäHì(’D÷ÏH  ‚ ‹   Ÿ’#�ƒñÿ”D’È”$PìV ‚_  þÆî�€ƒ–# ‚v ñÿâPäÈÂ(Kd 8–#8”C  [ I ‚8ƒ#ñÿ”X’È”$ÉVr 8”C   ‚–#�ƒ ‚  ñÿY’D’$å €   l €ƒ–#�ƒŽ+§ ‚ñÿ¬D’D¬$ó[Ž    °�#�ƒ ‚   ñÿ’H’$"+œ „ €ƒ“#�ƒ ‚¬  œ ñÿ’Dl%’Díª €ƒ”# ‚ý þ™·   )€*€ñÿ’D’$¢ÈG¡¸ +€,€-€.€ $  ñÿäD¢(%0©Æ &€ƒ 8   ‚,€ ‚-€ñÿE’(d%ýÔ  ‚.€q ‚–# ‚é  É ñÿEd%¢( â  s ‚ð  á  u ‚ñÿYä(ì(:ãð  ê   ‚ K    ñÿ’X’%–e*–þ îþõðñÿ’E’d’%]´  ÿÿÿ>7ñÿ–L’%²$¬ã 24DLñÿ–E²,’eº„( TX\`dh ñÿ²D²d²d“-6 lpŠš ¨ ñÿ–L–,²$«2D ¶ Â ÎØ€âñÿ²L²,–eŽOR ìöü þB ñÿ–E–$–,¡“` & 06Lñÿ–E²,’$´}n TV b p APCSLAM NOñÿ’D’$’$¸ñ| TIRO... : E TNREDE ñÿ’D’$’$2£Š REOR(R)SI N-POCEDA SSMELBREñÿ’D’$’$2˜ .D EO SON TXESITOC.MMCñÿ’D’$’$t¦ OC.MMCVSSLCPDLCQþ%Öñÿ’D’$’$V,´ BRBLONS UOCR EIFELS EPICñÿ’D’$’$aΠIFDEOC.MMCI NREORR4POCPMñÿ’D’$’$‰Ð LIRES.V4POCPMLIREO.L4POCPMñÿ’D’$’$:ÜÞ LIRE4PRESRMUS.V4PREORSRñÿ’D’$’$AÃì 4PRESRMU4PAM.CVS4PSA.MVSñÿ’D’$’$Åáú 4PAMC4PSAMAM.CVSSA.MVSþÛÌñÿ’D’$’$ºA LRRDS.V4PUC.EBR4PIL.Bñÿ’D’$’$ñ BLT$OTONAVP SAAC LERIVISñÿ’D’$’$ÁË$ NO O N/ IFINHSDEW òÿ’D’$�$ïò2 TI HREORSRS CUECSSUFLLYÿÿ@À³? ñÿ$I]FH¡~£–P!OÚÉTá’ø ?U�:µîYÁN¨ ñÿ$IÊÔtf!�oát³ ŽzAO¥ _ x þ2N,¶·áD® ÷ÿIfŠ�º‚ý³Òá—ñ ðÖÁ˜é ÿÿ û_€ÿR2RFT.RBûU!9þPúýÿ”ü”¯ÔSúÿH+íÄÙŒ&îØŒ÷ÿÛšK\Œÿv§ÃRÿÓÒÿñÿ’D'’$ÕüP…Eÿ A€8;ú) !4!ñÿ’D’$’$¿�Òþ!4!�Ò!B!B ÿñÿ’D’$’$RUÿÿÿÿÿT!4!�Òù)ñÿ’D’$’ÄÎS*!$!@!÷º ϸ Ë X3!ñÿ’D’„’„”A†Õ ? ,) µ(  X)!$)Õ ñÿÌDÓ’$_¸”?ö  0 !û1)¶Qî ñÿ’D’$–$×�¢$!S‚Æ�…1û*ŽûJÀ£!@ `ñÿ’D–$’d°w°OCþb°Ì.MMC |Œðÿãÿÿ@9¿Æÿÿ@7¿È÷ÿR¹k¡¤áGN €ƒ  *€ƒ€ƒs ‚ ñÿ’DäÄ’(÷�L€ƒ€ƒ €ƒ  €ƒñÿäHâ(ä$× þIZf@    ÿ€ƒ TñÿE9¬8�h €ƒ ]  ” ñÿ’D'9C¥v€ƒ€r €ƒ  bƒ ñÿ"GE’Dý÷„‚ gb ƒ ‚ Àƒ€ñÿG’Ä'À ’r ð €a€ƒ €ƒñÿbG¢$’$ •    ÿ€a† ‰#­�­«ñÿ”D¢$’$û×® ªþ�¶�#‰Cʼn#ŽCŽ'­�P­ñÿ”D%Â$êµ¼ ªÃŽC¸�#ŽG…’C’#8¥+ñÿ’XG%þ�Ê8f�  ØP…8’+Ž’KÇáñÿG’$â$MbØë8�#’3–…Bº�#ƒ“C €ñÿœDœ$bÅãæ € €ƒ €ƒ + ñÿ’D’8œÄ6„ô€1€ƒ €ƒ €ƒ  ñÿ’H%œ$n>*€þÆãƒ€ƒs ‚ €ƒ€ƒ ñÿäD’("G^ù€ƒ † €ƒ&@  nñÿÂH¨Äâ8Šå 8ƒ#8‰C*8–#8‰C ñÿKb'''¨, €A €ƒ  €ñÿ,E¤$¢È’ß:1b ˆ  €1b ˆ  b ñÿâH’(%¯ƒH‰ ‚ ÿb €ƒ€1û@  ñÿ’D¢È”$ÙV€ƒ€ þ¼æKb €ƒ€€1ôñÿG'’8À d@  €ƒ€ €ƒ  €ƒñÿ"G”$’8²r€ R €ƒ€ƒ€Œ ‚ #€ƒñÿG'’Äh"€ € €ƒ €ƒ€ €ƒ €ƒ€ñÿ’X’ĒȃîŽ €ƒ  €ƒ € R €ƒñÿ¢D’Ä’Ä8‰œ €ƒ€Ž ‚ €ƒ € €ƒ €ƒ€ñÿœXœ$â$9§ª €ƒ €ƒþLX € €ƒ  €ñÿœD’Dâ(¤¸ƒ € R €ƒ €ƒ€� ‚ €ñÿœDœ$'Dƃ€ €ƒ€ƒ€ €ƒ €ƒñÿäD’$’$˯Ô € å €1€ƒ€•#�ƒ ‚ñÿbE’ÄœÄPöâæ € €ƒ€ €ƒ  ñÿ’D’È%­#ð€ƒ € R €ƒ €ƒ€’ ‚ ñÿ’D’ÄâĈ†þ€ƒ € €ƒ €ƒ€þ# €ƒ €ñÿœDâ$ä$YD ƒ € €ƒ  €ƒ € Rñÿ’Dâ(â$¥D €ƒ €ƒ€” ‚ €ƒ€ €ñÿœD'’$q›(ƒ€ƒ€ €ƒ €d "�ƒ ‚ñÿBEǢدå6@8ƒ# 8ŽC8X € "ñÿ”D‡b;ègD ‚P8ƒ# 8•C8X €ñÿ’H*ì8×#R‚ " ‚`8ƒ# 8þÓ«“C8Xñÿ¢X¨$â8'` €– " ‚p8ƒ# 8�Cñÿb[’DâPêÍn8X €ˆ " ‚€8ƒ# ñÿìX¢È”$ z|8”C8X [b €ƒ€1ñÿG”$‡oŠ@  €– " ‚µ8ƒ# 8ñÿG9¢$.o˜�C €ƒ  * €ƒ€ƒs ‚ñÿ’X’8’8H¦ €ƒ€ €ƒ€ƒ€ €ƒþ ÙñÿK”$œÄÍã´ò €— " ‚Ù €ƒ  ñÿ’H%œ$ÍBÂR €ƒ€ƒŒ ‚ #€ƒ€ ñÿ’D”ÄÅÙÚÐ €ƒ€ƒ€ €ƒò €d " ‚ñÿ¬Dä$’$çÆÞý €ƒ  R €ƒ€ƒñÿâHâ$â$z7ì” ‚ €ƒ€ €ƒ€ƒ€ €ñÿ¬D’(*â«úƒò €ˆ " ‚'8ƒ# þ ñÿGä$’$ÏS8”C €ƒ  * €ƒ€ƒñÿâHâ$â$h7s ‚ &€ƒ€ €ƒ€ƒ€ €ñÿ¬D’(*öª$ƒò € " ‚ò8ƒ# ñÿGâ8"'ÜU28�C8ƒ+8•K €ƒ  Rñÿ’DG'§¢@ €ƒ€ƒ” ‚ €ƒ€ €ƒñÿâD’89TN€ƒ€ €ƒ €ƒ € ò €ñÿ’DþDù¬$œ$G¡\1€ƒ€•# ‚p €ƒ€ ñÿ’D+9Õ«j €ƒ€€ƒæ €ƒ  R €ñÿ”D’8’8jŸxƒ€ƒ˜ ‚ €ƒ€ €ƒ€ñÿG’Ä’ÈC|†ƒ€ €ƒ €ƒ € ò €1ñÿ’Db%â$ ”€ƒ€•# ‚§ €ƒ€ €ñÿ’DY’$þw¢ƒ€€ƒæ ò€1€ƒ‘#�ñÿ’D’X’ÈþÓLj°ƒ ‚Ñ €ƒ  * €ƒñÿ¢D’ÈäÄžn¾€ƒ€ ‚ e €ƒ €ƒ s ñÿ’D’X’È%ïÌ‚€ƒæ €ƒ  * €ƒñÿ¢D’ÄâÄå{Ú€ƒs ‚ €ƒ€ƒ €ƒ €ñÿœD’Dd%©$èa € – €a€€ƒ€ eñÿE9ä85ûöš ‚ € e� ‚ € ñÿEì8¬$åºþ Rb  8–#8X ‚ ñÿbGœXì8gv€ ²  8•#8Xñÿ”D’È”DòR  ‚. å€1Ÿ ‚Š#6ñÿY’(b%@û. å€1¢ ‚Š# ‚± ñÿìX¬$œ$èÃ<8•#8X ‚R €r€ ñÿ¢H¬$œ$å5Ju¤ ‚€r€^ €r€ ñÿ¢H'"'é9Xuþ ”§ ‚€r€ €ƒ€ 5ñÿâDâ$ä$ŒAf€ƒ€ €ƒ€ €r€ Ãñÿ’D’8’8¹§t€ƒ€€r€ &€ƒ€ €rñÿ"Gœ$œ$ÆÀ‚€ Àƒ€€r€ €ƒ€ ñÿ’D’È'ço�€r€ Àƒ€€r€ 8ñÿbGd%”(0ÿž•#8X ‚¬ “Ÿ ‚±ñÿY¬8'I¾¬ “¢ þÈ4‚ C  8ñÿbGd%¢$ �º•#8X ‚Ë å€1© ‚ñÿ¬D”D’$-ØÈŠ#Ó å€1« ‚Š# ‚ñÿK"'œDÖB €r€ u­ ‚€r€ ñÿ’D’Ä’Èú ä&€ƒ€ €r€ Àƒ€ñÿâDä$â$nÁò€r€ €ƒ€ 5€ƒ€ €ñÿœDœ$’Dî-ƒ€ €rþr=€ Àƒ€€ñÿG"'œD”r€ €r€ Ãs ‚€r€ ñÿ’D’Ä’ÈÍ €ƒ€ €r€ Àƒ€ñÿâDbÇd% 2*€r€ 8•#8X ‚= “ñÿEY¬8LÏ8© ‚B “« ‚ e ñÿäD¢$’È(žF  å€1¯ ‚ å€1ñÿ’H"'%'dT± ‚�#�+§�C åþÕV€1³ ‚�#ñÿ’D+"'ßâb�+§ ‚d €r€ uñÿ’H’Ä’Äp­ ‚€r€ &€ƒ€ €r€ñÿYâ$ä$+~ Àƒ€€r€ €ƒ€ 5ñÿ’Dœ0+«+Œ€ƒ€ÿ`hÓ#€ �hŒC€ñÿ’X’89>…š €ƒ€ €r€ Àñÿ’DœD+^•¨ƒ€€r€…–à€`€ þhˆ¬hŒC€ñÿ’X9¢0.5¶ #€ƒ€ 5€ƒ€8Õ#²à€ñÿâDœXœ$üÄ`€ ÂhŒC€ #€ƒ€ ñÿ’D’È¢$„¨Ò€r€ Àƒ€€r€…Èà€ñÿâDœXœ$üà`€ ÞhŒC€ €r€ ñÿ¢H'"'ˆ9îñ ‚€r€ €r€ Ãñÿ’H’Ä’Ä{ü³ ‚€r€ €ƒ€ €rþ&a€ñÿYâ$bÇ)  Àƒ€€r€ 8�#8X ‚ñÿ¬DœÄ’8Wl_ €ƒ 8‰#­�ñÿbG%’Ä'þ&P­8X ª^ƒ�C € €ñÿ’X9¢$u4 €ƒ€ƒ e€€ƒs ‚ñÿYâ$ä$„+B z€ƒ€ €r€ Ãñÿ’Dâ8;ÀpP€ƒ€r€ 8‰'‰C8X þÖñÿ"[GìÄø-^  “¯ ‚ ›   ñÿ’D’ȇQªl&€ƒ€ ¸ ‚€ƒ€8�# 8ñÿ’DâDâ87zŠC­‹KÕäàÀ`hŒC€ 8‰SñÿâP˜$’8›ˆ8–#8”C“C’C‘C�C8–#8•C�CŽCñÿlGÙEŒ5––C8X  g - @ ”#ñÿ”DÙ’$ÏŠ¤ ‚å  ©)€*€+€ñÿþ@ä’D"'œDÝ ²,€-€.€ Df &€ƒ ñÿ¢H”Dä$ÁÀÏf º ‚€} ‚€ ÀñÿE¢$%š¿Îf ¼ ‚+€¾ ‚*€¾ ‚)€ñÿEE’È0¼Üj ‚ f   –#�ñÿ’DY’DL;êƒ ‚  ´ �€ƒ–#ñÿ’D¬$’D¼¦ø�ƒŽ+§ ‚  E�#�ƒñÿ”D’Èþœl”$“é ‚  󀃔# ‚` ñÿ"[’$’$˰   ª)€*€+€,€-€ñÿäD’(¢È_ƒ" .€ ¹f &€ƒ Íf ñÿ’H”D¢$Tœ0 g ‚,€l ‚-€l ‚.€À ‚ñÿ’DY”(]D> –# ‚L  , f à ‚S ñÿYä(¢(cúL  D f Å ‚ M f j ‚ñÿYb;–$�çþÍ~Z  àf   �ñÿ²D–e’%K¦h ¢¤¦ª ´ÿÿñÿ’D²d–,¨¡v ÿ>7¶ÔÖæñÿ’D–,²,sõ„ îöúþñÿ²L–%–%º¸’   (8ñÿ²D²d–e@G  BLRX`hñÿ–E’,²,Û ® þéjr| †Œñÿ²L²d’d¯¼ ¢ª¬ ¸ Æ CPDOñÿ’D’$’$˜Ê EOMINOT.R.. : E TNREñÿ’D’$’$‹ Ø DE REOR(R)SI N-POCEDA SSñÿ’D’$’$tâæ MELBRE.D EO SON TXESITOCñÿ’D’$’$þÂô .MMCOC.MMCVSDLCPCQñÿ’D’$’$Qq BRþÑÃBLONS UOCR EIFELS EPñÿ’D’$’$(Ð ICIFDEOC.MMCI NREORR4PAMñÿ’D’$’$®à .CVS4PSA.MVS4PAMC4PSAMñÿ’D’$’$j7, AM.CVSSA.MVSLRRDS.V4Pñÿ’D’$’$8E: UC.EBR4PIL.BBLT$OTONAVñÿ’D’$’$2¼H P OCEDR VESIOI N O N/ñÿ’D’$’$±^V IFINHSDEþº.TW TI HREORSRS ùÿ’D$“µd CUECSSUFLLYÿÿ@•µj ñÿ$IËFH¡~£–P!OÚÉTá’[ ?U�:�îYÁN ñÿ$IÚÚtf!�oát ŽzAO:_ x% ¶·áDC÷ÿIn��º‚ý³Òá—T ðÖÁ˜~ÿÿ û_€ÿMAKESPACE.CMû£j þÜ«DELETE PCODE.LD,PASCAL.LD,P4ASM.LD,P4MAC.LD,PASCOVMAP.LD,P4ERRSUM.LD,^ MAKENEWPASCAL.CM,MAKEP4LIB.CM,MAKEP4LIBN.CM,MAKEP4COMP.CM,^ MAKEP4ASM.CM,MAKEP4MAC.CM,MAKEP4ERRSUM.CM,MAKEPASCAL.CM,MAKEPCODE.CM,^ R2ROUTL.RB,R2IOUTL.RB,R2SCONSTS.RB,R2SECHKþ‡H.RB,R2SITAB.RB,^ R2SADMIN.RB,R2SINTEGER.RB,R2SBOOLEAN.RB,R2SSET.RB,^ R2STESTS.RB,R2SMISC.RB,R2SSPTAB.RB,R2SHEAP.RB,R2SOPN.RB,R2SIOIN.RB,^ R2SRD.RB,R2STI.RB,R2STP.RB,R2SREWR.RB,R2SRANDOM.RB,R2CRCODE.RB,^ R2IREAL.RB,R2RREAL.RB,R2IFNS.RB,R2RFNþWS.RB,R2IFT.RB,R2RFT.RB,^ R2IFW.RB,R2RFW.RB,R2CSPTAB.RB,R2CITAB.RB,R2SDBIN.RB,R2SDECODER.RB,^ R2SDIV.RB,R2SMEMACC.RB,R2SMPD.RB,R2SMPY.RB,R2SMYP.RB,R2SOVL.RB,^ SWOP.RB,^ P4ASM.RB,P4MAC.RB,P4PASCAL.RB,P4BLOCK.RB,P4BODY.RB,P4INIT.RB,^ P4CODþj–¸EGEN.RB,P4DECLARE.RB,P4ENTERERR.RB,P4ERRSUM.RB,^ PASCAL.RB,PCODE.RB,^ P4BINARIES.CM,MAKESPACE.CM^ ÿR2SOVL.RBûY!9þœ†ýÿSÏ•¯�ýÿ@pyˆØnñÿ’D’$’$Ûj *"( Q! ?( !$¬ 1 ? ñÿ’D’$’,å”! Òï)Íì( ÿÿ 24POCPMûÿ’Dh²LIREO.Lÿÿ û_€ÿR2SIOIN.RBûY!7þä"Àýÿ34bôÿ RÎÌ#Tzê@C¶lAîØ_úÿØT[¹ãBÿ¯ëÃ8ÿþÿˆñwñÿ’D’$’$CP… A !4!�Ò!.RB,^ R2SMYP.RB,R2SDIV.RB,R2SMPD.RB,R2SDBIN.RB,^ $BIND.RB,^ RFPI.RB;^ DELETE/V $BIND.RB^ ÿCOM.CMûââþ6XNSPEEDPASCAL2.KSÿÿR2SDIV.RBûYU.þ¸¡ýÿó•¯tHýÿ@}6ƒé ñÿ’D’$’$€r#Y!QIABÚÑpýPúK‚û©€�ñÿ’D’$’$/CY…ÿ1Cª‚ª 9ƒúø�ƒú©úöÿ’D’$·B!)ýÿ@_cŽ\ÿÿ û_€ÿP4DECLARE.RBûY ÷ $þ‚Ðýÿ£6åYtoåÿ$I ItŠ2Ù uа qŠ(0 QŠ-LPŠ(ÀOŠ-!Š-€%Š®!Š2ÙÿlÛlÛ۳ʊÿû‰2ÿû‰ÿÕ‰ÿü‰#ÿ!Šÿù‰ÿ׉ÿÖ‰ÿû‰ÿ!ŠÿÙ‰-ÿû‰-ÿñÿ’D’$¢$W¦b,bŠ ÈÞÌÿÏ(!e ñÿâDœ$”$ÙÞa ËÿÏ'aÌÿÏ(eþíêªñÿ’D’D’$ªýÌÞe¬9ÌÐ;Ý9Ì ßØÞeñÿ’H’(’$¶*09Ìì9Ôd# Ü Þã ÈÐÈèÞñÿ’D’$’$ÊÕ8ÈèÞÈèÞÞÐÞÐ ñÿG%’$"FaÌÞesÜÞãÈÐÈÝñÿ’D’$’$UITàÈ è ÈÈèÈÈèÈÈñÿ’D'’$ çbèÞ ÈaÈèÐÈÐ aþ®)ñÿ¢X'’$j¶pdw ÞaÌË^Hñÿ’DœD’$Úû~'(!e‘ Þa Ë^Hñÿ’D’Ä’D>—Œ'aÌ ÞeE ÈèÈñÿ’D%ÅøfšÈ9ÔÌ Þe¦ adª ÞñÿG”$’$Vl¨ad—ÌÞe ^ÀñÿœD'¢$­¶Üa aÈØÞe Üñÿ’Dþ_K’$’$ì™ÄÞã ÈÐÈÐÈèÈØÈèÞñÿ’D¢8'5äÒ ÈØa eâ ”ÞaÈèñÿ’D’$’$óàÞÈ èÈèàÈèÞÌÞñÿEÅ’8N†îeõ adù Þa Ë ÜñÿâD’$¢$„êüÜa ÈèÜà ÈØ Èe  ñÿâD’D¢$e kÞadÈØ Ð ÈÞe Èñÿ’D’D’$þâŠ9 ÈØdl ÜÞã ÈèÞ Ëñÿ’D’$œÄá}&^€' ÜÜa Èa ñÿE’8’$uä4e< ”ÞaÞ Ð ÈÐÈè Èñÿ’D’$¢$?PBÈ èÜàÈèÞÌÞeT ñÿGâ$œ$ŒlPadX Þa Ë ÜÜañÿ’D’$œDÃÇ^ ÈèÜà ÈØ Èel kÞañÿ’D’D¢$Núlþ”Ñ ÈÞe— ÈÐÈØÞe—Èñÿ’D’D’(ØìzØÞe—ÈØ,ÌeŒ ^�ñÿG’$’(x¬ˆad—ÈØÈØe— fÞañÿ’X’$œDÈ– È ÈÌË(!e¨ ÞañÿœD’(’$“J¤ Ëad­ ÈÞ b4bñÿ’D’$’$lï²Þ ÐÞÐÌË^€@'(!ñÿE’8’$ŽÀeÐþ@ Þa Ë^€@'ñÿG%”$ÂMÎaÌÞe‡ È ÐÌÞeûñÿ’D’$’$®oÜÜÞãÈÐÈÝàÈ èÞÈèñÿ’D’$'‚Íê ÈÈèÞÈ Ð Èa añÿ¢X'’$ Öødÿ ÞaÌ^€(ñÿ¢D'’$‚¥!e Þa Ë^ €@ñÿâD’$¢$u'aÌþ) ÞPH!e$ ñÿG’(œ(_Õ"aHe×ÌÞe2 añÿE’8’$R0d6 Þa Ë^@'ñÿ”D”$’$­�>ÜÜa€ È Èec ÈÐ È\ñÿâD’$’$ îLa È èÈÈèHÈØñÿ’D”$’$<‡Z ÐHÈPdBÈ ÐÌ ÞñÿE’Ä’$Ìbhe… aÌþü^^€@(!eñÿ’H’Ä’$/v… Þa Ë^€@'añÿ¢X’$’DôÞ„dÐÞ Ð ÈÞe� ÈÐÈØñÿ’D’$’(—Ø’ÐÈè È È ÐÈ Ðd‰Ì!ÞñÿE’$’$.¬ e|Ü ÞãÈÐÈèÞÈèÞñÿ’D’$’8L ®ÈèÞ ÈÈ aÌÞñÿE’$’$¶¼e[ÜÞãÈÐÈþRëÝàÈ èÞñÿ’D’$’$ú6ÊÈèÞÈèÞÈèH ñÿâD’8œ(õ?ØÈa aÌÞeè añÿE’8’(‘¦ædì ÞaÌÞeK ^€ñÿ’D’8”$Åœô Üa ÈØÐÈÞeFñÿ’D'’$\» ÈØ\a ÈèHHñÿ’D’$â$œ”ÈØPÈØÞ þFÌÈa #ñÿE'â$½êeB ,ÌÈae- mÞadñÿ’HÅ'çª,8 Èa e8 ^�aÈ èñÿ’D¢$'’ü:ÈÈèÈdF nÞa añÿ¢X'’$hpHdY Þa Ë^€ ñÿâDœD’$ ÞV'adi Þa Ë^€ñÿ’D’Ä’$i5d 'aÈèHÌ*Þþ5KeñÿœH’(’ħ­rx ad| ÞaÞÐHñÿ’D’$’$pd€ÐHÐÞÐÌ^(!ñÿE’$œ$Že_ Ë^ˆ€'ÜÜañÿ’D’(â$o²œÈØÞe° ÈØØÈa!ñÿE’8’$…øªe° oÞaÜÞãÈÐÈèÈñÿ’D’$’$ü¸ÈèÈÈ èÜàÈèÞÈþãñÿ’D’(”$WÆÐÈÞeÝÈÐÈØÈeØñÿœD”$’$rNÔ ²ÞaÈØÐdÇÈÐÈÐÌñÿ’D”$'¼³â ÞPH!eî aHñÿE%Å'�ðe�ÌÞeü ad ÞñÿG%ʼn•þaÌÞe  ad ÞñÿG’$¢$ ' a Ë^D'Üa®HñÿþM…’D’D¢$a%Èe"HÐÈÞe7Èñÿ’D’$’$³I(ØÐÈèÈÈèHÈÐdñÿ’Hœ(’$Vê6"Ì Þe[ aÌË^ñÿ’D%’8D'(!eY Þa Ë^ñÿ’D'â$©cR'ad_ ÞaÌñÿ’D”$’$+å` ÞPH!eoÈP añÿ’X’Dþÿ±”$yˆnHe„ÈPÈèÈdñÿ’D’$”$eš| ÈÞ b,bšÌûÏ(!e”ñÿœD’$’Äš*Š Þa ËûÏ'aÌûÏ(eñÿ’H’(%Cý˜ÌÿÏ(e¦ Ë È Èad ñÿ’D’D’$¢¦ÌÞeÜÞã ÈÈÈÐÈñÿ’D’$œ$W´èÞÈèÞÈèÞ añÿ’D’D’$:¿þðhÂÌÞeÞ%Ô ^€ÜñÿG”$’$�ÐaÞ%ÔÈÞeñÜÞãÈÐñÿ’D’$’$£UÞÈÝàÈ èÈÈè/ÌÈèÞñÿ’D’D’(çØìÈ/Ôd ÈØÞe ÈØØñÿ”Dâ$’DWþúÞe lÞad ÈèÈØñÿœD’(ÅjŠ ad Þad ÌÞñÿ¢D’8%KFþEÇe, aÌçÏ(!e, ÞñÿGâ$¢$#·$a ËçÏ'aÌÞe ñÿG%Åí‘2aÌ Þe> adB ÞñÿG’$’$Þ@aÞ ÐÜ ÞãÈÐÈè ÈÈñÿ’D’$’$ª;NèÞÈèÞÈ Ð Ë^ñÿ’D%’$\ ' ÜÜa ÈèÈ ÈÞñÿE¢$¢$Yje– ÈþšÀØÞe� È,Ìe ñÿâD%%%)xmÞaÞ ÐdŠ È-ÌeŠ •ÞñÿG’$œD†aÞ ÐÈè Èd– qÞañÿ’D’$%S€”Þ ÐÌ ÞPH!e£ añÿ’X’DâD4~¢HeDÌ Þe± adñÿ’H’ÄâDˆo°µ ÞaÌ*Þe¿ adñÿ’H’Ä’(à¾Ã Þaþß( ËÜÜa€ ÈÐÈñÿ’D’$%£ƒÌØ ÐÈèÈÈØÞeù Èñÿ’D’Ä’(ÿëÚØÜÜa ÈØ+ÌeéÞÐdñÿ’H’8’$ò@èî ÈÜa ÈÈÈèÐÈñÿ’D’$%¶öèÈ ÈÐ È Ð ÈÞeÉdñÿ’DâD’$ÎÌÞeh a9ÌÐ9ÌÞeñÿ’H’$’$ìD'9Ìè9Ô;Ý9Ì ßþ4ãÐÈÞÈèÞñÿ’D%’8[I ÈèÞd+ úÞaÞÐ ñÿ’D’$’$ ¼.Ë^%^' ÜñÿE’$’$»<a®Ü ÞãÈÐÈè;Ý9Ì ßØñÿ’D’$’$U9JÈè ÈÈèÈÈèÞÈ9Ôñÿ’DâDœD„ñXÌ'Þeb adf ÞañÿE%’ÄÇÉfdÌÞe³ aþp‡Ì*ÞeñÿœH’(’Ä¢ tz ad~ Þa Ë ÜÜñÿE%¢$cú‚a ÈÞe  ÈØÞe— ñÿâD%%ý%�sÞaÞ Ðd  È,Ìe  rÞñÿG’$’$­ÄžaÜÞãÈÐÈè ÈÈèÞñÿ’D%%„ܬÈèÞdÌ0ÞeÀ añÿ’X’(”$stºÞPdÃÞPÌÞþ9GeñÿâD¢$¢8"îÈ aÌ*ÞeÕ adÙ ñÿâD¢$”$MÖÞaÌÞeæ Ë ÜÜa€ñÿE’8'à´ädð yÞa ËûÏ'aÜ Þñÿ’D’$’$ÎaòãÈÐÈè ÈÈèÞÈèÈñÿ’D’$’$ö…ÈèH ÈÈÌË(!eñÿ’HœÄ’(å Þa Ëad ÈÞþ<ïñÿ’D’(’(¸õ ÈØÞe' ÈÞd, È ÈØñÿ’D’$%}ö*Ø bbÌÞe€;Ý9Ìñÿ’D’$’$ã„8 ß Ð ÈØÐÞÐÈÞÈ!"eñÿ’H%%ÚùFZÈØÌeRÈØÐdXÞÐñÿœD’(’DpÕT ¦Þad?È!e{ÜÞãÈñÿ’Dœ$’$˜ob Ð ÈèÌ Üa ÈèÞ Èþ¨'ñÿ’D’$œ$¤Up ÈØ ÈèÈ ÈèÈ añÿE’8’$”*~d„ ÞaÌK^ ñÿ’DœD’$úmŒ'(!e  Þa K^ ñÿ’D’8’$xhš'aÌ ÞPH!ñÿE”Ä”$Z#¨e­ aHe1Ì Þe»ñÿâDœD’$uT¶ ad¿ Þa bbÚñÿ’DþÓ0œD’$‡°ÄÌÞeØ Þa K^€ñÿ’D’8’(Ò'aÌÞeKÜÞãñÿ’D’$’$ YàÈ Ð ÈÝà È èÞ ÈèÞ Èñÿ’D’8’$<îèÞ aÌÞÌ Þ"eñÿœH’(’Äáü ad Þa K^ñÿ’Dœ$â$Â, 'ÜÜa ÈaÈñÿ’D’$%þ’#¿ èÈÈèÜàÌ ÞeE añÿ’X’$”$ʃ&ÌK^€'(!eCñÿœD’$’$úa4 Þa K^€'añÿ¢X'’$‹]BdI ÞadØ bb¢ñÿ’DœD’$o¯PÌÞed Þa K^€ñÿ’D’8’(Ë^'aÌÞe÷ÜÞãñÿ’D’$’$~lþ…kÈ Ð ÈÝà È èÞ ÈèÞ ñÿG’$œ(€­zaÌÞÌ Þ"eŠ añÿE’8’$˜èˆdŽ Þa K^ñÿ’DœD’$Ö' Ü Üa€ ÈaÈ è È/Ìñÿ’D’(’(ç2¤ÐÈÞeËÈÈÂeÄÈØèñÿ’D¢$’$i²ÈØÈ/ÌeÁÈèÈØdñÿ’H’$’(¯ÃÀÄÈþžçØ/ÔÈÐÈØÐd¥Ì ÞñÿE’Ä’$ôÑÎeñ aÌK^€'ñÿ”Dâ$’$2Ü(!eï Þa K^€ñÿ’DÅ¢87<ê'adõ Þadd/Ìñÿ”Dâ$’$¤êøÞe/  uÞa\ ã+T PYñÿ’D’$’$µ -EDI Þ Þ\ ã/ÌÞñÿ’D’$’$}ƒ Þ\ ãþrÎ\ ã/ÌØ/Ô/ÌÞeñÿ’H’D’$¡^"  Ì!e/ ^ ÌÞ\ ã ñÿ’D’$’(¼80 bb²ÞÐÌÞeb ÜÞãñÿ’D’$’$Ÿm> È Ð ÈÝà ÈèÈ ÈèÞ Èñÿ’D’$’$ƒKL èÞ ÈèÞ Èè8Ì Èañÿ’X¢8'ÏiZ ÈÐ adf  ÞaÌKñÿ’D’$¢$_©h ^€þ«N'çÏ'(!e†  ñÿâD’$’$…Öv Þa K^ €'çÏ'ñÿG’$%ù„ aÌ ÞPH!e“  añÿ’X’DâD]r’ He6 ÌÞe¡  adñÿ’H’Ä’$ô“  ¥  Þa K^'ñÿ’D’(%º:® çÏ'Ü Üa€ÈØÞe× È^ñÿ”Dœ$’(M¯¼ þeÇ  ^�aþÈd× ÈØeñÿ’H’(’(ê#Ê × È~ÞeÕ ^ Ðd× €Þ ÐÈñÿ”D’$’8ßÛØ ÞeC È Ð È Ýa ÈØÞñÿ¢D’$’$‘Øæ e2 ÌÞ Ô6ÌPÞPHñÿ’D¢$”$ølô ÞH"e HÈÂe ñÿ’D’D%�… ÞPd HØPdó Hñÿ”D’$’(³k Þe H èÈdþ‡�2 \ Þñÿ’D’$’$ÈL ãH Ð ÈÈà ÈèH È èñÿ’D’$’$¢û, ÈHP È èÈ Èè Ìñÿ’D”$”$Yø: Ì È Ô ÈØÐd× Ì Þei ñÿâD’$’$›•H  aÌK^€'(!ñÿE’8’$ÿcV eg  Þa K^€ñÿâDœD’$½d 'adm  ÞaÌÞþ(~ÌçÏñÿ’D’DœDCær (!"e6 /ÌÞe¯  uÞañÿ’D’$’$'—€ \ ã+T PY-EDI Þñÿ’D’$’$xŽ Þ\ ã/ÌÞÞ\ ã\ ã/Ìñÿ’D%’(dôœ Ø/Ô/ÌÞeƒ Ì!e¯ ^ Ìñÿ’D’$’$‚ ª Þ\ ã b*b²Þ ÐÌËñÿ’D’$œD-¾¸ ^€'(!eÓ  Þaþàñÿ’D’$â$–kÆ  KË'^€'aÌñÿ”D¢$'¡¡Ô ÞeÕ H eà  wÞa añÿ’X’$’(Óšâ Ì^€€(!eü  Þañÿ’X’$'xið  K^@€'aÌ^ñÿ’D%%;þ €€(ep ÌÞen  ^ñÿâD’8’(ÕÅ �a aÌÞeG ÜÞãñÿþUr’D’$’$‰k ÈÐÈÝàÈ èÞÈè ÈÈñÿ’D’$’$gð( è8ÌÈèÞÈèÞÈèÞñÿ’D’Ä'l6  ÈaÈ Ð .Ì Ýa  añÿ¢X'’$¼ D dK  ÞaÌK^Lñÿ’D’(’ÄâR '(!eg  Þa K^ñÿ’D'%+M` L'aÌ Þe dJ ñÿ’D’Dþâ ’ÄÒ¡n ÌÞeE  ^�aÞ Ð añÿ’X’(’$•w| ÌÞe° ÜÞãÈÐÈÝàñÿ’D’$’$ûŠ È èÞÈè ÈÈè8ÌÈèñÿ’D’$œ$F˜ ÞÈèÞÈèÞ Èañÿ’D'’Ä”þ¦ È Ð .Ì Ýa  aÌ^€ñÿ’D”$â$iã´ K'(!eÌ  Þa ñÿ’D’$’ăþ& K^L'aÌ Þeñÿ’Hœ(”$f«Ð z ÌÞe?  aÌÞe ñÿ’Dœ$’$)Þ  ^€ÜaÈØÐÈÞñÿ¢D’$”$@Zì e ÈØ^à(!e ñÿœD’$¢$kòú  xÞaÞÐ È Ð ÈÞe Èñÿ’D’$’DЕ èÈ ÈÐ ÈØ Ðd Èè Èñÿ’DÅ’8XÚ Èþß9 Ð ad!  ÞaÌKñÿ’D’$œD“»$ ^D'(!e=  Þañÿ’D’$¢8x˜2  K^D'adC  ñÿâD’D’Dã<@ ÞadJ ÌÞeQ ÞÐ añÿ¢X’$”$عN dS ÞÐÞ ÐÞÐÌÞe„ ñÿ’D’$’$!eE ÞaÌ^�(ñÿ’D’$¢$ CL\)#ÌÞH "#eÈ÷ÿ’D�$ÔÁZãÈ8Ô È9ÔÈ Ô ÿÿ û_€ÿR2SECHK.RBûY!5þœÝýÿ³•¯´Lèÿ$II'‡š¤€iš¤`iš¤ iš¤ jQ>1@UêA ñÿœD’$’$ke*;1.RB,^ R2SMYP.RB,R2SDIV.RB,R2SMPD.RB,R2SDBIN.RB,^ $BIND.RB;^ DELETE/V $BIND.RB^ ÿR2SREWR.RBûU!8þ2#ýÿs•¯ô�úÿHò.ýØKÙŒßÿlÛlÛÀ•1éÃNÿ:éÞÿï½c‚ÿï½C‚ÿbÿD½Ã8ÿUÃ8ÿ[¹ãBÿTxÿÓéÃyÿõéZÿñÿ’Dâ8'»9!4!�ÒPýþZ 8Z? ­ 0 ?ñÿ’D’$â8Ì (  ?( !4!�Ò�ýþZ 8ZñÿâD’$’$„ö, ­ 0 ?(  (  (  ?ñÿâD’8œØþðzp&*( 41 ’ �š…CDD YPñÿl[œØìØ»å8H@0 0 ‚÷0(ñÿ’D’8’$sFYQ! 0 ?,( )1!ä !ñÿb[â$’$ѤT 0)!Ý … !1.ùÿ¶I$�bhÐàÚöÿþÿÿÿ@‘¿nÿÿ@�¿pÿÿ@„¿{ÿÿ û_€ÿR2SCONSTS.RBûY!5þtcýÿ3 •¯4DñÿH’�þ[¹àBܱ@{\Œ@{ܱ\Œúÿ’„ ô»ÿÿ ýÿ ›hc±Fÿÿÿ û_€ÿR2STI.RBûY!8þ×—ýÿ󷕯t˜âÿ$IDRž"šM€™L’MpKŒM ‚JˆN l{N zt§àVv§ÀRnë@Cv§AÄÙ_ ôÿ`Û¿}ܱÿbÿ:éÞÿܱC{ÿýÿ…×z*ñÿ’D’$’$�2I!I1��ÒPB)Lƒþÿÿ!4ñÿ’D’$’Ä„·!�Ò!$!@!,!÷ ÿ2(·292)íñÿ’D’$Â$N½) ¥�(þÐyâç &1&Q…@ ñÿFÂ$’$*'X(Jª “‚'€ªHš‚'`‚ Šª ñÿ’D˜$â$}‘81 •'‚«HÅ‚' 1 ñÿ’D’m’$&!F'0 BšÜÜ ñÿ’D’$’$C°T ñÿ’D’$’$5°b ñÿ’D’$’$'°p þn® ñÿ’D’$’$°~ üÿ�D†ZŒ úÿHbê³Òá— 3éÁy ÿÿ û_€ÿR2STESTS.RBûYL þ„ýÿs¸•¯ô—îÿ$I@Î=ÿ¥‘ÿ¥‡D¥–7¥‡O¦‡ ó¤›÷ÿÛš\ŒÿÓÒÿÐ’ÿñÿ$I’H’$S:Q'QXQ ª@… ªq…ƒñÿ’D’$’$±â @… 6ªƒ  ªA…p… ñÿ’D’(’$Ï¿ªƒ!D Âþ1¶ÿâþ !ñÿ’D’8’$pO*!!$¥!D€0*ª) þ Êš­!ñÿ’D’$’$Üõ8!L‘!$!�‚!,�ª@H$,ñÿâD’$’$ÆfFÓ0ÇÏÕÐ%�5Ó?ô!$!!,ñÿ’D’8’$oUT † ® �7!0 –'P!$!','�ñÿ’D’$’$¤Äb! •ø ­%� �''$' �!Pñÿ’D’$’$·“p­!$!','��÷! •÷Š!Pñÿ’D’$’$¢ø~ !$!','§¥ê! •÷ Šþ:I›!P!ûÿ’DsŒ!!0…ýÿ@½¸¥b&ÿÿ û_€ÿP4ERRSUM.RBûŽŽþä™ýÿÌ\ã\ãd“+T'EH'NE PXñÿ’D’$’$.ßLCEET ÞÞ\ã^DÞ\ñÿ’D’(’$LøZ ã\ãd“+U'TNLI 'XEEPTCñÿ’D’$’$ÀCh ÞÞ\ã+DE ñÿ’D’$¢$Ýbv ÞÞ\ã\ãd“+ñÿ’D’$’$⇄D''OE PXCEþ¶6ET D Þ Þ\ãñÿ’D’D’$V¡’\ãd“+T''O'/ODNWOT ' ñÿ’D’$’$³  Þ Þ\ã+E PXCEET D ñÿ’D’$%þZ® Þ Þ\ã\ãd“+I'ñÿ’D’$’$í[¼'FE PXCEET D Þ Þ\ã\ñÿ”D’$’$õÊãd“+F'LI'EE PXCEET ñÿ’D’$’$2vØÞÞ\ã^DþÉ Þ\ ã\ãñÿE’$’$9åæd“+REOR RNIF CAOT RÞÞñÿ’D¢$’$> ô\ã\ãd“+REOR RNIV ñÿ’D’$’$=ÊRAAILBÞÞ\ã^EÞ\ñÿ’D’(¢$ò³ ã\ãd“q;@Þgdñÿ¢HE¢(Ň d.dQdtdˆdœd°dñÿ¢HE¢( ƒ,Ódçdûdd#þãId7dKdñÿ¢HE¢(·¡:_dsd‡dªdÍdðdAñÿ’D’$’$¨HAAAAAAAñÿ’D’$’$¨VAAAAAAAñÿ’D’$’$ó§dAAAAAAAñÿ’D’$’$å„rAAAAAAdñÿ¢HE¢(qy€d2dFd`dƒd—þâHdºdñÿ¢H’D’$ngŽÎdèdü bb>ÌÖ‘¼ÐÈd3 +UFCNITþH,NOR SELUñÿ’D’$’$�@ä TÞÞ\ã+YTEPM SU TEBñÿ’D’$’$_{òS ACÞÞ\ã+AL,RS BUARñÿ’D’$’$0_GN EROÞÞ\ã+P IOTNREñÿ’D’$’$œL ÞÞ\ã\ãdñÿ’H’$’$H,n +IFELV LAEUP RAMAÞÞ\ñÿ’D’$’$�¥*ã+TEREN TOA LLWODEþL˜ÞÞñÿ’D¢$’$'ð8\ã\ãdn +OFWRRA DEDñÿ’D’$’$ÉxFLCRADEÞÞ\ã+F NUTCOIñÿ’D’$’$àjT;NR PETEÞÞ\ã+TIOI Nñÿ’D’$’$ÑAbFOR SELU TÞÞ\ã+YTEPñÿ’D’$’$å¢pN TOA LLWODEÞÞ\ã\ñÿ¢D’$’$úË~ãdn +IMSSNI GERUSTLT ÞþÜñÿ’D’$’$—êŒÞ\ã+PY ENIF NUTCOI Nñÿ’D’$’$¨bšÞÞ\ã+EDLCRATAOI N ñÿ’D’$’(’¨ Þ Þ\ã\ãdn +-FOFñÿ’D’$’$†�¶MRTAF ROR AEÞÞ\ã+ Lñÿ’D’$’$0×ÄNOYL ÞÞ\ã\ñÿ”D’$’$ï«Òãdn +REOR RNIT PY EFOñÿþOH’D’$’$àÞÞ\ã+S ATDNRA DUFCNITñÿ’D’$’$7§îÞÞ\ã+NOP RAMATERE ñÿ’D’$%Ã&ü Þ Þ\ã\ãdn +UNñÿ’D’$’$T[ BMREO FAPAREMÞÞ\ã+ñÿ’D’$’$"ETSRD EO SON TGAÞÞ\ãñÿ’D’$’$ à&+ER EIWHTD CEALARÞÞ\ñÿ’D’$þ"®’$½ß4ã+ITNO ÞÞ\ñÿ’D%’$—áBã\ãdn +LIELAG LAPARñÿ’D’$’$èPEMETÞÞ\ã+ RUSSBITUTñÿ’D’$”$™ü^ITNO ÞÞ\ã\ãdn ñÿ’D’$’$zl+ERUSTLT PY EFOP ÞÞ\ñÿ’D’$’$:4zã+RAMATEREF NUTCOIÞÞ\ñÿ’D’$’$e«þrÒˆã+ NODSEN TOA RGEEÞÞñÿ’D’$’$Q–\ã+W TI HEDLCRATAOIÞñÿ’D’$’$rà¤Þ\ã^NÞ\ ã\ãdñÿ’H’$’$òϲn +YTEPC NOLFCI TFOÞÞ\ñÿ’D’$’$ÞÚÀã+O EPARDN S Þ Þñÿ’D¢$’$ZÓÎ\ã\ãdn +XERPSEISNOñÿ’D’$’$‡xÜI þ‚ñ SONÞÞ\ã+ TFOS TEñÿ’D’$’$RìêT PY E Þ Þ\ã\ãdñÿ’H’$’$�Ðøn +ETTS SNOE UQLATIÞÞ\ñÿ’D’$’$@a ã+ YLAOLEW DNOYL ÞÞñÿ’D¢$’$+ù \ã\ãdn +TSIRTCI CNñÿ’D’$’$ëw" ULISNOÞÞ\ã+N TOA LLñÿ’D’$’$ö0 WODE þ0% Þ Þ\ã\ãdñÿ’H’$’$KÏ> n +IFELC MOAPIRISNOÞÞ\ñÿ’D’$’$ÛíL ã+N TOA LLWODE Þ Þñÿ’D¢$’$áùZ \ã\ãdn +LIELLGT PYñÿ’D’$’$îth EFOO ÞÞ\ã+EPARDNS(ñÿ’D’$’$2Av ) Þ Þ\ã\ãdñÿ’H’$’$'ñ„ n +YTEPO þP[ FPORENA DÞÞ\ñÿ’D’$’$’s’ ã+UMTSB EOBLOAE NÞÞñÿ’D¢$’$ÐØ  \ã\ãdn +ES TLEMENEñÿ’D’$’$·=® TYTEPÞÞ\ã+M SU TEBñÿ’D’$’$�{¼ S ACAL RÞÞ\ã+ROS BUñÿ’D’$’$rÊ ARGN E Þ Þ\ã\ãñÿE’$’$g¡Ø dn +ES TLEMEþYFNE TYTEPÞÞñÿ’D’$’$IÃæ \ã+ SON TOCPMTABIELÞñÿ’D”$’$¹fô Þ\ã\ãdn +YTEPO Fñÿ’D’$’$]J AVIRBAELÞÞ\ã+I SONñÿ’D’$’$Í TRAAR Y Þ Þ\ã\ãñÿE’$’$"Å dn +NIED XYTEPI SONÞÞñÿ’D’$’$Çú, \ã+ TOCPMTABIþ¸ßELW TIÞñÿ’D’$’$: Þ\ã+ HEDLCRATAOI N ñÿ’D’$’D}®H Þ Þ\ã\ãdn +YTEPO ñÿ’D’$’$8RV FAVIRBAELÞÞ\ã+I Sñÿ’D’$’$Xfd ON TEROCDR ÞÞ\ã\ñÿ¢D’$’$4Ër ãdn +YTEPO FAVIRBAELÞñÿ’D’$’$¯€ Þ\ã+M SU TEBF LIþK/ EROñÿ’D’$’$ÕÃŽ ÞÞ\ã+P OITNRE ñÿ’D’$’(�ùœ ÞÞ\ã\ãdn +LIELñÿ’D’$’$ñª AG LAPAREMETÞÞ\ã+ Rñÿ’D’$’$v¸ USSBITUTITNO ÞÞ\ã\ñÿ”D’$’$¶Æ ãdn +LIELAG LYTEPO Fñÿ’D’$’$Þ0Ô ÞÞ\ã+OLPOC NORTLOV þ~!RAñÿ’D’$’$ðâ ÞÞ\ã+AILB E ñÿ’D’$%æ(ð ÞÞ\ã\ãdn +LIñÿ’D’$’$wVþ ELAG LYTEPO FÞÞ\ã+ñÿ’D’$’$4Ž XERPSEISNO Þ Þ\ãñÿ’D’D’$ÃU \ãdn +YTEPC NOLFCI T ñÿ’D’$’(*C( Þ Þ\ã\ãdn xq‘Wþ§ñÿ”D¢(EnÊ6 xÞg: dÜdd@d�d³ñÿE¢(EêJD dÖddIdld³dÖdùñÿE¢(E0CR d d? db d… d¨ dÚ dý ñÿE¢(Ep;` d dR du d§ dÊ dü d ñÿ’D’$¢$=n bbÞÌ’qŸyÐÈdã +ñÿ’D’$’$}=| SAISMGNE TFOF LIÞÞ\ãñÿ’DþO%’$’$kMŠ +SEN TOA LLWODE ÞÞ\ñÿ’D’(’$Õµ˜ ã\ãd+ALEB LYTEPI CNñÿ’D’$’$®¦ MOÞÞ\ã+APITLB EIWHTñÿ’D’$’$mz´ S LEÞÞ\ã+CEITGNE PXñÿ’D’$’$u– ERSSOIÞÞ\ã^NÞ\ñÿ’D’(’$TÇÐ ã\ãd+USRBNAEGB UODNñÿ’D’$’$þan�RÞ SÞÞ\ã+UMTSB ECSLAñÿ’D’$¢$ª-ì RA ÞÞ\ã\ãd+ñÿ’D’$’$ú NIED XYTEPM SU TÞÞ\ãñÿ’D’$’$ % +ON TEBI TNGERE ÞÞ\ñÿ’D’(’$0¼ ã\ãd+SAISNGEMTNT Oñÿ’D’$’$õ[$ TSÞÞ\ã+NAADDRF NUTCñÿ’D’$’$ƒ2 þÌDOI NÞÞ\ã+SIN TOA LLñÿ’D’$”$@ WODE ÞÞ\ã\ãdñÿ’D’$’$šõN +SAISNGEMTNT OOFÞÞ\ñÿ’D’$’$‘\ ã+MRLAF NUTCOI NSIÞÞ\ñÿ’D’$’$½êj ã+N TOA LLWODE Þ Þñÿ’D¢$’$^øx \ã\ãd+ONS CU HIFñÿ’D’$’$æ^† LE Dþî�NIÞÞ\ã+T IH SERñÿ’D’$’$»ñ” OCDR Þ Þ\ã\ãdñÿ’H’$’$Yé¢ +YTEPE RRROI NERÞÞ\ñÿ’D’$’$qy° ã+DA ÞÞñÿ’D¢$’$ྠ\ã\ãd+CAUTLAP RAñÿ’D’$’$dgÌ MATEREÞÞ\ã+M SU TEBñÿ’D’$’$˜ÌÚ A V RAAIþ+:ÞÞ\ã+LB E ñÿ’D’$’$¬Šè ÞÞ\ã\ãñÿE’$’$˜¥ö d+OCTNOR LAVIRBAELÞÞñÿ’D’$’$1ß \ã+M SU TENTIEH REBÞñÿ’D’$’$O× Þ\ã+F ROAM LON RON Nñÿ’D’$’$¸Â ÞÞ\ã+OLAC L ñÿ’D’$’(Sð. ÞÞ\ãþ…¿\ãd+UMTLñÿ’D’$’${< DIFENIDEC SAÞÞ\ã+ Eñÿ’D’$’$ɲJ ALEB L ÞÞ\ã\ñÿ”D’$’$¯ÞX ãd+OT OAMYNC SASEI ñÿ’D’$’$ªõf ÞÞ\ã+ NACESS ATETEMTNñÿ’D’$’(ét ÞÞ\ã\ãd+IMSSñÿ’D’$’$±4‚ NI GOCRRSEOPÞþð­Þ\ã+DNñÿ’D’$’$í+� NI GAVIRNA TEDÞÞ\ã+ñÿ’D’$’$׫ž LCRATAOI N Þ Þ\ãñÿ’D’D’$_N¬ \ãd+ERLAO RTSIRGNT ñÿ’D’$’$\�º ÞÞ\ã+GAIFLESDN TOA ñÿ’D’$’$ùÜÈ LLÞÞ\ã+WODE ñÿ’D’$¢$tÖ ÞÞ\ã\þ„^ãd’qñÿ’D¢(Eä Ÿ_’Þgê d{ dž dÖ dù ñÿE¢(EÍ*ò d dN d€ d£ dÆ dø d9 ñÿE’(’$Ïùd\ d d± bbÌ q³ñÿ’D’D’$¹ÎuÐÈd¼+RPVEOISUD CEALARñÿ’D’$’$ã¨ÞÞ\ã+ITNOW SAN TOF ñÿ’D’$’$§Ä*ROÞÞ\ã+AWDR þk ñÿ’D’$¢$ÁI8 ÞÞ\ã\ãdé+ñÿ’D’$’$Õ5FGAIA NOFWRRA DEDÞÞ\ãñÿ’D’$’$l¶T+LCRADE ÞÞ\ñÿ’D’(’$>Zbã\ãdé+APAREMET RISEZñÿ’D’$’$ÎnpM ÞÞ\ã+SU TEBC NOTSñÿ’D’$¢$7ô~NA TÞÞ\ã\ãdé+þÚñÿ’D’$’$šùŒIMSSNI GAVIRNA TÞÞ\ãñÿ’D’$’$Šš+NID CEALARITNO ÞÞ\ñÿ’D’(’$†›¨ã\ãdé+USSBITUTITNOO ñÿ’D’$’$ŒY¶ FÞÞ\ã+TSNAADDRP ORñÿ’D’$’$n‰Ä/CUFÞÞ\ã+CNN TOA LLñÿ’D’$”$¦ÿÒWODE ÞÞ\ã\ãdéñÿþLJ’D’$’$ûà+UMTLDIFENIDEL BAÞÞ\ñÿ’D’$’$2îã+LE ÞÞ\ñÿ’D%’$ Úüã\ãdé+UMTLDICEALERñÿ’D’$’$ø½  DALÞÞ\ã+EB L ñÿ’D’$”$ÑS ÞÞ\ã\ãdéñÿ’D’$’$¹&+NUEDLCRADEL BALEÞÞ\ñÿ’D’(þtÐ’$_œ4ã\ãdé+NUEDIFEN DALEBñÿ’D’$%ÿöB LÞÞ\ã\ãdé+REñÿ’D’$’$!"POR RNIB SA EESÞÞ\ã^ñÿ’D’$’D8 ^TÞ\ ã\ãdé+AVUL Eñÿ’D’$’$ólAPAREMET RÞÞ\ã+XEEPñÿ’D’$’$�zTCDE ÞÞ\ã\ñÿ¢D’$’$§Ðþ›èˆãdé+TSNAADDRF LI EAWÞñÿ’D’$’$Ö&–Þ\ã+ SEREDLCRADE ñÿ’D’$’D¶‹¤ Þ Þ\ã\ãdé+NUEDLCñÿ’D’$’$”]²RADEE TXREÞÞ\ã+AN Lñÿ’D’$’$aøÀIFEL ÞÞ\ã\ñÿ¢D’$’$LŽÎãdé+OFTRAR NRPCODERUÞñÿ’D’$’$;ðÜÞþ“§\ã+ EROF NUTCOI NXEñÿ’D’$’$ÁÂêÞÞ\ã+EPTCDE ñÿ’D’$’(ÉàøÞÞ\ã\ãdé+APCSñÿ’D’$’$ ŽLAP ORECUDERÞÞ\ã+O ñÿ’D’$’$09 RUFCNITNOE PXÞÞ\ã+ñÿ’D’$’$Ôè"CEET D ÞÞ\ãñÿ’D’D’$Q60\ãþíždé+IMSSNI GIFEL' Iñÿ’D’$’$ém>ÞÞ\ã+PNTU 'NIP ORRGñÿ’D’$’$‡sL AÞÞ\ã+ MEHDANI G ñÿ’D’$¢$•GZ Þ Þ\ã\ãdé+ñÿ’D’$’$ã3hIMSSNI GIFEL' OÞÞ\ãñÿ’D’$’$ÈÄv+TUUP'TI NRPGO RÞÞ\ñÿ’D’$’$ò¡„ã+MAH AEþ�HIDGN Þ Þ\ñÿ’D%’$ÇÚ’ã\ãdé+LIELAG LATFGñÿ’D’$’$¾M EIDLÞÞ\ã+I NAVIRNAñÿ’D’$”$+® T Þ Þ\ã\ãdéñÿ’D%¢(ļ q²v ÞgÃddEdhdñÿ¢HE¢(!Ê‹d®dàdd&d:dNdñÿ¢HE¢(Ì0Øhd‹d®dÑþEûdd5dgAñÿ¢D’$¢$Å)æd™ b b(Ì‘ÞeÌñÿ”D%%C)ôŸÞeý ad ao dñÿ¢D’$’$b> aÐ bbšÌ´qï¤ÐÈñÿE’$’$ÚÛd¼+REOR RNIR AE LOCÞÞñÿ’D’$’$É\ã+SNATTN :IDIG TXEÞñÿ’D’$’$�Ÿ,Þ\ã+EPTCDE þ÷µ ñÿ’D’$’DEr:ÞÞ\ã\ãdË+TSIRGNñÿ’D’$’$äAHC NOTSNA TÞÞ\ã+UMTSñÿ’D’$’$ôuVN TOE CXEE DÞÞ\ã+OSñÿ’D’$’$<‚dRUECL NI E Þ Þ\ã\ñÿ”D’$’$ÜqrãdË+NIETEG ROCSNATTNñÿ’D’$’$ƒo€ÞÞ\ã+E CXEESDR þÜ€NAEG ñÿ’D’$’(SúŽÞÞ\ã\ãdË+ 8ROñÿ’D’$’$ñmœ9 I NCOAT LÞÞ\ã+UNñÿ’D’$’$]ÖªBMRE ÞÞ\ã\ñÿ”D’$¢(œJ¸ãdËÉqÌæÉÞgÃddñÿ¢H’D’$®'ÆDdvd™ bbNÌðq+òñÿ”D’$’$åèÔÐÈd�+OT OAMYNN SEET Dþ,ßñÿ’D’$’$ âÞÞ\ã+CSPOSEO FDINEITñÿ’D’$’$ýÚðÞÞ\ã+IFRE S ñÿ’D’$%§þ ÞÞ\ã\ãdœ+OTñÿ’D’$’$\Q  OAMYNN SEET DÞÞ\ã+ñÿ’D’$’$¼GRPCODERUSEA DNO/ÞÞ\ãñÿ’D’$’$aÿ(+ RUFCNITNO S Þ Þ\þ¯"ñÿ’D’(’$�‘6ã\ãdœ+OT OAMYNF ROAWñÿ’D’$’$aDDRÞÞ\ã+R FERENEEC Sñÿ’D’$’$Í}RFOP ÞÞ\ã+ORECUDERE ñÿ’D’$”$,È`TNIRSEÞÞ\ã\ãdœñÿ’D’$’$·­n+RPCODERU EOT OOLÞÞ\ñÿ’D’$’$© |ã+GN ÞÞ\ñÿ’DþO$%’$òëŠã\ãdœ+OT OAMYNL NOñÿ’D’$’$Ë!˜ GOCÞÞ\ã+SNATTN SNIñÿ’D’$’$šC¦T IH SÞÞ\ã+RPCODERUñÿ’D’$’$ô´ E Þ Þ\ã\ãdñÿ’H’$’$ưœ+OT OAMYNE RRRO SÞÞ\ñÿ’D’$’$~Ðã+NOT IH SOSRUECL ÞÞñÿ’D’$’$þ½9ÈÞ\ã+NI E Þñÿ’D”$’$¤!ìÞ\ã\ãdœ+OT OAMYNñÿ’D’$’$XHúE TXREANÞÞ\ã+ LEREFñÿ’D’$’$ÿþERCNSE Þ Þ\ã\ãñÿE’$’$дdœ+OT OAMYNE TXREANÞÞñÿ’D’$’$ïé$\ã+SL Þñÿ’D”$’$_!2þXÞ\ã\ãdœ+OT OAMYNñÿ’D’$’$¹@L COLAF ÞÞ\ã+LISE ñÿ’D’$’$D„N ÞÞ\ã\ãñÿE’$’$Eò\dœ+XERPSEISNOT OOC ÞÞñÿ’D’$’$Gj\ã+MOLPCITADE Þñÿ’D”$’$’"x Þ\ã\ãdœúq‘úÞñÿE¢(EUù†gˆþêYdØd d<dnd‘dÃñÿE¢(’$Tß”dõdd;d^ bbÌñÿ’D¢$’$ÿH¢r,g£ÐÈdù+IDIVISNOB ñÿ’D’$”$J¥° YEZORÞÞ\ã\ãdjñÿ’D’$’$;ø¾+ONC SA ERPVODIDEÞÞ\ñÿ’D’$’$[%Ìã+F ROT IH SAVUL EÞÞ\ñÿ’D%’$ÇÖÚã\þ‚ãdj+NIED XXERPSEñÿ’D’$’$HwèISNOÞÞ\ã+O TUO FOBñÿ’D’$”$ûðöNUSD ÞÞ\ã\ãdjñÿ’D’$’$'å+AVUL EOTB ESAISÞÞ\ñÿ’D’$’$&%ã+NGDEI SUO TFOB ÞÞ\ñÿ’D’$’$Æ ã+UODN S ÞÞñÿ’D¢$’$3Ò.\ã\ãþ¸Õdj+LEMENE TXEñÿ’D’$’$¾i<RPSEISÞÞ\ã+NOO TUO ñÿ’D’$’$ ”J FARGN EÞÞ\ã\ãdñÿ’H’$’$†BXj+LGBOLAL BALE Þ Þ\ñÿ’D’$’$¾+fã+ON TLAOLEW DHWNEÞÞñÿ’D’$’$ct\ã+D CEALIRGN Þñÿ’D’$’$–‚ Þ\ã+XEETNRþFÝLAP OR/C ñÿ’D’$’$Dâ�ÞÞ\ã+UFCN ñÿ’D’$’(œäžÞÞ\ã\ãdj+LGBOñÿ’D’$’$ãå¬LAV RA Þ Þ\ã+ONñÿ’D’$’$zº TLAOLEW D Þ Þ\ã+ñÿ’D’$’$VSÈHWNED CEALIRGN ÞÞ\ãñÿ’D’$’$¸aÖ+E TXREAN L þ=¾ Þ Þ\ñÿ’D’$’$±oäã+RPCOF/NU C Þ Þ\ñÿ’D%’$ˆÖòã\ãdjr,_ ^,ñÿE¢(EÀ#gdªd¾dádd6Añÿ’D’$’$I–AAAAAAAñÿ’D’$’$;–AAAAAAAñÿ’D’$’$-–*AAAAAAþ%Añÿ’D’$’$–8AAAAAAAñÿ’D’$’$–FAAAAAAAñÿ’D’$’$–TAAAAAAAñÿ’D¢(’$”BdQrôõ°^ôgMddñÿ’H’$’$¿ÊP0 b’b +UOPTTU ñÿ’D’$’$¹^ ÞÜã+4PREORSR ñÿ’D’$¢$õjlÞCÜãÞÔ ÞGÐÌGÈe‡CÝñÿ’D’$¢$ë»zãÝÌ ñÍßCÏ ÌèÔdt^ñÿ’D’$’$¾.þ’ˆ ÞÜ ã+REOR RUSMMRA Y ñÿ’D’$’$‡– Þ ÞÜãÜã^ ÞÜ ã+****ñÿ’D’$’$ŽR¤******** * Þ ÞÜãÜãÜñÿ’D’$’D�²ãÞÔ ÞGÐÌGÈe;ÞÔ;ÞHÐñÿ’D’D’$¹nÀÌHÈe6ÌÝÌ ñ ßÛ(eñÿ’H’$’$´ Î1Ì<ÞÌÔ^ ÞÜ ãÌÞñÿ’D’$’$0ÜÜþYXã^:ÞÜ ã^ ÞÜ ãÌdñÿ”H”(”(ræê ad1 a”d1 aêñÿEEEz>ød1 ad1 aÌd1 añÿ¢H¢(¢(w`�d1 akd1 ad1dñÿ’H%¢(U1 ñ6 Þgdëdðdõdñÿ¢HE¢(YÕ"údÿdd ddddñÿ’H’(’(î–0Ìèþ!äÔdÀÌèÔd·CÜãÜùÿ’DDËÂ>ã aR*ÿÿ@»¨Dÿÿ û_€þ¸¸ÿMAKEP4COMP.CMûdU GþDELETE PASCOVMAP.LD;^ RLDR R2IOUTL,R2SCONSTS,R2SECHK,R2SDECODER,^ R2CITAB,R2SMEMACC,R2SADMIN,R2SINTEGER,R2SBOOLEAN,^ R2SSET,R2STESTS,R2SMISC,R2CSPTAB,R2SHEAP,^ R2SOPN,R2SIOIN,R2SRD,R2STI,R2STP,R2IREAL,^ R2IFNS,R2IFT,R2IFW,R2SOVL,^ R2SMYP,R2SDIV,R2SMPD,R2SDþbŸ¥BIN,MATH.LB,^ P4PASCAL,P4BLOCK[P4INIT,^ P4DECLARE,P4BODY P4CODEGEN] P4COMPILER/S PASCOVMAP.LD/L^ ÿR2ROUTL.RBûU!4þÈwýÿtÏ”¯ô€ñÿH’FÆï½‚ ÓéÀy õéZ1éÀN:éÀžëÿlÛØØܱÿ\ŒÿD½Ã8ÿUÃ8ÿï½c‚ÿ[¹ãBÿTxÿôÿ¤„$IDûìÿÿ AIAEñÿG’$'­÷Y(’ÒÁ‚Àª:¿žZY(’ÒÀªñÿ’D’8â8ý¥"§À‚  Y(ÿ"Å�Pª8ç@ñÿÈD„Â$' !( Hþ“» ,Í ƒû) (�ñÿ[è$:p½*H,1µ (0•P0•"õÿ’P’$ ÿ÷8 03( €üÿÿÿ@¹¿Fÿÿ@µ¿Jûÿ¶Mc¬Jœ$¬4ÿÿ@m¿’ÿÿ@)¿Öÿÿ@å¾ÿÿ@¡¾^ñÿ’D’$’$úYNÿ $@¥#H"H!H!$8#\ ñÿ’D’$’$aöþ4z\Õ­Q! ?( ë12P)¶TQ & ñÿÂD’$ÈÄfcj N1 PN1 *O!¥PÒPH!HA 0 ñÿZ’˜Â$xgx0 ‚ ?÷º ϸ Ë X4!ñÿ’D’„’„‘A†Õ ? -) µ(  X*!%)Õ ñÿÌDÓ’$[¸”?ö  0 "û1)¶Qî ñÿ’D’$’$;¢%!S‚Æ�…1û*ŽûJÀÿ¢!@ ñÿ’L’$’lcI°bþxò?OC.MMC ~ŽðÿþÿD-ؾãÿÿ@8¿Çÿÿ@6¿Éôÿ@QÀn¡¤áGN à]®%Þìß+EGRTñÿ’D’$’$ VLNAOD à]®&Þìß+ñÿ’D’$’$Ý ZAPEG  à]®'Þìñÿ’D’$’$Îhß+OE R à]®ñÿ’D’$’$O/vþOÆ(Þìß+ORNU D àñÿ’D’$’$žæ„]®)Þìß+AHTL ñÿ’D’$’$ÌÒ’à bbl-ÝÞã-ÌÐÈèñÿ’D’$’$9ó ÞÈèÞÈèÞ,ÝÞã,Ìñÿ’D’$’$R®ÐÈèÞÈèÞÈèÞ+Ýñÿ’D’$’$;6¼Þã+ÌÐÈèÞÈèÞÈèñÿ’D’$’$+ÊÞþÆš*Ý Þã*ÌÐÈèÞÈèÞñÿ’D’$’$ÿØÈèÞ)ÝÞã)ÌÐÈèÞñÿ’D’$’$ã@æÈèÞÈèÞ.ÝÞã.ÌÐÈñÿ’D’$’$×ôèÞÈèÞÈèÞ(Ý Þãñÿ’D’$’$Ó"(ÌÐÈè+ÌÈèÞÈèÞñÿ’D’$’$pÌÈèÞ bb‚ÜÞãÈ Ðñÿ’D’$’$Ÿ4 È+NIETþ,EG R à È èñÿ’D’$’ĶÊ,-Ì ÈèÞ ÈaÜÞãÈñÿ’D’$’$­¯: Ð È+ERLA à Èñÿ’D’$’8–6H è,Ì ÈèÞ ÈaÜÞãñÿ’D’$’$оVÈ Ð È+HCRA àñÿ’D’$'öbd È è+Ì ÈèÞ ÈaÜÞñÿ’D’$’$L[rãÈ Ð È+OBþ¬‡LOAE N ñÿ’D’$â$ a€à È è*Ì ÈèÞ ÈaÞñÿ’D’$’D´¾ŽÐÞÐÞ ÐÈ ÈeÁÜÞãÈñÿ’D’$’$ŒÏœ Ð È]®Èìßà È è*Ì Èèñÿ’D’$’$]ǪÈ ÈèÈÞ ÈèÞ ÈñÿG”$’$)+¸aÈÐÈèÐd“*ÌèÈÜñÿ’D’$’$5ÇÆÞãÈ Ð È+IN Lþ*{ ñÿ’D’$’$ ÞÔà È è)Ì ÈèÞ ÈèÞñÿ’Dâ$’$•¶â ÈèÞ Èa$ÞÐ%Þ ÐÈ Èñÿ¢D’$’$=ðeÜÞãÈ Ð È]®Èìßñÿ’D’$’$ëüþà È èÞ ÈèÞ ÈèÈÞñÿ’D’$â$®<  ÈèÞ ÈèÞ ÈaÈñÿ”D’$’$5'èÐdîÜÞãÈ Ð Èþýa]®&Þìñÿ’D’$’$Êì(ßà È èÞ ÈèÞ ÈèÞñÿ’D’$'AP6 ÈèÞ ÈèÞ ÈaÜÞñÿ’D’$’$ý«DãÈ Ð È]®)Þìßà È èÞñÿ’D’$’$ˆûR ÈèÞ ÈèÞ ÈèÞ Èèñÿ’D’8’$â`Þ ÈaÜÞãÈ Ð È]®ñÿ’D’$’$ln'Þìßà È èÞ ÈèÞþa• Èèñÿ’D’$œ$„&| Þ ÈèÞ ÈèÞ Èañÿ’D’$’$›×ŠÜÞãÈ Ð È]®(Þìßà È èñÿ’D’$’$aŘÞ ÈèÞ Èè Þ ÈèÞñÿ’Dâ$’$¶¦ ÈèÞ ÈaÞÐÞ ÐÈ Èñÿ¢D’$’$µ ´eâÜÞãÈ Ð È]®Èìßñÿ’D’$’$9üÂà È èÞ ÈèÞ ÈèÈÞþ4åñÿ’D’$â$ê;Ð ÈèÞ ÈèÞ ÈaÈñÿ”D’$’$°%ÞèÐd²ÜÞãÈ Ð È]®#Þìñÿ’D’$’$ ììßà È èÞ ÈèÞ Èè Þñÿ’D’$'y[ú ÈèÞ ÈèÞ ÈaÞÐñÿ’D%’$$dÞ ÐÈ Èe:ÜÞãÈ Ð È]ñÿ’D’$’$F®Èìßà È èÞ ÈèÞ ÈñÿþcO’D’$’$Ì�$èÈÞ ÈèÞ ÈèÞ ñÿâD¢$’$Un2ÈaÈèÐd ÞÐÞ ÐÈ Èñÿ¢D’$’$� @enÜÞãÈ Ð È]®Èìßñÿ’D’$’$¡ûNà È èÞ ÈèÞ ÈèÈÞñÿ’D’$â$];\ ÈèÞ ÈèÞ ÈaÈñÿ”D’$’$ÃjèÐd>ÜÞãÈ Ð È+ ñÿ’D’$þ.’$ßÙx à È è,Ì ÈèÞñÿ’D’$’$xÚ† ÈèÞ ÈèÞ ÈèÞ Èñÿ’D’$%ʆ”èÞÞÐ Þ ÐÈ ÈeßÜ Þñÿ’D’$’$’Ò¢ãÈ Ð È]®Èìßà È è,Ìñÿ’D’$’$° ÈèÈ ÈèÞ ÈèÞ Èèñÿ’D’$’$,Ó¾Þ ÈèÞ ÈèÈ Þ Èèñÿ’D’$œ$3%þ¡ÌÞ ÈèÞ ÈèÞ Èañÿ’D’D’$4%ÚÈèÐd› bb 5ÝÞã5Ìñÿ’D’$’$YèÐÈ+ àÈñÿ’D’$’$±Úö èÞÈèÞ4ÝÞã4ÌÐÈ+ñÿ’D’$’$=õ àÈ èÞñÿ’D’$’$µîÈèÞÈèÞÈèÞ3ÝÞñÿ’D’$’$ôø ãþ8¡3ÌÐÈ+ ñÿ’D’$’$á.àÈ èÞÈèÞÈèÞÈñÿ’D’$’$‰Ó<èÞÈèÞÈèÞ2ÝÞãñÿ’D’$’$ËûJ2ÌÐÈ+ àñÿ’D’$’$«ùXÈ èÞÈèÞÈèÞÈèñÿ’D’$’$¼·fÞ1Ý Þã1ÌÐÈ+ ñÿ’D’$’$C7t þ2§àÈ èÞÈèÞÈñÿ’D’$’$pµ‚èÞÈèÞÈèÞ ÈèñÿG’$’$ôE�aÈèÞÈèÞÈèÞñÿ’D’$’$I]ž0Ý Þã0ÌÐÈ+ ñÿ’D’$’$=±¬ àÈ èÞÈèÞÈèÞñÿ’D’$’$@•ºÈèÞÈèÞÈèÞ ñÿœD’$’$~ÈÈèaÈþÇÞèÞÈèÞÈèñÿ’D’$’$)¿ÖÞ bbÐÞ/ÔÞ"ÔÞ$ÔÞñÿ’D’$”$îËä#ÔÞ'ÔÞáÔÞÔ ÞÐÌÈeñÿ’D’$’$B¡ò¹ÝÌìß^ ÌèÔdñÿ’H’$’$s®íÞ&ÔÞ%ÔÞ¤ÔÞT®ÞÔÞ6Ôñÿ’D’$’$²E ÞÞÞ ÔÞÔÞÔÞ!Ô^ ñÿ’D’$’$=ÔÞÔÞ7Ô^ÿþƒ˜ ÞT­ÞÞñÿ’D’$’$.™*T¬ b b>^òWñÿ’D’$’$ß8^€O'ÿ×^|€ñÿ’D’$’$MÉFÿÏ'û×^\ç×^�>ñÿ’D’$’$^ÐT÷×^#ó×^ øï×^ñÿ’D’$’$Wšbþë× b bZ]GÞìñÿ’D’$’$nøpß+FI þ‹J à]Gñÿ’D’$’$›‘~Þìß+OD àñÿ’D’$’$RŒ]GÞìß+FO  ñÿ’D’$’$vcšà]GÞìß+OT ñÿ’D’$’$hn¨ à]GÞìß+NI ñÿ’D’$’$Uh¶ à]GÞìß+RO ñÿ’D’$’$x—Ä à]GÞþ¶ìß+ñÿ’D’$’$ÒNE D à]GÞìñÿ’D’$’$õÈàß+OF R à]Gñÿ’D’$’$2Mî Þìß+AV R àñÿ’D’$’$ØÜü]G Þìß+ID V ñÿ’D’$’$ÿE à]G Þìß+OM D ñÿ’D’$’$ú/ à]G Þìß+ES T þL ñÿ’D’$’$âQ& à]G Þìß+NA Dñÿ’D’$’$—4  à]GÞìß+ñÿ’D’$’$‹þBON T à]GÞìñÿ’D’$’$^ÇPß+HTNE à]Gñÿ’D’$’$‹\^Þìß+LEES àñÿ’D’$’$9Ël]GÞìß+IWHT þ­#ñÿ’D’$’$Y;zà]GÞìß+OGOT ñÿ’D’$’$b@ˆ à]GÞìß+ACES ñÿ’D’$’$;2– à]GÞìß+YTEPñÿ’D’$’$Š–¤ à]GÞìß+ñÿ’D’$’$õ ²IFEL à]GÞìñÿ’D’$’$ö¨Àß+EBIG N à]Gñÿ’DþO(’$’$ÎÞìß+NUIT L àñÿ’D’$’$¿°Ü]GÞìß+HWLI E ñÿ’D’$’$í êà]GÞìß+RAAR Y ñÿ’D’$’$Ïø à]GÞìß+OCSN T ñÿ’D’$’$ÜG à]GÞìß+ALEBñÿ’D’$’$j L à]GÞìß+ñÿ’D’$’$þó!NÜ" EREPTA à]GÞìñÿ’D’$’$\˜0 ß+EROCDR à]Gñÿ’D’$’$b$> Þìß+ODNWOT àñÿ’D’$’$,½L ]GÞìß+APKCDE ñÿ’D’$’$WZ à]G Þìß+ARDNMO ñÿ’D’$’$"øh à]G!Þìß+OFWRRA Dñÿ’D’$’$R6v þ¿’ à]G"Þìß+RPGOñÿ’D’$’${6„ AR M à]G#Þìß+ñÿ’D’$’$¦§’ UFCNITNO à]G$Þìñÿ’D’$’$­r  ß+XEETNRLA à]Gñÿ’D’$’$Ìù® %Þìß+RPCODERU àñÿ’D’$’$ÚŒ¼ ]ÛÞìßÞ]ÛÞìßÞñÿ’D’$’$´ŒÊ ]ÛþdÞìßÞ]ÛÞìßÞñÿ’D’$’$†ŒØ ]ÛÞìßÞ]ÛÞìßÞñÿ’D’$’$bŒæ ]ÛÞìß!Þ]ÛÞìß#Þñÿ’D’$’$³Gô ]Û Þìß&Þ b b°]äñÿ’D’$’$9Œ Þìß Þ]äÞìß+Þ]äñÿ’D’$’$Œ Þìß*Þ]äÞìß,Þ]äñÿ’D’$’$SŒ ÞìßÞþE]äÞìßÞ]äñÿ’D’$’$Œ, Þìß'Þ]äÞìß$Þ]äñÿ’D’$’$"Œ: ÞìßÞ]ä ÞìßÞ]äñÿ’D’$’$ ŒH ÞìßÞ]ä ÞìßÞ]äñÿ’D’$’$ŒV ÞìßÞ]äÞìßÞ]äñÿ’D’$’$°‹d Þìß.Þ]äÞìß(Þ]äñÿ’D’$’$©‹r Þìß%Þ]þ,»äÞìß&Þ]äñÿ’D’$’$­‹€ Þìß!Þ]äÞìßÞ]äñÿ’D’$’$”‹Ž ÞìßÞ]äÞìßÞ]äñÿ’D’$’$r‹œ Þìß)Þ]äÞìß#Þ]äñÿ’D’$’$~‹ª ÞìßÞ]äÞìßÞ]äñÿ’D’$’$f‹¸ ÞìßÞ]äÞìß"Þ]äñÿ’D’$’$?‹Æ ÞìßÞ]äÞþB=ìß-Þ]äñÿ’D’$’$,‹Ô ÞìßÞ]ä Þìß0Þ]äñÿ’D’$’$/‹â !ÞìßÞ]ä"ÞìßÞ]äñÿ’D’$’$ ‹ð #ÞìßÞ]ä$Þìß1Þ]äñÿ’D’$’$ þ %ÞìßÞ] ^+.ßÞ]ñÿ’D’$’$* ^-.ßÞ] ^*.ßÞñÿ’D’$’$$m ] ^/.ßÞ]þ5: ^(.ñÿ’D’$’$ ( ßÞ] ^).ß Þ] ^ñÿ’D’$’$Þ6 $.ß/Þ] ^=.ßÞ]ñÿ’D’$’$ÂD ^ .ß/Þ] ^,.ß Þñÿ’D’$’$ãnR ] ^..ßÞ] ^'.ñÿ’D’$’$¨Ù` ß/Þ] ^[.ß Þ] ^ñÿ’D’$’$ÁÏn ].ß Þ] ^:.ßÞþ6I]ñÿ’D’$’$¯Ñ| ^^.ßÞ] ^<.ßÞñÿ’D’$’$²JŠ ] ^>.ßÞ] ^;.ñÿ’D’$’$e㘠ß Þ bbôÞÐ%ÞÐÈÈñÿ¢D’$’$}3¦ eµ ]IÈìßÞÈèÐdñÿ’H’$’$G‚´ ¤ ]IÞìßÞ]I ÞìßÞñÿ’D’$’$á‰Â ]I ÞìßÞ]IÞìßÞþ"ãñÿ’D’$’$æUÐ ]I ÞìßÞÞ0Ð?Þ0.ñÿ’D%’$jFÞ ÐÈ.Èeñ ]nÈ.ßÞñÿ’D’D’$ì ÈêÐdß ]n^+.ßÞ]ñÿ’D’$’$wú n^-.ßÞ]n^*.ßÞñÿ’D’$’$pV ]n^/.ßÞ]n^=.ñÿ’D’$’$L÷ ß Þ]n^<.ßÞ]n^ñÿþMF’D’$’${8$ >.ß Þ b bÊ]ÐÞìñÿ’D’$’$ôô2 ß+G TE à]Ðñÿ’D’$’$ª{@ Þìß+P TU àñÿ’D’$’$Ö N ]ÐÞìß+R ID ñÿ’D’$’$ük\ à]ÐÞìß+R RD ñÿ’D’$’$ükj à]ÐÞìß+R CD ñÿ’D’$þGa’$â]x à]ÐÞìß+W IRñÿ’D’$’$3�† à]ÐÞìß+ñÿ’D’$’$‚'” W OR à]ÐÞìñÿ’D’$’$vç¢ ß+W RR à]Ðñÿ’D’$’$=~° Þìß+W CR àñÿ’D’$’$Pý¾ ]Ð Þìß+W SR ñÿ’D’$’$Œ_þ—êÌ à]Ð Þìß+O NP ñÿ’D’$’$ujÚ à]Ð Þìß+N WE ñÿ’D’$’$e\è à]Ð Þìß+R TSñÿ’D’$’$¼�ö à]ÐÞìß+ñÿ’D’$’$- E NL à]ÐÞìñÿ’D’$’$ð ß+S NI à]Ðñÿ’D’$’$Ê€ Þþþ;ìß+C SO àñÿ’D’$’$îö. ]ÐÞìß+E PX ñÿ’D’$’$ ^< à]ÐÞìß+S TQ ñÿ’D’$’$`J à]ÐÞìß+L GO ñÿ’D’$’$[X à]ÐÞìß+A NTñÿ’D’$’$E�f à]ÐÞìß+ñÿ’D’$’$š,t R NL þ( à]ÐÞìñÿ’D’$’$šì‚ ß+W NL à]Ðñÿ’D’$’$@Ž� Þìß+S VA àñÿ’D’$’$vž ]ÐÞìß+C SL ñÿ’D’$’$’j¬ à]ÐÞìß+W RD ñÿ’D’$’$ˆ\º à]ÐÞìß+R RR ñÿ’D’$’$†mÈ þÒ©à]ÐÞìß+P GAñÿ’D’$’$ÎŽÖ à]ÐÞìß+ñÿ’D’$’$,)ä E RO à]ÐÞìñÿ’D’$’$8åò ß+R ES à]Ðñÿ’D’$’$ÎwÞìß+R RW àñÿ’D’$’$ÿÿ]ÐÞìß+R DN  ñÿ’D’$’$Àà b bŠþÄ]RÞß+A IBñÿ’D’$’$ÓZ* à]RÞß+A ñÿ’D’$’$³88RB à]RÞß+ñÿ’D’$’$lAFA ID à]RÞßñÿ’D’$’$XõT+A RD à]RÞñÿ’D’$’$Xêbß+A DN à]Rñÿ’D’$’$’pÞß+D FI þþ à]ñÿ’D’$’$.a~RÞß+D IV àñÿ’D’$’$äŒ]RÞß+D RV ñÿ’D’$’$ šà]RÞß+E FO ñÿ’D’$’$.¨à]R Þß+F OL ñÿ’D’$’$.¶ à]R Þß+F TL ñÿ’D’$’$ù+Ä à]R Þß+I NNþ€_ ñÿ’D’$’$ä+Ò à]R Þß+I TN ñÿ’D’$’$×*à à]R Þß+I RO ñÿ’D’$’$Ò*î à]RÞß+M DOñÿ’D’$’$çYü à]RÞß+M ñÿ’D’$’$Ü) IP à]RÞß+ñÿ’D’$’$w4M RP à]RÞþ+Áßñÿ’D’$’$tñ&+N IG à]RÞñÿ’D’$’$kð4ß+N RG à]Rñÿ’D’$’$š BÞß+N TO à]ñÿ’D’$’$HrPRÞß+O DD àñÿ’D’$’$2÷^]RÞß+S IB ñÿ’D’$’$là]RÞß+S RB þ©"ñÿ’D’$’$(2zà]RÞß+S SG ñÿ’D’$’$#(ˆ à]RÞß+S IQ ñÿ’D’$’$ (– à]RÞß+S RQ ñÿ’D’$’$ÿ$¤ à]RÞß+S OT ñÿ’D’$’$û&² à]RÞß+T CR ñÿ’D’$’$å*À à]RÞß+U INñÿ’DþI'’$’$YÎ à]RÞß+S ñÿ’D’$’$õ$ÜPT à]RÞß+ñÿ’D’$’$£0êC PS à]RÞßñÿ’D’$’$¤òø+D CE à]R Þñÿ’D’$’$ èß+E TN  à]Rñÿ’D’$’$Æ!Þß+F PJ à]ñÿ’D’$’$þ¹og"R"Þß+I CN àñÿ’D’$’$aê0]R#Þß+I DN ñÿ’D’$’$S>à]R$Þß+I AX ñÿ’D’$’$S7Là]R%Þß+L OA ñÿ’D’$’$R5Z à]R&Þß+L AC ñÿ’D’$’$54h à]R'Þß+L OD ñÿ’D’$’$)vþ[ð à]R(Þß+M VO ñÿ’D’$’$%„ à]R)Þß+M TS ñÿ’D’$’$ý2’ à]R*Þß+R TEñÿ’D’$’$!X  à]R+Þß+S ñÿ’D’$’$&®OR  à]R,Þß+ñÿ’D’$’$®8¼X PJ à]R-Þßñÿ’D’$’$½îÊ+C þLKH à]R.Þñÿ’D’$’$ÔàØß+C PU à]Rñÿ’D’$’$â æ/Þß+E UQ à]ñÿ’D’$’$ƒoôR0Þß+G QE àñÿ’D’$’$så]R1Þß+G TR ñÿ’D’$’$pà]R2Þß+L AD ñÿ’D’$’$3à]Rþ¤†3Þß+L CD ñÿ’D’$’$b2, à]R4Þß+L QE ñÿ’D’$’$Q2: à]R5Þß+L SE ñÿ’D’$’$Q(H à]R6Þß+L DO ñÿ’D’$’$32V  à]R7Þß+N QE ñÿ’D’$’$#d à]R8Þß+S RTñÿ’D’$’$?Wr þŠÆà]R9Þß+U ñÿ’D’$’$5-€PJ à]R:Þß+ñÿ’D’$’$ã/ŽO DR à]R;Þßñÿ’D’$’$Öíœ+C RH à]R<Þñÿ’D’$’$ýêªß+U CJ à]Rñÿ’D’$’$ ¸=Þß+C PX à]ñÿ’D’$’$ŸgÆR>Þß+H TL þ¯% àñÿ’D’$”$ß"Ô bbFÞÐ?ÞÐÈÈeïñÿ’D’$¢$iÄâ]È0.ßÞÈèÐdÝ]ñÿ’D’$’$Uäð^A.ßÞ]^B.ßÞñÿ’D’$’$I8þ]^C.ßÞ]^D.ñÿ’D’$’$9ë ßÞ]^E.ßÞ]^ñÿ’D’$’$2ÔF.ßÞ]^G.þ0�ßÞ]ñÿ’D’$’$Ö(^H.ßÞ]^I.ßÞñÿ’D’$’$*6]^J.ßÞ]^K.ñÿ’D’$’$äDßÞ]^L.ßÞ]^ñÿ’D’$’$úÅRM.ßÞ]^N.ßÞ]ñÿ’D’$’$åÇ`^O.ßÞ]^P.ßÞñÿ’D’$’$Ùn]^Q.ßÞ]^þ/hR.ñÿ’D’$’$ÉÜ|ßÞ]^S.ßÞ]^ñÿ’D’$’$·ŠT.ßÞ]^U.ßÞ]ñÿ’D’$’$­¹˜^V.ßÞ]^W.ßÞñÿ’D’$’$¡ ¦]^X.ßÞ]^Y.ñÿ’D’$’$‘Õ´ßÞ]^Z.ßÞ]^ñÿ’D’$’$ˆÿÂ0.ßÞ]^1.ßÞ]þéñÿ’D’$’$sÐ^2.ßÞ]^3.ßÞñÿ’D’$’$hUÞ]^4.ßÞ]^5.ñÿ’D’$’$WùìßÞ]^6.ßÞ]^ñÿ’D’$’$Pñú7.ßÞ]^8.ßÞ]ñÿ’D’$’$:^9.ßÞ]^+.ßÞñÿ’D’$’$/g]^-.ßÞ]^*.ñÿþOS’D’$’$$ßÞ]^/.ßÞ]^ñÿ’D’$’$2(.ßÞ]^).ßÞ]ñÿ’D’$’$@^$.ßÞ]^=.ßÞñÿ’D’$’$÷qN]^ .ßÞ]^,.ñÿ’D’$’$å\ßÞ]^..ßÞ]^ñÿ’D’$’$ÞÝj'.ßÞ]^[.ßÞ]ñÿ’D’$þeü’$ÉÎx^].ßÞ]^:.ßÞñÿ’D’$’$¿$†]^^.ßÞ]^;.ñÿ’D’$’$­ò”ßÞ]^<.ßÞ]^ñÿ’D’$’$Cî¢>.ßÞ]l^0.ßÞ]ñÿ’D’$’$Èû°l^1.ßÞ]l^2.ßÞñÿ’D’$’$¼O¾]l^3.ßÞ]l^4.ñÿ’D’$’$¦òþ±ÌßÞ]l^5.ßÞ]l^ñÿ’D’$’$ïÚ6.ßÞ]l^7.ßÞ]ñÿ’D’$’$‚íèl^8.ßÞ]l^9.ß Þñÿ’D’$’$¼ö b bx]ÞßÞ]ñÿ’D’$’$,hÞßÞ]ÞßÞ]Þñÿ’D’$’$6ßÞ]ÞßÞ]Þñÿ’D’$’$6 ßþ1Þ]ÞßÞ]Þñÿ’D’$’$ôf.ßÞ]ÞßÞ] Þßñÿ’D’$’$àg<Þ] ÞßÞ] ÞßÞñÿ’D’$’$Ï5J] ÞßÞ] ÞßÞñÿ’D’$’$À5X]ÞßÞ]ÞßÞñÿ’D’$’$®=f]ÞßÞ]ÞßÞñÿ’D’$’$�ôt]Þþ ÏßÞ]ÞßÞ]ñÿ’D’$’$ug‚ÞßÞ]ÞßÞ]Þñÿ’D’$’$qf�ßÞ]ÞßÞ]Þßñÿ’D’$’$dgžÞ]ÞßÞ]ÞßÞñÿ’D’$’$O5¬]ÞßÞ]ÞßÞñÿ’D’$’$Bðº]ÞßÞ]ÞßÞ]ñÿ’D’$’$sÈÞßÞþUG] ÞßÞ]!Þñÿ’D’$’$fÖßÞ]"ÞßÞ]#Þßñÿ’D’$’$gäÞ]$ÞßÞ]%ÞßÞñÿ’D’$’$óïò]&ÞßÞ]'ÞßÞ]ñÿ’D’$’$Ö@(ÞßÞ])ÞßÞ]ñÿ’D’$’$§f*ÞßÞ]+ÞßÞ],Þñÿ’D’$’$½eßÞ]-Þþ,¦ßÞ].Þßñÿ’D’$’$¬f*Þ]/ÞßÞ]0ÞßÞñÿ’D’$’$š48]1ÞßÞ]2ÞßÞñÿ’D’$’$…—~ßÞ]<ÞßÞ]=ÞßÞñÿ’D’$’$*XŒ]>ÞßÞ]MÞìßÞñÿ’D’$’$š]MÞìßÞ]MÞìñÿ’D’$’$&¨ßÞ]MÞìßÞ]Mñÿ’D’$’$>½¶ÞìßÞ]MÞìßÞñÿ’D’$’$ÝsÄ]MÞìßÞ]MÞþB…ìßÞñÿ’D’$’$ÑÒ]M ÞìßÞ]M Þìñÿ’D’$’$Æ%àßÞ]M ÞìßÞ]Mñÿ’D’$’$ú¼î ÞìßÞ]M ÞìßÞñÿ’D’$’$ž{ü]MÞìßÞ]MÞìßÞñÿ’D’$’$Œ{ ]MÞìßÞ]MÞìßÞñÿ’D’$’$z{]MÞìßÞ]MÞìßÞþ9ðñÿ’D’$’$gs&]MÞìßÞ]MÞìßÞñÿ’D’$’$UI4]MÞìßÞ]MÞìßñÿ’D’$’$E&BÞ]MÞìßÞ]MÞñÿ’D’$’$–=PìßÞ]MÞìßÞ]ñÿ’D’$’$ À^MÞìßÞ]MÞìßÞñÿ’D’$’$Il]MÞìßÞ]MÞìßþ±%ñÿ’D’$’$]¤zÞ]MÞìßÞ b bñÿ”D%¢DPˆ ah aü aœ a ñÿE¢D’$¬ð–a* aÕ aø bb| ñÿE¢D’$껤aÙ a- a…Þ8ÔÞ9Ô;ÝÞñÿ’D’$’$|Ʋ ßÐÈÞÈèÞÈèÞ ñÿE¢D’(?óÀa• a a aàÞ9ÔÞñÿ’DþFŠù’$’$í(Î8Ô;ÝÞ ßÐÈÞÈèÞÈèüÿ�D–±ÜÞ ÿÿ û_€ÿR2SADMIN.RBûY!6þ½$ýÿ“•¯Ô8ßÿ$I$I@Twl§A[ä§‚Vl§‚N¥‚JD§‚Q¥¤‚F練;ð¤–$ª¤‚§¤‚ 5¦–ñÿ’D’$’$xxÕÿ!8S" C% C!ž!X !8ñÿ’D’$’$´}½)½"X CP 2" 9�ñÿ’D’$’$$‰"�‚¥í) b�Ò•ªª  ñÿ’D’$’$)Å*" ­Ñ !!LÓý! þ¢ƒGÆ%@$(#�ñÿ’D’$’$î×8 ) "0Î!H!"@"%@""@ ñÿ’D’$’$èF!–ÿ!,! ª P !,! ªöÿ’D’$ÀÜT ù!,!Pª¶ô) úÿH¼In¹�8I+éá’ÿÿ û_€ÿR2SSPTAB.RBûU!7þñ5ýÿ¼•¯T”ýÿ@În¹€8ñÿ’D’$’$erÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’D’$’$Wrÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ”D?;ÿÿÿÓÿ$I$I$ISp§HýØKÙŒñÖŒ›ØUÄÙŒ üØŒžÖ‘‚ØxøØFýؖ٠OØ¥#Ù–ÙxÓÿ$I$I$Iy‘þz[þ ØUúÖ‚¡Ö‘VÖxîÖx¯Ø–7×–öØxîØŒ îØ_ îØA ÄÙ‘¶ÙŒÄÙ_ÄÙA ýÿ@:n¾Ùxÿÿ û_€ÿR2CRCODE.RBûU!8þÚÀýÿÃÂ…¯´�ôÿ@R§Ú¸¥A¤¤™^éFeé–üÿ ‰Ðv ñÿ’D’$’$SÇX &X ' &8+3ÿB&Xñÿ’D’D’$WW &8+3 'P&& &AIQøÿ’D€$Ì!)1ýÿ@àC+éá’ÿÿ û_€ÿR2SITAB.RBûU!5þ¶ýÿ“핯Ôbúÿ�m{{@<@{{ <ñÿ’„’$†ÒÐÿÿÿÿÿÿÿÿÿÿ ÿÿñÿ’„’$’$W2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„’$’$I2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„È$H†HÏ*ÿÿÿÿÿÿÿ12ÿ356ñÿH’H’H2Ý&8789:;<=>?ÿñÿþ7%’È�H†àÓFÿHIJÿLMNÿPQRñÿH†Â0’$v¢TÿTUVÿXÿYÿÿÿÿÿÿñÿ’„Â$†ÈÎbÿÿÿÿÿÿÿ@ÿiÿkÿmñÿ’„H†H’NÞpÿÿÿÿoÿtvwxyz{|ýÿ’ˆl~}~ÓÿH’H’H’ÏÍY¦x¸¥A4„¦�G/„¦¡G.„¦aG-„¦aH,š¤Œ0f¥–&§‚*¿¤¡Bn¿¤þëKAlý¥7+1¦ `ФŒ Ф_ÓÿH’H’H’"2¦Œ2¦_v¦F1¦F�¥x(p§_'�¥–&äP%‘¥Œ#P¤F"Y¦–!D¤ŒD¤_#§Œ#§_ÓÿH’H’H’öQ¦ŒQ¦_L§A¥}¥–§‘$§Œ§_F¤ŒF¤_ñ¤P)š¤¡isš¤�irš¤aiqš¤¡jpÓÿH’H’H’±l§AAD§‚fþÚnêä§‚g¥‚el§‚dÿ¥‘Gÿ¥‡FD¥–E7¥‡DO¦‡Có¤›Bš¥7_¥¤‚c練 ð¤–bÓÿH’’H’ª¤‚u§¤‚a5¦– �¥¡Bj�¥Ah&§¡~ �¥¡GZ�¥F[ý¥_ÿþ¥A^&§} û¥}]þ¥7\$§}W&§ŒSúÿ�^`þ¥}O ¦FKÿÿ û_€ÿP4BODY.RBûY`þÝEýÿòöN¯Óÿ$I$I$I½¸žŠ#€ îŠ P Ö‰ -‹ Ö‰ ë Ö‰€¯ Ö‰`M Õ‰À2·Õ‰ .bÕ‰ --Õ‰€#¸Õ‰@ýîŠfÓ‰ #,Ó‰@#Ó‰`#ÓÿlÛlÛlÛŽåìŠ-ÿÄŠ-ÿü‰#ÿû‰ÿêŠÿëŠÿŠÿû‰2ÿêŠ2ÿŸŠ2ÿû‰ÿíŠÿŸŠÿîŠÿÄŠÿÜÿlÛlÛØw¡ŠÿìŠÿÊŠÿ!ŠþŸÿÈŠ#ÿÅŠ#ÿù‰ÿ׉ÿÅŠÿ!ŠÿëŠ(ÿ‹ ÿñÿ’D’$œDÍôb&bèÌïÏ(!e :Þañÿ’D’8¢$ … ËïÏ'aÞâÔÌïÏ(eÌñÿE’$œ8vodñ ^t Üa añÿ’D’(’8Óô* ÈØÞeG Ë ÈaÞãÔâÌñÿ”D’$’DáC8ÞeEâÌØÞeEâÌØþ"âÔdñÿ’H%’$»ÇFo ÈØÞeZ ÈÐÈØâÔÞãÔñÿ’D’(’8|ÙTäÝÈèàdo Ë ÈaâÌÞñÿE’$’D–�beoâÌÐÈØÞeoÈØâÔdñÿ’H’$¢8�Ép -ÌâÔÞãÔäÝÝà ad ,Ìñÿ’Dœ$’(ÓË~âÔÞãÔäÝÝà ad ÌÞñÿE’(’$|PŒe’+ÌâÔd©Ü ÞãÈÐÈè+Ìþ!Ýñÿ’D’$’$PñšÈèÞÈèÞÈèÌÈñÿ’Dœ$œ(� ¨âÔÞãÔäÝÝà ad  añÿ’D’$’DÎ~¶ Ë^@'afÌ ÞeñÿœH’(Å#ØÄÊ adÎ Þad  añÿ’XâD'uŸÒ Ëa a Þa âÌÞñÿ¢D¢$'^àeîâÌ*Ìeî ‡ÞaÞâÔñÿþ×JE’Ä’$—Bîd  a^ ÓÞ ÐÜñÿ’D’$’$â;üÞãÈÐÈèÞÈèÞÈèñÿ’D%œ$˜» ÞÌ ÞeÈâÔÞãÔ añÿE’$%)žd¥ Ë^'afâÌÞñÿ¢D”$â$‚ñ&e†âÌØÞe7 ˆÞaÞñÿ¢Dœ$’(6E4âÔd† ÈØâÌae‚ãÌÞñÿE’$þS@’(¤¯Be[åÌÞåÌ?Þ#eT ^0ñÿG’$œ(xPadY ËåÌ$' Ódz añÿ’D¢Äâ$Ù^ âÌ-Ìa!ek :ÞâÌa ñÿâD’(żÿlÞa Èex Þa dzÞ Ðñÿ’D¢$'ñzÈèâÌÈâÔd† ‰ÞaÌ Þñÿ’D¢$’8ÒˆPH!e“ aHeñÿ’Hœ(’( 3þ²á–Ì Þe¡ ad¥ Þañÿ”X’$¢$œ¾¤ Èeã Ë^eá Üñÿ’D’$’$Úí² Þã Èè Ë ÈÞHPAÞeñÿ’HÅ’$”;ÀÇ þÞadáHPèPP\ñÿ’D’$â$,ÎHPìß È 3ÞÞHPa ñÿâD%’$zôÜÞa ÞãÔdï Ü Þã Èè Ë ñÿ’D%¢(tê ÈþºtÞ ÈåÔd  ñ¦$gõddñÿ¢HE’$ˆöøqd}d‰dÐAAAdñÿ’H’D’(m³AdðÌË(!e Þañÿ’X'’${ó ËïÏ'ad b bðñÿ’D’$’D~" Ë^'aÌÞeñÿœH’$''0+ a ÜâÝàÌÐ a Ëñÿ’D¢$’8Ú[>^þ �'a a ÈÞñÿ’D”(’$ŠÕLâÌÞ"e'Èd È-ÌâÌ-Ìñÿ”Dâ$’DBZ"ed Þa d£ È-Ìeñÿ’H”Ä”$yhq Þa ,Ì Ðd|âÌ-Ìe|ñÿœD’$’$_Ëv Þa ,ÌâÔ È,ÌâÌ,Ì"eñÿ’HÅ’$ö„‹ Þa d£ ÈØÞ ÈâÌñÿGœD’(Ga’a"e�þB” Þa d£ †Þañÿ’X’DœD°³ ÞâÔd%âÌ-Ìe° Þa ñÿ’D%’8É ®,ÌâÔ È-Ìe» Þa ,Ì Ð Èñÿ’D¢$'ȼ,ÌâÌ,Ì"eÊ Þa dÐñÿœD¢$’$yØÊ †ÞaÞâÔd% È-ÌâÌ-Ìñÿ¢D'â$Ø"eá Þa dç †ÞaÞñÿ¢D’$%€�æâÔd% È-ÌâÌþIà-Ì"eø ÞñÿGâ$%'ªôa dþ †ÞaÞâÔd% È*Ìñÿ’D%¢8ouâÌ*Ì"e Þa d ñÿâD%¢(ËņÞaÞâÔd%ñ„%gdUdñÿ¢HE¢$†¥ddÒdéd)ÞâÔd, ñÿ’D’$’$‹,b"b<ÞÐÌÞÌ^ñÿ’D’D'Ú:("eFÌÞÐþìõ a Ëñÿ’D¢$œ(6ãH^'aÈer añÿ’DœD’(ÛùVâÌ-Ìea Þa drâÌ,ÌñÿE¢8'^>del Þa dr †ÞaÞâÔñÿ’DâD’$ç‰rÌÞee a ÜâÝàÌÐ ñÿG’$%–Ü€a Ë^'a añÿ’X’$¢Dâ_Ž ÈÞâÌÞ"eaÈþ_<dR Èñÿ’D¢$'=Åœ-ÌâÌ-Ì"eª Þa déñÿ’DœD¢$¬3ª È-Ìe· Þa ,Ì ÐdÂâÌñÿ”Dâ$’$è¸-Ìe Þa ,ÌâÔ È,ÌâÌñÿ’DœD’(yÀÆ,Ì"eÑ Þa dé ÈØÞñÿ’D”8â$'Ô ÈâÌa"eã Þa dñÿ’H”Ä’$\0âé †ÞaÞâÔd_ È-ÌâÌþ^¬-Ìñÿ”Dâ$’D{ð"eú Þa d9 È-Ìeñÿ’H”Ä”$Ærþ Þa ,Ì ÐdâÌ-ÌeñÿœD’$’$ÊÉ  Þa ,ÌâÔ È,ÌâÌ,Ì"eñÿ’HÅ’$<ñ! Þa d9 ÈØÞ ÈâÌñÿGœD’(Ž\(a"e3 Þa d9 †Þañÿ’X’D”$4b6ÞâÔd_ È*ÌâÌ*Ì"eJþÿ ñÿœD’(”͝D Þa dP †ÞaÞâÔd_ñÿ’D%¢(ÖÝRqr&ÞgYd›dëd;dñÿ’H’D’$P!`cÞâÔdr b$bÀ Ë^ñÿ’D’(’(¼n'a,ÌÞeüâÌÞñÿE¢$¢8™|eŒâÌØÞe‰ adŒ ñÿG’$%éŠa ÜâÝàÌÐÈÞe£ âÌñÿâDþ1’(œ8F˜-Ìa!e£ :ÞâÌa añÿ”D”$’$ë,¦ Ëa,âÌÞe½âÌØÞeñÿœHœ(’$üÉ´º ad½ a ÈÞâÌÞñÿ”D”$’$ŸáÂ"eøÈÞeïâÌØÞeñÿ’H'â$ÙnÐç ÈâÌØaeß Þa dñÿ’H”Äâ$:3Þå �ÞaÞâÔdí ‚ÞaÞñÿ¢D¢$¢$þ_ % ìâÔdø ÈâÌe  È-Ìe ñÿâD%%ˆ8ú Þa ,Ì Ðd âÌ-Ìe  ÞñÿGœ$’(¡‡a ,ÌâÔ ÈâÌaeô ÈØÐñÿ”D”$”$ñy ÈØd” È,Ìe$^RÐd;ñÿ’D’D’DGX$ È*Ìe.^BÐd; È+Ìeñÿ’H’(’(êy28^CÐd;^IÐd¦È^ðñÿ’D’(’Ä@þ€>(eJ ƒÞa^AÐdñÿ’H’$œD¼>N¦È^�(e\ „Þañÿ’DœD’$å\^SÐd¦ Èa!È^ðñÿ’D’(’ÄËéj("et ƒÞa^MÐdñÿ’H’$œD >x¦È^ð(e† ƒÞañÿ’DœD”$¹>†^MÐd¦ …Þa^FÐd¦ñÿ”D’(EDÝ”ñV'þîœg˜dAd=dOdañÿE%œ$L]¢dyd‹Èdß 5ÞÈ.ÈañÿEœ$’(ŒØ°dò 4ÞÈ.Èadò 1ÞÈñÿœD’(â$Ã9¾.Èadò 0ÞÈ.Èadñÿ’Hâ$’D©îÌò 7ÞÈ.Èadò /ÞÈ.ñÿâD’D%[\ÚÈadòq Ž'Þgæd©ñÿE¢(E âèd²dÄþ‘d»dÍdÖdø �ÞñÿG’$’$v‹öa*ÌâÔÞãÔ bb@ Kñÿ’Dœ$”$Tf^@'ÈaÌÞe³ñÿ’D’D’$muâÌÞe$äÌÞâÌØÞ#eñÿœH’$’Ää• $ aÜâÝà a Kañÿ’H’(%ñä.fâÌÞeBâÌØÞe? añÿ¢X’8’$­Ž<dB aþ¾ÌÈÞâÌÞ"eñÿ’H’8%!9J± ,ÌÈaâÌ-Ì"e\ ÞñÿGœ$’(®ñXa ,ÌâÔ ÈâÌae­ÈØdñÿ”Hâ$'>f™'Ìen Èa Üad«ñÿ¢D’$’8°t'Ìe -ÞÞ^ÿ)Ìa Üañÿ¢X'’$‡K‚d« Üad« (ÞÈØañÿ¢X'¢$aI� d« ’Þadþy—«ñ(g�dñÿ¢HE¢(§Yžgdgdtd…d‹d‹d“dñÿ’HÅ’8Â;¬± �Þad· 3Þa bñÿ’D%’$>!ºb ÌÞe(ÞÐ9ÌÐ;ÝÈ ßñÿ’D’D’D�ÚÈØÞeÒÈìÐdÅÈ Ð;Ý Èñÿ’D’(’(^ìÖ ßØÞeá Èì ÐdÔ;Ý È ßñÿ’D’$’D,KäØÐÈÞÈ!"eþGËÈ Ð ÈØñÿ”D’$’(ÝÎòÌe ÞÐ ÈÈe 9Þ ÈñÿâD’DÅ­.Øa d  ^�ad ÈØñÿ¢D’$¢$>åÐdæ Èì ÐÈ ÈÞ#eÔÈñÿ¢D'Åð,!e# §Þa ad, ÞñÿG’$’$1€*a b bF K^ñÿ”D’$’Dxh8'aP ÌëÏ(!e1Ì Þþ&7Pñÿ’Dœ(¢$¤FH!eO aHe1Ìñÿ”D'â$ ëT'Þe] ada Þa ñÿ’D’$’$Yibbbx K^'añÿ’HœÄ”$‹+pf Üa  ÈaÌ.ÞeƒñÿâDœD’$†q~ ad‡ 4Þa K^ñÿ’D’(’(ÿkŒ€'aP Ì(Þe² Üaþáñÿ’X’8âÄâàš  9ÞÈa  Èa a ñÿ”Dâ$œD ¼¨KaP  Èad¶ Èañÿ’D’$’$ë9¶ b(bX K^€ 'ñÿE’Ä%%¤Äaf aâÌÐÈÞeïÈØñÿ’D¢$'(gÒÞÈ,Ì#eâ �ÞaÞÐñÿE'’D9àdï È-Ìa!eï :ÞÈañÿþWM’X’Ä’Ä¥¨î Üa  9ÞÈa Ì*ÞeñÿœH’(’Äîÿü ad ÞaÞ Ð ÜñÿGâ$’$0ä a ÞÐ Üa Ì^ñÿ”D’$’$i{(!e¹ K^€'ÜñÿâD¢$â$̳& ÜaÈÞe{ ÈÈaeñÿ’H’$’Dô¨4w È ÐÞ Ð ÈÞeY ÈÐÈØñÿ”D’$þ.<œDëB ÈeRÈØ ÈeP œÞañÿE”$’$–SPdY È ÐÈØ Ðd9ÜÞãÈÐñÿ’D’$’$…)^È ÈÈè ÈÈèÈ ÈÞñÿE’(’(MŸlerÈ Ðdu ÈÈd{ “Þañÿ’X’$œ(ÛzÌ ÞPH!eˆ añÿ”D”$'±¾ˆHeÌÞe– adšñÿœDâ$’$4þ€_– Þa Èa K^ñÿ’D’D’(·µ¤'aP ÌëÏ(!ežÈÞñÿE'’$P ²e¹ 9ÞÈa Ì ÞPHñÿ¢D’8œD]OÀ!eÆ aHe  Èañÿ’D’D’$öÛÎ ÈÞe> ÈØÐ È ÐÞ Ð ÈØñÿ’D’$¢$1óÜ Ð È È È Ð È Ð ÈÞeÚ Èñÿ’D’$’DаêØþþÐÈÈ^èe:  -ÞÈÈñÿâDœ$â$ëòø-Ìa 3ÞÞÈa Þa  ñÿâDâ$'‡H Üa  ,ÞÈa  Èa ÈÐñÿ’D’(’Ä�º ÈØÈe#  <Þa ÈèÐdñÿ’H'’$ÿµ"   9ÞÈØa ÈØ ÐÈèÐ Èñÿ”Dâ$œD˜ 0 Þe  Èad>  �Þañÿ’DâDœD²è> Ì'ÞþúàeH  adL  Þañÿ’Dœ$â$ð L bb~ Üa  Èa ñÿ’D’$’D^âZ K^@'aP ÌëÏ(eñÿ’H’Ä’(ãlh m  ÞaÌëÏ(!eY Ì ÞñÿE’Ä’$cv e—  a K^@'ñÿE%’8ͤ„ aP ÌëÏ(e�  ÞaÌëÏ(ñÿ¢D’DâDy—’ !e{ ds þÊæÌ)Þeª  a ñÿ”Dâ$œDÞ©  Kaf Èad®  5Þañÿ’Dœ$â$­ ® bb\ Üa  Èa ñÿ’D’$œD÷ɼ K^'af Üa ñÿœD”$'è:Ê  ÈaÌ+ÞeØ  adÜ ñÿœD”$œ$nEØ  6Þa KaP  9ÞÈa ñÿœD’$’$Ô6æ  Èa b"þb ÌÐÞÐÞñÿ’D’$%+ô ÐÞÐ8Ì ÐÞ ÐÌÞeD  ^ñÿ’Dâ$’$§ \ aH ÐÈØÐñÿ’D¢$’$¸ä ÞÐÈ ØÞe" ÞÐÈ Ø ÐÈñÿ”Dâ$’$ãI Ø Ðd(  ›ÞaÞÐÈÞeñÿ’H’$¢ÄQ—, ? ÈØÞ ,ÌÈa#e?  ñÿâDâ$œD@3: �ÞaÞÐ adþˆ¯S  Þañÿ’D’$’8¶*H  K^@'aÌÞñÿE’Ä’$¶V e�  a K^'ñÿE%¢$§âd afâÌÞe‹ âÌØÞew  ñÿâD’DÅfr �Þad‹  ÈâÌae‡  añÿ’XÅ¢8>!€  Üad‹  ‘Þadœ  ñÿâD’$œ$ðêŽ 3Þa K^þ5 'añÿ’D”$œ$"œœ Ì^ (e7 Ì Ð añÿ’D’$’(Atª  K^'afâÌÞñÿE¢$'ÍC¸ e5 âÌØÞeÆ  �Þad5 ñÿ’DÅ’Ä�FÆ  ÈâÌae1  a È-Ìañÿ”Xœ$œ$”Ô !eÝ  :ÞâÌa -Ì Ýañÿ’D'’8%â  8ÞÞ Ì-Ìa Üa  Èþ/Eañÿ’X''7»ð âÝÜà a âÌ-Ìa!eñÿ’H’8â$žþ   :ÞâÌa 6ÞÞ Ì-Ìa Ìñÿ’D”$’$âZ Þ Ô ÌHXe ÌPX È,Þñÿ¢D’$¢8zg e'  4Þ^I.Þad/  ñÿ’D'â$8S( 0Þ^I.Þad5  ‘Þadñÿ’H’Ä’$l�6 F  7Þa K^'þ´&ñÿG’8’8ïÒD a Üa  !ÞÈa Ì+ÞñÿEÅ’8ÞÂR eY  ad]  6Þa KñÿEâ$¢$Í` aP âÝÜà a È,Þeu  ñÿ’DÅâ$‰jn "ÞÞâÌad{  ÞÞâÌa ñÿâDâ$'üA| Üa 9Þ Èa  ÈaÈ Ôñÿ’D’$”$&-Š bb¦ÞÐ ÌÐÌÞe¦ ñÿ’DþùHœ$'G°˜  ^0Üa ad¬ ñÿœD’$’$.ʦ  Þa3ÌÐ K^ñÿœD”$’$ˆ ´ 'ÈaâÌÞe% âÌØÞeñÿ’H’(’$~ ! 9ÌÞe 9Ìè9ÔÈèÐ;Ý9Ìñÿ’D’$’$–šÐ ß Ð ÈâÌØ ÈèÞäÌÞeñÿ’H’$’$öÞ ñ ;Ý9Ì ß Ð ÈèÞ ÈèåÌ Èñÿ’DâDâ$þ¶å[‰ì èæÌd  a )Ì Ýa ñÿ’D’8’$*®ú 8ÞÞ Ì)Ìa;Ý9Ì ß Ð ÈèÞñÿ’D’$”$HË Èè Ì ÌÞ Ô ÌHXe ñÿ’DœD’(Ó­ ÌPXd  úÞad%  ŒÞañÿ’X’$œ(‡ $ Ì ÞPH!e2  añÿ”D”$'!°2 He“ Ì+Þe@  adD ñÿœD”$’$Ü@ þ'I 6Þa KaP 9ÌÈ9ÔÈñÿ’D’$’(�N Ô bbÌÞeš ;Ý9Ì ßñÿ’D%’$ž7\ Ø Ð ÈÞe… È Ð ÈØÌeñÿ’HœDœ$ùÊj € ÈØes  ¥Þa ÈØañÿ’D¢(¢$,þx ÈèÞd‰ dƒ ÈØ Ðd^  ñÿâD’8œ(Ô† §Þa aÌÞe–  añÿE’8’$où” dš þg ÞaÌË^€'ñÿ”Dâ$'‰¢ (!e®  Þa ËaÌëÏñÿ’D”$%p° ^€'(e Ìd  ^ñÿ’D'’ÄÆ\¾ < Üa a ÈØÞñÿE'¢$“àÌ eÕ Ë ÈadÙ ÈaýdñÿœH%'>$Ú m  a a-dm  a añÿ¢H”8œ(3è ¸dm  þ•a abdm  añÿ¢DâD¢(˜ùö a·dm  a a¯ dm  ñÿGE¢Äu a aM dm  a aë dñÿœH%¢$  m  a a‹ dm &ñÞ,g dñÿ’H’$’${� ¼ AAAAAAAñÿ’D’$’$)ž. AAAAAAAñÿ’D’$’$ž< AAAþHGAAAAñÿ’D’$’$ žJ AAAAAAAñÿ’D%¢(±¶X AAdÛ dë dó d dñÿ¢HE’$ŒŒf û d d dã Ì^À(ñÿ¢D'’8çÇt !e  Þa Ëa b¸ñÿ’D¢$”$‰ÿ‚ bšH Þe� H ØRÐd” ñÿœD%”$åá�  RÜa #Ìe÷ \þíããH e¹ ñÿ’D’$’$_¨ž +. NE T ? ÞÞ\ñÿ’D’$¢$Zb¬ ãH ÞÞ\ã\ãdô +ñÿ’D’$’$=㺠. NE T L ÞÞ\ãñÿ’D’$’$û¢È RÈÞ\ã^;Þ\ ãH Þñÿ¢D’$%©ÀÖ eâ H ÞÞ\ãdñ +AMñÿ’D’$’$Eä NI ÞÞþ5 \ã\ñÿ’D”$’$ °ò ã\ãH e^?Þ\ñÿ’D’$’$‰ ãH ÞÞ\ã^:Þ\ ãñÿ’D’$’$»\ãÞPÞPÐ ÞUÐ ÞTÐ RÈñÿG’8’Ät)a QÜa  VÜa ÞÞQÈñÿGâ$”$÷q*a ÞÞVÈaH ÞeÉñÿ’D’$’DÜ 8 ÞWÐH ØYÐH eN \þM?añÿ’Xâ$¢$çøF ÞÞHaYÈÞeÇYÈñÿ’D%¢$máT[Ð[ÈØÞeÂ[ÈØÞeÂ[Èñÿ’D’$’(Æîb ØÞ[ÈØØÞ"eŒ 2ÞÞñÿœD’$’8z`p[È Øa 6ÞÞWÈ)ÌaHèñÿ’Dœ$”$¯\~P (Þ[ÈØØa WÈèWÐdÂñÿ’D’(’$“Œ[È ØÞe­WÈ[ÈØØWÐHþ&áñÿ’D’$'Sš[ÈØØP )Ì\a )ÌñÿâD’D’$`†¨WÜadÂWÈèWÐHèP ñÿ’D’8'„e¶[ÈØ\a [ÈØWÜaYÈØñÿ¢D’D’$²ÄYÐdNdE ÜÝà6ÌPHÞñÿ¢D’$’$KÄÒe>H[ÐÝ[Èà ^ ñÿœD’$’Dãºà Üa ÈØÞe7 ÈØØÞñÿþòJ¢D’$’$¢‘îe7\ ã^ Þ\ ã+NUñÿ’D’$’$«ÎüEDLCRADE Þ Þ\ ã+ñÿ’D’$’$qº XEETNRLA Þ Þ\ ãñÿ’D’$’$ÜÌ+IFEL ÞÞ\ ñÿ’D’$’$±6&ãÝÞÞ\ ã\ ã^ Ìèñÿ’D’$’Dñ{4\ ãHØPdÏÝ Üà ñÿâDâ$þtå’$¤®B6Ìa Ha ÌXÐ Ë^ñÿ’D’(%ËÅP'aP ÌëÏ(!eLÌ Þñÿ’D¢$’8:^PH!ei aHeñÿ’Hœ(’(DûlLÌ'Þew ad{ Þañÿ’X’$’(Èšz;Ý9Ì ßØZÐZÈÞe·ZÈ[Ð[Èñÿ”Dâ$’$i݈Ø!e² ¨Þa\ ã+L BAñÿ’D’$’$Váþ±–LE ÞÞ\ ã[ÈØñÿ’D’$’$=•¤ Þ\ ã\ ã^ Ìè\ ãñÿ’D’D’Ä@à²[ÈØZÐd€ Ha H ÞñÿE”$’$'²ÀeÛH ØÞeÒ *Þ^P.ñÿG’$¢8ß‹Îa dÙ *ÞH Øadæ ñÿâD’$’Ä(XÜ6Ìa *Þ^P.a  .ÌXÜañÿ”X’$’$ú�êþYj#Ìe,^LÞ\ ã^ Þ\ñÿ’D’$’$gø ãQÈÞ\ã^=Þ\ ãXÈñÿ’D’$’$á Þ\ã\ã^LÞ\ ã^ñÿ’D’$’$³j Þ\ ãVÈÞ\ã^=Þ\ñÿ’D’$’$b$" ãTÈ Þ\ã\ãH #Ì"ñÿE’$’$Š0eS^LÞ\ ã^ Þ\ ãñÿ’D’$’$·ü>HÞþÄmð\ã^=Þ\ ãHñÿ’D’$¢$œL Þ\ã\ãH Þe#ÌñÿE’$’$ Zen+CPDO:E ÞÞñÿ’D’$â$ üh\ã\ãÞÔ )ÞÞa õÿ’DœÄ ±ˆv.ÞÞRÈa Þa ÿÿ û_€ÿR2IFNS.RBûY!:þ’ƒýÿ]ý‹¯Sëÿ$IH”SøØF #Ù– Ùx ØUúÖ‚¡Ö‘VÖxñÿ”D¢(E™ªÿ  ýÿ@€Ðp§H ÿÿ û_€ÿR2SHEAP.RBûY!7þª’ýÿsô•¯ô[÷ÿIxQÙ ýØ–OØ¥ñÿ’D’$’$öJ!$!�‚ý�$$\ƒý$(!4!�ÒPªñÿ’D’$’$Ê(J�ª% Œ ) !,!�ª$H $(!4úÿ’D 5¸!Pª�ÒJ ÿÿ û_€ÿR2IFW.RBûY!:þl`ýÿ=ü‹¯4TúÿPÖ¥bÓÒþÿ„|ýÿ€D�6ÿýÿ@ŒÐp§Hÿÿ û_€ÿSWOP.RBû é ~þº¢ýÿgÃ�º‚úÿHÚ…tf ��º‚÷ÿÛg·Kÿv±ƒžÿâëÿñÿ’X’$’$! €‚€­‰# ÕÐñÿœD;’$ß?Ö�Ò8‹S  €‰3 þÿDäºÿÿ û_€ÿP4ASM.RBûY üþ2£ýÿµÈS£ô“ÿÿ ÿßÿÿ ÿßÿÿ ÿßýÿ@Ž©¡¤àGñ)ÿÿ ÿßñÿ’D’$’$ãòb bvÝÞìß+SR T ñÿ’D’$’$°" àÝÞìßèÞÝÞñÿ’D’$’$mTìßèÞÝÞìß+CC P ñÿ’D’$’$‡* àÝÞìßè^þ<"5ñÿ’D’$’$æ8ÝÞìßèðÞÝÞìß+NA Dñÿ’D’$’$)F àÝÞìßè^ñÿ’D’$’$¼BT"ÝÞìßèÞÝÞìß+ñÿ’D’$’$žªbRW I àÝÞìßñÿ’D’$’$ŽÉpèÞÝÞìßèÞÝ Þìßñÿ’D’$’$’t~+ID F àÝ Þìþ.ãñÿ’D’$’$tŒßè^%Ý ÞìßèÞÝÞñÿ’D’$’$xhšìß+HC R àÝñÿ’D’$’$cö¨Þìßè^0ÝÞìßèÞñÿ’D’$’$r¶ÝÞìß+NIID ñÿ’D’$’$1÷ÄàÝÞìßè^XÝÞìßèñÿ’D’$’$Í–ÒFÞÝÞìß+RSSO ñÿþaL’D’$’$ý¡à àÝÞìßè^TÝÞìñÿ’D’$’$âîßèdÞÝÞìß+ELAQ ñÿ’D’$’$«yü àÝÞìßè^Ýñÿ’D’$’$t› ÞìßèÞÝÞìß+CL A ñÿ’D’$’$dù àÝÞìßè^+ñÿ’D’$’$w&ÝÞìßèÞÝÞìß+OEñÿ’D’$þQv’$4 F àÝÞìßèñÿ’D’$’$¨B^)ÝÞìßèÞÝÞìßñÿ’D’$’$´pP+DL A àÝÞìñÿ’D’$’$qØ^ßè^\ÝÞìßèÞÝÞñÿ’D’$’$šmlìß+TA N àÝñÿ’D’$’$TÈzÞìßèÞÝÞìßèÞÝñÿ’D’$’$„lþ¶µˆÞìß+DL C àñÿ’D’$’$•ñ–ÝÞìßè^^ÝÞìßè´Þñÿ’D’$’$Q`¤ÝÞìß+JF P ñÿ’D’$’$-ѲàÝÞìßè^eÝÞìßñÿ’D’$’$¼èÀè–ÞÝÞìß+EDCC ñÿ’D’$’$ØRÎ àÝÞìßè^nÝÞñÿ’D’$’$"RÜìþ<ßènÞÝÞìß+DA R ñÿ’D’$’$«$ê àÝÞìßè^ñÿ’D’$’$zÕøÝÞìßèÞÝ Þìß+LF Oñÿ’D’$’$N àÝ Þìßè^ñÿ’D’$’$ÈHÝ ÞìßèÞÝ!Þìß+ñÿ’D’$’$˵"LE N àÝ!Þìßñÿ’D’$’$�Ç0èÞþq–Ý!ÞìßèÞÝ"Þìßñÿ’D’$’$Áa>+AL O àÝ"Þìñÿ’D’$’$AÖLßè^]Ý"ÞìßèFÞÝ#Þñÿ’D’$’$­hZìß+SC P  àÝñÿ’D’$’$ÛÀh#Þìßè^cÝ#Þìßè Þñÿ’D’$’$TvvÝ$Þìß+EDIC ñÿ’D’$’$Iá„àÝ$Þìßþ;Þè^lÝ$Þìßèñÿ’D’$’$ ž’nÞÝ%Þìß+NE T ñÿ’D’$’$’  àÝ%Þìßè^bÝ%Þìñÿ’D’$’$#®ßè‚ÞÝ&Þìß+VD I ñÿ’D’$’$àg¼ àÝ&Þìßè^Ýñÿ’D’$’$ƒ“Ê&ÞìßèÞÝ'Þìß+UC P ñÿ’D’$’$•ÁØ àþ0Ý'Þìßè^añÿ’D’$’$hæÝ'Þìßè2ÞÝ(Þìß+NJñÿ’D’$’$8ô C àÝ(Þìßèñÿ’D’$’$äù^4Ý(ÞìßèæÞÝ)Þìßñÿ’D’$’$åh+DO D àÝ)Þìñÿ’D’$’$§ßè^Ý)ÞìßèÞÝ*Þñÿ’D’$’$íc,ìß+AP G þ?” àÝñÿ’D’$’$nÆ:*ÞìßèÞÝ*ÞìßèÞÝñÿ’D’$’$­_H+Þìß+LF T àñÿ’D’$’$k5VÝ+Þìßè^Ý+ÞìßèÞñÿ’D’$’$|$d b b”Ý-Þìß+LH T ñÿ’D’$’$õ r àÝ-Þìßè^ñÿ’D’$’$ú€Ý-ÞìßèÞÝ.ÞìþŠRß+HCñÿ’D’$’$wŽAK àÝ.Þìßèñÿ’D’$’$‚ïœ^ Ý.ÞìßèªÞÝ/Þìñÿ’D’$’$4qªß+NI N àÝ/Þñÿ’D’$’$0ü¸ìßè^(Ý/ÞìßèÞÝñÿ’D’$’$/bÆ0Þìß+GN I àñÿ’D’$’$ã=ÔÝ0Þìßè^Ý0Þìßèþ<ÀÞñÿ’D’$’$ßeâÝ1Þìß+HCBK ñÿ’D’$’$ÇÂðàÝ1Þìßè^qÝ1Þìßñÿ’D’$’$SßþèªÞÝ2Þìß+HCCK ñÿ’D’$’$rN  àÝ2Þìßè^pÝ2Þñÿ’D’$’$€OìßèªÞÝ3Þìß+XC P ñÿ’D’$’$YÄ( àÝ3Þìßè^uþ¿'ñÿ’D’$’$êÒ6Ý3Þìßè2ÞÝ4Þìß+DR Cñÿ’D’$’$ï€D àÝ4Þìßè Þñÿ’D’$’$RÝ4ÞìßèÞÝ5Þìß+OIñÿ’D’$’$¿ ` R àÝ5Þìßèñÿ’D’$’$D n^#Ý5ÞìßèÞÝ6Þìßñÿ’D’$’$Xp|+XI A àÝ6Þìñÿ’Dþ_)’$’$³ÑŠßè^_Ý6ÞìßènÞÝ7Þñÿ’D’$’$sh˜ìß+OM D àÝñÿ’D’$’$¦7Þìßè^Ý7ÞìßèÞñÿ’D’$’$ÿl´Ý8Þìß+HCIK ñÿ’D’$’$ãÙÂàÝ8Þìßè^qÝ8Þìßèñÿ’D’$’$‚”ЪÞÝ9Þìß+GN R ñÿ’D’$’$þ4±ÕÞ àÝ9Þìßè^Ý9Þìñÿ’D’$’$HìßèÞÝ:Þìß+BS I ñÿ’D’$’$Žlú àÝ:Þìßè^Ýñÿ’D’$’$$‡:ÞìßèÞÝ;Þìß+NI T ñÿ’D’$’$Cú àÝ;Þìßè^&ñÿ’D’$’$=$Ý;ÞìßèÞÝ<Þìß+EDñÿ’D’$’$Å2þbîAC àÝ<Þìßèñÿ’D’$’$ö¿@^lÝ<ÞìßènÞÝ=Þìßñÿ’D’$’$‡[N+PJ T àÝ=Þìñÿ’D’$’$«²\ßè^}Ý=Þìßè–ÞÝ>Þñÿ’D’$’$ bjìß+PM I àÝñÿ’D’$’$5 x>Þìßè^Ý>ÞìßèÞñÿ’D’$’$Gj†Ý?Þþ²âìß+PJ F ñÿ’D’$’$Ì”àÝ?Þìßè^~Ý?Þìßèñÿ’D’$’$�Ž¢–ÞÝ@Þìß+TSCR ñÿ’D’$’$Ñ ° àÝ@Þìßè^PÝ@Þìñÿ’D’$’$#¾ßèÞÝAÞìß+HCRK ñÿ’D’$’$µ Ì àÝAÞìßè^pÝñÿ’D’$’$m”ÚAÞìßèþ•éªÞÝBÞìß+HCSK ñÿ’D’$’$j¯è àÝBÞìßè^pñÿ’D’$’$¶ öÝBÞìßèªÞÝCÞìß+BSñÿ’D’$’$  R àÝCÞìßèñÿ’D’$’$ƒ^ÝCÞìßèÞÝEÞìßñÿ’D’$’$¼O +AS V àÝEÞìñÿ’D’$’$IÃ.ßèÞÝEÞþ:­ìßèÞÝGÞìñÿ’D’$’$ˆf<ß+PM R àÝGÞñÿ’D’$’$†Jìßè^ÝGÞìßèÞÝñÿ’D’$’$|SXIÞìß+OM V àñÿ’D’$’$§êfÝIÞìßè^`ÝIÞìßèxÞñÿ’D’$’$ZVtÝJÞìß+DR I ñÿ’D’$’$ôÈ‚àÝJÞìßè ÞþˆªÝJÞìßèñÿ’D’$’$R‘�ÞÝKÞìß+ON T ñÿ’D’$’$ÍΞ àÝKÞìßè^!ÝKÞìñÿ’D’$’$n¬ßèÞÝLÞìß+JU C ñÿ’D’$’$¼8º àÝLÞìßè^AÝñÿ’D’$’$¹€ÈLÞìßèŒÞÝMÞìß+IS N ñÿ’D’$’$c–Ö àÝMÞìþQßèÞñÿ’D’$’$‡äÝMÞìßèÞ b b”ÝNÞñÿ’D’$’$!Qòìß+GS S àÝñÿ’D’$’$�ûNÞìßè^$ÝNÞìßèÞñÿ’D’$’$¬WÝOÞìß+SM T ñÿ’D’$’$[<àÝOÞìßè^ ÝOÞìßèñÿ’D’$’$`š*<ÞÝPÞìß+EGAQ þ|$ ñÿ’D’$’$$ë8 àÝPÞìßè^ÝPÞìñÿ’D’$’$²FßèÞÝQÞìß+EGBQ ñÿ’D’$’$uT àÝQÞìßè^Ýñÿ’D’$’$‚‰bQÞìßèÞÝRÞìß+EGCQ ñÿ’D’$’$Ñp àÝRÞìßè^ñÿ’D’$’$­~ÝRÞìßèÞÝSÞìß+MJþ/àñÿ’D’$’$u Œ P àÝSÞìßèñÿ’D’$’$Ü÷š^2ÝSÞìßèÞÝTÞìßñÿ’D’$’$`¨+SR E àÝTÞìñÿ’D’$’$šÁ¶ßèÞÝTÞìßèÞÝUÞìñÿ’D’$’$ø_Äß+JT P àÝUÞñÿ’D’$’$Z¹Òìßè^fÝUÞìßè–ÞÝñÿþ`J’D’$’$çaàVÞìß+OL G àñÿ’D’$’$lÁîÝVÞìßèÞÝVÞìßèÞñÿ’D’$’$ÅNüÝWÞìß+DW R ñÿ’D’$’$Cé àÝWÞìßèÞÝWÞìßèÞñÿ’D’$’$~WÝXÞìß+EGIQ ñÿ’D’$’$B+&àÝXÞìßè^ÝXÞìßñÿ’D’$þg’$ÁÄ4èÞÝYÞìß+JU P ñÿ’D’$’$îUB àÝYÞìßè^dÝYÞñÿ’D’$’$(OPìßè–ÞÝZÞìß+DLCC ñÿ’D’$’$üÖ^ àÝZÞìßè^^ñÿ’D’$’$¾ÇlÝZÞìßèÈÞÝ[Þìß+VO Lñÿ’D’$’$ˆ|z àÝ[ÞìßèÞñÿ’D’$’$™þk¶ˆÝ[ÞìßèÞÝ\Þìß+EGñÿ’D’$’$5 –MQ àÝ\Þìßèñÿ’D’$’$¶$¤^Ý\Þìßè ÞÝ]Þìßñÿ’D’$’$V²+SR N àÝ]Þìñÿ’D’$’$�ûÀßè^1Ý]ÞìßèÞÝ^Þñÿ’D’$’$:^Îìß+RT C àÝñÿ’D’$’$‘Ü^Þþ1¼ìßè^Ý^ÞìßèÞñÿ’D’$’$­gêÝ_Þìß+DLBC ñÿ’D’$’$_èøàÝ_Þìßè^^Ý_Þìßèñÿ’D’$’$ë  ¾ÞÝ`Þìß+DLIC ñÿ’D’$’$-� àÝ`Þìßè^^Ý`Þìñÿ’D’$’$" ßè¾ÞÝaÞìß+QS R ñÿ’D’$’$1Z0 þñÊàÝaÞìßè^Ýñÿ’D’$’$v‡> aÞìßèÞÝbÞìß+EGSQ ñÿ’D’$’$âL àÝbÞìßè^ñÿ’D’$’$­Z ÝbÞìßèÞÝcÞìß+QSñÿ’D’$’$‰h T àÝcÞìßèñÿ’D’$’$Î|v ÞÝcÞìßèÞÝdÞìß+ñÿ’D’$’$ §„ RW C þ^ç  àÝdÞìßñÿ’D’$’$²¿’ è ÞÝdÞìßèÞÝeÞìßñÿ’D’$’$M  +JX P àÝeÞìñÿ’D’$’$ Ä® ßè^gÝeÞìßè–ÞÝfÞñÿ’D’$’$)R¼ ìß+TSAO àÝñÿ’D’$’$“Ê fÞìßè^ÝfÞìßèÞñÿ’D’$’$¦]Ø ÝgÞìß+EGRQþBì ñÿ’D’$’$_Aæ àÝgÞìßè^ÝgÞìßèñÿ’D’$’$±£ô ÞÝhÞìß+NIAC ñÿ’D’$’$/„ àÝhÞìßè^hÝhÞìñÿ’D’$’$S ßènÞÝiÞìß+DLRC ñÿ’D’$’$; àÝiÞìßè^^Ýñÿ’D’$’$£‘, iÞìßèÜÞÝjÞìþ{ïß+NICC ñÿ’D’$’$ð°: àÝjÞìßè^jñÿ’D’$’$>H ÝjÞìßènÞÝkÞìß+TSñÿ’D’$’$“V P àÝkÞìßèñÿ’D’$’$Z²d ^*ÝkÞìßèÞ b bñÿ’D’$’$ydr ”ÝlÞìß+NICD ñÿ’D’$’$ÁÔ€ àÝlÞìßè^XÝþ²=lÞìßñÿ’D’$’$ôÂŽ èPÞÝoÞìß+WR R ñÿ’D’$’$JKœ àÝoÞìßèÞÝoÞìñÿ’D’$’$ª ßèÞÝpÞìß+NIIC ñÿ’D’$’$š ¸ àÝpÞìßè^hÝñÿ’D’$’$t‚Æ pÞìßènÞÝqÞìß+DLBO ñÿ’D’$’$OÎÔ  àÝqÞìßè^þ=,Lñÿ’D’$’$Î â ÝqÞìßèFÞÝrÞìß+DLñÿ’D’$’$Ïð CO àÝrÞìßèñÿ’D’$’$ôÙþ ^LÝrÞìßèFÞÝsÞìßñÿ’D’$’$‘J +RW R àÝsÞìñÿ’D’$’$ ¾ ßè ÞÝsÞìßèÞÝtÞìñÿ’D’$’$mV( ß+RW S àÝtÞþÀ$ñÿ’D’$’$ñ½6 ìßèÞÝtÞìßèÞÝvÞñÿ’D’$’$±WD ìß+DLAO àÝñÿ’D’$’$¥ÎR vÞìßè^LÝvÞìßèFÞñÿ’D’$’$ÿQ` ÝwÞìß+TSRO ñÿ’D’$’$¹:n àÝwÞìßè^ ÝwÞìßèñÿ’D’$’$“| ÞÝxÞìß+DLIO ñÿ’Dþ`(’$’$‡žŠ àÝxÞìßè^LÝxÞìñÿ’D’$’$æ ˜ ßèFÞÝyÞìß+QEBU ñÿ’D’$’$ r¦ àÝyÞìßè^Ýñÿ’D’$’$Ô‚´ yÞìßèÞÝzÞìß+QECU ñÿ’D’$’$W àÝzÞìßè^ñÿ’D’$’$ Ð ÝzÞìßèÞÝ{Þìß+NIñÿ’D’$’$þ¥FÉÞ RD àÝ{Þìßèñÿ’D’$’$àÌì ^XÝ{ÞìßèZÞÝ|Þìßñÿ’D’$’$†Sú +ELAS àÝ|Þìñÿ’D’$’$" ßè^Ý|ÞìßèÞÝ}Þñÿ’D’$’$ÝR ìß+ELBS àÝñÿ’D’$’$$ }Þìßè^Ý}ÞìßèÞñÿ’D’$’$:Y2 þÇÓÝ~Þìß+QEAU ñÿ’D’$’$Ô@@ àÝ~Þìßè^Ý~Þìßèñÿ’D’$’$H�N ÞÝÞìß+ELBQ ñÿ’D’$’$¤ã\ àÝÞìßè^ÝÞìñÿ’D’$’$X j ßèÞÝ€Þìß+ELIQ ñÿ’D’$’$Émx àÝ€Þìßè^Ýñÿ’D’$’$ò€† €Þìþ`üßèÞÝ�Þìß+DLRO ñÿ’D’$’$Ì” àÝ�Þìßè^Lñÿ’D’$’$Ú ¢ Ý�ÞìßèZÞÝ‚Þìß+DLñÿ’D’$’$ï° SO àÝ‚Þìßèñÿ’D’$’$ö×¾ ^LÝ‚ÞìßèdÞ݃Þìßñÿ’D’$’$ÇLÌ +LW N à݃Þìñÿ’D’$’$1¼Ú ßèÞþÍ݃ÞìßèÞÝ„Þìñÿ’D’$’$qdè ß+QEMU àÝ„Þñÿ’D’$’$“ö ìßè^Ý„Þìßè ÞÝñÿ’D’$’$q` …Þìß+DLNC àñÿ’D’$’$)å Ý…Þìßè^^Ý…ÞìßèÒÞñÿ’D’$’$

àÝ¥ÞìßèÞÝ¥Þìßèñÿ’D’$’$™LÞݨÞìß+OLCD ñÿ’D’$’$W�Z àݨÞìßè^HݨÞìñÿ’D’$’$$hßèÞÝ©Þìß+ENBQ ñÿ’D’$’$ lv àÝ©Þìßè^Ýñÿ’D’$’$¥|„©ÞìßèÞþäþݪÞìß+RGAT ñÿ’D’$’$S’ àݪÞìßè^ñÿ’D’$’$Ö ݪÞìßèÞÝ«Þìß+ROñÿ’D’$’$Ù ®BD àÝ«Þìßèñÿ’D’$’$ ñ¼^/Ý«ÞìßèÞݬÞìßñÿ’D’$’$wZÊ+ROCD àݬÞìñÿ’D’$’$æõØßè^.ݬÞþE-ìßèÞÝ®Þñÿ’D’$’$üMæìß+ELSS àÝñÿ’D’$’$Õ ô®Þìßè^Ý®ÞìßèÞñÿ’D’$’$DHݯÞìß+ERBT ñÿ’D’$’$¦0àݯÞìßè^ ݯÞìßèñÿ’D’$’$?›ÞݰÞìß+NIAD ñÿ’D’$’$uŒ, àݰÞìßè^þØçXݰÞìñÿ’D’$’$:ßèFÞݲÞìß+ROID ñÿ’D’$’$ÈBH àݲÞìßè^,Ýñÿ’D’$’$ÍpV²ÞìßèÞÝ´Þìß+ERAT ñÿ’D’$’${d àÝ´Þìßè^ ñÿ’D’$’$]RrÝ´ÞìßèÞ b b”Ýñÿ’D’$’$ÈD€¶Þìß+ERIT þ?½ àñÿ’D’$’$2ŽݶÞìßè^ ݶÞìßèÞñÿ’D’$’$»OœݸÞìß+MC S ñÿ’D’$’$ÿñªàݸÞìßè^3ݸÞìßñÿ’D’$’$âĸèÞݹÞìß+EG T ñÿ’D’$’$©CÆ àݹÞìßèÞݹÞìñÿ’D’$’$Ñ ÔßèÞݼÞìß+OC S þ^þ ñÿ’D’$’$Yâ àݼÞìßèÞݼÞñÿ’D’$’$­.ðìßèÞݽÞìß+ERPT ñÿ’D’$’$ùþ  àݽÞìßè^ ñÿ’D’$’$þ² ݽÞìßèÞÝ¿Þìß+ERRTñÿ’D’$’$›ò àÝ¿Þìßè^ñÿ’D’$’$tD( Ý¿ÞìßèÞÝÀÞìß+þ¿!ñÿ’D’$’$üš6ELCQ àÝÀÞìßñÿ’D’$’$XDè^ÝÀÞìßèÞÝÂÞìñÿ’D’$’$ÆkRß+NISD àÝÂÞñÿ’D’$’$‘¼`ìßè^XÝÂÞìßèdÞÝñÿ’D’$’$ìRnÃÞìß+OE R àñÿ’D’$’$ùµ|ÝÃÞìßèÞÝÃÞìßèÞñÿ’Dþ]%’$’$¦MŠÝÄÞìß+ELCS ñÿ’D’$’$ô4˜àÝÄÞìßè^ÝÄÞìßèñÿ’D’$’$™“¦ÞÝÊÞìß+ROAD ñÿ’D’$’$¹µ´ àÝÊÞìßè^-ÝÊÞìñÿ’D’$’$Ë ÂßèÞÝÍÞìß+VD R ñÿ’D’$’$%MÐ àÝÍÞìßè^ Ýñÿ’D’$’$þ®vÞÍÞìßèÞÝÎÞìß+ELMS ñÿ’D’$’$Ú ì àÝÎÞìßè^ñÿ’D’$’$7úÝÎÞìßè ÞÝÏÞìß+ELñÿ’D’$’$KþRQ àÝÏÞìßèñÿ’D’$’$f^ÝÏÞìßèÞÝÐÞìßñÿ’D’$’$E$+ERCT àÝÐÞìñÿ’D’$’$B2þ*eßè^ ÝÐÞìßèÞÝÓÞñÿ’D’$’$ÂU@ìß+XE P àÝñÿ’D’$’$µNÓÞìßèÞÝÓÞìßèÞÝñÿ’D’$’$ÊK\ÔÞìß+ELMQ àñÿ’D’$’$û6jÝÔÞìßè^ÝÔÞìßè Þñÿ’D’$’$Ç>xÝØÞìß+EN W ñÿ’D’$’$Ûº†àþ.–ÝØÞìßèÞÝØÞìßèñÿ’D’$’$–ˆ”ÞÝÚÞìß+ELSQ ñÿ’D’$’$§Û¢ àÝÚÞìßè^ÝÚÞìñÿ’D’$’$Ö°ßèÞÝÞÞìß+LC S ñÿ’D’$’$0 ¾ àÝÞÞìßèÞÝÞÞñÿ’D’$’$°0ÌìßèÞÝàÞìß+RSAO ñÿ’D’$’$úÔÚ þÇÉàÝàÞìßè^Tñÿ’D’$’$š´èÝàÞìßèFÞÝáÞìß+RSBOñÿ’D’$’$�ðö àÝáÞìßè^ñÿ’D’$’$ûTÝáÞìßèFÞÝâÞìß+ñÿ’D’$’$ñ“RSCO àÝâÞìßñÿ’D’$’$ð¾ è^TÝâÞìßèFÞÝçÞìñÿ’D’$’$ø`.ß+NR D þú8 àÝçÞñÿ’D’$’$ö³<ìßèÞÝçÞìßèÞÝèÞñÿ’D’$’$•GJìß+RSIO àÝñÿ’D’$’$»¼XèÞìßè^TÝèÞìßèFÞñÿ’D’$’$½MfÝéÞìß+PO N ñÿ’D’$’$ºÛtàÝéÞìßèÞÝéÞìßèÞñÿ’D’$’$y@‚ÝêÞìß+TSCOþG¬ ñÿ’D’$’$µ�àÝêÞìßè^ ÝêÞìßñÿ’D’$’$Á¼žèÞÝíÞìß+LR N ñÿ’D’$’$X@¬ àÝíÞìßèÞÝíÞìñÿ’D’$’$“øºßèÞÝîÞìß+TSAR ñÿ’D’$’$ È àÝîÞìßè^PÝñÿ’D’$’$²mÖîÞìßèÞÝïÞìßþå+TSBR ñÿ’D’$’$Á¿ä àÝïÞìßè^Pñÿ’D’$’$ªPòÝïÞìßèÞ b bxÝñÿ’D’$’$ÿDðÞìß+TSIO àñÿ’D’$’$)3ÝðÞìßè^ÝðÞìßèÞñÿ’D’$’$Ë?ÝñÞìß+RSRO ñÿ’D’$’$ Í*àÝñÞìßè^TÝñÞþE©ìßñÿ’D’$’$ÒÑ8èZÞÝòÞìß+BA I ñÿ’D’$’$¸™F àÝòÞìßè^ÝòÞñÿ’D’$’$AGTìßèÞÝöÞìß+DA I ñÿ’D’$’$\b àÝöÞìßè^ñÿ’D’$’$Q·pÝöÞìßèÞÝøÞìß+NU Iñÿ’D’$’$þî~ àÝøÞìßè^þ+Üñÿ’D’$’$ &Œ'ÝøÞìßèÞÝùÞìß+ñÿ’D’$’$Q’šTSBO àÝùÞìßñÿ’D’$’$„ ¨è^ÝùÞìßèÞÝúÞìñÿ’D’$’$$S¶ß+TSSO àÝúÞñÿ’D’$’$YÄìßè^ ÝúÞìßèÞÝñÿ’D’$’$]SÒûÞìß+BA R àñÿþbE’D’$’$AàÝûÞìßè^ÝûÞìßèÞñÿ’D’$’$õ;îÝüÞìß+TSIR ñÿ’D’$’$%ÐüàÝüÞìßè^PÝüÞìßñÿ’D’$’$+· èÞÝýÞìß+RR R ñÿ’D’$’$¶> àÝýÞìßèÞÝýÞìñÿ’D’$’$÷&ßèÞÝÿÞìß+TSRR ñÿ’D’$þ2Ü’$�4 àÝÿÞìßè^PÝñÿ’D’$’$) BÿÞìßèÞÝ^ìß+TSSRñÿ’D’$’$$ÌP àÝ^ìßèñÿ’D’$’$¥a^^PÝ^ìßè(Þ b ñÿ’D¢D”( lb a af aì ao ñÿ¢D”(’$y z aó a{ aû b bÚñÿ’D’$’$tÖþÏ}ˆ^+ Þ\ã\ã]\ ãñÿ’D’D’$–\ãe‘]\ ã+T.TX' ñÿ’D’$’$tó¤NIUP'T Þ Þ\ã\ãñÿ’D’$’$�²^ú" Þ\ã\ã^ë Þñÿ’D’$’$bÓÀ\ã\ã^ú" Þ\ã\ñÿ’D’$’$IÎã^^ Þ\ã\ã^ Þñÿ’D’$’$8þÜ\þKã\ã^ Þ\ã\ñÿ’D’$’$Hûêã^ø" Þ\ã\ã^ÿ!ñÿ’D’$’$ ø Þ\ã\ã^ Þ\ã\ñÿ’D’$’$sáã^+ Þ\ã\ã+T.TXñÿ’D’$’$±£' UOPTTU ' Þ Þ\ã\ñÿ’D’$’$%"ã^÷" Þ\ã\ã^ëñÿ’D’$’$îP0 Þ\þ@ªã\ã^õ" Þ\ãñÿ’D’$’$â%>\ã^^ Þ\ã\ã^€ñÿ’D’$’$ÇkL Þ\ã\ã^ Þ\ãñÿ’D’$’$rÝZ\ã^+ Þ\ã\ã+T.ñÿ’D’$’$w–hTX' RP'D Þ Þ\ã\ñÿ’D’$’$Ìvã^ô" Þ\ã\ã^ëñÿ’D’$’$£#„ Þ\ãþÒ\ã^ô" Þ\ñÿ’D’$’$†Â’ã\ã^^ Þ\ã\ã^ñÿ’D’$’$s[  Þ\ã\ã^ Þ\ãñÿ’D’$’$€Ð®\ã^ò" Þ\ã\ã^ñÿ’D’$’$`,¼ÿ! Þ\ã\ã^ Þ\ñÿ’D’$’$N(Êã\ã^+ Þ\ã\ã+ñÿ’D’$’$´µØT.TX' RP'R þ½M Þ Þ\ãñÿ’D’$’$IÐæ\ã^ñ" Þ\ã\ã^ñÿ’D’$’$Uôë Þ\ã\ã^ï" Þ\ñÿ’D’$’$ ã\ã^^ Þ\ã\ãñÿ’D’$’$p^€ Þ\ã\ã^ Þ\ñÿ’D’$’$ŠÛã\ã\ã b btLñÿ’D’$’$¬³,&ÞT&+******þÏW**** ñÿ’D’$’$Y¦: Þ Þ\ ã+I SNRT .ON . ñÿ’D’$’$…¦H Þ Þ\ ãL%Þ\ ã+ñÿ’D’$’$ã]V' ÞÞ\ ãñÿ’D’$’$”d\ÞÞ\ ã+ 'AH SON TEYñÿ’D’$’$Òkr TEBÞÞ\ ã+NEC TAREDEñÿ’D’$’$Ò3€F RO ÞÞ\ ã\ þ/"ã\ñÿ’D’$’$ïæŽã b bŒÞPL&ÞTñÿ’D’$’$Ã=œ&ÞP+NITS.RN .O= ñÿ’D’$’$†ª Þ Þ\ ãL%Þ\ ã+ ñÿ’D’$’$µA¸ ÞÞ\ ã\ñÿ’D’$’$'4ÆÞÞ\ ã]\ ãLÞ\ñÿ’D%’$ɼÔ ã\ãeË]\ ã\þ@ç ñÿ’D’$’$](âã+** ÞÞ\ñÿ’D’$’$Oð ã\ÞÞ\ ã+* *LIELñÿ’D’$’$÷þAG LOCEDÞÞ\ ã\ ã ñÿ’D’$’$úú bb$ÞÐ\ÞìßÚ.Þñÿ’D’$’$ü\ÞìßÚ.Þ\Þñÿ’D’$’$½(ìßÚ.Ð\ÞìßÚ.Þþµ(ñÿ¢D’$’$­6eEÈÞ\ÞìßÚ.ñÿ’D’$’$ϨDÐÈ^ÞÐÞÐL$Þñÿ’D’$’$dRT$L#ÞT#ÞÐ\+ ñÿ’D’$”(®` Âep a�ñÿE’D’$¨Mnd¹Èe¹ÝÈìß Ð\ ÈÂñÿE’$¢$ö…|e‰ÞÐ ÈØP ÈØÐdš Èñÿ’DþR,’$¢$àŠ+ Âeš ñÿE’D’$Óâ˜a�Èe·ÈÞÐÈ^Ðñÿ’D’$’$jƦÈÈÐÈ^ÞÐL#Þñÿ’D’D’$›U´T#dp bbZÈ^ñÿ’D%’$«ÂÈÞ"!eÛÈ Þ\ã\ñÿ’D’$’(c)ÐãÈ Þ\ã\ãdè^€Èñÿ’D’$’$þ1![ÞÈ Þ\ã\ã]\ñÿ’D’$’$Õ©ì ã bbfÈ^ÈÞ"ñÿ¢D’$’$üõú!eÈÈ Þ\ã\ãÈñÿ’D”$’$õ Þ\ã\ãd ^€ÈÈñÿ’D’$’$èZÈ Þ\ã\ã]\ñÿ’D’$’$–«$ ã bblÈÞÈ^"ñÿ’D%’$&02þìZÈÞ"!eMÈÈ Þ\ãñÿ’D’$¢$o@\ãÈÞ\ã\ãdZ^ñÿ’D’$’$¹nN€ÈÈ Þ\ã\ã]ñÿ’D’$’$Ax\\ ã bbxÈÞÈ^ñÿ’D”$’$BNj"ÈÞ"!e‰È ÈÈñÿ’D’$’$‡ºx Þ\ã\ãÈ Þ\ã\ñÿ¢D’$’$ø[†ãdþ¸˜^€ÈÈ È Þ\ñÿ’D’$’$†Ã”ã\ã]\ ã bbÞñÿ’D’D’$ª¯¢ÈÞeóÈÞÈ^"eñÿ’H’$’$®R°ÀÈ^€È Þ\ã\ãñÿE’$%µÍ¾dñÈÞÈ^"eÖÈÈñÿ’D’$’DqÌ Þ\ã\ãdéÈ^ñÿ’D’$’$%ºÚ Þ\ãþš\ãÈ Þ\ã\ñÿ’D’$’(#"èãÈ Þ\ã\ãd ÈÞñÿE’$”$�GöeÈÞ Þ\ã\ãd ñÿ’D’$’$ð¼È Þ\ã\ãL%Þ Þ\ñÿ’D’$’$¾ã\ã bb4\H ñÿ’D’$’$‹ ìßÚ^ \H ìßÚ^ñÿ’D’$’(À¢.,#H Hþõ‡ "eAH Þñÿ’D’D’$Ó—<P d\H ìßÚ.Kñÿ’D’D’$ãgJ<(!e¾+**A SSMELBREC DOñÿ’D’$’$ЇXÞÞ\ ã+ EREOR R : ñÿ’D’$’$Іf Þ Þ\ ã\ ãÞP Hñÿ’D¢$’$ÿ€t ÐH ÈeŽ\H ìßñÿ’D’$%Ÿ‚ÚÞ\ ãH èþ·¤P dv\ ñÿ’D’$’$š#�ã+**L SA TEROCDRDEÞÞ\ñÿ’D’$’$)Áž ã+P OCEDC UOTNRE= ÞÞñÿ’D’$’$¬\ ãL% Þ\ ã\ ãL&ñÿ’D’$’$/KºÞT&\H ìßÚ.L(ñÿ’D’$’$UÈÐH ÞP H H \ñÿ’D’$¢$]ÖH ìßÚ.K<(þ"m"eûÈñÿ’D’$’$"ä Þ\H ìßÚ.L(ñÿ’D”$’$\{òÐH ÞP dÐÈÐ bñÿ’D¢$’$¬¹bJH Þe!ÞÐH ÐÈñÿ”D’$’$ï Èe!\ÈìßÚÞ\ ãñÿ’D’D’$z£ÈèÐd  b‚bX+R.XD ñÿ’D’$’$`c* 8 ÞÞ\ã\þ6Æãñÿ’D’$’$ 8+E.TX DC.TS. LC DÞÞ\ñÿ’D’$’$¨žFã+CPTR N ÞÞ\ñÿ’D’$’$ÃÚTã\ãÞ Ð^0T^9.ñÿ’D¢$’$„#b@ÐL.@Èex<ËL.$'ñÿ’D¢$’$õÀp<ÓLêTdc^AT^Zñÿ’D”$’$]~.@ÐL.@Èe•8ËL.$þÜñÿ’D”$’$§Œ'8ÓLêTd€8Ë^ñÿ’D’$’D}yš'<Ë'8Ó\)eþ+**A SSñÿ’D’$’$™a¨MELB YOCEDÞÞ\ ã+S CEñÿ’D’$’$QY¶ITNON TOP ORÞÞ\ ã+EPñÿ’D’$’$ùDÄLR YNEED.D Þ Þ\ ã\ñÿ’D’$’$P~Ò ã+**L SA TEROCDRDEÞÞñÿþTM’D’$’$õAà\ ã+P OCEDC UOTNRE= Þñÿ’D’$’$ð-îÞ\ ãL% Þ\ ã\ ã^ñÿ’D%%Þoü7\ãe\ãdþ]ñÿ’D’$’Dïý \ ãL^;e\ãLñÿ’D’(’$Èì.8Ë(eþÜÞìßL Þñÿ’D¢$’$àÐ& ÐPÞ@Ð È@Èe:Ü Èìß^ ñÿ’D’(þ'—’$¥â4 Èè Ðd)Þ ÐÞ Ð\ã Èñÿ’D’$%§>BPÞ#L^;#!ep]ñÿ’D’$’DLP\ ãL^;en ÈÞ Ðñÿ’D’$”$>^Ü ÈìßL L^:enñÿ”D’$%b(l È Ðd>\ã ÈÞe† ÈÞñÿ’D’$%²{z ÐÜ ÈìßÚ^ exÞ Ðñÿ’D’$’(c‹þ稈 È Ð ÈÞ@Ð È@Èe¦Ü Èìñÿ’D’$’$|–ßÜ ÈìßÚ ÈÞ Ð Èè ÐñÿE’$’$c»¤dŽÜ+PJ C ÂñÿE’D’$⡲eÍ aþÞ Ð+SJ R@ CPTR Nñÿ’D’$¢$ zÀ Þ Þ\ã\ãddÜñÿ’D’$¢$(wÎ+OP P Âe ñÿE’$’$¼×Üaþþ ÈÞ Ð+SD Z4 1 ñÿ’D’$’$œ!ê ÞÞ\ã\ã+DL A ñÿ’D’$”$‹0ø ÞÞ\ã añÿ’D’$’$ ÷Þ\ã+@ 14 ñÿ’D’$’D ÌÞÞ\ã\ãddÜ+UPHSñÿ’D’$¢DéÜ" Âeo aþ Èñÿ’D’$’$Ê0Þ ÐþçH+SI Z4 1 Þñÿ’D’$’$ÿ·>Þ\ã\ã+TS A ñÿ’D’$’(ŽRL ÞÞ\ã aÞ\ñÿ’D’$’$ºZã+@ 14  ÞÞ\ñÿ’D%’$í¸hã\ãddÜ+OLDA ñÿ’D%’D €v ÂeÚ aþ ÈÞ Ðñÿ¢D%’(“Ñ„ aÐ þšaÐ aÐ+SJñÿ’D’$’$X¯’ R@ C.DL Þ Þ\ã\ñÿ’D’$’$^J ãÈ Þ\ã\ãÈ Þ\ñÿ’D’$’$n¸®ã\ã+DL A ñÿ’D’$’$ÏÓ¼ÞÞ\ãÈÞ\ã+@ 74 ñÿ’D’$’$ÆxÊ ÞÞ\ã\ãñÿE’$’$#£ØddÜ+TSRO þ¤� Âñÿ’D’$¢$õÆæÜ ÈÞìßÚ^E"eJ ñÿE’$’$¶ñôaþ ÈÞ Ð+TS A ñÿ’D’$’Dðr ÞÞ\ã aÞ\ãñÿ’D’$’$#ø+4 7 ÞÞ\ñÿ’D’$’$zgã\ã+SJ R@ C.TS ñÿ’D’$’(ÌR, Þ Þ\ã\ã þCÿa Þ\ñÿ’D%’$CL:ã\ã a Þ\ã\ãñÿE’$’( ÚHddÞ Ð È@Ð È@ÈeaÜ Èìñÿ’D’$’(w6VßÚÞ\ ã Èè ÐdN\ãñÿ¢D’$’$µ»d ÈeŸ+R.XD 01 Þñÿ’D’$’$¼frÞ\ã\ã b$bÌÜÞñÿ’D’$’$€¯€ìßL ÜÞìß\þTr ãÜÞñÿ’D’$’Dàߎìß\ ã\ãe¡ÜÞìßñÿ’D’D’$ãõœ^ d¨ÜÞìß\ ã añÿ¢H’(’DB ª d #Èe´ÞÐd¿ È Þ\ñÿ’D”$%¼X¸ã\ã\ãdˆ% a'dˆ%ñÿ’D’$%œêÆÜ\ ã È È^@aºdˆ%ñÿ¢D’D’$ƒáÔ a'dˆ%Ü\ ãÜ\ ãþ1ò ñÿ’D%%ùñâÈÈÞ Èa&dˆ% a'dˆ%ñÿ’D’$’$ÄðÜ\ ãÜ\ ã ÈÈÞ Èñÿ”D”(’(¤Ÿþ^a`dˆ% a'dˆ%Ü\ñÿ’D’$’$¿ ãÜ\ ã ÈÈÞ ÈÞ^ñÿ¢D¢D’DaÎ a`dˆ% a'dˆ%Ü\ ãñÿ’D’$%Î( ]\ ãL^Le; ]þ6*ñÿ’D’D’$¦Á6 \ ãd- Ü\ ã ÈÈÞñÿ’D’$’$ºÀD Þ\ã\ãLÞ\ ãÈñÿ’D’$”$)ÌR Þ\ã\ã]\ ãdˆ%ñÿ¢D’D’$þ/` a'dˆ%Ü\ ã ÈÈ Þ\ñÿ’D’$%‘˜n ã\ã]\ ãdˆ% añÿ¢H’$”$-†| 'dˆ%Ü\ ã ÈÞ ÈaºñÿEþÑ+E’$gአdˆ% a'dˆ%Ü\ ã È Èñÿ’D¢(¢(o˜ Þ^aîdˆ% a'dˆ%Üñÿ’D’$%‹¦ \ ã ÈÞ È^aîdˆ%ñÿ¢D’D’$³w´ a'dˆ%Ü\ ã ÈÞ Èñÿ’D¢(¢(D ^Þaîdˆ% a'dˆ%Üñÿ’D¢$¢DÓhÐ \ ã È Èaºdˆ% a'dñÿ’H’$”$þ5×Þ ˆ%Ü\ ã ÈÞÞ ÈaºñÿEE’$ü¿ì dˆ% a'dˆ%Ü\ ã]\ñÿ’D”$’$íJú  ãL^Le !]\ ãñÿE’$’$‡™!dü Ü\ ã ÈÈ Þ\ã\ñÿ’D’$’$ñ¿!ãLÞ\ ãÈÞ\ã\ñÿ’D”$%95$!ã]\ ãdˆ% a'dˆ%ñÿ’D’$’$×Õ2!þ›k È Þ\ã\ãÞ Þ\ã\ñÿ’D”$%5@!ã]\ ãdˆ% a'dˆ%ñÿ’D’$%ÉËN!]\ ãL^Lea!]ñÿ’D’D’$Hl\!\ ãdS!Ü\ ã È Þ\ãñÿ’D’$’$�¿j!\ãLÞ\ ãÈÞ\ãñÿ’D’$¢DàÞx!\ã]\ ãdˆ% a'dñÿ’H’$¢$VÓ†!ˆ%]þÕö\ ãL^ eš!]ñÿ’D’(’$È­”!\ ãdŒ! ÈÐ ÜÜàÜÞìñÿ’D’$’$^­¢!ßL ÜÞìß\ ãÜÞìñÿ’D’$”$hŸ°!ß\ ãÜÞìß^ a ñÿ’D’$’$Xš¾!Ð ÈÈ^€ Þ\ã\ãñÿ’D%E¿Ì!]\ ãdˆ% a'dˆ%Ü\ñÿ’D’$’$NÚ! ãÜ\þ ã\ã ÈÈÈañÿ¢H¢(’$[§è!ždˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$”$Èö!ã\ã]\ ã\ãeú!ñÿ’D’$”$Ã6"]\ ãÞÐÞÐÈÈe$"ñÿ’D’$’$÷_"]Èìߨ Þ\ã\ãÈñÿ”D”(’(Ñ9 "èÐd "dˆ% a'dˆ%Ü\ñÿ’D%%«Þ." ã ÞÈ Èaþam&dˆ% a'dˆ%ñÿ’D’$%æg<"]\ ãL.ÞeO"]ñÿ’D’D’$�ÑJ"\ ãdA" ÜÞìßL ÜÞñÿ’D’$’$£ÛX"ìß\ ã ÜÞìß\ ã È Þñÿ’D’$’$¼bf"\ã\ã ÜÞìßÚÞ0ñÿE’$’$J™t"e§"+T.TX ÞÞñÿ’D’$’$…�‚"\ãÞ0Þ\þ&Ð ãÞ0Þ\ñÿ’D’$’$K8�" ã'ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D”$’$R ž"Þ\ ã\ãd5# ÜÞìßÚñÿ’D’D’$T%¬" Þ0eâ"+T.TX ñÿ’D’$’$Mº"ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D’$’$ïÈ"Þ\ ã,ÞÞ\ãÞ0Þ\ñÿ’D’$%�ÀÖ" ãÞ0Þ\ ã\ãþ]Çd5# ÜÞñÿ’D¢$’$ä"ìßÚÞ0e#+T.TX ñÿ’D’$’$Û«ò" ÞÞ\ãÞ0Þ\ñÿ’D’$’$±7# ãÞ0Þ\ ã<ÞÞ\ãÞ0ñÿ’D’$’$ d#Þ\ ãÞ0Þ\ ã\ãdñÿ’H’$’$“�#5#+T.TX ÞÞ\ñÿ’D’$’$Û˜*#ã ÜÞÞ\ã\ã]þHG\ñÿ”D%’$=â8# ãdˆ% a'dˆ% ÞÞ Èañÿ¢H¢(’$w¦F#&dˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$’$©ÆT#ã^.Þ\ ã\ã]!\ñÿ’D’$’$¡öb# ã\ã^0Þ\ ãM!Þ\ñÿ’D%’$“ap# ã\ãdˆ% È Þ\ã\ñÿ’D%’$r4~#ã\ã a"dˆ% È Þ\ãþÑñÿ’D’$’$r³Œ#\ãÜ\ ã\ãÈ Þ\ñÿ’D’(%虚#ã\ãdˆ%ðñrÞg¦#d­ñÿE¢(ET�¨#dÁdÁdÁdÁdÁdÁdÁñÿE¢(Eõ޶#dÁdÁdÆdÔdÔdÔdÔñÿE¢(E—ŽÄ#dÔdÔdÔdÔdÔdÙdëñÿE¢(EŽÒ#dëdëdëdëdëdëdëñÿþÛPE¢(Et�à#dëdðd d d d d ñÿE¢(EþŒî#d d d d d d d ñÿE¢(EnŒü#d d d d d d d ñÿE¢(EÕŠ $d$ d` d` d` d` d` d` ñÿE¢(E8Š$d` d` d` de dz dz dz ñÿE¢(E‰&$dz dz dz dz dz dz d ñÿE¢(þþŸE;‰4$dŒ dŒ dŒ dŒ dŒ dŒ dŒ ñÿE¢(E؈B$dŒ dŒ d‘ d  d  d  d  ñÿE¢(EzˆP$d  d  d  d  d  d¥ d´ ñÿE¢(Eù‡^$d´ d´ d´ d´ d´ d´ d´ ñÿE¢(Ex‡l$d´ d¹ dÊ dÊ dÊ dÊ dÊ ñÿE¢(E‡z$dÊ dÊ dÊ dÊ dÏ dÚ dÚ ñÿE¢(Eņþ¿[ˆ$dÚ dÚ dÚ dÚ dÚ dÚ dÚ ñÿE¢(E:†–$dß dî dî dî dî dî dî ñÿE¢(E[…¤$dî dî dî dó d-!d-!d-!ñÿE¢(EQ„²$d-!d-!d-!d-!d-!d-!d2!ñÿE¢(E„ƒÀ$dI!dI!dI!dI!dI!dI!dI!ñÿE¢(E�‚Î$dI!dI!dN!d‚!d‚!d‚!d‚!ñÿE¢(Eƒ�Ü$dþ«X‚!d‚!d‚!d‚!d‚!d‡!dÓ!ñÿE¢(E”ê$dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!ñÿE¢(E ø$dÓ!dØ!dë!dë!dë!dë!dë!ñÿE¢(EU~%dë!dë!dë!dë!dð!d&"d&"ñÿE¢(E%}%d&"d&"d&"d&"d&"d&"d&"ñÿE¢(E¬|"%d+"d7"d7"d7"d7"d7"d7"ñÿE¢(E~y0%d7"dþu•7"d7"d<"d<#d<#d<#ñÿE¢(E\u>%d<#d<#d<#d<#d<#d<#dA#ñÿE¢(EøtL%dI#dI#dI#dI#dI#dI#dI#ñÿE’(’$›®Z%dI#dI#dN#AAAAñÿ’D’$%ø>h%AAAAAdw#Añÿ’D’$’$á…v%AAAAAAAñÿ”D’$’$Bb„%Ad‡# þ½„b^bŽ+UOPTTU ñÿ’D’$’$V’% ÞÜã+RP R ñÿ’D’$’$Ö % Þ Üã+NIUP T ñÿ’D’$’$ÿË®% ÞÜãÜãÜãÜã+ ;ñÿ’D’$’$;Õ¼%====P A4MSB GEÞÞ Üã+NIñÿ’D’$’$O™Ê% SON W ÞÞ Üã Üãñÿ’D’$’$Ø•Ø%ÞT+^0.Tþ �(ÞT%ÞT*ñÿ’D’$’(¤:æ%^P-L*H-e &ÝL*ñÿ’D’$’$Ñô%ìßP.L.+ ñÿ’D’$¢Dz1& àL*èT*dê% aj]ñÿ’D’$’$°Ÿ&Ü ã]Ü ã]ÞìßÜ ãñÿ’D’$’$̹&]ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$¸,&L^.]+ITþ¸t T ñÿ’D%’$ö|:& Ã"er&+********** ñÿ’D’$’$8ÂH& Þ Þ Üã+N OITLT EOFñÿ’D’$’$pV&NU DÞÞ Üã+********** ñÿ’D’$’$7²d& Þ Þ Üã Üã Üã^7ñÿ’D’$’$^Er&LÞÜ ã]ÞÞÜã]Üñÿ’D’$’Dìð€& ãLÞÜ ãÜãe}&ÜþCFã]ñÿ’D’$¢$¶ Ž&Ü ã]Ü ãL^Ie &Þñÿ”D’$’(̦œ&T,dÑ&L^Le¬&ÞT,ñÿE’$’$.Iª&dÑ&L^PL^?#eñÿ’H’(’$™_¸&¾&ÞT,dÑ&]Ü ãL^.ñÿ¢D¢$’$HJÆ&eÎ&ÞT,dÑ&ÞT,L,,ñÿE’$’$ðËÔ&dY)])Ü ãL%L)L)þ5ÀÞñÿ”D’$’$ð¤â&"e''L'ÞT'^IÞ Üñÿ’D’$’$šºð& ãL)Þ Üã^ Þ Ü ã+ ;??ñÿ’D’$’$“Ñþ& ?CPDO E Þ Þ Üã+C UOñÿ’D’$’$ÑÁ 'TNO TUO FTSÞÞ Üã+PE? ñÿ’D’$’$1å'?? ÞÞ Üã ÜãLñÿ’D”$’$T(')T%]Ü ãdi)LÞÜ ãþ¸(ñÿ’D’$’$rÑ6']*Ü ãL*ÞÜã]Ü ãLñÿ’D¢$”$ýRD'ÞÜ ãÜãe?'ÜãÜãdi)ñÿ’D’$’$š¸R']ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$#`']ÞìßÜ ã]+IF L ñÿ’D¢$¢( n' Âe{' a„d2)]ñÿ’D’$’$s³|'+WS 1  Â]ñÿ’DþÈ+’$’$|“Š'+WS 2 Â#]ñÿ’D’$’$n’˜'+WS 3 Â#]ñÿ’D’$”$Oe¦'+WS 4 Â#e&(ñÿ’D’$’$Di´']Ü ãL^0L^1ñÿ¢D’$’$‰ˆÂ'#e´']ÞìßL L^ñÿ”D’$’Dx„Ð'1eÚ'ÞT)dÝ'ÞT)Þñÿ’D’$%þä/Þ'T*ÞP-L*H-e (]ñÿ’D’$’$ʆì'Ü ã]L*ìßL L)Þñÿ’D’$’$Ëeú'L.L(T)L*èTñÿ¢D’$’$îô(*dã']ÞìßÚ.L(Tñÿ’D’$’$~Q(*]L*ìßL)]Ü ãñÿE’$’$2Ç$(d2)]+XT T ñÿ’D¢$’$*Ø2(þéÀÂÌ^M"eÆ(^.ÞÜ ã]ñÿ’D’$’$’½@(ÞÞÜã]Ü ãLÞÜ ãñÿ’D%’$Å6N(L^ eE(ÞT*ÞP-Lñÿ’D’(’$£ã\(*H-e·(]Ü ãLÞ0ñÿ¢D’$’$ß…j(e}(Þ0ÞÜ ã"ÞÞÜãÞ0ñÿ’D’D%¹x(ÞÜ ãd°(LÞ0e”(Þ0ñÿ’D’$”$Žù†(ÞÜþ1š ã<ÞÞÜãÞ0ÞÜ ãd°(ñÿ’D%’$õó”(LÞ0e«(Þ0ÞÜ ã>ÞÞñÿ’D”$’$™e¢(ÜãÞ0ÞÜ ãd°(LÞÜ ãñÿ’D%’$5°(L*èT*d[(]Ü ãÜãLñÿ’D¢$’$|¾(ÞÜ ãÜãd2)]+NE T ñÿ’D”$¢$ÜÌ(  Âeÿ(L+eé(Þñÿ’D’$’$ˆÚ(T+^.þÕ¦ÞÜ ã]ÞÞÜãdñÿ’H’$’$d/è(ý(+ ; . ÞÞÜñÿ’D”$’$�çö(ã]ÞÞÜãd)]+NE Dñÿ’D’$’(u©) Â!e)^.Þñÿ’D’$¢$·â)Ü ã]ÞÞÜãÜã!e,)]ñÿ’D’$%ê )Ü ãLÞÜ ãÜãe)]ñÿ’D”(’$ö.)Ü ãÜãdi)þ š azL%ÞTñÿ¢D’$’$ Z<)%di)LÞÜ ã]Ü ãLñÿ’D%’$ãJ)ÞÜ ãÜãeD)Üã]Ü ãdñÿ’H%¢(™ˆX)i)ñ¯Þg_)dÖ&d1'dR'dñÿ¢H%’$&ýf)4)d?)Üãeu)Üã]Ü ãdñÿ’H’D’(¸t)i)Ü)e�&L'Þe¢)+-;--ñÿ’D’$’$–«‚) -ON .FOW RAÞþʼÞ Üã+INGNñÿ’D’$’$’«�) S = Þ Þ ÜãL'Þñÿ’D’$’D0.ž) Üã ÜãL&ÞeË)+*;** *ñÿ’D’$’$HÁ¬)ON .FOF TAÞÞ Üã+LAE RRñÿ’D’$’$LÀº)RO S= Þ Þ ÜãL&Þ Üñÿ’D’$’$`È)ã Üã+E.DN Þñÿ’D’$’( ÆÖ)ÞÜãÜãL&Þeþb/ßä)^7ñÿ’D’$’$ã´ä)ÜãÜãÜãÜã ÜãÜã üÿEwàò)a‰%*ÿÿ@ –õ)ÿÿ û_€ÿR2SMEMACC.RBûY!6þ§.ýÿsÛ•¯ôtÙÿ$I$IJÉ1¦ gý¥7^ý¥_\þ¥ARþ¥7Mû¥}K&§}:&§Œ+$§}) ¦Fþ¥}�¥F+éà’ úÿØÆé\Œÿܱÿþÿˆxñÿ’D’$’$¹©"(¶'X"8;«þö'"Cñÿ’D’$’$Lî« Óûú!,!�ª#(¶æ *ñÿ’D’$’$›”!!Lõ)ŧ þ«‰Ó"!!D«û #(ñÿ’D’$’$Œ*¶Õ ç)ħ!,!J Ú!0”!PÓñÿ’D’$’$Ro8ˆÓÙ)ħ!,!!‚ØxåÿlÛ`Û¶Zï½c‚ÿ[¹ãBÿÓéÃyÿõéZÿï½C‚ÿbÿTxÿܱÿ\ŒÿñÿœDœ$’$·¥ *"( PÀÊ! ã^'Þ\ ã\ãd‚^(ñÿ’D’$’$*ãLÞ\ ã^ Þ\ ã+1WW 2ñÿ’D’$’$ä#Z3WW 4 Þ Þ\ã^)Þñÿ’D¢$”$K®h\ ã\ãd‚qaìgvñÿE¢(EãvdÆdÜd d"dJdþùß-d£ñÿ’D%¢$v „-q8k-Þg‹d—Ad¬dñÿ¢HE¢(‚’¬d¬d—dÃd¬d¬d—dñÿ¢H’$’D V ¬d—ÌèÔ Èa bbñÿ’D’(%¥%®àÈÞe3ÈÐÈØdÈ-Ìñÿ¢D’$’(y@¼eÇ^IÞ\ ãdõÈ*ÌñÿE’$’DòÇÊeÔ^BÞ\ ãdõÈ+Ìþ-Eeñÿ’H”$’$^Øá^CÞ\ ãdõÈØÞeñÿ’H”$’$]Sæï^IÞ\ ãdõ^RÞ\ñÿ¢D¢$’Dµô ãd3 ÈØa«d3^AÞ\ñÿ”D’$%9D ãd3^SÞ\ ãd3^Mñÿ’D’(¢8¯­Þ\ ãd3 ^ôad3ññÿ¢DE¢(ábÒg!dºd÷dþdddþ´)ñÿ¢HE’$Õ,ddd bb@#Ìeñÿ”H’$’$4ì:N a]RÈßÞÞ\ã ñÿ¢D’$¢$ß9HÈa«\ãÌèÔ Èa ñÿ’D%’DáVbbL#Ìeu a]RÈßñÿ’D”$’$òVdÞÞ\ã Èa«È Þ\ãñÿ’D’$’Dq�r\ãÌèÔ Èa bbñÿ”DþsG%’$µ¬€X#Ìe¡ a]RÈßÞÞ\ñÿ’D’(’$ÉhŽã Èa«ÈÞ\ãÈÞ\ñÿ’D’$%Çœã\ãÌèÔ Èa bñÿ’D¢$’(}7ª b¬âÌÞebãÌdVâÌØÞñÿ’D%%™V¸âÌ,Ì"eáâÌ*ÌeÌ 3Þñÿ”D’(’(‰%ÆÞåÌadßâÌ+ÌeÙ 3ÞÞñÿ¢D’D¢(þë6S‡ÔåÌadß 3ÞÞåÌadâÌñÿ”D’$E^â)Ìeî 3ÞÞÞadHPñÿ”Dâ$’DbÎðAÞeú þÞadHPèPñÿ’D’$”$–%þP\HPìßåÌâÌ,Ìeñÿ’D%’$‚‚  3ÞÞHPad 3ÞÞHPñÿE%%Øhad`äÌdHåÌÞe. 'Þñÿ”D’(’$µv(þ=üæÌâÌaVd7 6Þ8ÌåÌæÌâÌañÿ¢H”$’(>6}dR #ÞåÌâÌaVdR ^�ñÿG¢$E ÕDadRñ²gLd!d9dAñÿE¢$EóÏRd`d`ñ»gZdµddTñÿ’D’$’$k`ÞãÔ bbàÈÐÈØÞeñÿ’H’D’(º˜n·ÈØd­ÈØÞeƒ +ÞÈñÿ’DE’$æÚ|ØÈþøØaVd� 8Þ8ÌÈØÈñÿ’DE¢$NŠØÈØa}d·ÈØÞež ñÿœD’(%éè˜^�ad¤ ÞÈØa4d·ñÿ’DÅ¢(¬R¦ ^�ad·ñþg±dsdñÿ¢H’$¢$5E´‘d¦ b büâÌÞeBãÌñÿE¢8”$Ž·Âd2 âÌa eëHPAÞeÖñÿœD’(’$Ø�Ð þÞaþ¶.déHPèPP\Hñÿ’D’$¢(jÀÞPìßåÌ &ÞHPaZdð ñÿœD”(”$Ÿîì^�ad<äÌdåÌÞeñÿ’DE’$3 ú %ÞæÌaZd  2Þ8ÌåÌæÌañÿ¢H¢$”$gÿd)åÌÞe "ÞåÌ)ÌaVñÿE'¢$Îñd) ^�ad)ñPg#dñÿ¢HE'÷Ï$õd ddþ.ç< ^�ad<ñÿ”D¢(’DÕ22ñ\g6dÄdòd+ÞãÔÞäÔñÿ’D’$’DE@ÞåÔ bb| a©âÌÞeñÿ’H’(¢Äÿ*NXâÌ*ÌeX �Þa#Ìe{ ñÿE’$’$Âj\a]R!ÞßÞÞ\ã^LÞñÿ’D’$’$“­j\ ã^ Þ\ ãÈÞ\ãñÿ’D’$’DTix\ãÌèÔ !Þþ)a bbñÿ”D%’$¢¨†\#Ìeª a]RÈßÞÞ\ñÿ’D’$’$q'”ã^LÞ\ ã^ Þ\ ãñÿ’D’$’$4‹¢ÈÞ\ã\ãÌèÔ Èañÿ’H”$%8’° bbh#ÌeÞ a]Rñÿ’D’$’$L;¾ÈßÞÞ\ãÈÞ\ã^Lñÿ’D’$’$4²ÌÞ\ ã^ Þ\ ãþ<ÈÞ\ñÿ’D’$’(Úã\ãÌèÔ Èa bñÿ’D%%r^èbnÈÞe È-Ìe È,Ìñÿ¢D”$’$ "öe ÈØÞe  ÈÜÜañÿ’X¢$’$ø  -ÞÈÈÈa} bbH#ÌñÿE’$’$_že.^LÞ\ ã^ Þ\ ãñÿ’D’$’$â’ ÈÞ\ã^:Þ\ ã\þFÉãñÿ’D’$’D.œ. bbÈÞe£ÈÐ#Ìeñÿ”H’$’$á<} a]R&ÞßÞÞ\ã\ñÿ’D’$’$¨8Jã+. XT T ÞÞñÿ’D’$’$¤¯X\ã^"Þ\ ãÈÞÞ\ñÿ’D’$’$©ôfã^ Þ\ ã^"Þ\ ã\ñÿ’D”$’$VÏtãÌèÔ &ÞaÈØÞeþ-ßñÿ’H’$¢$³V‚žÈØÐ 3ÞÞÈØØìa ñÿ’D”$”$”æ�2Þ8ÌÈ ØÈ Øa Þ ÞaZñÿ’D’D’$Ñ‘žÈØÐd3 bb„ÈÞeñÿ’H”$’$¶�¬ÌÈÐÈØÞeÂÈØÐ 2Þñÿ’D¢$¢$lüº8ÌÈ ØÈ Øa ÞÞaZÈñÿ”D’$’$luÈØÐd¨ b,b& ÈÐÈØâÔñÿþãC’D’(%® ÖÞãÔÈØdeÈ ØÞeìÞäÔñÿ’D¢$’$Ò°äÈ ØåÔÈ ØæÔdû 6Þ8ÌÈ Øñÿ’D’D’(ßòÈ Ø)Ìa}ÞäÔÞåÔdt;Ý:Ì ßñÿ’D%’$›æÐÈØÞeÞäÔÈØåÔÈØñÿ’D’(’(}ªÈ ØæÔd/8ÌÞe" 'ÞÈñÿ”D’(”$ŽZØ)ÌaVd* 6ÞÞÈØ)Ìa}ñÿ’D%þóÜ¢$áÞ*ÞäÔÈ ØåÔdtÈ ØÞe? ñÿâD%¢$ì8–ÞaÞâÔdcÈ ØÞeK ñÿâD’D’$S5F—Þad[È Øè8ÌH Èñÿ¢D'’$tŸT#e[ ±ÞaÞäÔÈ ØèåÔÞñÿ¢D’$E¬MbæÔdtqÞgldÜdýñÿ”D’$%d�pAd1ÌóÏË'(!e† ;ÞñÿGâ$¢$ÏÙþ3æ~a óÏË'aÌóÏ(e Ìñÿ”D’$%6ÍŒ ÞeU ÜâÝà ÈÞe¤ ÈØñÿ”Dâ$¢$T¥šÞe¤ ŠÞaÞ Ð a¸ ñÿG’$'�Ú¨a Ë^'a añÿ’H’(%šf¶©âÌÞeÕâÌØÞeÈ qÞñÿGœ$%„ÄadÕ âÌ-Ìa!eÕ :Þñÿ¢D¢$’$âÒâÌþf¢a4 ÈÞe@ ÈÐ ÈØâÌñÿG’$’D~àaeÈØÞe ÈØÜñÿâD’(¢$¶|îÜa 'Ìeû -ÞÈÈ-Ìa}Èñÿ”D’$EñüÞe ÞÈ-ÌaVdÈÞñÿ¢D’$ECŒ e "ÞÈ-ÌaVd ‹ÞñÿG’$’$)ËaÈØâÔÞãÔÞäÔÞåÔâÌÞñÿE’$Å�Å&e@âÌþp2ØÐ âÌ+Ìae6ÞÐñÿE'%³&4d; âÌÜa $ÞÈaZÌ Þñÿ¢D¢$¢8‡çBe�Ì ÞeO adS ñÿâD’D’DêPP ÞadõÌÞe½âÌÞeñÿ’H%’8 ¸âÌÞeN âÌØÞeN  tÞñÿG¢$”$~×L aH Þe\  ÞH aZñÿE’$’D]ŠZ dd  ÞH ÞaZ bbñÿ’Dœ(’$–$h BÌÞe•  a K^Hñÿ’D’(’$Ç_v 'a âÌ ÐÞPþ:' ÈÞñÿE¢$’$Ý„ e ÈØÞeë È Ð ÈØ+ÌñÿE%'’q’ e¤ äÌÞež  ^�aåÌÐñÿ”Dœ$”$žv  æÌÐd©  ^�aÌ Þe½ ñÿ’D’(’ÄHP® H Þe¸  tÞaÞPdñÿ’H’(’ÄLš¼ Ñ Ì ÞeÑ  tÞa K^ñÿ’D'%4UÊ H'aÌ Þeæ  þ.Eañÿ’X’$%®ŸØ  K^H'a dé ñÿ’D’D’$RŒæ ÞPd \ ÝàÝ]®Þìñÿ’D’$'¬±ô ßà ^ \ a ÞÐñÿ’D%¢$d� H ØÞe H ØÐd  ñÿâD’$”$uˆ ¯ÞaÞÐÝ\ àH!e… ñÿ¢D’$’(ñŒ  a¸ 2Þ8ÌÈÈaâÌÞþ¬%ñÿE¢$â$€”, ei âÌØÞee  -ÌâÌaeñÿ’H¢(â$‚R: B  ÞÞaZdc  ,ÌâÌaeñÿ’H¢(â$fRH P  ÞÞaZdc  +ÌâÌaeñÿ’H¢(â$ÃŒV ^  ÞÞaZdc  ^�adñÿ’H’Ä’$Å¢d i  tÞaÌ ÞPH!eñÿœH’$’$ù®r �  a K^H'añÿ’HþU*’DâD—v€ He Ì Þe�  adñÿ’HÅ¢$[Ž “  ÞadÏ H Þe¡  ñÿâD’D’$/yœ tÞadÏ \ ÝàÝ]®Þìñÿ’D’$'ö°ª ßà ^ \ a ÞÐñÿ’D%¢$B‹¸ H ØÞeÅ H ØÐdË  ñÿâD’$’$AÓÆ ¯ÞaÞÐÝ\ àH Þeñÿ’H”$”$þ]ÏuwÔ â  2Þ8ÌÈÈa ÞÞaZñÿ’D’$¢$9Pâ bbH ÐÌÞeÑ  ñÿG’$â$Wyð a K^H€'aâÌñÿ’D”$’$‹jþ ÐÞPÈÞe™ ÈØÞeñÿ’H”$”$_Ä k È Ð ÈØ+Ìe% äÌÞe ñÿ’D’Ä’(â  ^�aåÌ ÐæÌ Ðd*  ^�ñÿG%%‹ã( þˆžaÌ Þe= È Þe8  tÞñÿG%%L]6 aÞPdQ Ì ÞeQ  tÞñÿG’$â$ÍùD a K^H'aÌñÿ”D'’$²qR Þef  a K^H€ñÿœD’(’(­�` 'adi ÞPd™ \ Ýñÿ’D’$’$7n àÝ]®Þìßà ^ ñÿœD’$¢$ñA| \ þEœa Þ ÐH ØÞe� Hñÿ’DœD’$üŠ Ø Ðd•  °ÞaÞ ÐÝ\ ñÿ’D’(¢$+)˜ àH!eÁ âÌÐÈÞe³ Èñÿ’D¢D¢D±Û¦ ØÞe°  a©d³  a¸Ìñÿ”D'’$×p´ ÞeÛ  a K^H€ñÿœD”$”$߲ 'aâÌÞeÔ âÌ-ÌeÔ ñÿœD%’(Ó Ð  tÞaþŸ a©ÞÐdÝ ÞÐÌñÿ”D'’$wðÞ Þe  a K^HñÿœD”$”$a²ì 'aâÌÞeþ âÌ-Ìeþ ñÿœD”$â$¸ºú  tÞaÈ,Ìe  |Þa ñÿE'”$ü¹ a© ^�ad¥ È-Ìe. ñÿ¢D”$’$7— Èe  3ÞÞ Þa 2Þ8Ì Èñÿ¢D¢$’Dކ$ Èa ÞÞþÄaZd¥ È,Ìeñÿ”H’$’D¹u2 K Èe<  3ÞÞÞa 2Þ8Ì Èñÿ”D”$’(�ø@  Èa ÞÞaZd¥ È+ÌñÿE’D’(ØN eh ÈeY  3ÞÞÞa 2Þ8Ìñÿ’D’DEä\ È Èa Þ ÞaZd¥ ÈÞñÿ¢D”$œ$ 3j e¥ ÈØÞez  ^�añÿE¢8”$M�x d¥  Èa e¡ þz2ÈØ ÐÈeŒ ñÿ’D’(%d’†  3ÞÞ Èa 3ÞÞ Èa 2Þñÿ’D’(¢(ê” 8Ì È Èa Þ ÞaZd¥  ñÿâD’$¢$ÓA¢ tÞaÌ ÞPH!e½  ñÿG’$â$uü° a K^H€'aHñÿ¢D¢$¢8÷ؾ ež Ì ÞeË  adÏ  ñÿâD’D’(»«Ì Þad H Þeþ…>Ý  tÞañÿ¢X’$’$]Ú d \ ÝàÝ]®Þìßàñÿ’D’$’Ä4ˆè  ^ \ a Þ ÐH ñÿ’D’D’(tiö ØÞe H Ø Ðd  °Þañÿ’X’$%0… Þ ÐÝ\ àÈ Þe  2Þñÿ’D’(’(7÷ 8Ì È Èa ÞÞaZ bñÿ’D'’$‹} b< ^�a K^Hþ/ãñÿ”D’$¢$äŠ. 'a ÞÐÞÐâÌÞeO âÌñÿ’D%’$^< ÐÈØÞeK ÈØÐÈØÐdñÿ’H’ÄâDlXJ O  tÞaÌ ÞeY  adñÿ’H’Ä’$.ŒX ]  Þa K^H'ñÿG%¢$ Üf aâÌÞe… âÌØÞey  ñÿâD’D¢ÄRt tÞad…  ÈâÌa!e…  þàñÿâD¢$¢8š‚ tÞaÌ Þe�  ad“  ñÿâD’$”$ß� Þa K^@'a ñÿ’D’D¢$=ˆž âÌÞeÆ âÌÐÈØÞe  ñÿ’D’Ä'û¾¬ ÈØÈa! ÈØÈa!#ñÿE¢8'cº eÀ  tÞadÆ  tÞa bñÿ’Dâ$’$È b< ^�a K^Hñÿþ_€’D’D”$…6Ö 'a ÞÐÞÐâÌÞeø ñÿ’D¢$’$Rôä âÌÐÈØÞeô ÈØÐÈØÐñÿE’8œ(8ò dø  tÞaÌ Þe añÿE’8’$^Ýd Þa K^Hñÿ¢D¢$’$•'a âÌÞe9âÌÐÈØÞñÿEâ$’$%e5 ÈØÈa! ÈØÈañÿ’XœDþ¼ž’(»k*!#e3 tÞad9 tÞañÿ’Xœ(’(Bþ8Ì ÞeC adG Þañÿ’X’$'XeF K^@'aâÌÞñÿ¢D”$â$eDTeoâÌØÞec tÞadñÿ’H”8â$TNbo ÈâÌa!eo tÞa ñÿ’D’$’$Ÿ`pb bÎ K^H'añÿ”H’$’$ÈþŠÃ~  a¸ÞÐÞ ÐÞ ÐâÌÞeñÿ’H”$’$QÚŒ°âÌÐÈØÞe¬ÈØÞeñÿ’H’$%žœšªÈØØ ÐÈØØÞeªÈØñÿ”Dâ$¢$ÃШØÐd° tÞaÌ Þe+ ñÿG’$’$­ ¶a K^H'Ü Üañÿ’X’$œDæCÄ ÈÞ ÐÈÞeÔ žÞañÿE¢$'‚9Òdþïx)ÈØÞeà ¢Þad)ñÿ’D’(’ÄóÛàÈØÞe) Èa È,Ì#ñÿE¢8’$ónîeö ŸÞad) ÈØØÈañÿ¢X’$’(Æéüe%ÈØÐÈÞeÈÐÈñÿ’D’D¢$±u ØÈeÈØ ÐÈØÐd)dñÿ’H’(¢$¯ËÈØÐdÈØ ÐÞÐd) ñÿâD’D’(,Ò&tÞaþéd° 3ÞÞ Èa Þ ÞñÿE’$’$£z4aZ b bJ K^@ñÿ”D”$’$ÖÅB'a âÌÞe_âÌØÞeñÿ”H”$’(wñP[ a¸ ÞÞaZd_ }Þañÿ’X’$’$OÈ^ b bJ K^@ñÿ¢D¢$”$áµl'a âÌÞeˆâÌØÞe„ñÿ¢D¢$œDléz a© ÞþœG ÞaZdˆ }Þañÿ’D’$’$Õ´ˆ bbÒ K^'ñÿE%'.\–a äÌÞe¢ ^�aâÌÞñÿ¢D’$’(x¤eüâÌÐÈØÞeµ tÞañÿ¢X’$%ô²düåÌÐæÌÐÈØ!e tÞñÿG%¢8?ýÀaÌ ÞeÍ tÞadÐ ñÿG’$â$`µÎa K^@þÒe'a ñÿE%%ÞÜa©âÌÞeìâÌ-Ìeì tÞñÿG’$’D%õêa 2Þ8ÌÈÈa ÞH ñÿ”D’$’$_Žø ÞaZ b b< K^@ñÿ’D’8’(.'aâÌÞe#âÌ-ÌñÿE”D’(ÛLe a© >Þa<d# tÞañÿ’X’$’(Œº" b bPâÌÞþw£eIâÌ-ÌñÿE¢(¢$m 0e8 Þa<dIâÌ,ÌeC ñÿ¢DœD’$Ó2>Þa<dI }Þa-ÌâÔ b ñÿ’D%%ÖàLbPâÌÞeoâÌ-Ìe^ ÞñÿE”$¢$èËZa<doâÌ,Ìei Þa<dñÿ’H’Ä’$ŸDho }Þa-ÌâÔ b bXâÌÞñÿ¢D¢$'�Ave‚âÌ,Ìe‚ }ÞaþeH ñÿ”D”$’(å„ Þe� ÞÞaZd“ Þañÿ’H’$¢$®ú’<-ÌâÔ b b<âÌÞe¨âÌñÿ”Dâ$%"ä -Ìe¨ }Þa Þa<*ÌâÔñÿ’D’$’D¿Å® b bJâÌÞeÂâÌØÞñÿE’8’(l¾¼e }Þa :ÞâÌa4-ÌâÔ ñÿ’D”$”$‹gÊb b<âÌÞeÜâÌ-ÌeþðÜñÿœD¢$’$EXØ }Þa ;Þa<+ÌâÔ b bñÿ’D’(%IRænâÌÞeöâÌØÞeö }ÞñÿG¢$”$TfôaH Þe ÞÞâÌaVñÿE¢$’$¢Ad  "ÞÞâÌaV bb¢Þñÿ’D¢$’8£èÐÞÐÌÞeY a Kñÿ’D¢$¢$wC^@'a Ì Þe0 þµ#ñÿGâ$¢$äK,ad4 ÞaâÌÞeSâÌñÿ’DœD’(`:ØÞeE }ÞadSâÌØHñÿ’D%’8ÖýH Þ!"eS tÞaæÌÐåÌñÿ¢D’$¢$d†VÐd­\ ÝàH ÞelÝñÿ’D¢$’$àd]®ÞìßàdsÝ]®Þìßñÿ’D%’8FøràH Þe} tÞa ^ ñÿ’DþÒM'”$„*€\ a H ØÞežñÿ’D’(Å„qŽH Þeš °Þadž ¯ÞñÿG’$’$ÈËœaH ÐÈ ØÐÈ ØÐÝ\ ñÿ’D¢$’$œTªàÞäÔäÌÞeº 2Þ8ÌÈÈñÿE¢$¢$iѸaH ÞeÇ ÞÞaZdñÿ’H%%B ÆåH ÞeÔ ÞÞaZdåñÿ’D’(Eþ(‡¾ñÔH Þeà Þa<då Þñÿ¢D”$’$ÆpâÞaZH Þeí*ÌâÔ bñÿ’D’$’$ÝŒðbÞ ÐH Ð ÈØÐ È Ø Ð Èñÿ”D’$%Ï~þ Ø!e  )Þ8Ì È ØaZÌÞñÿ¢D’$%Ö eA Ì ÐÞ Ð ÈÞe.ÈÞñÿ¢D'’$»e# ~Þad,ÈØ^ ñÿ’D’(œ8C (þ�¨( Ðd3 ^�a añÿ¢Dâ$¢$#6 Èe� ^�aÌÞeT ñÿâD’$œ$SãDÞa K^H'añÿE¢$’$YRd›ÈØÞee ^ñÿâD’Dœ$ñà`Üa d| ^Üa ñÿ’D'œD6¬n ÈØÈØa!e| €ÞañÿâD’$’$ | aþ\ÌK^H'(!ñÿE’8’$JÓŠe› Þa K^HñÿâD’D’$ôc˜'ad  K^H'ñÿG%%ô¦aâÌÞe  ÈÞe ÈÞñÿ¢D’$’( Ñ´eÈØÐÈÞeÈ ØÞñÿ¢D”$%/GÂeÈØÞeò a©'Ìeñÿ’H’D’Äp�ÐÕ Èaþæ ,ÌÈaâÌ-Ì"ñÿE’(’$•¤Þeæ Þa<,ÌâÔ ÈÈØ Ð ñÿœD”(’$DÙì.Ì Üadþ a¸ ÈÞ Ð ñÿœD’(”(N@ú.Ì ÜadãÌÞe a¸ñÿ’D’(’Ä�r ÈÞ Ðd šÞa ÈâÌañÿ”Xâ$’D_!e ŽÞad  ÈÞÈñÿ’D’D¢$¢g$Þ"e,Èþ§RØÐÌ Þe Èñÿ’Dœ(’(M/2 ÔÌ Þe= adA Þañÿ’X’(’(¶µ@ ÈÞerÈÞeO ~Þañÿ’X¢$’$úfNH Ð ÈØe_ =Þ È È Øañÿ¢H%¢$u\²dr È Øek Þ È ØaZdñÿ’H¢$’$m*jr .Þ È È Øa²H ØâÔ bñÿ’D”$’$ òxbÐ È ØÞeþùu¤ È Ø Ð ÈØñÿ”D’$”$â—†Þe È^€(!e¢ñÿ’DâDœDñÉ”ÌÞež ad¢ Þañÿ¢D¢(¢(.¢ ÈdÜ a- d ae d ñÿE%%M”°aã d a d aÇ dñÿ¢D¢D¢DZV¾ apd a`d a7dñÿ”H”(”(èÖÌ a‰d a dþ% aýñÿE¢$E×cÚdq¬"ìgâd¥d¥d¥ñÿE¢(Eoóèd¥dªd¯d´d¹d¾dÃñÿE¢(Eéòödªd¯dÈdÍdÍdÒd×ñÿ’D’$’Dõ¾ È^€(!eÌ ÞeñÿœH’(źR ad Þad¢ ÈÞñÿ’D%%Œ~  È Þ#eBÌÞe1þ%M añÿ¢X'’$O.d5 Þa Ë^@ñÿâD”(%p*<'a a© Èdm a$d‹ñÿ¢D¢D¢DwPJ aJd‹ apd‹ a–dñÿ”H”(”(üÒX‹ a¯d‹ aÊd‹ aãñÿEE¢$?nfd‹ a d‹q #ìgsdñÿ¢HE¢(õêtEdJdOdTdYd^dcdþÀ¯ñÿ¢HE’$.ñ‚cdhdhdhdO ÈÞ È Þñÿ”D”$'9¯�#e¢Ì Þež ad¢õÿœD”( —ž Þad§ aî ÿÿ û_€ÿPASCAL.ALû{Y þúBEGIN COMMENT - PROGRAM TO MONITOR THE PASCAL COMPILER ASSEMBLER ETC. BY ARTHUR FOSTER ON THE 20TH. MAY 1977... END; LITERAL NIL (0); POINTER LIBLIST; INTEGER REVISION,UPDATE; INTEGER (2) SWITCHES; BOOLEAN LOAD,LOADMAP,LIþÓBRARY; BOOLEAN BINARY,LISTING,PCODE,MONITOR,EXTN,FAILED; STRING PROGFILE,PCODEFILE,LISTFILE,LOADFILE,QCODEFILE,BINARYFILE; STRING LIBFILE,SAVEFILE,MONITORFILE; EXTERNAL PROCEDURE FERROR; EXTERNAL PROCEDURE GTIME; EXTERNAL PROCEDURE SWOP; STRIþoCNG PROCEDURE CAT(B,C); STRING B,C; BEGIN STRING A; A := B; SUBSTR(A,LENGTH(A)+1,LENGTH(A)+LENGTH(C)) := C; CAT := A END; PROCEDURE ERRORMESSAGE(TEXT); VALUE TEXT; STRING TEXT; BEGIN FAILED := TRUE; OPEN(3,MONITORFILE); WRITþ†&E(3,"PASCAL MONITOR...",TEXT,"<15>"); CLOSE(3) END; PROCEDURE SWOPPROG(PROGNAME); VALUE PROGNAME; STRING PROGNAME; BEGIN INTEGER ERRORNUMBER; IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; þ„h GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PASCAL MONITOR...",HOUR,":",MINUTE,":",SECOND, " ",PROGNAME," ENTERED ","<15>"); CLOSE(3) END; CLOSE(0); PROGNAME := Cþ×(AT(PROGNAME,"<0>"); SWOP(PROGNAME,ERRORNUMBER); IF ERRORNUMBER <> -1 THEN BEGIN COMMENT - OTHER ERROR TRAPS ARE POSSIBLE HERE!; IF ERRORNUMBER < 255 THEN FERROR(ERRORNUMBER) þm ELSE IF ERRORNUMBER = 318 THEN BEGIN EXTN := TRUE; LOAD := FALSE END ELSE IF ERRORNUMBER = 311 THEN ERRORMESSAGE("ERROR(S) IN P-CODE ASSEMBLER") ELSE FAILED := TRUE END END; þ¢õSTRING PROCEDURE EXTENSION(PROGNAME,EXTENT); VALUE PROGNAME,EXTENT; STRING PROGNAME,EXTENT; BEGIN INTEGER I; I := INDEX(PROGNAME,"."); IF I <> 0 THEN SETCURRENT(PROGNAME,I-1); PROGNAME := CAT(PROGNAME,"."); PROGNAME := CAT(PROGNAMþÉ{E,EXTENT); EXTENSION := CAT(PROGNAME,"<0>") END; PROCEDURE APPENDCOM(PARAMNAME,SWITCHES); VALUE PARAMNAME,SWITCHES; STRING PARAMNAME; INTEGER (2) SWITCHES; BEGIN WRITE(0,PARAMNAME); BYTEWRITE(0,ADDRESS(SWITCHES),4); END; BOOLEAN þµAPROCEDURE EXISTS(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); EXISTS := TRUE; GOTO QUIT; NOFILE: ERRORMESSAGE(CAT(FILENAME," DOES NOT EXIST")); EXISTþ S := FALSE; QUIT: END; PROCEDURE CREATEFILE(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); DELETE(FILENAME); NOFILE: OPEN(4,FILENAME); CLOSE(4) END;þè3 PROCEDURE CREATECOM(PROGNAME,SWITCHES); VALUE PROGNAME,SWITCHES; STRING PROGNAME; INTEGER (2) SWITCHES; BEGIN DELETE("COM.CM<0>"); OPEN(0,"COM.CM<0>"); APPENDCOM(PROGNAME,SWITCHES) END; PROCEDURE GENERATELIST(PT,FILENAME); VALþtÕUE FILENAME; POINTER PT; STRING FILENAME; BEGIN POINTER PT1,PT2; BASED STRING BSTRING; BASED POINTER BPT; INTEGER I; ALLOCATE(PT1,20); IF PT = NIL THEN PT := PT1 ELSE BEGIN PT2 := PT; þÇ LOOP : IF PT2 -> BPT <> NIL THEN BEGIN PT2 := PT2 -> BPT; GOTO LOOP END; PT2 -> BPT := PT1 END; FOR I := 0 STEP 1 UNTIL 19 DO (Pþõ²T1 + I)->BPT := NIL; (PT1+1)->BSTRING := FILENAME END; BOOLEAN PROCEDURE TESTFILE(TESTNAME); VALUE TESTNAME; STRING TESTNAME; BEGIN TESTNAME := CAT(TESTNAME,"<0>"); OPEN(4,TESTNAME,NOFILE); CLOSE(4); TESTFILE þÊ—:= TRUE; GOTO FINIS; NOFILE : TESTFILE := FALSE; FINIS: END; PROCEDURE READCOM(ERROR); LABEL ERROR; BEGIN STRING FILENAME; BOOLEAN ARRAY PSWITCH,PROGSWITCH [25]; OPEN(0,"COM.CM"); COMARG(0,FILENAME,PROGSWITCH,ERR2); þ;à COMARG(0,PROGFILE,PSWITCH,ERR1); IF NOT EXISTS(PROGFILE) THEN GOTO ERROR; COMMENT - SET THE INITIAL NAMES FOR EACH OF THE FILES; SAVEFILE := EXTENSION(PROGFILE,"SV"); LISTFILE := EXTENSION(PROGFILE,"LS"); PCODEFILE :=þ]# EXTENSION(PROGFILE,"PC"); LOADFILE := EXTENSION(PROGFILE,"LD"); QCODEFILE := EXTENSION(PROGFILE,"QC"); BINARYFILE := EXTENSION(PROGFILE,"RB"); COMMENT - AND NOW THE SWITCHES; IF NOT PROGSWITCH[1] THEN LOAD := TRUE; þè IF PROGSWITCH[4] THEN EXTN := TRUE; IF PROGSWITCH[11] THEN LISTING := TRUE; IF PROGSWITCH[15] THEN PCODE := TRUE; IF PROGSWITCH[12] THEN LOADMAP := TRUE; IF PROGSWITCH[25] THEN MONITOR := TRUE; COMMENT - AND THE LOCAþ¨ L SWITCHES,WHICH DEFINE THE FILES; LOOP: BEGIN COMARG(0,FILENAME,PROGSWITCH,QUIT); IF PROGSWITCH[11] THEN BEGIN LISTING := TRUE; LISTFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[15] THEN þ9} BEGIN PCODE := TRUE; PCODEFILE := EXTENSION(FILENAME,"PC") END ELSE IF PROGSWITCH[12] THEN BEGIN LOADMAP := TRUE; LOADFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[18] THEN þ€´ SAVEFILE := EXTENSION(FILENAME,"SV") ELSE IF PROGSWITCH[1] THEN BINARYFILE := EXTENSION(FILENAME,"RB") ELSE IF PROGSWITCH[25] THEN BEGIN MONITOR := TRUE; MONITORFILE := CAT(FILENAME,"<0>") þh END ELSE IF PROGSWITCH[4] THEN BEGIN LIBRARY := TRUE; EXTN := TRUE; LIBFILE := EXTENSION(FILENAME,"RB"); IF TESTFILE(LIBFILE) THEN FILENAME := LIBFILE ELSE Bþ+OEGIN LIBFILE := EXTENSION(FILENAME,"LB"); IF TESTFILE(LIBFILE) THEN  FILENAME := LIBFILE ELSE IF NOT TESTFILE(FILENAME) THEN BEGIN ERRORMESSþÿSAGE(CAT(FILENAME," DOES NOT EXIST")); FILENAME := "<0>" END ELSE FILENAME := CAT(FILENAME,"<0>") END; GENERATELIST(LIBLIST,FILENAME) END þOÐ END; GOTO LOOP; ERR1: ERRORMESSAGE("NO SOURCE FILE SPECIFIED");  GOTO ERROR; ERR2: ERRORMESSAGE("COM.CM IN ERROR"); GOTO ERROR; QUIT: CLOSE(0); IF FAILED THEN GOTO ERROR END; PROCEDURE GENCOMPCALL; IF EXISTS("P4COMPILER.SþhàV") AND EXISTS("P4COMPILER.OL") THEN BEGIN CREATECOM("P4COMPILER",SWITCHES); APPENDCOM(PROGFILE,SWITCHES); CREATEFILE(LISTFILE); CREATEFILE(PCODEFILE); APPENDCOM(LISTFILE,SWITCHES); APPENDCOM(PCODEFILE,SWITCHES); SWOPPROG("P4CþÁ·OMPILER.SV") END; PROCEDURE GENERRCALL; IF EXISTS("P4ERRSUM.SV") AND EXISTS("P4ERRORS") THEN BEGIN CREATECOM("P4ERRSUM",SWITCHES); SWITCHES := -17777777777R8; IF LISTING THEN APPENDCOM(LISTFILE,SWITCHES) ELSE APPENDCOM(MONITORFþ™ILE,SWITCHES); SWITCHES := 0; SWOPPROG("P4ERRSUM.SV") END; PROCEDURE GENPASMCALL; IF (IF EXTN THEN EXISTS("P4MAC.SV") ELSE EXISTS("P4ASM.SV")) THEN BEGIN IF EXTN THEN CREATECOM("P4MAC",SWITCHES) ELSE CREATECOM("P4ASM",SWITCHES); þîª CREATEFILE(QCODEFILE); APPENDCOM(QCODEFILE,SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); APPENDCOM(PCODEFILE,SWITCHES); IF EXTN THEN SWOPPROG("P4MAC.SV") ELSE SWOPPROG("P4ASM.SV") END; PROCEDURE GENASMCALL; IF (IF EXTN THEN Eþ®ùXISTS("MAC.SV") ELSE EXISTS("ASM.SV")) THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(BINARYFILE); APPENDCOM(BINARYFILE,SWITCHES); APPENDCOM("<0>",SWITCHES); APPENDCOM(QCODEFILE,SWITCHES); IF EXþŸ²TN THEN SWOPPROG("MAC.SV") ELSE SWOPPROG("ASM.SV") END; PROCEDURE GENRLDRCALL; IF EXISTS("RLDR.SV") AND EXISTS("P4CUE.RB") AND EXISTS("P4LIB.LB") THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(LOADFþ…sILE); SWITCHES := 4000000R8; APPENDCOM(LOADFILE,SWITCHES); SWITCHES := 0; CREATEFILE(SAVEFILE); SWITCHES := 20000R8; APPENDCOM(SAVEFILE,SWITCHES); SWITCHES := 0; APPENDCOM("P4CUE.RB",SWITCHES); APPENDCOM("P4LIB.LB",SWITþMLCHES); APPENDCOM(BINARYFILE,SWITCHES); IF LIBRARY THEN BEGIN BASED STRING BSTRING; BASED POINTER BPT; STRING FILENAME; LOOP : IF LIBLIST <> NIL THEN BEGIN FILENAME := (LIBLIST+1)->BSTRþ̺ING; SETCURRENT(FILENAME,INDEX(FILENAME,"<0>")); APPENDCOM(FILENAME,SWITCHES); LIBLIST := LIBLIST->BPT; GOTO LOOP END END; SWOPPROG("RLDR.þ«˜SV") END; PROCEDURE INIT; BEGIN INTEGER I; MONITORFILE := "$TTO<0>"; REVISION := 2; UPDATE := 1; SWITCHES := 0; LIBLIST := NIL; LIBRARY := BINARY := LISTING := PCODE := MONITOR := FALSE; FAILED := LOAD := LOADMAP := EXTN := FALþ›ŒSE END; BEGIN INIT; READCOM(ABSEND); IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"NOVA PASCAL REVISION ",REVþ϶ISION,".",UPDATE); WRITE(3," ON ",DAY,"/",MONTH,"/",YEAR,"<15>"); CLOSE(3) END; GENCOMPCALL; IF NOT LISTING THEN DELETE(LISTFILE); IF FAILED THEN BEGIN MONITOR := FALSE; GENERRCALL; þšQ DELETE("P4ERRORS"); MONITOR := TRUE END ELSE BEGIN GENPASMCALL; IF NOT FAILED THEN BEGIN GENASMCALL; DELETE(QCODEFILE); IF LOAD AND NþÕ.OT FAILED THEN BEGIN GENRLDRCALL; IF NOT LOADMAP THEN DELETE(LOADFILE) END END END; IF NOT PCODE THEN DELETE(PCODEFILE); ABSEND: IF MONITORþPa THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PASCAL MONITOR...",HOUR,":",MINUTE,":",SECOND," FINISHED"); IF FAILED THEN WRITE(3þe K," WITH ERRORS") ELSE WRITE(3," SUCCESSFULLY"); WRITE(3,"<15>"); CLOSE(3) END; END; ÿMAKEP4MAC.CMûY 0þA:&DELETE/V P4MAC.LD;^ RLDR P4CUE P4LIB.LB P4MAC P4MAC/S P4MAC.LD/LÿPCODE.ALû é é -þ›ÖBEGIN COMMENT - PROGRAM TO MONITOR THE PCODE ASSEMBLER ETC. BY ARTHUR FOSTER ON THE 20TH. MAY 1977... END; LITERAL NIL (0); POINTER LIBLIST; INTEGER REVISION,UPDATE; INTEGER (2) SWITCHES; BOOLEAN LOAD,LOADMAP,LIBRARY; þG4BOOLEAN BINARY,LISTING,PCODE,MONITOR,EXTN,FAILED; STRING PROGFILE,PCODEFILE,LISTFILE,LOADFILE,QCODEFILE,BINARYFILE; STRING LIBFILE,SAVEFILE,MONITORFILE; EXTERNAL PROCEDURE FERROR; EXTERNAL PROCEDURE GTIME; EXTERNAL PROCEDURE SWOP; STRING PROCEDUþHûRE CAT(B,C); STRING B,C; BEGIN STRING A; A := B; SUBSTR(A,LENGTH(A)+1,LENGTH(A)+LENGTH(C)) := C; CAT := A END; PROCEDURE ERRORMESSAGE(TEXT); VALUE TEXT; STRING TEXT; BEGIN FAILED := TRUE; OPEN(3,MONITORFILE); WRITE(3,"PCODEþ:Œ MONITOR...",TEXT,"<15>"); CLOSE(3) END; PROCEDURE SWOPPROG(PROGNAME); VALUE PROGNAME; STRING PROGNAME; BEGIN INTEGER ERRORNUMBER; IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAþ=ëR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PCODE MONITOR...",HOUR,":",MINUTE,":",SECOND, " ",PROGNAME," ENTERED ","<15>"); CLOSE(3) END; CLOSE(0); PROGNAME := CAT(PROGNAME,þf¨"<0>"); SWOP(PROGNAME,ERRORNUMBER); IF ERRORNUMBER <> -1 THEN BEGIN COMMENT - OTHER ERROR TRAPS ARE POSSIBLE HERE!; IF ERRORNUMBER < 255 THEN FERROR(ERRORNUMBER) ELSE Iþ®ûF ERRORNUMBER = 318 THEN BEGIN EXTN := TRUE; LOAD := FALSE END ELSE IF ERRORNUMBER = 311 THEN ERRORMESSAGE("ERROR(S) IN P-CODE ASSEMBLER") ELSE FAILED := TRUE END  END; STRING PROCEþ\¥DURE EXTENSION(PROGNAME,EXTENT); VALUE PROGNAME,EXTENT; STRING PROGNAME,EXTENT; BEGIN INTEGER I; I := INDEX(PROGNAME,"."); IF I <> 0 THEN SETCURRENT(PROGNAME,I-1); PROGNAME := CAT(PROGNAME,"."); PROGNAME := CAT(PROGNAME,EXTENT); þ*¦ EXTENSION := CAT(PROGNAME,"<0>") END; PROCEDURE APPENDCOM(PARAMNAME,SWITCHES); VALUE PARAMNAME,SWITCHES; STRING PARAMNAME; INTEGER (2) SWITCHES; BEGIN WRITE(0,PARAMNAME); BYTEWRITE(0,ADDRESS(SWITCHES),4); END; BOOLEAN PROCEDURE EXþmßISTS(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); EXISTS := TRUE; GOTO QUIT; NOFILE: ERRORMESSAGE(CAT(FILENAME," DOES NOT EXIST")); EXISTS := FALSE; þ$ QUIT: END; PROCEDURE CREATEFILE(FILENAME); VALUE FILENAME; STRING FILENAME; BEGIN FILENAME := CAT(FILENAME,"<0>"); OPEN(4,FILENAME,NOFILE); CLOSE(4); DELETE(FILENAME); NOFILE: OPEN(4,FILENAME); CLOSE(4) END; PROCEDURE þæˆCREATECOM(PROGNAME,SWITCHES); VALUE PROGNAME,SWITCHES; STRING PROGNAME; INTEGER (2) SWITCHES; BEGIN DELETE("COM.CM<0>"); OPEN(0,"COM.CM<0>"); APPENDCOM(PROGNAME,SWITCHES) END; PROCEDURE GENERATELIST(PT,FILENAME); VALUE FILENAME;þ× POINTER PT; STRING FILENAME; BEGIN POINTER PT1,PT2; BASED STRING BSTRING; BASED POINTER BPT; INTEGER I; ALLOCATE(PT1,20); IF PT = NIL THEN PT := PT1 ELSE BEGIN PT2 := PT; LOþd@OP : IF PT2 -> BPT <> NIL THEN BEGIN PT2 := PT2 -> BPT; GOTO LOOP END; PT2 -> BPT := PT1 END; FOR I := 0 STEP 1 UNTIL 19 DO (PT1 + I)->BPTþÈ« := NIL; (PT1+1)->BSTRING := FILENAME END; BOOLEAN PROCEDURE TESTFILE(TESTNAME); VALUE TESTNAME; STRING TESTNAME; BEGIN TESTNAME := CAT(TESTNAME,"<0>");  OPEN(4,TESTNAME,NOFILE); CLOSE(4); TESTFILE := TRUE; þóŒ GOTO FINIS; NOFILE : TESTFILE := FALSE; FINIS: END; PROCEDURE READCOM(ERROR); LABEL ERROR; BEGIN STRING FILENAME; BOOLEAN ARRAY PSWITCH,PROGSWITCH [25]; OPEN(0,"COM.CM"); COMARG(0,FILENAME,PROGSWITCH,ERR2); COMARG(0,þ:sPROGFILE,PSWITCH,ERR1); COMMENT - SET THE INITIAL NAMES FOR EACH OF THE FILES; SAVEFILE := EXTENSION(PROGFILE,"SV"); LOADFILE := EXTENSION(PROGFILE,"LD"); PCODEFILE := EXTENSION(PROGFILE,"PC"); COMMENT - þz1ENSURE THAT THE FILE EXISTS; IF NOT EXISTS(PCODEFILE) THEN GOTO ERROR; QCODEFILE := EXTENSION(PROGFILE,"QC"); BINARYFILE := EXTENSION(PROGFILE,"RB"); COMMENT - AND NOW THE SWITCHES; IF NOT PROGSWITCH[1] THEN LOAD := TRþ5“UE; IF PROGSWITCH[4] THEN EXTN := TRUE; IF PROGSWITCH[15] THEN PCODE := TRUE; IF PROGSWITCH[12] THEN LOADMAP := TRUE; IF PROGSWITCH[25] THEN MONITOR := TRUE; COMMENT - AND THE LOCAL SWITCHES,WHICH DEFINE THE FILES; LOþndOP: BEGIN COMARG(0,FILENAME,PROGSWITCH,QUIT); IF PROGSWITCH[12] THEN BEGIN LOADMAP := TRUE; LOADFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[18] THEN SAVEFILE := EXTENSION(FILENAMEþRÄ,"SV") ELSE IF PROGSWITCH[1] THEN BINARYFILE := EXTENSION(FILENAME,"RB") ELSE IF PROGSWITCH[25] THEN BEGIN  MONITOR := TRUE; MONITORFILE := CAT(FILENAME,"<0>") END ELSE IF PROGSWITCH[4] THEN þÜy BEGIN LIBRARY := TRUE; EXTN := TRUE; LIBFILE := EXTENSION(FILENAME,"RB"); IF TESTFILE(LIBFILE) THEN FILENAME := LIBFILE ELSE BEGIN LIBFILE := EXTENSION(FILENAME,"LBþAŽ"); IF TESTFILE(LIBFILE) THEN FILENAME := LIBFILE ELSE IF NOT TESTFILE(FILENAME) THEN BEGIN ERRORMESSAGE(CAT(FILENAME," DOES NOT EXIST")); þ›Ÿ FILENAME := "<0>" END ELSE FILENAME := CAT(FILENAME,"<0>") END; GENERATELIST(LIBLIST,FILENAME) END END; GOTO LOOP; ERR1: ERRORMESSAþ‡ÄGE("NO SOURCE FILE SPECIFIED"); GOTO ERROR; ERR2: ERRORMESSAGE("COM.CM IN ERROR"); GOTO ERROR; QUIT: CLOSE(0); IF FAILED THEN GOTO ERROR END; PROCEDURE GENPASMCALL; IF (IF EXTN THEN EXISTS("P4MAC.SV") ELSE EXISTS("P4ASM.SV")) THþþ·EN BEGIN IF EXTN THEN CREATECOM("P4MAC",SWITCHES) ELSE CREATECOM("P4ASM",SWITCHES); CREATEFILE(QCODEFILE); APPENDCOM(QCODEFILE,SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); APPENDCOM(PCODEFILE,SWITCHES); IF EXTN THEN SWOPPRþ¸ÂOG("P4MAC.SV") ELSE SWOPPROG("P4ASM.SV") END; PROCEDURE GENASMCALL; IF (IF EXTN THEN EXISTS("MAC.SV") ELSE EXISTS("ASM.SV")) THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(BINARYFILE); APPENDCOþšåM(BINARYFILE,SWITCHES); APPENDCOM("<0>",SWITCHES); APPENDCOM(QCODEFILE,SWITCHES); IF EXTN THEN SWOPPROG("MAC.SV") ELSE SWOPPROG("ASM.SV") END; PROCEDURE GENRLDRCALL; IF EXISTS("RLDR.SV") AND EXISTS("P4CUE.RB") AND EXISTS("P4LIB.LB")þüM THEN BEGIN CREATECOM("",SWITCHES); APPENDCOM(MONITORFILE,SWITCHES); CREATEFILE(LOADFILE); SWITCHES := 4000000R8; APPENDCOM(LOADFILE,SWITCHES); SWITCHES := 0; CREATEFILE(SAVEFILE); SWITCHES := 20000R8; APPENDCOM(SAVEFþefILE,SWITCHES); SWITCHES := 0; APPENDCOM("P4CUE.RB",SWITCHES); APPENDCOM("P4LIB.LB",SWITCHES); APPENDCOM(BINARYFILE,SWITCHES); IF LIBRARY THEN BEGIN BASED STRING BSTRING; BASED POINTER BPT; STRING FILENAME; LOOP : Iþ˜¿F LIBLIST <> NIL THEN BEGIN FILENAME := (LIBLIST+1)->BSTRING; SETCURRENT(FILENAME,INDEX(FILENAME,"<0>")); APPENDCOM(FILENAME,SWITCHES); LIBLIST := LþIBLIST->BPT; GOTO LOOP END END; SWOPPROG("RLDR.SV") END; PROCEDURE INIT; BEGIN INTEGER I; MONITORFILE := "$TTO<0>"; REVISION := 2; UPDATE := 0; SWITCHES := 0; LIBLIST := NIL; LIBRþWúARY := BINARY := LISTING := PCODE := MONITOR := FALSE; FAILED := LOAD := LOADMAP := EXTN := FALSE END; BEGIN INIT; READCOM(ABSEND); IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTþÁšH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"NOVA PCODE REVISION ",REVISION,".",UPDATE); WRITE(3," ON ",DAY,"/",MONTH,"/",YEAR,"<15>"); CLOSE(3) END; BEGIN GENPASMCALL; IF NOþCºT FAILED THEN BEGIN GENASMCALL;  DELETE(QCODEFILE); IF LOAD AND NOT FAILED THEN BEGIN GENRLDRCALL; IF NOT LOADMAP THEN DELETE(LOADFþøÄILE) END END END; ABSEND: IF MONITOR THEN BEGIN INTEGER YEAR,MONTH,DAY,HOUR,MINUTE,SECOND; GTIME(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND); OPEN(3,MONITORFILE); WRITE(3,"PCODE þ¹öJMONITOR...",HOUR,":",MINUTE,":",SECOND," FINISHED");  IF FAILED THEN WRITE(3," WITH ERRORS") ELSE WRITE(3," SUCCESSFULLY"); WRITE(3,"<15>"); CLOSE(3) END; END; ÿR2CSPTAB.RBûYU-þp%ýÿ#¼…¯T”ýÿ@În¹€8ñÿ’D’$’$erÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’D’$¢$-òÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ$IR¶Óÿ$I$I$IZ‡p§HˆØn›ØUžÖ‘‚ØxøØFýؖ٠OØ¥#Ù–Ùx ØUúÖ‚¡Ö‘VÖxÜÿ$I$IH}þVÔóîÖx¯Ø–7×–öØxîØŒ îØ_ îØA ÄÙ‘ÄÙŒ ÄÙ_ÄÙA ¾Ùxÿÿ û_€ÿR2SINTEGER.RBûY!6þ7×ýÿSbÙÿ$I$IILŽ¿¤ B�¥ B¿¤A Ф_12¦_)v¦F$1¦FD¤_#§_Q¦_§_ F¤_�¥Añÿ’D’$’$ÊîÀÒ!4!!,Î!L ÀÒ!4!!,Íñÿ’D’$’$’Ã!L !,©!L !4!,Zª©!L !4ñÿ’D’$’$á!!,Jª„… !D !,€ªp­!L !4ñÿ’D’$’$×’*!!, … þNþL!L ÿ!4!!,Jª„… üÿ�Dúê8!L ÿúÿH ”ƒé :òê¯0ÿÿ û_€ÿR2CITAB.RBûYY þà7ýÿ£í…¯Ôbúÿ�m{{@<@{{ <þÿ$íØñÿ’„’$†ÒÐÿÿÿÿÿÿÿÿÿÿ ÿÿñÿ’„’$’$W2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„’$’$I2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ’„È$H’C*ÿÿÿÿÿÿÿ123456ñÿH’H’H2Ý&8789:;<=>þkè?ÿñÿ’È�H†àÓFÿHIJÿLMNÿPQRñÿH†Â0’$v¢TÿTUVÿXÿYÿÿÿÿÿÿñÿ’„Â$†ÈÎbÿÿÿÿÿÿÿ@ÿiÿkÿmñÿ’„H†H’NÞpÿÿÿÿoÿtvwxyz{|ýÿ’ˆl~}~ÓÿH’H’H’j‚Y¦x„¦�G/„¦¡G.„¦aG-„¦aH,š¤Œ0f¥–&§‚þ¡_*¿¤¡Bn¿¤Alý¥7+1¦ `ФŒ Ф_2¦ŒÓÿH’H’H’2¦_v¦F1¦F�¥x(p§_'�¥–&äP%‘¥Œ#P¤F"Y¦–!D¤ŒD¤_#§Œ#§_Q¦ŒÓÿH’H’H’È?Q¦_L§A¥}¥–§‘$§Œ§_F¤ŒF¤_ñ¤P)š¤¡isš¤�irš¤aiqš¤¡jpl§AAÓÿH’H’þäÛH’?ÆD§‚fä§‚g¥‚el§‚dÿ¥‘Gÿ¥‡FD¥–E7¥‡DO¦‡Có¤›Bš¥7_¥¤‚c練 ð¤–bª¤‚uÓÿH’È�H’% §¤‚a5¦– �¥¡Bj�¥Ah&§¡~ �¥¡GZ�¥F[ý¥_ÿþ¥A^&§} û¥}]þ¥7\$§}W&§ŒSþ¥}Oýÿ€©“ ¦FKÿÿ û_€ÿR2IFT.RBûY!:þ\Oýÿ�ü‹¯ÔSúÿHQíÄÙŒîØŒýÿ€D�6ÿýÿ@ŒÐp§Hÿÿ û_€ÿPASCFLS.û£m þ~4PASCFLS,^ P4COMPILER.,^ P4ASM.SV,^ P4MAC.SV,^ P4LIB.LB,^ PCMESSAGE.ER,^ P4CUE.RB,^ P4ERRSUM.SV,^ PASCAL.SV,^ PCODE.SV^ ÿR2RFNS.RBûU!9þ‹ÛýÿTý”¯Sßÿ$I$I@‚0øØF$#Ù–!Ùx ØUúÖ‚¡Ö‘VÖx¥M ¥@O ¥ N ¥býÿÀ*íÓÒÿñÿâD’$â$)ŠYý0Z!ÿ!,!D€!0:ñÿ’D’$’$™Xú ) î  õë 0 òè � ïå ñÿ’D’$’$À– ìâ P éß   æÜ §!DiÿúÿHÓL§Aþ¢)pf–ÿÿ û_€ÿR2SSET.RBûY!6þÝýÿs½•¯ô’îÿ$‰@ þÐ’�¥x>p§_/�¥–"äP§‘ýÿ€„u{üÿñÿ’P’$’$�<0!,!«©…„‚!!D€‚Ó «ñÿ’DÂ$’$嫸!!D4Óô !8 ž'X!4!',Ðñÿ’DÂ$’$ïÏ'L'ƒø !8 ž'X!4!',Ïñÿ’D&’$�*'L'ƒù !8 ž'X!4!',ÐÏñÿþVJ’DÂ$&±}8Ì'L'ƒ÷ !8 ž!X#(û¥õÿ’D’$ ºèFþ­@ªƒþ#�P­!L ÿÿ û_€ÿR2RFW.RBûŽŽ þ ÷ýÿ4ü”¯4Týÿ€-­ÓÒþÿˆxÿÿ@›¿dÿÿ û_€þþþÿMAKEPASCAL.CMûR /þ?û­DELETE/V PASCAL.LD;^ RLDR PASCAL SWOP @LIBRARY.CM@ PASCAL.LD/LÿP4BLOCK.RBûYN7þ“Æýÿ¿m‰N´Cîÿ$I@¯`û‰-¬!Š�Šxÿ‰-Rü‰#$û‰2âÿlÛlÛñÅtŠ2ÿ!ŠÿžŠ#ÿù‰ÿQŠ-ÿ׉ÿOŠÿÙ‰-ÿqŠ(ÿPŠ(ÿñÿ’D’$’DÙ¢bb"\)!e#ÌË(!ñÿ’D%Åÿ;\)!"e ad ÌËñÿ”D'’$ÙÒ(!e# a b$þȯb†Þ Ðñÿ’D’$’(–Â* ÈèÞÌO(!e@ 2Þañÿ’X¢$”$˜8 ËO'aÌO(eNñÿ’D’D”D|FÌÞeqÌÞeT+Ì Ðdiñÿ’D’$’$`ZT Ü Þã ÈÐÈè+ÌÈèÞÈñÿ’D’$â$OÉbèÌÈèÞ ÈÝà adñÿ’H’$’$j˜p@ÞÐÌÞÌ^þ30("ñÿE%’(ý(~eŽÌÞe‰ÞÐd‹ÞÐ ñÿG%’$œuŒaÌÞe ^@ ÜñÿG’$’$²ša ÈÐÈØ Ð ÈÈèàÈÞñÿE%%ZP¨e È-Ìe¼ÈÞeº Èèñÿ’D’(’(E¨¶ ÈØd È,ÌeÿÈÞñÿE’$”$ÄeýÜÞã ÈØèÚ^-eÙþ.åñÿ’D%’$óÕÒÈè^+ dÞÈè^- ÞÐñÿ’D%’$ŒãàÞÐÈÈeùÈèÈìß ÈØñÿ’D’$’(6±îèÈìßÚ ÈèÐdâ ÈèÈñÿ¢D'Å�™üd iÞa ad@ÌÞñÿ¢D¢$’$yæ eÈÞeÌÔ-Ì Ð Èñÿ’DÅ%ˆˆÝà ad@ÌÞe8ÈÞñÿþÔP¢D’$’$€’&e.Ìè^- ,Ì Ð ÈÝà ñÿGâ$%ûŒ4ad@ jÞa ËaÌËñÿ”Dâ$%Ç­B(!eN Þa Ëa È Èñÿ’D’$’$u¿P bb`ÈÞÈÞ#eñÿ’H’D’8å†^cÞÐdw È Ü Üa È ÜñÿâD’$’$B®lÜa È È ÈÈ"Ð bñÿ’D%þx�’(CQzbæÈÈe…ÞÐd�ÈÞñÿ’D’(¢$£ÈˆÈÞ"e�ÈØÈØekÈñÿ¢D%”$ßn–ØdWÞÐdi ÈØÈØaxñÿ¢D’$”$ÐC¤ÐdiÞ Ð7Ì Ð7Ì Ð ÈÞeÈñÿ’D’$’$TͲ È Ð ÈØÈØ ÈØÈØ"eñÿ’H¢$%mÜÀÃÞ Ð ÈØ Ðd­ È!eè ÜÞñÿ’D’$’$,}þ~AÎã È Ð ÈèÈØ ÈÈØ Èèñÿ’D’$’(_åÜ7Ì È7Ô ÈØÈØax Ð ÈÐñÿ”D’$”(Ç„ê È7Ôdi ÈØÈØaxÐdiñÿ’D%”$¿ø ÈØÈØax ÈØÈØaxñÿ’D’$”Dj�" Ð È ÈØÈØaR"Ðdiñÿ’D’$’$ù�ÈØ ÐÈØÐÞ Ð ÈÞÈÞñÿ¢D’$’(9²""þðe7 È ÈØÈØax" Ð Èñÿ’D%’$D¹0Ø ÐÈØÐd È ÈÞ"ÈÞñÿ’D’$’$õÓ>"ÈØÞ"ÈØÞ"Ðdñÿ’H¢$’(Ä Li ÈØÈØaxÐdiñÑgñÿ¢HE¢()~Z[d™d�d§dîdøddñÿ¢H”$’$nFhMd‹ÈØÞez ÈØÈañÿ”H’$’D7¸vxÐdþV¤‹ÈØÞe‰ ÈÈØñÿE”D’$¬„„axÐd‹ÞÐd�ÞÐ bñÿ’D”$’$²i’bLÞÐÈÞe«ÈØÞeñÿ’H%’$  « ÈØ+Ìaxe«ÞÐ b,ñÿ’D’$”(ad®bDÞÐÞ&ÔÌÞeÓ ÈeÄñÿâD¢8â$ªA¼ a adÓ ^^a ñÿ’D”$”$xŒÊË^ þ %aÌÞeÞñÿâD’8œ(üØ a a ÌÞeé añÿâD¢$œ(ÊLæ aÌÞe Èeù añÿâD’D’Ä”Ùô a d ^_a Ë^ñÿ’D’(’$¼'%aÌ^€(eñÿ’H’8ÅdáÌÐ a Èad Èeñÿ’H’(”Ä‹+,ÌÞe, þ({Þa Ëañÿ’D’$’$÷ä,ÌëÏ(\)#ÌÞ È"#eñÿ’H”(’$ÑÞ:´ÌÞe� ÈeˆÞ&ÔÞãÌñÿ”D'â$[øHÞeQ adU Þa ñÿ’Dœ$’$«RVË^@'aÌ È ÈÌñÿ’D%’8Û)dÞ"!"es Þa Ëañÿ’H’$’$—±rÌ ÈÌ÷Ï(#\þZ61)# ÈÌñÿ’D¢('’y€Þ"#eUd� ®ÞaÞ ÐúÿE bŽd;Þã ÿÿ û_€ÿMAKEP4ERRS.CMûY 0þM ™DELETE/V P4ERRSUM.LD;^ RLDR P4CUE P4LIB.LB P4ERRSUM P4ERRSUM/S P4ERRSUM.LD/LÿR2SMISC.RBûYU-þÛýÿóÚ•¯tuÜÿ$I$IHPÛ�¥ G&§ ~ „¦`HA„¦€G;š¤Œ+„¦ GB„¦`G7„¦F6Y¦xHf¥–%&§‚š¥7úÿØFóܱC{ÿ\ŒC{ÿñÿ’D’Ä’$<è!,!�¶* ‚ÀªÀ§!!D !,!!4ñÿG’$’$K! �“ÒÁ‚Àª:Ÿ¾Z !,!!$ñÿ’D’$’$dÿ!L  (  !4! ñÿþŒx’D’8’$@Þ* !$!)¦(À§!!D  !$ñÿ’D’$’$ÙI8�‚!D !$­€‚@ª!L  !$!ñ)¥ûÿ’X@øF(éÿúÿH74p§HIó“ÿÿ û_€ÿR2SMPY.RBû  &þ˜„ýÿÚ•¯TvñÿHJÅâòêà²òê`°ó“7ó“›ó“ ýÿ‰wñÿ’D’$’$Xÿ0…Y´Úº²’ÒæÒþûŠ…ýÿ€Dr¶ÿÿ û_€ÿMAKEPCODE.CMûŽŽþ£ëDELETE/V PCODE.LD;^ RLDR PCODE SWOP @LIBRARY.CM@ PCODE.LD/LþþþÿPCMESSAGE.ERûY èþ®0ILLEGAL INSTRUCTION ENCOUNTERED BY THE INTERPRETER STACK SPACE EXHAUSTED ûEOF SET FOR 'GET' INSTRUCTION EOF SET FOR 'READ' INSTRUCTION ûþH–EOF NOT SET FOR 'PUT' INSTRUCTION 'WRITE' BUFFER EMPTY ûUNDER/OVERFLOW FLAG SET ON RETURN FROM RFPI OVERFLOW ON TRUNCATE INSTRUCTION ûþdZMISSING LABEL IN CASE STATEMENT - UJC ENCOUNTERED TOO MANY TEXT FILES REQUESTED AT ONE TIME ûILLEGAL EXTERNAL PROCEDURE CALL VALUE OUT OF RANGE...AT RANGE CHECK INSTRUCTION ûþŒðHEAP SPACE EXHAUSTED...PROCEDURE NEW FIELD WIDTH IS NEGATIVE OR EXCEEDS 120 ûINPUT ERROR...FLOATING POINT INTERPRETER OUTPUT ERROR...FLOATING POINT INTERPRETER ûÿR2IREAL.RBûY!:þŒ~ýÿ}‹¯ô�âÿ$I$IGÌФŒ2¦ŒD¤Œ#§ŒQ¦ŒL§A¥}¥–§ŒF¤Œýÿ€D�6ÿýÿ@ŒÐp§Hÿÿ û_€ÿR2SMYP.RBûYU-þ‚rýÿ󨕝twúÿˆ)íèëòê¯þÿ„|òÿ’D’$�$¯ YýJªÞJÒ¾Yÿ9åýÿ@,ó“ÿÿ û_€ÿP4MAC.RBûY üþ1£ýÿé#_£´8ÿÿ ÿßÿÿ ÿßÿÿ ÿßýÿ@«©¡¤àGÔ)ÿÿ ÿßñÿ’D’$’$ãòb bvÝÞìß+SR T ñÿ’D’$’$°" àÝÞìßèÞÝÞñÿ’D’$’$mTìßèÞÝÞìß+CC P ñÿ’D’$’$‡* àÝÞìßè^þ<"5ñÿ’D’$’$æ8ÝÞìßèðÞÝÞìß+NA Dñÿ’D’$’$)F àÝÞìßè^ñÿ’D’$’$¼BT"ÝÞìßèÞÝÞìß+ñÿ’D’$’$žªbRW I àÝÞìßñÿ’D’$’$ŽÉpèÞÝÞìßèÞÝ Þìßñÿ’D’$’$’t~+ID F àÝ Þìþ.ãñÿ’D’$’$tŒßè^%Ý ÞìßèÞÝÞñÿ’D’$’$xhšìß+HC R àÝñÿ’D’$’$cö¨Þìßè^0ÝÞìßèÞñÿ’D’$’$r¶ÝÞìß+NIID ñÿ’D’$’$1÷ÄàÝÞìßè^XÝÞìßèñÿ’D’$’$Í–ÒFÞÝÞìß+RSSO ñÿþaL’D’$’$ý¡à àÝÞìßè^TÝÞìñÿ’D’$’$âîßèdÞÝÞìß+ELAQ ñÿ’D’$’$«yü àÝÞìßè^Ýñÿ’D’$’$t› ÞìßèÞÝÞìß+CL A ñÿ’D’$’$dù àÝÞìßè^+ñÿ’D’$’$w&ÝÞìßèÞÝÞìß+OEñÿ’D’$þQv’$4 F  àÝÞìßèñÿ’D’$’$¨B^)ÝÞìßèÞÝÞìßñÿ’D’$’$´pP+DL A àÝÞìñÿ’D’$’$qØ^ßè^\ÝÞìßèÞÝÞñÿ’D’$’$šmlìß+TA N àÝñÿ’D’$’$TÈzÞìßèÞÝÞìßèÞÝñÿ’D’$’$„lþ¶µˆÞìß+DL C àñÿ’D’$’$•ñ–ÝÞìßè^^ÝÞìßè´Þñÿ’D’$’$Q`¤ÝÞìß+JF P ñÿ’D’$’$-ѲàÝÞìßè^eÝÞìßñÿ’D’$’$¼èÀè–ÞÝÞìß+EDCC ñÿ’D’$’$ØRÎ àÝÞìßè^nÝÞñÿ’D’$’$"RÜìþ<ßènÞÝÞìß+DA R ñÿ’D’$’$«$ê àÝÞìßè^ñÿ’D’$’$zÕøÝÞìßèÞÝ Þìß+LF Oñÿ’D’$’$N àÝ Þìßè^ñÿ’D’$’$ÈHÝ ÞìßèÞÝ!Þìß+ñÿ’D’$’$˵"LE N àÝ!Þìßñÿ’D’$’$�Ç0èÞþq–Ý!ÞìßèÞÝ"Þìßñÿ’D’$’$Áa>+AL O àÝ"Þìñÿ’D’$’$AÖLßè^]Ý"ÞìßèFÞÝ#Þñÿ’D’$’$­hZìß+SC P àÝñÿ’D’$’$ÛÀh#Þìßè^cÝ#Þìßè Þñÿ’D’$’$TvvÝ$Þìß+EDIC ñÿ’D’$’$Iá„àÝ$Þìßþ;Þè^lÝ$Þìßèñÿ’D’$’$ ž’nÞÝ%Þìß+NE T ñÿ’D’$’$’  àÝ%Þìßè^bÝ%Þìñÿ’D’$’$#®ßè‚ÞÝ&Þìß+VD I ñÿ’D’$’$àg¼ àÝ&Þìßè^Ýñÿ’D’$’$ƒ“Ê&ÞìßèÞÝ'Þìß+UC P ñÿ’D’$’$•ÁØ àþ0Ý'Þìßè^añÿ’D’$’$hæÝ'Þìßè2ÞÝ(Þìß+NJñÿ’D’$’$8ô C àÝ(Þìßèñÿ’D’$’$äù^4Ý(ÞìßèæÞÝ)Þìßñÿ’D’$’$åh+DO D àÝ)Þìñÿ’D’$’$§ßè^Ý)ÞìßèÞÝ*Þñÿ’D’$’$íc,ìß+AP G þ?” àÝñÿ’D’$’$nÆ:*ÞìßèÞÝ*ÞìßèÞÝñÿ’D’$’$­_H+Þìß+LF T àñÿ’D’$’$k5VÝ+Þìßè^Ý+ÞìßèÞñÿ’D’$’$|$d b b”Ý-Þìß+LH T ñÿ’D’$’$õ r àÝ-Þìßè^ñÿ’D’$’$ú€Ý-ÞìßèÞÝ.ÞìþŠRß+HCñÿ’D’$’$wŽAK àÝ.Þìßèñÿ’D’$’$‚ïœ^ Ý.ÞìßèªÞÝ/Þìñÿ’D’$’$4qªß+NI N àÝ/Þñÿ’D’$’$0ü¸ìßè^(Ý/ÞìßèÞÝñÿ’D’$’$/bÆ0Þìß+GN I àñÿ’D’$’$ã=ÔÝ0Þìßè^Ý0Þìßèþ<ÀÞñÿ’D’$’$ßeâÝ1Þìß+HCBK ñÿ’D’$’$ÇÂðàÝ1Þìßè^qÝ1Þìßñÿ’D’$’$SßþèªÞÝ2Þìß+HCCK ñÿ’D’$’$rN  àÝ2Þìßè^pÝ2Þñÿ’D’$’$€OìßèªÞÝ3Þìß+XC P ñÿ’D’$’$YÄ( àÝ3Þìßè^uþ¿'ñÿ’D’$’$êÒ6Ý3Þìßè2ÞÝ4Þìß+DR Cñÿ’D’$’$ï€D àÝ4Þìßè Þñÿ’D’$’$RÝ4ÞìßèÞÝ5Þìß+OIñÿ’D’$’$¿ ` R àÝ5Þìßèñÿ’D’$’$D n^#Ý5ÞìßèÞÝ6Þìßñÿ’D’$’$Xp|+XI A àÝ6Þìñÿ’Dþ_)’$’$³ÑŠßè^_Ý6ÞìßènÞÝ7Þñÿ’D’$’$sh˜ìß+OM D àÝñÿ’D’$’$¦7Þìßè^Ý7ÞìßèÞñÿ’D’$’$ÿl´Ý8Þìß+HCIK ñÿ’D’$’$ãÙÂàÝ8Þìßè^qÝ8Þìßèñÿ’D’$’$‚”ЪÞÝ9Þìß+GN R ñÿ’D’$’$þ4±ÕÞ àÝ9Þìßè^Ý9Þìñÿ’D’$’$HìßèÞÝ:Þìß+BS I ñÿ’D’$’$Žlú àÝ:Þìßè^Ýñÿ’D’$’$$‡:ÞìßèÞÝ;Þìß+NI T ñÿ’D’$’$Cú àÝ;Þìßè^&ñÿ’D’$’$=$Ý;ÞìßèÞÝ<Þìß+EDñÿ’D’$’$Å2þbîAC àÝ<Þìßèñÿ’D’$’$ö¿@^lÝ<ÞìßènÞÝ=Þìßñÿ’D’$’$‡[N+PJ T àÝ=Þìñÿ’D’$’$«²\ßè^}Ý=Þìßè–ÞÝ>Þñÿ’D’$’$ bjìß+PM I àÝñÿ’D’$’$5 x>Þìßè^Ý>ÞìßèÞñÿ’D’$’$Gj†Ý?Þþ²âìß+PJ F ñÿ’D’$’$Ì”àÝ?Þìßè^~Ý?Þìßèñÿ’D’$’$�Ž¢–ÞÝ@Þìß+TSCR ñÿ’D’$’$Ñ ° àÝ@Þìßè^PÝ@Þìñÿ’D’$’$#¾ßèÞÝAÞìß+HCRK ñÿ’D’$’$µ Ì àÝAÞìßè^pÝñÿ’D’$’$m”ÚAÞìßèþ•éªÞÝBÞìß+HCSK ñÿ’D’$’$j¯è àÝBÞìßè^pñÿ’D’$’$¶ öÝBÞìßèªÞÝCÞìß+BSñÿ’D’$’$  R àÝCÞìßèñÿ’D’$’$ƒ^ÝCÞìßèÞÝEÞìßñÿ’D’$’$¼O +AS V àÝEÞìñÿ’D’$’$IÃ.ßèÞÝEÞþ:­ìßèÞÝGÞìñÿ’D’$’$ˆf<ß+PM R àÝGÞñÿ’D’$’$†Jìßè^ÝGÞìßèÞÝñÿ’D’$’$|SXIÞìß+OM V àñÿ’D’$’$§êfÝIÞìßè^`ÝIÞìßèxÞñÿ’D’$’$ZVtÝJÞìß+DR I ñÿ’D’$’$ôÈ‚àÝJÞìßè ÞþˆªÝJÞìßèñÿ’D’$’$R‘�ÞÝKÞìß+ON T ñÿ’D’$’$ÍΞ àÝKÞìßè^!ÝKÞìñÿ’D’$’$n¬ßèÞÝLÞìß+JU C ñÿ’D’$’$¼8º àÝLÞìßè^AÝñÿ’D’$’$¹€ÈLÞìßèŒÞÝMÞìß+IS N ñÿ’D’$’$c–Ö àÝMÞìþQßèÞñÿ’D’$’$‡äÝMÞìßèÞ b b”ÝNÞñÿ’D’$’$!Qòìß+GS S àÝñÿ’D’$’$�ûNÞìßè^$ÝNÞìßèÞñÿ’D’$’$¬WÝOÞìß+SM T  ñÿ’D’$’$[<àÝOÞìßè^ ÝOÞìßèñÿ’D’$’$`š*<ÞÝPÞìß+EGAQ þ|$ ñÿ’D’$’$$ë8 àÝPÞìßè^ÝPÞìñÿ’D’$’$²FßèÞÝQÞìß+EGBQ ñÿ’D’$’$uT àÝQÞìßè^Ýñÿ’D’$’$‚‰bQÞìßèÞÝRÞìß+EGCQ ñÿ’D’$’$Ñp àÝRÞìßè^ñÿ’D’$’$­~ÝRÞìßèÞÝSÞìß+MJþ/àñÿ’D’$’$u Œ P àÝSÞìßèñÿ’D’$’$Ü÷š^2ÝSÞìßèÞÝTÞìßñÿ’D’$’$`¨+SR E àÝTÞìñÿ’D’$’$šÁ¶ßèÞÝTÞìßèÞÝUÞìñÿ’D’$’$ø_Äß+JT P àÝUÞñÿ’D’$’$Z¹Òìßè^fÝUÞìßè–ÞÝñÿþ`J’D’$’$çaàVÞìß+OL G àñÿ’D’$’$lÁîÝVÞìßèÞÝVÞìßèÞñÿ’D’$’$ÅNüÝWÞìß+DW R ñÿ’D’$’$Cé àÝWÞìßèÞÝWÞìßèÞñÿ’D’$’$~WÝXÞìß+EGIQ ñÿ’D’$’$B+&àÝXÞìßè^ÝXÞìßñÿ’D’$þg’$ÁÄ4èÞÝYÞìß+JU P ñÿ’D’$’$îUB àÝYÞìßè^dÝYÞñÿ’D’$’$(OPìßè–ÞÝZÞìß+DLCC ñÿ’D’$’$üÖ^ àÝZÞìßè^^ñÿ’D’$’$¾ÇlÝZÞìßèÈÞÝ[Þìß+VO Lñÿ’D’$’$ˆ|z àÝ[ÞìßèÞñÿ’D’$’$™þk¶ˆÝ[ÞìßèÞÝ\Þìß+EGñÿ’D’$’$5 –MQ àÝ\Þìßèñÿ’D’$’$¶$¤^Ý\Þìßè ÞÝ]Þìßñÿ’D’$’$V²+SR N àÝ]Þìñÿ’D’$’$�ûÀßè^1Ý]ÞìßèÞÝ^Þñÿ’D’$’$:^Îìß+RT C àÝñÿ’D’$’$‘Ü^Þþ1¼ìßè^Ý^ÞìßèÞñÿ’D’$’$­gêÝ_Þìß+DLBC ñÿ’D’$’$_èøàÝ_Þìßè^^Ý_Þìßèñÿ’D’$’$ë  ¾ÞÝ`Þìß+DLIC ñÿ’D’$’$-� àÝ`Þìßè^^Ý`Þìñÿ’D’$’$" ßè¾ÞÝaÞìß+QS R ñÿ’D’$’$1Z0 þñÊàÝaÞìßè^Ýñÿ’D’$’$v‡> aÞìßèÞÝbÞìß+EGSQ ñÿ’D’$’$âL àÝbÞìßè^ñÿ’D’$’$­Z ÝbÞìßèÞÝcÞìß+QSñÿ’D’$’$‰h T àÝcÞìßèñÿ’D’$’$Î|v ÞÝcÞìßèÞÝdÞìß+ñÿ’D’$’$ §„ RW C þ^ç àÝdÞìßñÿ’D’$’$²¿’ è ÞÝdÞìßèÞÝeÞìßñÿ’D’$’$M  +JX P àÝeÞìñÿ’D’$’$ Ä® ßè^gÝeÞìßè–ÞÝfÞñÿ’D’$’$)R¼ ìß+TSAO àÝñÿ’D’$’$“Ê fÞìßè^ÝfÞìßèÞñÿ’D’$’$¦]Ø ÝgÞìß+EGRQþBì ñÿ’D’$’$_Aæ àÝgÞìßè^ÝgÞìßèñÿ’D’$’$±£ô ÞÝhÞìß+NIAC ñÿ’D’$’$/„ àÝhÞìßè^hÝhÞìñÿ’D’$’$S ßènÞÝiÞìß+DLRC ñÿ’D’$’$; àÝiÞìßè^^Ýñÿ’D’$’$£‘, iÞìßèÜÞÝjÞìþ{ïß+NICC ñÿ’D’$’$ð°: àÝjÞìßè^jñÿ’D’$’$>H ÝjÞìßènÞÝkÞìß+TSñÿ’D’$’$“V P  àÝkÞìßèñÿ’D’$’$Z²d ^*ÝkÞìßèÞ b bñÿ’D’$’$ydr ”ÝlÞìß+NICD ñÿ’D’$’$ÁÔ€ àÝlÞìßè^XÝþ²=lÞìßñÿ’D’$’$ôÂŽ èPÞÝoÞìß+WR R ñÿ’D’$’$JKœ àÝoÞìßèÞÝoÞìñÿ’D’$’$ª ßèÞÝpÞìß+NIIC ñÿ’D’$’$š ¸ àÝpÞìßè^hÝñÿ’D’$’$t‚Æ pÞìßènÞÝqÞìß+DLBO ñÿ’D’$’$OÎÔ àÝqÞìßè^þ=,Lñÿ’D’$’$Î â ÝqÞìßèFÞÝrÞìß+DLñÿ’D’$’$Ïð CO àÝrÞìßèñÿ’D’$’$ôÙþ ^LÝrÞìßèFÞÝsÞìßñÿ’D’$’$‘J +RW R àÝsÞìñÿ’D’$’$ ¾ ßè ÞÝsÞìßèÞÝtÞìñÿ’D’$’$mV( ß+RW S àÝtÞþÀ$ñÿ’D’$’$ñ½6 ìßèÞÝtÞìßèÞÝvÞñÿ’D’$’$±WD ìß+DLAO àÝñÿ’D’$’$¥ÎR vÞìßè^LÝvÞìßèFÞñÿ’D’$’$ÿQ` ÝwÞìß+TSRO ñÿ’D’$’$¹:n àÝwÞìßè^ ÝwÞìßèñÿ’D’$’$“| ÞÝxÞìß+DLIO ñÿ’Dþ`(’$’$‡žŠ àÝxÞìßè^LÝxÞìñÿ’D’$’$æ ˜ ßèFÞÝyÞìß+QEBU ñÿ’D’$’$ r¦ àÝyÞìßè^Ýñÿ’D’$’$Ô‚´ yÞìßèÞÝzÞìß+QECU ñÿ’D’$’$W àÝzÞìßè^ñÿ’D’$’$ Ð ÝzÞìßèÞÝ{Þìß+NIñÿ’D’$’$þ¥FÉÞ RD àÝ{Þìßèñÿ’D’$’$àÌì ^XÝ{ÞìßèZÞÝ|Þìßñÿ’D’$’$†Sú +ELAS àÝ|Þìñÿ’D’$’$" ßè^Ý|ÞìßèÞÝ}Þñÿ’D’$’$ÝR ìß+ELBS àÝñÿ’D’$’$$ }Þìßè^Ý}ÞìßèÞñÿ’D’$’$:Y2 þÇÓÝ~Þìß+QEAU ñÿ’D’$’$Ô@@ àÝ~Þìßè^Ý~Þìßèñÿ’D’$’$H�N ÞÝÞìß+ELBQ ñÿ’D’$’$¤ã\ àÝÞìßè^ÝÞìñÿ’D’$’$X j ßèÞÝ€Þìß+ELIQ ñÿ’D’$’$Émx àÝ€Þìßè^Ýñÿ’D’$’$ò€† €Þìþ`üßèÞÝ�Þìß+DLRO ñÿ’D’$’$Ì” àÝ�Þìßè^Lñÿ’D’$’$Ú ¢ Ý�ÞìßèZÞÝ‚Þìß+DLñÿ’D’$’$ï° SO àÝ‚Þìßèñÿ’D’$’$ö×¾ ^LÝ‚ÞìßèdÞ݃Þìßñÿ’D’$’$ÇLÌ +LW N à݃Þìñÿ’D’$’$1¼Ú ßèÞþÍ݃ÞìßèÞÝ„Þìñÿ’D’$’$qdè ß+QEMU àÝ„Þñÿ’D’$’$“ö ìßè^Ý„Þìßè ÞÝñÿ’D’$’$q` …Þìß+DLNC àñÿ’D’$’$)å Ý…Þìßè^^Ý…ÞìßèÒÞñÿ’D’$’$

àÝ¥ÞìßèÞÝ¥Þìßèñÿ’D’$’$™LÞݨÞìß+OLCD ñÿ’D’$’$W�Z àݨÞìßè^HݨÞìñÿ’D’$’$$hßèÞÝ©Þìß+ENBQ ñÿ’D’$’$ lv àÝ©Þìßè^Ýñÿ’D’$’$¥|„©ÞìßèÞþäþݪÞìß+RGAT ñÿ’D’$’$S’ àݪÞìßè^ñÿ’D’$’$Ö ݪÞìßèÞÝ«Þìß+ROñÿ’D’$’$Ù ®BD àÝ«Þìßèñÿ’D’$’$ ñ¼^/Ý«ÞìßèÞݬÞìßñÿ’D’$’$wZÊ+ROCD àݬÞìñÿ’D’$’$æõØßè^.ݬÞþE-ìßèÞÝ®Þñÿ’D’$’$üMæìß+ELSS àÝñÿ’D’$’$Õ ô®Þìßè^Ý®ÞìßèÞñÿ’D’$’$DHݯÞìß+ERBT ñÿ’D’$’$¦0àݯÞìßè^ ݯÞìßèñÿ’D’$’$?›ÞݰÞìß+NIAD ñÿ’D’$’$uŒ, àݰÞìßè^þØçXݰÞìñÿ’D’$’$:ßèFÞݲÞìß+ROID ñÿ’D’$’$ÈBH àݲÞìßè^,Ýñÿ’D’$’$ÍpV²ÞìßèÞÝ´Þìß+ERAT ñÿ’D’$’${d àÝ´Þìßè^ ñÿ’D’$’$]RrÝ´ÞìßèÞ b b”Ýñÿ’D’$’$ÈD€¶Þìß+ERIT þ?½ àñÿ’D’$’$2ŽݶÞìßè^ ݶÞìßèÞñÿ’D’$’$»OœݸÞìß+MC S ñÿ’D’$’$ÿñªàݸÞìßè^3ݸÞìßñÿ’D’$’$âĸèÞݹÞìß+EG T ñÿ’D’$’$©CÆ àݹÞìßèÞݹÞìñÿ’D’$’$Ñ ÔßèÞݼÞìß+OC S þ^þ ñÿ’D’$’$Yâ àݼÞìßèÞݼÞñÿ’D’$’$­.ðìßèÞݽÞìß+ERPT ñÿ’D’$’$ùþ àݽÞìßè^ ñÿ’D’$’$þ² ݽÞìßèÞÝ¿Þìß+ERRTñÿ’D’$’$›ò àÝ¿Þìßè^ñÿ’D’$’$tD( Ý¿ÞìßèÞÝÀÞìß+þ¿!ñÿ’D’$’$üš6ELCQ àÝÀÞìßñÿ’D’$’$XDè^ÝÀÞìßèÞÝÂÞìñÿ’D’$’$ÆkRß+NISD àÝÂÞñÿ’D’$’$‘¼`ìßè^XÝÂÞìßèdÞÝñÿ’D’$’$ìRnÃÞìß+OE R àñÿ’D’$’$ùµ|ÝÃÞìßèÞÝÃÞìßèÞñÿ’Dþ]%’$’$¦MŠÝÄÞìß+ELCS ñÿ’D’$’$ô4˜àÝÄÞìßè^ÝÄÞìßèñÿ’D’$’$™“¦ÞÝÊÞìß+ROAD ñÿ’D’$’$¹µ´ àÝÊÞìßè^-ÝÊÞìñÿ’D’$’$Ë ÂßèÞÝÍÞìß+VD R ñÿ’D’$’$%MÐ àÝÍÞìßè^ Ýñÿ’D’$’$þ®vÞÍÞìßèÞÝÎÞìß+ELMS ñÿ’D’$’$Ú ì àÝÎÞìßè^ñÿ’D’$’$7úÝÎÞìßè ÞÝÏÞìß+ELñÿ’D’$’$KþRQ àÝÏÞìßèñÿ’D’$’$f^ÝÏÞìßèÞÝÐÞìßñÿ’D’$’$E$+ERCT àÝÐÞìñÿ’D’$’$B2þ*eßè^ ÝÐÞìßèÞÝÓÞñÿ’D’$’$ÂU@ìß+XE P àÝñÿ’D’$’$µNÓÞìßèÞÝÓÞìßèÞÝñÿ’D’$’$ÊK\ÔÞìß+ELMQ àñÿ’D’$’$û6jÝÔÞìßè^ÝÔÞìßè Þñÿ’D’$’$Ç>xÝØÞìß+EN W ñÿ’D’$’$Ûº†àþ.–ÝØÞìßèÞÝØÞìßèñÿ’D’$’$–ˆ”ÞÝÚÞìß+ELSQ ñÿ’D’$’$§Û¢ àÝÚÞìßè^ÝÚÞìñÿ’D’$’$Ö°ßèÞÝÞÞìß+LC S ñÿ’D’$’$0 ¾ àÝÞÞìßèÞÝÞÞñÿ’D’$’$°0ÌìßèÞÝàÞìß+RSAO ñÿ’D’$’$úÔÚ þÇÉàÝàÞìßè^Tñÿ’D’$’$š´èÝàÞìßèFÞÝáÞìß+RSBOñÿ’D’$’$�ðö àÝáÞìßè^ñÿ’D’$’$ûTÝáÞìßèFÞÝâÞìß+ñÿ’D’$’$ñ“RSCO àÝâÞìßñÿ’D’$’$ð¾ è^TÝâÞìßèFÞÝçÞìñÿ’D’$’$ø`.ß+NR D þú8 àÝçÞñÿ’D’$’$ö³<ìßèÞÝçÞìßèÞÝèÞñÿ’D’$’$•GJìß+RSIO àÝñÿ’D’$’$»¼XèÞìßè^TÝèÞìßèFÞñÿ’D’$’$½MfÝéÞìß+PO N ñÿ’D’$’$ºÛtàÝéÞìßèÞÝéÞìßèÞñÿ’D’$’$y@‚ÝêÞìß+TSCOþG¬ ñÿ’D’$’$µ�àÝêÞìßè^ ÝêÞìßñÿ’D’$’$Á¼žèÞÝíÞìß+LR N ñÿ’D’$’$X@¬ àÝíÞìßèÞÝíÞìñÿ’D’$’$“øºßèÞÝîÞìß+TSAR ñÿ’D’$’$ È àÝîÞìßè^PÝñÿ’D’$’$²mÖîÞìßèÞÝïÞìßþå+TSBR ñÿ’D’$’$Á¿ä àÝïÞìßè^Pñÿ’D’$’$ªPòÝïÞìßèÞ b bxÝñÿ’D’$’$ÿDðÞìß+TSIO àñÿ’D’$’$)3ÝðÞìßè^ÝðÞìßèÞñÿ’D’$’$Ë?ÝñÞìß+RSRO ñÿ’D’$’$ Í*àÝñÞìßè^TÝñÞþE©ìßñÿ’D’$’$ÒÑ8èZÞÝòÞìß+BA I ñÿ’D’$’$¸™F àÝòÞìßè^ÝòÞñÿ’D’$’$AGTìßèÞÝöÞìß+DA I ñÿ’D’$’$\b àÝöÞìßè^ñÿ’D’$’$Q·pÝöÞìßèÞÝøÞìß+NU Iñÿ’D’$’$þî~ àÝøÞìßè^þ+Üñÿ’D’$’$ &Œ'ÝøÞìßèÞÝùÞìß+ñÿ’D’$’$Q’šTSBO àÝùÞìßñÿ’D’$’$„ ¨è^ÝùÞìßèÞÝúÞìñÿ’D’$’$$S¶ß+TSSO àÝúÞñÿ’D’$’$YÄìßè^ ÝúÞìßèÞÝñÿ’D’$’$]SÒûÞìß+BA R àñÿþbE’D’$’$AàÝûÞìßè^ÝûÞìßèÞñÿ’D’$’$õ;îÝüÞìß+TSIR ñÿ’D’$’$%ÐüàÝüÞìßè^PÝüÞìßñÿ’D’$’$+· èÞÝýÞìß+RR R ñÿ’D’$’$¶> àÝýÞìßèÞÝýÞìñÿ’D’$’$÷&ßèÞÝÿÞìß+TSRR ñÿ’D’$þ2Ü’$�4 àÝÿÞìßè^PÝñÿ’D’$’$) BÿÞìßèÞÝ^ìß+TSSRñÿ’D’$’$$ÌP àÝ^ìßèñÿ’D’$’$¥a^^PÝ^ìßè(Þ b ñÿ’D¢D”( lb a af aì ao ñÿ¢D”(’$y z aó a{ aû b bÚñÿ’D’$’$tÖþÏ}ˆ^+ Þ\ã\ã]\ ãñÿ’D’D’$–\ãe‘]\ ã+T.TX' ñÿ’D’$’$tó¤NIUP'T Þ Þ\ã\ãñÿ’D’$’$�²^ú" Þ\ã\ã^ë Þñÿ’D’$’$bÓÀ\ã\ã^ú" Þ\ã\ñÿ’D’$’$IÎã^^ Þ\ã\ã^ Þñÿ’D’$’$8þÜ\þKã\ã^ Þ\ã\ñÿ’D’$’$Hûêã^ø" Þ\ã\ã^ÿ!ñÿ’D’$’$ ø Þ\ã\ã^ Þ\ã\ñÿ’D’$’$sáã^+ Þ\ã\ã+T.TXñÿ’D’$’$±£' UOPTTU ' Þ Þ\ã\ñÿ’D’$’$%"ã^÷" Þ\ã\ã^ëñÿ’D’$’$îP0 Þ\þ@ªã\ã^õ" Þ\ãñÿ’D’$’$â%>\ã^^ Þ\ã\ã^€ñÿ’D’$’$ÇkL Þ\ã\ã^ Þ\ãñÿ’D’$’$rÝZ\ã^+ Þ\ã\ã+T.ñÿ’D’$’$w–hTX' RP'D Þ Þ\ã\ñÿ’D’$’$Ìvã^ô" Þ\ã\ã^ëñÿ’D’$’$£#„ Þ\ãþÒ\ã^ô" Þ\ñÿ’D’$’$†Â’ã\ã^^ Þ\ã\ã^ñÿ’D’$’$s[  Þ\ã\ã^ Þ\ãñÿ’D’$’$€Ð®\ã^ò" Þ\ã\ã^ñÿ’D’$’$`,¼ÿ! Þ\ã\ã^ Þ\ñÿ’D’$’$N(Êã\ã^+ Þ\ã\ã+ñÿ’D’$’$´µØT.TX' RP'R þ½M Þ Þ\ãñÿ’D’$’$IÐæ\ã^ñ" Þ\ã\ã^ñÿ’D’$’$Uôë Þ\ã\ã^ï" Þ\ñÿ’D’$’$ ã\ã^^ Þ\ã\ãñÿ’D’$’$p^€ Þ\ã\ã^ Þ\ñÿ’D’$’$ŠÛã\ã\ã b btLñÿ’D’$’$¬³,&ÞT&+******þÏW**** ñÿ’D’$’$Y¦: Þ Þ\ ã+I SNRT .ON . ñÿ’D’$’$…¦H Þ Þ\ ãL%Þ\ ã+ñÿ’D’$’$ã]V' ÞÞ\ ãñÿ’D’$’$”d\ÞÞ\ ã+ 'AH SON TEYñÿ’D’$’$Òkr TEBÞÞ\ ã+NEC TAREDEñÿ’D’$’$Ò3€F RO ÞÞ\ ã\ þ/"ã\ñÿ’D’$’$ïæŽã b bŒÞPL&ÞTñÿ’D’$’$Ã=œ&ÞP+NITS.RN .O= ñÿ’D’$’$†ª Þ Þ\ ãL%Þ\ ã+ ñÿ’D’$’$µA¸ ÞÞ\ ã\ñÿ’D’$’$'4ÆÞÞ\ ã]\ ãLÞ\ñÿ’D%’$ɼÔ ã\ãeË]\ ã\þ@ç ñÿ’D’$’$](âã+** ÞÞ\ñÿ’D’$’$Oð ã\ÞÞ\ ã+* *LIELñÿ’D’$’$÷þAG LOCEDÞÞ\ ã\ ã ñÿ’D’$’$úú bb$ÞÐ\ÞìßÚ.Þñÿ’D’$’$ü\ÞìßÚ.Þ\Þñÿ’D’$’$½(ìßÚ.Ð\ÞìßÚ.Þþµ(ñÿ¢D’$’$­6eEÈÞ\ÞìßÚ.ñÿ’D’$’$ϨDÐÈ^ÞÐÞÐL$Þñÿ’D’$’$dRT$L#ÞT#ÞÐ\+ ñÿ’D’$”(®` Âep a�ñÿE’D’$¨Mnd¹Èe¹ÝÈìß Ð\ ÈÂñÿE’$¢$ö…|e‰ÞÐ ÈØP ÈØÐdš Èñÿ’DþR,’$¢$àŠ+ Âeš ñÿE’D’$Óâ˜a�Èe·ÈÞÐÈ^Ðñÿ’D’$’$jƦÈÈÐÈ^ÞÐL#Þñÿ’D’D’$›U´T#dp bbZÈ^ñÿ’D%’$«ÂÈÞ"!eÛÈ Þ\ã\ñÿ’D’$’(c)ÐãÈ Þ\ã\ãdè^€Èñÿ’D’$’$þ1![ÞÈ Þ\ã\ã]\ñÿ’D’$’$Õ©ì ã bbfÈ^ÈÞ"ñÿ¢D’$’$üõú!eÈÈ Þ\ã\ãÈñÿ’D”$’$õ Þ\ã\ãd ^€ÈÈñÿ’D’$’$èZÈ Þ\ã\ã]\ñÿ’D’$’$–«$ ã bblÈÞÈ^"ñÿ’D%’$&02þìZÈÞ"!eMÈÈ Þ\ãñÿ’D’$¢$o@\ãÈÞ\ã\ãdZ^ñÿ’D’$’$¹nN€ÈÈ Þ\ã\ã]ñÿ’D’$’$Ax\\ ã bbxÈÞÈ^ñÿ’D”$’$BNj"ÈÞ"!e‰È ÈÈñÿ’D’$’$‡ºx Þ\ã\ãÈ Þ\ã\ñÿ¢D’$’$ø[†ãdþ¸˜^€ÈÈ È Þ\ñÿ’D’$’$†Ã”ã\ã]\ ã bbÞñÿ’D’D’$ª¯¢ÈÞeóÈÞÈ^"eñÿ’H’$’$®R°ÀÈ^€È Þ\ã\ãñÿE’$%µÍ¾dñÈÞÈ^"eÖÈÈñÿ’D’$’DqÌ Þ\ã\ãdéÈ^ñÿ’D’$’$%ºÚ Þ\ãþš\ãÈ Þ\ã\ñÿ’D’$’(#"èãÈ Þ\ã\ãd ÈÞñÿE’$”$�GöeÈÞ Þ\ã\ãd ñÿ’D’$’$ð¼È Þ\ã\ãL%Þ Þ\ñÿ’D’$’$¾ã\ã bb4\H ñÿ’D’$’$‹ ìßÚ^ \H ìßÚ^ñÿ’D’$’(À¢.,#H Hþõ‡ "eAH Þñÿ’D’D’$Ó—<P d\H ìßÚ.Kñÿ’D’D’$ãgJ<(!e¾+**A SSMELBREC DOñÿ’D’$’$ЇXÞÞ\ ã+ EREOR R : ñÿ’D’$’$Іf Þ Þ\ ã\ ãÞP Hñÿ’D¢$’$ÿ€t ÐH ÈeŽ\H ìßñÿ’D’$%Ÿ‚ÚÞ\ ãH èþ·¤P dv\ ñÿ’D’$’$š#�ã+**L SA TEROCDRDEÞÞ\ñÿ’D’$’$)Áž ã+P OCEDC UOTNRE= ÞÞñÿ’D’$’$¬\ ãL% Þ\ ã\ ãL&ñÿ’D’$’$/KºÞT&\H ìßÚ.L(ñÿ’D’$’$UÈÐH ÞP H H \ñÿ’D’$¢$]ÖH ìßÚ.K<(þ"m"eûÈñÿ’D’$’$"ä Þ\H ìßÚ.L(ñÿ’D”$’$\{òÐH ÞP dÐÈÐ bñÿ’D¢$’$¬¹bJH Þe!ÞÐH ÐÈñÿ”D’$’$ï Èe!\ÈìßÚÞ\ ãñÿ’D’D’$z£ÈèÐd  b‚bX+R.XD ñÿ’D’$’$`c* 8 ÞÞ\ã\þ6Æãñÿ’D’$’$ 8+E.TX DC.TS. LC DÞÞ\ñÿ’D’$’$¨žFã+CPTR N ÞÞ\ñÿ’D’$’$ÃÚTã\ãÞ Ð^0T^9.ñÿ’D¢$’$„#b@ÐL.@Èex<ËL.$'ñÿ’D¢$’$õÀp<ÓLêTdc^AT^Zñÿ’D”$’$]~.@ÐL.@Èe•8ËL.$þÜñÿ’D”$’$§Œ'8ÓLêTd€8Ë^ñÿ’D’$’D}yš'<Ë'8Ó\)eþ+**A SSñÿ’D’$’$™a¨MELB YOCEDÞÞ\ ã+S CEñÿ’D’$’$QY¶ITNON TOP ORÞÞ\ ã+EPñÿ’D’$’$ùDÄLR YNEED.D Þ Þ\ ã\ñÿ’D’$’$P~Ò ã+**L SA TEROCDRDEÞÞñÿþTM’D’$’$õAà\ ã+P OCEDC UOTNRE= Þñÿ’D’$’$ð-îÞ\ ãL% Þ\ ã\ ã^ñÿ’D%%Þoü7\ãe\ãdþ]ñÿ’D’$’Dïý \ ãL^;e\ãLñÿ’D’(’$Èì.8Ë(eþÜÞìßL Þñÿ’D¢$’$àÐ& ÐPÞ@Ð È@Èe:Ü Èìß^ ñÿ’D’(þ'—’$¥â4 Èè Ðd)Þ ÐÞ Ð\ã Èñÿ’D’$%§>BPÞ#L^;#!ep]ñÿ’D’$’DLP\ ãL^;en ÈÞ Ðñÿ’D’$”$>^Ü ÈìßL L^:enñÿ”D’$%b(l È Ðd>\ã ÈÞe† ÈÞñÿ’D’$%²{z ÐÜ ÈìßÚ^ exÞ Ðñÿ’D’$’(c‹þ稈 È Ð ÈÞ@Ð È@Èe¦Ü Èìñÿ’D’$’$|–ßÜ ÈìßÚ ÈÞ Ð Èè ÐñÿE’$’$c»¤dŽÜ+PJ C ÂñÿE’D’$⡲eÍ aþÞ Ð+SJ R@ CPTR Nñÿ’D’$¢$ zÀ Þ Þ\ã\ãddÜñÿ’D’$¢$(wÎ+OP P Âe ñÿE’$’$¼×Üaþþ ÈÞ Ð+SD Z4 1 ñÿ’D’$’$œ!ê ÞÞ\ã\ã+DL A ñÿ’D’$”$‹0ø ÞÞ\ã añÿ’D’$’$ ÷Þ\ã+@ 14 ñÿ’D’$’D ÌÞÞ\ã\ãddÜ+UPHSñÿ’D’$¢DéÜ" Âeo aþ Èñÿ’D’$’$Ê0Þ ÐþçH+SI Z4 1 Þñÿ’D’$’$ÿ·>Þ\ã\ã+TS A ñÿ’D’$’(ŽRL ÞÞ\ã aÞ\ñÿ’D’$’$ºZã+@ 14 ÞÞ\ñÿ’D%’$í¸hã\ãddÜ+OLDA ñÿ’D%’D €v ÂeÚ aþ ÈÞ Ðñÿ¢D%’(“Ñ„ aÐ þšaÐ aÐ+SJñÿ’D’$’$X¯’ R@ C.DL Þ Þ\ã\ñÿ’D’$’$^J ãÈ Þ\ã\ãÈ Þ\ñÿ’D’$’$n¸®ã\ã+DL A ñÿ’D’$’$ÏÓ¼ÞÞ\ãÈÞ\ã+@ 74 ñÿ’D’$’$ÆxÊ ÞÞ\ã\ãñÿE’$’$#£ØddÜ+TSRO þ¤� Âñÿ’D’$¢$õÆæÜ ÈÞìßÚ^E"eJ ñÿE’$’$¶ñôaþ ÈÞ Ð+TS A ñÿ’D’$’Dðr ÞÞ\ã aÞ\ãñÿ’D’$’$#ø+4 7 ÞÞ\ñÿ’D’$’$zgã\ã+SJ R@ C.TS ñÿ’D’$’(ÌR, Þ Þ\ã\ã þCÿa Þ\ñÿ’D%’$CL:ã\ã a Þ\ã\ãñÿE’$’( ÚHddÞ Ð È@Ð È@ÈeaÜ Èìñÿ’D’$’(w6VßÚÞ\ ã Èè ÐdN\ãñÿ¢D’$’$µ»d ÈeŸ+R.XD 01 Þñÿ’D’$’$¼frÞ\ã\ã b$bÌÜÞñÿ’D’$’$€¯€ìßL ÜÞìß\þTr ãÜÞñÿ’D’$’Dàߎìß\ ã\ãe¡ÜÞìßñÿ’D’D’$ãõœ^ d¨ÜÞìß\ ã añÿ¢H’(’DB ª d #Èe´ÞÐd¿ È Þ\ñÿ’D”$%¼X¸ã\ã\ãdˆ% a'dˆ%ñÿ’D’$%œêÆÜ\ ã È È^@aºdˆ%ñÿ¢D’D’$ƒáÔ a'dˆ%Ü\ ãÜ\ ãþ1ò ñÿ’D%%ùñâÈÈÞ Èa&dˆ% a'dˆ%ñÿ’D’$’$ÄðÜ\ ãÜ\ ã ÈÈÞ Èñÿ”D”(’(¤Ÿþ^a`dˆ% a'dˆ%Ü\ñÿ’D’$’$¿ ãÜ\ ã ÈÈÞ ÈÞ^ñÿ¢D¢D’DaÎ a`dˆ% a'dˆ%Ü\ ãñÿ’D’$%Î( ]\ ãL^Le; ]þ6*ñÿ’D’D’$¦Á6 \ ãd- Ü\ ã ÈÈÞñÿ’D’$’$ºÀD Þ\ã\ãLÞ\ ãÈñÿ’D’$”$)ÌR Þ\ã\ã]\ ãdˆ%ñÿ¢D’D’$þ/` a'dˆ%Ü\ ã ÈÈ Þ\ñÿ’D’$%‘˜n ã\ã]\ ãdˆ% añÿ¢H’$”$-†| 'dˆ%Ü\ ã ÈÞ ÈaºñÿEþÑ+E’$gአdˆ% a'dˆ%Ü\ ã È Èñÿ’D¢(¢(o˜ Þ^aîdˆ% a'dˆ%Üñÿ’D’$%‹¦ \ ã ÈÞ È^aîdˆ%ñÿ¢D’D’$³w´ a'dˆ%Ü\ ã ÈÞ Èñÿ’D¢(¢(D ^Þaîdˆ% a'dˆ%Üñÿ’D¢$¢DÓhÐ \ ã È Èaºdˆ% a'dñÿ’H’$”$þ5×Þ ˆ%Ü\ ã ÈÞÞ ÈaºñÿEE’$ü¿ì dˆ% a'dˆ%Ü\ ã]\ñÿ’D”$’$íJú  ãL^Le !]\ ãñÿE’$’$‡™!dü Ü\ ã ÈÈ Þ\ã\ñÿ’D’$’$ñ¿!ãLÞ\ ãÈÞ\ã\ñÿ’D”$%95$!ã]\ ãdˆ% a'dˆ%ñÿ’D’$’$×Õ2!þ›k È Þ\ã\ãÞ Þ\ã\ñÿ’D”$%5@!ã]\ ãdˆ% a'dˆ%ñÿ’D’$%ÉËN!]\ ãL^Lea!]ñÿ’D’D’$Hl\!\ ãdS!Ü\ ã È Þ\ãñÿ’D’$’$�¿j!\ãLÞ\ ãÈÞ\ãñÿ’D’$¢DàÞx!\ã]\ ãdˆ% a'dñÿ’H’$¢$VÓ†!ˆ%]þÕö\ ãL^ eš!]ñÿ’D’(’$È­”!\ ãdŒ! ÈÐ ÜÜàÜÞìñÿ’D’$’$^­¢!ßL ÜÞìß\ ãÜÞìñÿ’D’$”$hŸ°!ß\ ãÜÞìß^ a ñÿ’D’$’$Xš¾!Ð ÈÈ^€ Þ\ã\ãñÿ’D%E¿Ì!]\ ãdˆ% a'dˆ%Ü\ñÿ’D’$’$NÚ! ãÜ\þ ã\ã ÈÈÈañÿ¢H¢(’$[§è!ždˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$”$Èö!ã\ã]\ ã\ãeú!ñÿ’D’$”$Ã6"]\ ãÞÐÞÐÈÈe$"ñÿ’D’$’$÷_"]Èìߨ Þ\ã\ãÈñÿ”D”(’(Ñ9 "èÐd "dˆ% a'dˆ%Ü\ñÿ’D%%«Þ." ã ÞÈ Èaþam&dˆ% a'dˆ%ñÿ’D’$%æg<"]\ ãL.ÞeO"]ñÿ’D’D’$�ÑJ"\ ãdA" ÜÞìßL ÜÞñÿ’D’$’$£ÛX"ìß\ ã ÜÞìß\ ã È Þñÿ’D’$’$¼bf"\ã\ã ÜÞìßÚÞ0ñÿE’$’$J™t"e§"+T.TX ÞÞñÿ’D’$’$…�‚"\ãÞ0Þ\þ&Ð ãÞ0Þ\ñÿ’D’$’$K8�" ã'ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D”$’$R ž"Þ\ ã\ãd5# ÜÞìßÚñÿ’D’D’$T%¬" Þ0eâ"+T.TX ñÿ’D’$’$Mº"ÞÞ\ãÞ0Þ\ ãÞ0ñÿ’D’$’$ïÈ"Þ\ ã,ÞÞ\ãÞ0Þ\ñÿ’D’$%�ÀÖ" ãÞ0Þ\ ã\ãþ]Çd5# ÜÞñÿ’D¢$’$ä"ìßÚÞ0e#+T.TX ñÿ’D’$’$Û«ò" ÞÞ\ãÞ0Þ\ñÿ’D’$’$±7# ãÞ0Þ\ ã<ÞÞ\ãÞ0ñÿ’D’$’$ d#Þ\ ãÞ0Þ\ ã\ãdñÿ’H’$’$“�#5#+T.TX ÞÞ\ñÿ’D’$’$Û˜*#ã ÜÞÞ\ã\ã]þHG\ñÿ”D%’$=â8# ãdˆ% a'dˆ% ÞÞ Èañÿ¢H¢(’$w¦F#&dˆ% a'dˆ% ÈÞ Þ\ñÿ’D’$’$©ÆT#ã^.Þ\ ã\ã]!\ñÿ’D’$’$¡öb# ã\ã^0Þ\ ãM!Þ\ñÿ’D%’$“ap# ã\ãdˆ% È Þ\ã\ñÿ’D%’$r4~#ã\ã a"dˆ% È Þ\ãþÑñÿ’D’$’$r³Œ#\ãÜ\ ã\ãÈ Þ\ñÿ’D’(%虚#ã\ãdˆ%ðñrÞg¦#d­ñÿE¢(ET�¨#dÁdÁdÁdÁdÁdÁdÁñÿE¢(Eõ޶#dÁdÁdÆdÔdÔdÔdÔñÿE¢(E—ŽÄ#dÔdÔdÔdÔdÔdÙdëñÿE¢(EŽÒ#dëdëdëdëdëdëdëñÿþÛPE¢(Et�à#dëdðd d d d d ñÿE¢(EþŒî#d d d d d d d ñÿE¢(EnŒü#d d d d d d d ñÿE¢(EÕŠ $d$ d` d` d` d` d` d` ñÿE¢(E8Š$d` d` d` de dz dz dz ñÿE¢(E‰&$dz dz dz dz dz dz d ñÿE¢(þþŸE;‰4$dŒ dŒ dŒ dŒ dŒ dŒ dŒ ñÿE¢(E؈B$dŒ dŒ d‘ d  d  d  d  ñÿE¢(EzˆP$d  d  d  d  d  d¥ d´ ñÿE¢(Eù‡^$d´ d´ d´ d´ d´ d´ d´ ñÿE¢(Ex‡l$d´ d¹ dÊ dÊ dÊ dÊ dÊ ñÿE¢(E‡z$dÊ dÊ dÊ dÊ dÏ dÚ dÚ ñÿE¢(Eņþ¿[ˆ$dÚ dÚ dÚ dÚ dÚ dÚ dÚ ñÿE¢(E:†–$dß dî dî dî dî dî dî ñÿE¢(E[…¤$dî dî dî dó d-!d-!d-!ñÿE¢(EQ„²$d-!d-!d-!d-!d-!d-!d2!ñÿE¢(E„ƒÀ$dI!dI!dI!dI!dI!dI!dI!ñÿE¢(E�‚Î$dI!dI!dN!d‚!d‚!d‚!d‚!ñÿE¢(Eƒ�Ü$dþ«X‚!d‚!d‚!d‚!d‚!d‡!dÓ!ñÿE¢(E”ê$dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!dÓ!ñÿE¢(E ø$dÓ!dØ!dë!dë!dë!dë!dë!ñÿE¢(EU~%dë!dë!dë!dë!dð!d&"d&"ñÿE¢(E%}%d&"d&"d&"d&"d&"d&"d&"ñÿE¢(E¬|"%d+"d7"d7"d7"d7"d7"d7"ñÿE¢(E~y0%d7"dþ™•7"d7"d<"d<#d<#d<#ñÿE¢(E\u>%d<#d<#d<#d<#d<#d<#dA#ñÿE¢(EøtL%dI#dI#dI#dI#dI#dI#dI#ñÿE’(’$›®Z%dI#dI#dN#AAAAñÿ’D’$%ø>h%AAAAAdw#Añÿ’D’$’$á…v%AAAAAAAñÿ”D’$’$fb„%Ad‡# þ™„b^bj+UOPTTU ñÿ’D’$’$V’% ÞÜã+RP R ñÿ’D’$’$Ö % Þ Üã+NIUP T ñÿ’D’$’$ÿË®% ÞÜãÜãÜãÜã+ ;ñÿ’D’$’$9ç¼%====P M4CAB GEÞÞ Üã+NIñÿ’D’$’$O™Ê% SON W ÞÞ Üã Üãñÿ’D’$’$Ø•Ø%ÞT+^0.Tþ �(ÞT%ÞT*ñÿ’D’$’(¤:æ%^P-L*H-e &ÝL*ñÿ’D’$’$Ñô%ìßP.L.+ ñÿ’D’$¢Dz1& àL*èT*dê% aj]ñÿ’D’$’$°Ÿ&Ü ã]Ü ã]ÞìßÜ ãñÿ’D’$’$̹&]ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$¸,&L^.]+ITþ¸t T ñÿ’D%’$ö|:& Ã"er&+********** ñÿ’D’$’$8ÂH& Þ Þ Üã+N OITLT EOFñÿ’D’$’$pV&NU DÞÞ Üã+********** ñÿ’D’$’$7²d& Þ Þ Üã Üã Üã^7ñÿ’D’$’$^Er&LÞÜ ã]ÞÞÜã]Üñÿ’D’$’Dìð€& ãLÞÜ ãÜãe}&ÜþCGã]ñÿ’D’$¢$¶ Ž&Ü ã]Ü ãL^Ie &Þñÿ”D’$’(̦œ&T,dÑ&L^Le¬&ÞT,ñÿE’$’$.Iª&dÑ&L^PL^?#eñÿ’H’(’$™_¸&¾&ÞT,dÑ&]Ü ãL^.ñÿ¢D¢$’$HJÆ&eÎ&ÞT,dÑ&ÞT,L,,ñÿE’$’$ ÌÔ&d<)])Ü ãL%L)L)þ5ÀÞñÿ”D’$’$ð¤â&"e''L'ÞT'^IÞ Üñÿ’D’$’$šºð& ãL)Þ Üã^ Þ Ü ã+ ;??ñÿ’D’$’$“Ñþ& ?CPDO E Þ Þ Üã+C UOñÿ’D’$’$ÑÁ 'TNO TUO FTSÞÞ Üã+PE? ñÿ’D’$’$1å'?? ÞÞ Üã ÜãLñÿ’D”$’$9T(')T%]Ü ãdL)LÞÜ ãþ¸)ñÿ’D’$’$rÑ6']*Ü ãL*ÞÜã]Ü ãLñÿ’D¢$”$SD'ÞÜ ãÜãe?'ÜãÜãdL)ñÿ’D’$’$š¸R']ÞìßÜ ã]ÞìßÜ ãñÿ’D’$’$#`']ÞìßÜ ã]+IF L ñÿ’D¢$¢(2 n' Âe{' a„d)]ñÿ’D’$’$s³|'+WS 1 Â]ñÿ’DþÈ+’$’$|“Š'+WS 2 Â#]ñÿ’D’$’$n’˜'+WS 3 Â#]ñÿ’D’$”$Oe¦'+WS 4 Â#e&(ñÿ’D’$’$Di´']Ü ãL^0L^1ñÿ¢D’$’$‰ˆÂ'#e´']ÞìßL L^ñÿ”D’$’Dx„Ð'1eÚ'ÞT)dÝ'ÞT)Þñÿ’D’$%þä/Þ'T*ÞP-L*H-e (]ñÿ’D’$’$ʆì'Ü ã]L*ìßL L)Þñÿ’D’$’$Ëeú'L.L(T)L*èTñÿ¢D’$’$îô(*dã']ÞìßÚ.L(Tñÿ’D’$’$~Q(*]L*ìßL)]Ü ãñÿE’$’$OÇ$(d)]+XT T ñÿ’D¢$’$*Ø2(þéÀÂÌ^M"eÆ(^.ÞÜ ã]ñÿ’D’$’$’½@(ÞÞÜã]Ü ãLÞÜ ãñÿ’D%’$Å6N(L^ eE(ÞT*ÞP-Lñÿ’D’(’$£ã\(*H-e·(]Ü ãLÞ0ñÿ¢D’$’$ß…j(e}(Þ0ÞÜ ã"ÞÞÜãÞ0ñÿ’D’D%¹x(ÞÜ ãd°(LÞ0e”(Þ0ñÿ’D’$”$Žù†(ÞÜþÁö ã<ÞÞÜãÞ0ÞÜ ãd°(ñÿ’D%’$õó”(LÞ0e«(Þ0ÞÜ ã>ÞÞñÿ’D”$’$™e¢(ÜãÞ0ÞÜ ãd°(LÞÜ ãñÿ’D%’$5°(L*èT*d[(]Ü ãÜãLñÿ’D¢$’$™¾(ÞÜ ãÜãd)]+NE T ñÿ’D”$’$ñ/Ì( Âeâ(^.ÞÜ ãñÿ’D¢$’$ ªÚ(]ÞÞþ\úÜãdý(]+NE D ñÿ’D’$’DÆÑè( Â!eý(^.ÞÜñÿ’D’$%rºö( ã]ÞÞÜãÜã!e)]ñÿ’D’$’(Ô)Ü ãLÞÜ ãÜãe)]Üñÿ’D¢D’$ Ù) ãÜãdL) azL%ÞT%ñÿE’$’$ú )dL)LÞÜ ã]Ü ãLÞñÿ’D’(”$OÌ.)Ü ãÜãe')þLÜã]Ü ãdL)ñÿ’D¢(E3m<)ñ ÞgB)dÖ&d1'dR'd)ñÿE’(”$rýJ)d")ÜãeX)Üã]Ü ãdL)ñÿ”D’$’D8X)Ü)e�&L'Þe…)+-;-- -ñÿ’D’$’$²…f)ON .FOW RAÞÞ Üã+INGN Sñÿ’D’$’$Ã"t) = Þ Þ ÜãL'Þ Üñÿ’D”$’$#Ü‚)ã ÜãL&Þeþª®)+*;** *ONñÿ’D’$’$aÀ�) .FOF TAÞÞ Üã+LAE RRROñÿ’D’$’$²,ž) S= Þ Þ ÜãL&Þ Üãñÿ’D’$’$>e¬) Üã+E.DN ÞÞñÿ’D’$’DU¬º)ÜãÜãL&ÞeÇ)^7Üñÿ’D’$’$0È)ãÜãÜãÜã ÜãÜã aýÿ€H">Ö)‰%*ÿÿ@'–Ø)þ ü ÿÿ û_€ÿR2SBOOLEAN.RBûY!6þŠzýÿ3•¯4?÷ÿI¸^‘¥ŒP¤FY¦–ñÿ’D’$’$Œ\!,ª­«!L !4!!,…€Ï@‚!D õÿ’D’$ sC!4!!,…ÐÏ€Ì@‚!D ÿÿ û_€ÿP4PASCAL.RBûYN7þÒbýÿ3U¤tBÓÿ$I$I$IJÏØ‰À() ׉ -yû‰kû‰RÚ‰(ÑÙ‰-—׉Ö‰òÕ‰œ!ŠÔKŠx%Š(þ‰þù‰´ Šýÿ@Ê¡¤àGz úÿØË¾û‰-ÿ؉c(ÿñÿ’D”$’$Øbbd¤ÌÞe}+* ** * ñÿ’D’$’$‹š ÞÞ\ ãÞ ÐÞ Ðñÿ’D”$’$þ~ï:ëÞÐ¤Ì ÐÈ Èex¥ÝÈìß Ðñÿ’D’$’(®.* ÈØ Ð ÈØÐ È Èe=^,Þñÿ’D’D’DQÚ8\ ãdU È ÈeM^ Þ\ñÿ’D%’$ F ã Èè Ðd=^^Þ\ ã Èñÿ’D’(’D©FT ÐÈ Þe^ÞÐdiÈdÞeñÿ’H’D’$Þ-bgÞÐdiÞÐÈÈ\ ã ÈÈñÿ’D¢$’$Æ pþÀ«è ÐÈèÐd \ ãÞ¤Ô$Ìñÿ’D%’$)µ~\)!"e±!Ìè!Ô!ÌÞ\ ñÿ’D’$’$¾JŒã+ ÞÞ\ñÿ’D’D%TDš ã&Ìe¦ ÌÞ\ ãd«ÌÞñÿ’D’$’$Uv¨\ ã^ Þ\ ãÞÔ bñÿ’D’$’$·4¶b”È<ÞйÝÈìßÈ<Þ$ñÿ’D’$”$K,ĹÝÈþ~LìßÛ' ÞáÔ¤Ì Þeíñÿ’D’$’$£Ò¥Ý ÞìßèÿÞ Þ¤Ô¹ÝÞìß¹Ýñÿ’D’$¢$»+àÞìßÛ^' d÷¤Ìñÿ’D’$’$Fîè¤Ô¥Ý¤ÌìßèȥݤÌìßÌñÿ’D’$’$xÒü bb<+4PREORSR ñÿ’D’$”$¥[  ÞÜãÞ Ð Þ Ð È Èe%ñÿ’D’$¢$Ò¹Ý Èìßþ?“ÛÓÜã Èè ÐdÜñÿ’D”$%wû&ã b bVÌe8$Ìe5\ ñÿ”D’$’D�á4ã a\)!eS\ãÔñÿ’D%’$�„BÝ\ ã$ÌeNÌÞ\ ãÌèñÿ¢D’$’$øóPÔdw+ * **E FO Þñÿ’D’$’$ ^ Þ\ ã+NEOCNUETER D ñÿ’D’$’$‰™l Þ Þ\ ã\þõP ãÞP b ñÿ’D’D’(@zbŽ a(Ì^*eÍÌ^Tñÿ¢D’(¢$Ë8ˆe• a(Ì^+"ÔdÊÌñÿ’D¢D’$vØ–^Le¬ a(Ì^+$Ô$Ìñÿ¢D¢$”$2m¤!eª\ ãdÊÌ^De¼ñÿ¢D’$’DAâ² a(Ì^+'ÔdÊÌ^CñÿE’D¢$�ÀeÊ a(Ì^+þp&#Ô a(Ìñÿ’D’D’$”9Î^,e| b8b Ì^ ñÿ’D¢D’DÜÌ!"eæ a(dØÌÐÈeñÿ”H¢$’$/�êî a(È!eØ]Ì.ߨñÿ”D’$¢$—ëøÞe /ÞÔÞÔ ^�a´ ñÿE¢$’$²€a(d›Ì.dÞÐÈÞeñÿ’H’$¢$¥ØÈèÐÝÈìßÌ þÝå a(]ñÿ’D’$¢$çØ"Ì.ߨ^0(eÈñÿ”D¢$’$%D0Ìe8ÈÔdGÝÌìß^ ñÿ’D”$’$¢ê> ÌìÔÌÈe8]ÛÈìßñÿ’D’$’$âÃLØÐ]ÛÈèìߨìÐÈÈñÿE’$’(-åZez]GÈìßÝÂeu]äÈñÿ’D’$¢$ß+hìߨÔ]IÈìߨÔdþº¬~Èñÿ”D’$’DˆvèÐdWÞÔÞÔd›ÞÔÞÐñÿ’D”$’$N.„ÈèÐÈL¬e“ÜÈìßÌñÿ”D’$”$ a(]Ì.ߨÞe„ñÿ’D’$’(ž° Ì^.Ì^E#e¶ÈÐÌñÿ’D’D”$(S®^.eüÈèÐÈL¬eÂñÿ’D”$’$(ý¼ÜÈìßÌ a(Ì^.eþ$Þñÿ’H’(’$Ä ÊÐ^:Ôd¶]Ì.ߨÞñÿE¢(’$Õ¶Øeà ÉÞa´düÈèÐÈL¬ñÿ¢D’$%–ïæeïÜÈìßÌ a(]ñÿ’D¢$”$×›ôÌ.ߨÞeàÌ^Ee]ñÿ’D”$’$V-ÈèÐÈL¬eÜÈìßÌñÿ”D’$’$ã¾ a(Ì^+Ì^-#eñÿþ]N’H’$’D Ò1ÈèÐÈL¬e.ÜÈìßñÿ’D’D’$Àµ,Ì a(]Ì.ߨÞeñÿ’HE’$Àô:A ÉÞa´d]ÈèÐÈL¬ñÿE’$’(È$HePÜÈìßÌ a(]Ìñÿ’D%’$âJV.ߨÞeAÜÞãÞÔÈÞñÿ’D’$%RÃdÈÐÞÐÞÐÈÈe}Èèñÿ’D’$þ^¤’(°OrÈìß^ ÈèÐdkÈL¬ñÿ¢D’$¢$ €eŸÞÐÈèÐÈÈe�Èñÿ’D’$’$�¼ŽèÈìßÜÈìßÚ ÈèÐdñÿ¢H%’$9ºœˆd² ËÞa´Èè^0 Èèñÿ’D’$%éwª^. Èè^0 ÈÔdóÈLñÿ”D¢$%þ⸬eÄ ËÞa´ÞÔdóÞÔñÿ’D”$’$’¡þ„cÆÞÐÈÐÈÈeñÌL­eñÿ’H’$’$ÔæÌ Þ]lÜÈìßÚ.ߨñÿ”D¢$’$¿AâÔdì ËÞa´ÞÔÈèÐdñÿ’H’D”$x¦ðÊÞÔd›ÞÔÞÔÞÔ a(ñÿ’D¢$’$¥ƒþÌèÔÌÞe ÜÌìßÌ ñÿ’D¢$’(> ÌÌ^'#eûÌe ÊÞañÿ¢H’(%‚´þ^^d  a(Ì^'eûÌìñÿ’D’(%•¥(ÔÌÞe4ÜÚ.ÔdgÜÞñÿ’D”$”$M÷6ãÈÞÌÞeF ^�a´ñÿ’D’$’$.ÅDÞÔÈÐÈèÌÞÐÌÐÈÈñÿ¢D’$’$OhReeÈèÈìßÜÈìßÚ ñÿ’D”D”$‚?`ÈèÐdPÈÔd›ÞÔ a(ñÿ’D’(¢(i,nÌ^=þÓÂe{ÞÔ a(d}Þñÿ¢D¢$”$L|Ôd›ÞÔ a(Ì^.e‘ñÿ’DE”(‹6ŠÞÔ a(d“ÞÔd› a(ñÿ’D¢$¢$~d˜ÞÔÌ^=e§ ÞÔ a(dñÿ’H%%+¦¶Ì^>e´ ÞÔ a(d¶ñÿ”D%’$ c´ÞÔd› a(ÞÔÌ^=eñÿ’H¢(%qNÂÊ ÞÔ aþÂ¥(dÌ ÞÔd› añÿ’H%’D�ÉÐ(Ì^*eü a(Ì^$ñÿE’D”(iAÞeã axÌ^*eî a(ñÿE’D”(¶Dìdã a(Ì^)eã a(ñÿE¢$’$÷(údØÞÔÞÔd›] Ì.ߨñÿ’D’$¢(œúÔ]nÌ.ߨÔ a(d›/Þñÿ¢D%’$�¡Ôd›>ñgþßdAAAñÿ¢D”$¢(Jà$dAAdõdÎddñÿ¢HE¢(zh2dddddd€dñÿ¢HE¢(õv@€d€d€d€d€d€d€dñÿ¢HE¢(­ŽN€d€didd•dd¸Añÿ’DE¢(#¥\Addddddñÿ¢HE¢(éyjddddþmßdddñÿ¢HE¢(Ûyxdddddddñÿ¢HE¢(Íy†dddddddñÿ’HE’$Eº”Add bbÌÜÈñÿ’D’$’(ä¼¢à;Ý9Ì ßØ Ð ÈÞe´;Ý9Ì ßñÿ”D’$’(Wz°Èdé È Ð ÈÜÂeÆ eÞañÿ’H¢$¢$ÌA¾´ ÈØ ÐÞ Ðd× ÈÜÇþÞHeÒ Èñÿ’D’(’$[âÌØ ÐÞ Ðd× ÈØ ÐÞ Ð ÈÞñÿE’D’(:HÚe´ Èeå È èÈdé ÈèÈñÿ’D’$’$òfèÈ èÞÈèÞ bbLñÿ’D’DEtqöÈÞeÈÝÂeddñÿ’D’D’Dî¦ÈÝÇeÈØÐdÈØÐdñÿ’H’$’$€ÝöÈÈ bbì9Ì:ÔÞ Ðþt¬:Ìñÿ”D’$”$×ï  Èe];Ý:Ì ßØ Ð ÈÞeXñÿ’D’D¢(½¨. ÈÝÂeI ÈØË(e=d“dñÿ”H¢$¢$±;<G%ÌeD gÞa´ ÈØ ÐdV Èñÿ”D”$”$á§JÝÇeS ÈØ ÐdV ÈØ Ðd)ñÿ’D¢D%ÿ'X:Ìì:Ôd%Ìe“ hÞa´ÞËñÿ¢D%%å÷f(em5Ì Ðd“ÞË(ev3Ì ÐþË$ñÿE%’(ñçtd“ÞË(e2Ì Ðd“ÞË(ñÿE’(’($´‚eˆ4Ì Ðd“ÞË(e‘1Ì Ðdñÿ’H’$’$­�“0Ì Ð È È bb¾ÈÞñÿ’D¢$’$ª�žÈÞÈÞeÐÈ Ð ÈØÞñÿE’$%Ŭe¸È ÈØÈ ÈØdÐÈ+Ìñÿ¢D’$’(˜´ºeÅÈÞÈ?ÞdÐ ÈØÞñÿ¢DþÙ.’$’$ŸÈeÐÈ ÈØ Ø bbØÞñÿ’D’(%!JÖÐÈÞeQÈÐÈØd;È-Ìñÿ¢D%%43äeëÞÐdÈ*ÌeôÞÐñÿE¢$%ôeòdÈØÞeþÞÐdÈ+Ìñÿ¢D%%Þ2eÞÐdÈ,ÌeÞÐñÿE’(”(4�dÞÐdQ ÈØaÑÐdQñÿ”D¢$%þN¨JÞÐdQÞÐdQÞÐdQ Èñÿ¢D’(’D¬å*ØaÑÐdQÞÐdQ ^õañÿ¢H%¢(‚ì8´dQñ�g?dâdddñÿ¢HE’(e´F d(d0d$d4d4 bñÿ’D’(’$§DTbP ÈaÑ ÐÈØìÐÈÈ Èñÿ’D’$’$¢¯b ÈÈ È bb(Lñÿ’D’$’$epþ•X®èT®ÈL® b$b˜Ìñÿ”D%’(%~Þe‰ aÔÞÐd‹ÞÐÌñÿ”D%’$®�ŒÞe“#ÌeÁ+. ITLT ñÿ’D’$’$!Wš ÞÞ\ãÝÞÞ\ãñÿ’D%’$ ¨\ãÈ!eÁ+. NE TCPDO Eñÿ’D’$”$K�¶ Þ Þ\ã\ã aÔñÿ’D’$”$ .ÄÞ ÐþL’Þ ÐÌ^„(!eÖñÿ”D”$%ÐëÒ Þa´ÌÞek aÔÌÞñÿ¢D’$’$óàeV Ü Þã ÈÐÈÝàÈ]®ñÿ’D’$’$r$îÞìßÂÈ]®ÞìßÂ#È]ñÿ’D’$’$Š#ü®!ÞìßÂ#È]®"ÞìßÂ#ñÿE’$’$ÝÒ e=ÜÞãÈÐÈÈàÈ è(Ìñÿ’D’$’$³÷ÈèÞþ™£ÈèÞÈèÞÈèñÿ’D’$’$Úˆ& ÞÞ ÈÞÈèÞ Èèñÿ’D’D’$êr4 Ð ÈaœÈ èÈÈè6Ì Èñÿ”D’$”$UFB6Ô aÔÌ^H(!eTñÿ”D’(’D 0P Þa´dZ Þa´Ì Þeñÿ’H’(¢Dé˜^ÛÌ Þeh Þa´ aÔÌñÿ”D¢$¢D3öl Þev Þþa´dy aÔÞñÿ’D’(’$Ôz Ð ÈÞe� È Ð ÈÐÈØ ÐÈñÿ’D%”(ôeˆè È È Ðd{ È6Ôd¨#Ìe¨ñÿ’D’$’$·*–+. ITLTE TXES G Þ Þ\ñÿ’D%’$Ѹ¤ã\ã#Ìeá+. XTMT1 ñÿ’D’$’$ºQ² ÞÞ\ã\ã+. DRñÿ’D’$’$“À X01 Þþx¯Þ\ã\ñÿ’D’$’$ ïÎã+. RNLE ÞÞ\ñÿ’D’$œ$ ¢Üã\ã ËÞÞÈ!Èañÿ’D”D’$bÚêÌÞeó Þa´ÌÞ\ñÿ”D%’$Ì?ø)#eá#Ìe +. NE D ñÿ’D’$’$ͯ ÞÞ\ã\ã\ ãñÿ’D”$’$>Ù \ ãáÌ!È"e ^þæÌ>¤ÌÞñÿ¢D’(’$õå" e(  aÔ b^ b.+NIUPñÿ’D’$’$Q³0 T ÞÜã+UOPTTUñÿ’D’$’$§> Þ Üã+RP R ñÿ’D’$â$þ>L ÞÜãÞã aÞñÿ”D’$’$+�Z ã aÔ ÷ÏëÏ'^@%ñÿE¢D’$&;h ayáÌes aþ^?Üþ0+êã Ü÷ÿ’D%ˆ=v ãÜã a) *ÿÿ û_€ÿR2SDECODER.RBûY!5þš‚ýÿs•¯ôGýÿ@€Ðp§Húÿب¸{{C<ÿ{{#<ÿþÿ(Þ× ñÿ’Dœ$œ$Þ?ÿ$ý9ÀŸü)�K†K‚²­ûÿG©p4) ÿÿ û_€üÿR2STP.SRû­ ôþ9Û .TITL R2STP .ENT XPUT,XWLN,XWRC,XWRS,XPAG .ENT WRITE,WRLIN .EXTD CNTAD,TABAD,TEMP,TEMP1,TEMP2,CR,RHB .EXTD .FIND,.BGET,.BPUT,.GCH,CHAN .EXTN BFBP0 .NREL ; ROUTINE TO WRITE OUT A STRING TO THE BUFFER ; ; ENTRY - AC0 - BYTE POINTER TO FIRST BYTE ;þ<æ AC1 - NUMBER OF BYTES ; AC2 - CHANNEL NUMBER ; ; RETURN - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - UNDEFINED WRITE: STA 3,USP STA 0,TEMP1 STA 1,TEMP2 JSR @.FIND ;PICK UP BUFFER INFO. LDA 1,@CNTAD ;NEXT þ+`BYTE ADD 0,1 STA 1,TEMP ;STORE ADDRESS TEMPORARILY NXTCH: LDA 2,TEMP1 ;CHARACTER ADDRESS JSR @.BGET ;GET NEXT BYTE LDA 2,TEMP JSR @.BPUT ;PUT THAT BYTE ISZ @CNTAD ISZ TEMP ;INCREMENT BUFFER ADDRESS ISZ TEMP1 ;INCREMENT CHARACTER ADDRESS DSZ Tþ¤”EMP2 ;DECREMENT AND TEST BYTE COUNT JMP NXTCH JMP @USP XPUT: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;GET STATUS MOVL# 0,0,SZC ;EOF? JMP PUTOK MOVL# 0,0,SNR ;JUST AWAY? JMP .+4 SUBZR 0,0 STA 0,FST,2 ;FIRST TIME THROUGH JMP PUTOK ERR.P ;þbÌNO PERPE ;REPORT PUT ERROR PUTOK: JSR @.GCH ;PICK UP CHANNEL NO. ET AL JMP NCH MOVZL 2,0 ;BYTE POINTER TO FBA SUBZL 1,1 ;SET BIT 15 LDA 2,CHAN ;CHANNEL JSR WRITE NEXT NCH: MOVZL 2,0 LDA 2,CHAN ;WRITE IT STRAIGHT OUT .SYSTM .WRS 77 ERR.2 þ‚š NEXT XPAG: LDA 0,FF JMP .+2 XWLN: LDA 0,CR ;CR IN BUFFER STA 0,TEMP1 POP1 2 MOVZR 2,2 ;B.PTR TO FBA,NOW WORD ADDRESS JSR WRLIN NEXT FF: 6000 .BFBP: BFBP0 XWRC: POP1 2 ;FBA MOVZR 2,2 JSR @.GCH JMP .+1 POP1 1 ;# OF CHARS SUBZL 0,0 ; SUBþåô 0,1,SNR ;LEADING SPACES ? JMP CHAR ;NO LDA 0,@.BFBP ;B.PTR TO SPACES LDA 2,CHAN JSR WRITE CHAR: LDA 0,SP MOVZL 0,0 ;B.PTR TO STACK TOP SUBZL 1,1 ;ONE BYTE LDA 2,CHAN JSR WRITE POP1 1 ;REMOVE CHAR NEXT XWRS: POP1 2 ;FBA MOVZR 2,2 JSR @þ~ö.GCH ;GET CHANNEL JMP .+1 POP1 0 ;SL - STRIN LENGTH POP1 1 ;PL - PRINT LENGTH SUBZ# 1,0,SZC ;IF SL>=PL JMP NOSP ;NO LEADER LEEDR: STA 0,Z1 SUB 0,1 ;LDR LENGTH LDA 0,@.BFBP LDA 2,CHAN JSR WRITE LDA 1,Z1 NOSP: POP1 0 LDA 2,CHAN JSR WRITE Nþ7èEXT ; ROUTINE TO OUTPUT THE LINE STORED IN THE BUFFER. ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - WORD ADDRESS OF FBA ; ; RETURN - AC0 - UNDEFINED ; AC1 - COUNT OF BYTES WRITTEN(INCLUSIVE OF TERMINATOR). ; þãO AC2 - WORD ADDRESS OF FBA WRLIN: STA 3,USP ;RETURN ADDDRESS JSR @.GCH ;GET CHANNEL HALT ;IMPOSSIBLE LDA 2,CHAN ;CHANNEL JSR @.FIND LDA 2,@CNTAD ADD 0,2 ;FORM BYTE ADDRESS OF NEXT CHARACTER LDA 0,TEMP1 JSR @.BPUT ;STORE THE TERMINþÖ?ATOR LDA 2,CHAN JSR @.FIND ;FIND THE BUFFER IN USE SUB 1,1 STA 1,@CNTAD ;RESET THE CHANNEL BUFFER STA 1,@TABAD LDA 2,CHAN ;RETREIVE CHANNEL NUMBER .SYSTM .WRL 77 ;WRITE THE LINE ERR.2 JMP @USP .END ÿLIFE.û´Ž þYÏPROGRAM LIFE(INPUT,OUTPUT); (* GAME OF LIFE BY H.L.CONWAY - P7-70 *) CONST MAXBOARDSIZE = 50; TYPE STATE = (DEAD,STABLE,GROWING); NEIGHBOR = SET OF 0..8; BOARDS = PACKED ARRAY [1..MAXBOARDSIZE,1..MAXBOARDSIZE] OF CHAR; VAR SURVIVEPOPULATION : NEIGHBOR;þÝŸ BOARDSTATE : STATE; NEWBOARD,OLDBOARD : BOARDS; I,J : 0..MAXBOARDSIZE; NUMBEROFNEIGHBORS : 0..8; GENERATION,MAXGENERATION,BOARDSIZE : INTEGER; ALIVECOUNT,CHANGECOUNT : INTEGER; LEFT,RIGHT,UP,DOWN,HORIZOFFSET,VERTOFFSET : -1..+1; BEGIN SURVIVEPOPULþQFATION:=[2,3]; WHILE NOT EOF DO BEGIN (* INITIALISE PARAMETERS AND CREATE BOARD *) GENERATION:=0; READLN(MAXGENERATION); READLN(BOARDSIZE); IF BOARDSIZE>MAXBOARDSIZE THEN BEGIN WRITE('!! ',' BOARDSIZE TOO ','BIG - WILL BE RE','SET TO Mþ|›AX'); WRITELN('BOARDSIZE'); BOARDSIZE:=MAXBOARDSIZE END; FOR I:=1 TO BOARDSIZE DO FOR J:=1 TO BOARDSIZE DO OLDBOARD[I,J]:=' '; READLN(I,J); (*READ LOCATION OF INITIAL ORGANISM *) WHILE I<>0 DO BEGIN IF (I<0) OR (I>BOARDSIZE) Oþ@{R (J<0) OR (J>BOARDSIZE) THEN WRITELN('!! ','NON-EXISTENT ','CELL .. ELEMENT',' IGNORED ',I,J) ELSE OLDBOARD[I,J]:='*'; READLN(I,J) END; (*BOARD PROCESSING BEGINS NOW *) REPEAT ALIVECOUNT:=0; CHANGECOUNT:=0; FOR I:=1 TO BOARDSIZE DO þY FOR J:=1 TO BOARDSIZE DO BEGIN IF I>1 THEN LEFT:=-1 ELSE LEFT:=0; IF I1 THEN UP:=-1 ELSE UP:=0; IF J0) OR (VERTOFFSþafET<>0)) THEN NUMBEROFNEIGHBORS:=NUMBEROFNEIGHBORS+1; (* NOW,SEE WHICH CELLS SHOULD BE ALIVE NEXT GENERATION *) NEWBOARD[I,J]:=' '; IF ((OLDBOARD[I,J]=' ') AND (NUMBEROFNEIGHBORS=3)) OR ((OLDBOARD[I,J]='*') AND (NUMBEROFNEIGHBORS IN SURVIVEþ�gPOPULATION)) THEN BEGIN NEWBOARD[I,J]:='*'; ALIVECOUNT:=ALIVECOUNT+1 END END; (* NEW GENERATION COMPLETE. COPY IT TO OLDBOARD FOR NEXT CYCLE *) GENERATION:=GENERATION+1; WRITELN;WRITELN;WRITELN; WRITELN('GENERATION # ',GENERATION:3, þÀå ' POPULATION = ',ALIVECOUNT:3); FOR I:=1 TO BOARDSIZE DO BEGIN WRITE(' ':14); FOR J:=1 TO BOARDSIZE DO BEGIN WRITE(NEWBOARD[I,J]:2); IF NEWBOARD[I,J]<>OLDBOARD[I,J] THEN BEGIN CHANGECOUNT:=CHANGECOUNT+1; OLDBOARD[I,J]:=NEWBOARD[þ/¸I,J] END END; WRITELN END; (* EVALUATE STATE OF BOARD AT END OF THIS GENERATION *) IF ALIVECOUNT=0 THEN BOARDSTATE:=DEAD ELSE IF CHANGECOUNT = 0 THEN BOARDSTATE:=STABLE ELSE BOARDSTATE:=GROWING UNTIL (BOARDSTATE=DEAD) OR (BOARDSþô$,TATE=STABLE) OR (GENERATION>=MAXGENERATION); CASE BOARDSTATE OF DEAD: WRITELN(' COLONY DIED'); STABLE: WRITELN(' COLONY IS ','STABLE'); GROWING:WRITELN(' MAX GENERATION ','# EXCEEDED') END END (*OF A SINGLE DATA SET *) END. ÿNEW2P4ASMB.ûrX þÁPROGRAM NEW2P4ASMB(OUTPUT, INPUT); BEGIN WRITELN(OUTPUT, 'TO START WITH, W', 'E ASSUME THAT TH', 'E FOLLOWING FILE', ' NAMES ARE NOT O', 'N YOUR DISK :'); WRITþúEELN(OUTPUT, ' ' : 20, '** SETUPA'); WRITELN(OUTPUT, ' ' : 20, ' P4ASM'); WRITELN(OUTPUT, ' ' : 20, '** P4MAC'); WRITELN(OUTPUT); WRITELN(OUTPUT, 'PLEASE ENSURE TH', 'AT THE FOLLOWING', ' FILES OFþ- RELEAS', 'E 2 EXIST ON YOU', 'R DISK :'); WRITELN(OUTPUT, ' ' : 20, '< FASTHASH.SV'); WRITELN(OUTPUT, ' ' : 20, ' SETUP'); WRITELN(OUTPUT, ' ' : 20, ' SETUPAX'); WRITELN(OUTPUT, ' ' : 20, ' þ± SETUPAZ'); WRITELN(OUTPUT, ' ' : 20, ' HEADA2'); WRITELN(OUTPUT, ' ' : 20, ' HEADM2'); WRITELN(OUTPUT, ' ' : 20, ' P4ASM.SV'); WRITELN(OUTPUT, ' ' : 20, ' P4ASM.PC'); WRITELN(OUTPUT, ' ' : 20, ' P4AMX2'); WRITELN(OUTPUTþç, ' ' : 20, ' P4ASMZ2'); WRITELN(OUTPUT, ' ' : 20, '> P4MACZ2'); WRITELN(OUTPUT); WRITELN(OUTPUT, 'IF YOU DON''T HAV', 'E THE ABOVE FILE', 'S, YOU SHOULD ST', 'OP BY PRESSING T', þ‘ú 'HE ''CNTRL A'' KEY'); WRITELN(OUTPUT, ', OTHERWISE TYPE', ' IN ''RETURN'' KEY', ' TWICE.'); READLN(INPUT); WRITELN(OUTPUT, '****************', ' GENERATION OFþ†c_ N', 'EW PCODE ASSEMBL', 'ER BEGINS NOW ! ', '****************') END. ÿP4ENTERERR.ûŽŽþ¬„ PROGRAM P4ENTEREROR(P4MESSAGE,INPUT,OUTPUT); CONST STRINGLENGTH = 60; TYPE STRING = PACKED ARRAY [1..STRINGLENGTH] OF CHAR; ERRORRECORD = RECORD FIRSTMESSAGE : STRING; FILLER1 : INTEGER; Fþ�NILLER2 : INTEGER; SECONDMESSAGE : STRING; FILLER3 : INTEGER END; VAR P4MESSAGE : RANDOM FILE OF ERRORRECORD; COUNT,ERRORNUMBER : INTEGER; TEST : BOOLEAN; PROCEDURE LOADMESSAGE(VAR MESSAGE : Sþ«TRING); VAR COUNT : 1..STRINGLENGTH; BEGIN READLN(INPUT); FOR COUNT := 1 TO STRINGLENGTH DO IF NOT (EOLN(INPUT) OR EOF(INPUT)) THEN READ(MESSAGE[COUNT]) ELSE MESSAGE[COUNT] := ' ' END (*OF LOADMESSAGE*); BEGIN TEST := TRUE;þ-k WRITELN(OUTPUT,'ANSWER THE QUEST','IONS TO INSERT N','EW ENTRIES IN TH', 'E INTERPRETER ER','ROR TABLE'); WRITELN(OUTPUT,'VALID RESPONSES ','TO THE FOLLOWING',' QUESTIONS ARE ', 'TERMINATED BY ','A CARRIAGE RETUR','N'þžg); REPEAT WRITELN(OUTPUT,'TYPE THE ENTRY N','UMBER (0-1026)'); IF NOT TEST THEN READLN(INPUT); READ(INPUT,ERRORNUMBER); IF (ERRORNUMBER >= 0) AND (ERRORNUMBER <= 1026) THEN BEGIN WRITELN(OUTPUT,'NOW TYPE THE TAB','LE ENTRY (UP TO ','60 CHþtŒARS)'); BEGIN GETRANDOM(P4MESSAGE,ERRORNUMBER DIV 2); IF NOT EOR(P4MESSAGE) THEN WITH P4MESSAGE^ DO BEGIN FOR COUNT := 1 TO STRINGLENGTH DO BEGIN þèÖFIRSTMESSAGE[COUNT] := ' '; SECONDMESSAGE[COUNT] := ' ' END; FILLER1 := 3338; FILLER3 := 3338 END; IF ODD(ERRORNUMBER) THEN LOADMESSAGE(P4MESSAGE^.SECONDMESSAGE) þP„ ELSE LOADMESSAGE(P4MESSAGE^.FIRSTMESSAGE); PUTRANDOM(P4MESSAGE,ERRORNUMBER DIV 2); WRITELN(OUTPUT,'MESSAGE O.K.'); END END ELSE WRITELN(OUTPUT,'ILLEGAL ERROR NU','MBER ',ERRORNUMBER); WRITELN(OUTPUþêT,'DO YOU WISH TO ','INSERT MORE ENTR','IES(YES/NO)'); READLN(INPUT); WHILE INPUT^ = ' ' DO GET(INPUT); TEST := INPUT^ <> 'Y' UNTIL TEST END. þööÿR2CSPTAB.SRû­U-þ•‰ .TITL R2CSPTAB ;SPECIAL VERSION OF THE TABLE FOR THE COMPILER ;INCORPORATING THE CALL TO THE OVERLAY ROUTINES. .EXTN XWLN,XWRC,XWRI,XWRR,XWRS .EXTN XRDC,XRDI,XRDR,XRLN .EXTN XGET,XPUT .EXTN XELN .EXTN XATN,XCOS,XEXP,XLOG,XSIN,XSQT .EXTN XNEW,XSAþ»­V,XRST .EXTN XRND,XOPN .EXTN XCLS .EXTN XPAG,XOVL .EXTN PUNDF .ENT SPTAB .NREL SPTAB : XGET ;0 XPUT ;1 XRST ;2 XRLN ;3 XNEW ;4 XWLN ;5 XWRS ;6 XELN ;7 XWRI ;8 XWRR ;9 XWRC ;10 XRDI ;11 XRDR ;12 XRDC ;13 XSIN ;14 XCOS þãõ ;15 XEXP ;16 XLOG ;17 XSQT ;18 XATN ;19 XSAV ;20 XOPN ;21..OPEN ANY FILE (CREATE IMPLIED) XRND ;22 XOVL ;23 XCLS ;24 PUNDF ;25 PUNDF ;26 XPAG ;27 PUNDF ;28 PUNDF ;29 PUNDF ;30 PUNDF ;31 .END ÿR2SINTEGER.SRû­ ó 5þ¬w .TITL R2SINTEGER ; THE P-CODE INTERPRETER'S INTEGER OPERATIONS .ENT PINC,PADI,PSBI,PNGI,PSQI,PABI,PMOD,PODD,PMPI,PDVI,PDEC .ENT PINCC,PDECC .EXTN .MPY,.DIV .NREL PINCC: MOVS 2,2 ;NB CHAR IN LHB JMP PINC PADI: POP1 2 ;ADD INTEGER PINC: LTOP1 1 þ}Å ;INCREMENT (Q FIELD IN AC2) ADD 2,1 STOP1 1 NEXT PDECC: MOVS 2,2 ;NB CHAR IN LHB JMP PDEC PSBI: POP1 2 ;SUBTRACT INTEGER PDEC: LTOP1 1 ;DECREMENT (Q FIELD IN AC2) SUB 2,1 STOP1 1 NEXT PNGI: LTOP1 1 ;NEGATE INTEGER NEG 1,1 STOP1 1 NEXT PSQþÅI: LTOP1 2 ;SQUARE INTEGER JMP MPI1 PABI: LTOP1 1 ;ABSOLUTE VALUE OF INTEGER MOVZL# 1,1,SZC ;NEGATE IF NECESSARY NEG 1,1 STOP1 1 NEXT PMOD: POP1 2 ;MODULUS LTOP1 1 MOVL# 1,1,SZC ;SET AC0 FOR HIGH-ORDER ADC 0,0,SKP ; WORD OF DOUBLE PRECISþ—VION SUB 0,0 ; DIVIDEND FOR .DIV JSR @..DIV ;SIGNED DIVIDE STOP1 0 ;REMAINDER IN AC0 NEXT PODD: LTOP1 1 ;TEST ON ODD MOVR 1,1 ;SET AC1=TRUE IF B15=1 SUBCL 1,1 ; FALSE IF B15=0 STOP1 1 NEXT PMPI: POP1 2 ;MULTIPLY INTEGER MPI1: LTOPþ6²1 1 ;ENTRY FROM PSQI SUBO 0,0 ;CLEAR AC0 JSR @..MPY ;SIGNED MULTIPLY STOP1 1 ;LOW ORDER WORD OF DOUBLE NEXT ; PRECISION RESULT IN AC1 ..MPY: .MPY ;(MATH.LB) PDVI: POP1 2 ;DIVIDE INTEGER LTOP1 1 MOVL# 1,1,SZC ;SET AC0 FOR HIGH-ORDER ADC 0þ¡ó5,0,SKP ; WORD OF DOUBLE PRECISION SUB 0,0 ; DIVIDEND FOR .DIV JSR @..DIV ;SIGNED DIVIDE STOP1 1 ;QUOTIENT IN AC1 NEXT ..DIV: .DIV ;(MATH.LB) .END ÿR2CITAB.SRû­Y þ_C .TITL R2CITAB .REV 2,1 ; THE INTERPRETER JUMP TABLE .ENT ITAB0,ITAB1 .EXTN PLOD,PLDO,PSTR,PSRO,PLDA,PLAO,PSTO,PLDC,PLCI,PIND .EXTN PINDC,PSTOC .EXTN PINC,PINCC .EXTN PMST,PCUP,PCXP,PENT,PRET,þ;]PCSP .EXTN PIXA .EXTN PEQU,PNEQ,PGEQ,PGRT,PLEQ,PLES .EXTN PUJP,PFJP,PXJP,PTJP,PUJC .EXTN PCHKC,PCHK2,PCHK3,PCHK4,PEOF .EXTN PADI,PADR,PSBI,PSBR .EXTN PSGS .EXTN PFLT,PFLO,PTRC .Eþ…AXTN PNGI,PNGR,PSQI,PSQR,PABI,PABR .EXTN PNOT,PAND,PIOR .EXTN PDIF,PINT,PUNI,PINN  .EXTN PMOD,PODD .EXTN PMPI,PMPR,PDVI,PDVR .EXTN PMOV,PLCA,PDEC,PDECC,PSTP,PHLT .EXTN PCHR,PORDI,PORDA,PORDC,PORDBþÁ5 .EXTN PNON .ZREL ITAB0: PNON ; 0 NOT USED PHLT ; 1 PEQU ; 2 PNEQ ; 3 PGEQ ; 4 PGRT þõq ; 5 PLEQ ; 6 PLES ; 7 PSTO ; 8 PSTO ; 9 PSTOC ; 10 PSTO ; 11 PMST þ"ñ; 12 PRET ; 13 PADI ; 14 PSBI ; 15 PNGI ; 16 PSQI ; 17 PABI ; 18 PMOD þ ; 19 PODD ; 20 PMPI ; 21  PDVI ; 22 PADR ; 23 PSBR ; 24 PFLT ; 25 PFLO þK* ; 26 PTRC ; 27 PNGR ; 28 PSQR ; 29 PABR ; 30 PMPR ; 31 PDVR ; 32 PNOT þ1# ; 33 PAND ; 34 PIOR  ; 35 PSGS ; 36 PDIF ; 37 PINT ; 38 PUNI ; 39 PINNþ,Ž ; 40 PEOF ; 41 PSTP ; 42 PLCA ; 43 PORDI ; 44 SET ASIDE PORDA ; 45 4 LOCATIONS PORDC þ×N ; 46 FOR THE PORDB ; 47 ORD FAMILY PCHR ; 48 ; THE GAPS IN THE REMAINDER OF TABLE 0 ARE FOR CORAL PNON ; 49 PNON ; 50 PþHNON ; 51 PNON ; 52 PNON ; 53 PNON ; 54 PNON ; 55 PNON ; 56 PNON ; 57 þR5 PNON ; 58 PNON  ; 59 PNON ; 60 PNON ; 61 PNON ; 62 PNON ; 63 ITAB1: PNON ; 64 NOT USED þ: PUJC ; 65 PEQU ; 66 PNEQ ; 67 PGEQ ; 68 PGRT ; 69 PLEQ ; 70 PLES ; þ!|71 N.B MULTIPLE COMPARES  PLOD ; 72 PLOD ; 73 PLOD ; 74 PLOD ; 75 PLDO ; 76 PLDO ; 77 þd_ PLDO ; 78 PLDO ; 79 PSTR ; 80 PSTR ; 81 PSTR ; 82 PSTR ; 83 PSRO ; 84 þOV PSRO  ; 85 PSRO ; 86 PSRO ; 87 PIND ; 88 PIND ; 89 PINDC ; 90 PIND ; 91 þFü PLDA ; 92 PLAO ; 93 PLDC ; 94 PIXA ; 95 PMOV ; 96 PCUP ; 97 PENT ; þ@]98  PCSP ; 99 PUJP ;100 PFJP ;101 PTJP ;102 PXJP ;103 PINC ;104 PNON þv ;105 ALSO INC PINCC ;106 PNON ;107 ALSO INC PDEC ;108 ALSO NEEDS NEXT 3 PNON ;109 PDECC ;110 PNON þŸ5 ;111 PCHKC ;112 NEEDS 3 MORE PCHK2 ;113 PCHK3 ;114 PCHK4 ;115 ; THE GAPS IN THE REMAINDER OF TABLE 1 ARE FOR CORAL PNONþ ; 116 PCXP ; 117 PNON ; 118 PNON ; 119 PNON ; 120 PNON ; 121 PNON ; 122  þ¼$ PNON ; 123 PNON ; 124 PNON ; 125 PNON ; 126 PNON ; 127 .END ÿP4ERRSUM.û! ò$þ8 PROGRAM ERRSUM(OUTPUT); CONST MAXBIT = 59; MAXSETMOD = 60; (*MAXBIT+1*) MAXSET = 10; VAR I : 0..MAXSET; N : 0..MAXBIT; M : INTEGER; ERROR : ARRAY [0..MAXSET] OF SET OF 0..MAXBIT; P4ERRORS : FILE OF SET OF 0..MAXBIT; PROCEDURE MESSAGE1; VAR PþMß : 0..59; BEGIN P := M; CASE P OF 1: WRITELN(OUTPUT,'ERROR IN SIMPLE ','TYPE'); 2: WRITELN(OUTPUT,'IDENTIFIER EXPEC','TED'); 3: WRITELN(OUTPUT,'''PROGRAM'' EXPE','CTED'); 4: WRITELN(OUTPUT,''')'' EXPECTED'); 5: WRITELNþО(OUTPUT,''':'' EXPECTED'); 6: WRITELN(OUTPUT,'ILLEGAL SYMBOL'); 7: WRITELN(OUTPUT,'ERROR IN PARAMET','ER LIST'); 8: WRITELN(OUTPUT,'''OF'' EXPECTED'); 9: WRITELN(OUTPUT,'''('' EXPECTED'); 10: WRITELN(OUTPUT,'ERROR IN TYPE'); 1þ+1: WRITELN(OUTPUT,'''['' EXPECTED'); 12: WRITELN(OUTPUT,''']'' EXPECTED'); 13: WRITELN(OUTPUT,'''END'' EXPECTED'); 14: WRITELN(OUTPUT,''';'' EXPECTED'); 15: WRITELN(OUTPUT,'INTEGER EXPECTED'); 16: WRITELN(OUTPUT,'''='' EXPECTED'); þÖ 17: WRITELN(OUTPUT,'''BEGIN'' EXPECT','ED'); 18: WRITELN(OUTPUT,'ERROR IN DECLARA','TION PART'); 19: WRITELN(OUTPUT,'ERROR IN FIELD L','IST'); 20: WRITELN(OUTPUT,''','' EXPECTED'); 21: WRITELN(OUTPUT,'''.'' EXPECTED'); 50: Wþ=!RITELN(OUTPUT,'ERROR IN CONSTAN','T'); 51: WRITELN(OUTPUT,''':='' EXPECTED'); 52: WRITELN(OUTPUT,'''THEN'' EXPECTE','D'); 53: WRITELN(OUTPUT,'''UNTIL'' EXPECT','ED'); 54: WRITELN(OUTPUT,'''DO'' EXPECTED'); 55: WRITELN(OUTPUT,'''TO'þ½ '/''DOWNTO''',' EXPECTED'); 56: WRITELN(OUTPUT,'''IF'' EXPECTED'); 57: WRITELN(OUTPUT,'''FILE'' EXPECTE','D'); 58: WRITELN(OUTPUT,'ERROR IN FACTOR'); 59: WRITELN(OUTPUT,'ERROR IN VARIABL','E'); END (* OF CASE *) END (*MESSAGE1*); þ3Õ PROCEDURE MESSAGE2; VAR P : 60..119; BEGIN P := M; CASE P OF 101: WRITELN(OUTPUT,'IDENTIFIER DECLA','RED TWICE'); 102: WRITELN(OUTPUT,'LOW BOUND EXCEED','S HIGHBOUND'); 103: WRITELN(OUTPUT,'IDENTIFIER IS NO','T OF APPROþ2PRIATE',' CLASS'); 104: WRITELN(OUTPUT,'IDENTIFIER NOT D','ECLARED'); 105: WRITELN(OUTPUT,'SIGN NOT ALLOWED'); 106: WRITELN(OUTPUT,'NUMBER EXPECTED'); 107: WRITELN(OUTPUT,'INCOMPATABLE SUB','RANGE TYPES'); 108: WRITELN(OUTPUT,'FILEþD NOT ALLOWED',' HERE'); 109: WRITELN(OUTPUT,'TYPE MUST NOTBE ','REAL'); 110: WRITELN(OUTPUT,'TAGFIELD TYPE MU','ST BE SCALAR OR ','SUBRANGE'); 111: WRITELN(OUTPUT,'INCOMPATIBLE WIT','H TAGFIELD TYPE'); 112: WRITELN(OUTPUT,'INDEX TYPE MUþ?EST ','NOT BE REAL'); 113: WRITELN(OUTPUT,'INDEX TYPE MUST ','BE SCALAR OR SUB','RANGE'); 114: WRITELN(OUTPUT,'BASE TYPE MUST N','OT BE REAL'); 115: WRITELN(OUTPUT,'BASE TYPE MUST B','E SCALAR OR SUBR','ANGE');  116: WRITELN(OUTPUT,'ERRORþC— IN TYPE OF',' STANDARD PROCED','URE PARAMETER'); 117: WRITELN(OUTPUT,'UNSATISFIED FORW','ARD REFERENCE'); 118: WRITELN(OUTPUT,'FORWARD REFERENC','E TYPE IDENTIFIE', 'R IN VARIABLE DE','CLARATION'); 119: WRITELN(OUTPþ?UT,'FORWARD DECLARED','; REPETITION OF ', 'PARAMETER LIST N','OT ALLOWED'); END (* OF CASE *) END (*MESSAGE2*); PROCEDURE MESS3A; VAR P : 120..145; BEGIN P := M; CASE P OF 120: WRITELN(OUTPUT,'FUNCTIONþ$í RESULT ','TYPE MUST BE SCA', 'LAR, SUBRANGE OR',' POINTER'); 121: WRITELN(OUTPUT,'FILE VALUE PARAM','ETER NOT ALLOWED'); 122: WRITELN(OUTPUT,'FORWARD DECLARED',' FUNCTION; REPET', 'ITION OF RESULþ7)T ','TYPE NOT ALLOWED'); 123: WRITELN(OUTPUT,'MISSING RESULT T','YPE IN FUNCTION ','DECLARATION'); 124: WRITELN(OUTPUT,'F-FORMAT FOR REA','L ONLY'); 125: WRITELN(OUTPUT,'ERROR IN TYPE OF',' STANDARD FUNCTI','ON PARAMETER'); 126: WRITELNþ”ó(OUTPUT,'NUMBER OF PARAME','TERS DOES NOT AG', 'REE WITH DECLARA','TION'); 127: WRITELN(OUTPUT,'ILLEGAL PARAMETE','R SUBSTITUTION'); 128: WRITELN(OUTPUT,'RESULT TYPE OF P','ARAMETER FUNCTIO', 'N Dþ¯OES NOT AGREE',' WITH DECLARATIO','N'); 129: WRITELN(OUTPUT,'TYPE CONFLICT OF',' OPERANDS'); 130: WRITELN(OUTPUT,'EXPRESSION IS NO','T OF SET TYPE'); 131: WRITELN(OUTPUT,'TESTS ON EQUALIT','Y ALLOWED ONLY'); 132: WRITELN(OUTPUT,'STRICT þ|INCLUSION',' NOT ALLOWED'); 133: WRITELN(OUTPUT,'FILE COMPARISION',' NOT ALLOWED'); 134: WRITELN(OUTPUT,'ILLEGL TYPE OF O','PERAND(S)'); 135: WRITELN(OUTPUT,'TYPE OF OPERAND ','MUST BE BOOLEAN'); 136: WRITELN(OUTPUT,'SET ELEMENT TYPE','þ* MUST BE SCALAR ','OR SUBRANGE'); 137: WRITELN(OUTPUT,'SET ELEMENT TYPE','S NOT COMPATIBLE'); 138: WRITELN(OUTPUT,'TYPE OF VARIABLE',' IS NOT ARRAY'); 139: WRITELN(OUTPUT,'INDEX TYPE IS NO','T COMPATIBLE WIT','H DECLARATION'); 140: WRITþî¤ELN(OUTPUT,'TYPE OF VARIABLE',' IS NOT RECORD'); 141: WRITELN(OUTPUT,'TYPE OF VARIABLE',' MUST BE FILE OR',' PIONTER'); 142: WRITELN(OUTPUT,'ILLEGAL PARAMETE','R SUBSTITUTION'); 143: WRITELN(OUTPUT,'ILLEGAL TYPE OF ','LOOP CONTROL VAR','IABLþ¾E'); 144: WRITELN(OUTPUT,'ILLEGAL TYPE OF ','EXPRESSION'); 145: WRITELN(OUTPUT,'TYPE CONFLICT'); END (* OF CASE *) END (* OF MESS3A *); PROCEDURE MESS3B; VAR P : 146..159; BEGIN P := M; CASE P OF 146: WRITELN(OUTPUTþ:ì,'ASSIGMENT OF FIL','ES NOT ALLOWED'); 147: WRITELN(OUTPUT,'LABEL TYPE INCOM','PATIBLE WITH SEL', 'ECTING EXPRESSIO','N'); 148: WRITELN(OUTPUT,'SUBRANGE BOUNDS ','MUST BE SCALAR'); 149: WRITELN(OUTPUT,'INDEX TYPE MUSþ«T ','NOT BE INTEGER'); 150: WRITELN(OUTPUT,'ASSIGNMENT TO ST','ANDARD FUNCTION ','IS NOT ALLOWED'); 151: WRITELN(OUTPUT,'ASSIGNMENT TO FO','RMAL FUNCTION IS',' NOT ALLOWED'); 152: WRITELN(OUTPUT,'NO SUCH FIELD IN',' THIS RECORD'); 153: þ(GWRITELN(OUTPUT,'TYPE ERROR IN RE','AD'); 154: WRITELN(OUTPUT,'ACTUAL PARAMETER',' MUST BE A VARIA','BLE'); 155: WRITELN(OUTPUT,'CONTROL VARIABLE',' MUST NEITHER BE', ' FORMAL NOR NON ','LOCAL'); 156: WRITELN(OUTPUT,'þ;MULTIDEFINED CAS','E LABEL'); 157: WRITELN(OUTPUT,'TOO MANY CASES I','N CASE STATEMENT'); 158: WRITELN(OUTPUT,'MISSING CORRESPO','NDING VARIANT DE','CLARATION'); 159: WRITELN(OUTPUT,'REAL OR STRING T','AGFIELDS NOT ALL','OWED'); END (* Oþ-5F CASE *) END (* MESS3B *); PROCEDURE MESS3C; VAR P : 160..179; BEGIN P := M; CASE P OF 160: WRITELN(OUTPUT,'PREVIOUS DECLARA','TION WAS NOT FOR','WARD'); 161: WRITELN(OUTPUT,'AGAIN FORWARD DE','CLARED'); 162: WRITELN(Oþ2àUTPUT,'PARAMETER SIZE M','UST BE CONSTANT'); 163: WRITELN(OUTPUT,'MISSING VARIANT ','IN DECLARATION'); 164: WRITELN(OUTPUT,'SUBSTITUTION OF ','STANDARD PROC/FU','NC NOT ALLOWED'); 165: WRITELN(OUTPUT,'MULTIDEFINED LAB','EL'); 166: WRITEþýçLN(OUTPUT,'MULTIDECLARED LA','BEL'); 167: WRITELN(OUTPUT,'UNDECLARED LABEL'); 168: WRITELN(OUTPUT,'UNDEFINED LABEL'); 169: WRITELN(OUTPUT,'ERROR IN BASE SE','T'); 170: WRITELN(OUTPUT,'VALUE PARAMETER ','EXPECTED'); 171: WRITELN(OUTþÛtPUT,'STANDARD FILE WA','S REDECLARED'); 172: WRITELN(OUTPUT,'UNDECLARED EXTER','NAL FILE'); 173: WRITELN(OUTPUT,'FORTRAN PROCEDUR','E OR FUNCTION EX','PECTED'); 174: WRITELN(OUTPUT,'PASCAL PROCEDURE',' OR FUNCTION EXP','ECTED'); 175: WRþÑáITELN(OUTPUT,'MISSING FILE ''I','NPUT'' IN PROGRA','M HEADING'); 176: WRITELN(OUTPUT,'MISSING FILE ''O','UTPUT'' IN PROGR','AM HEADING'); 178: WRITELN(OUTPUT,'ILLEGAL TAGFIELD',' IN VARIANT'); END (*OF CASE*) END (*MESS3C*); PROCEDURE MþûçESSAGE3; BEGIN IF M > 145 THEN BEGIN IF M > 159 THEN MESS3C ELSE MESS3B END ELSE MESS3A END (*MESAGE3*); PROCEDURE MESSAGE4; VAR P : 180..239; BEGIN P := M; CASE P OF þW5 201: WRITELN(OUTPUT,'ERROR IN REAL CO','NSTANT: DIGIT EX','PECTED'); 202: WRITELN(OUTPUT,'STRING CONSTANT ','MUST NOT EXCEED ','SOURCE LINE'); 203: WRITELN(OUTPUT,'INTEGER CONSTANT',' EXCEEDS RANGE'); 204: WRITELN(OUTPUT,'8 OR 9 IN OCTAþ,L ','NUMBER'); END (* OF CASE *) END (*MESSAGE4*); PROCEDURE MESSAGE5; VAR P : 240..299; BEGIN P := M; CASE P OF 250: WRITELN(OUTPUT,'TOO MANY NESTED ','SCOPES OF IDENTI','FIERS'); 251: WRITELN(OUTPUT,'TOO MANY NESTED ','þ‚PROCEDURES AND/O','R FUNCTIONS'); 252: WRITELN(OUTPUT,'TOO MANY FORWARD',' REFERENCES OF P','ROCEDURE ENTRIES'); 253: WRITELN(OUTPUT,'PROCEDURE TOO LO','NG'); 254: WRITELN(OUTPUT,'TOO MANY LONG CO','NSTANTS IN THIS ','PROCEDURE'); 255: þWRITELN(OUTPUT,'TOO MANY ERRORS ','ON THIS SOURCE L','INE'); 256: WRITELN(OUTPUT,'TOO MANY EXTERNA','L REFERENCES'); 257: WRITELN(OUTPUT,'TOO MANY EXTERNA','LS'); 258: WRITELN(OUTPUT,'TOO MANY LOCAL F','ILES'); 259: WRITELN(OUTPUT,'EXPRþfžESSION TOO C','OMPLICATED'); END (* OF CASE *) END (*MESSAGE5*); PROCEDURE MESSAGE6; VAR P : 300..359; BEGIN P := M; CASE P OF 300: WRITELN(OUTPUT,'DIVISION BY ZERO'); 301: WRITELN(OUTPUT,'NO CASE PROVIDED',' FOR THIS VALþOxUE'); 302: WRITELN(OUTPUT,'INDEX EXPRESSION',' OUT OF BOUNDS');  303: WRITELN(OUTPUT,'VALUE TO BE ASSI','GNED IS OUT OF B','OUNDS'); 304: WRITELN(OUTPUT,'ELEMENT EXPRESSI','ON OUT OF RANGE'); 350: WRITELN(OUTPUT,'GLOBAL LABEL ','NOT ALþ¤3LOWED WHEN',' DECLARING ', 'EXTERNAL PROC/','FUNC'); 351: WRITELN(OUTPUT,'GLOBAL VAR ','NOT ALLOWED ','WHEN DECLARING', ' EXTERNAL ','PROC/FUNC'); END (* OF CASE *) END (* MESSAGE6 *); PROCEDþΔURE MESSAGE7; VAR P : 360..419; BEGIN P := M; CASE P OF 399: WRITELN(OUTPUT,'IMPLEMENTATION R','ESTRICTION'); 398: WRITELN(OUTPUT,'VARIABLE DIMENSI','ON ARRAYS NOT IM','PLEMENTED'); 400: WRITELN(OUTPUT,'ATTEMPT TO ACCES','S AþÖ¾N INDEXED VAR','IABLE DIRECTLY'); END (* OF CASE *) END(* MESSAGE7*); PROCEDURE MESSAGE9; VAR P : 480..539; BEGIN P := M; CASE P OF 500: WRITELN(OUTPUT,'LOAD ERROR'); 501: WRITELN(OUTPUT,'LOAD ERROR'); END (* OF CASE þëÄ*) END (*MESSAGE9*); BEGIN (* MAIN*) FOR I := 0 TO MAXSET DO BEGIN GET(P4ERRORS); ERROR[I] := P4ERRORS^ END; WRITELN(OUTPUT,' ':10,'ERROR SUMMARY'); WRITELN(OUTPUT,' ':10,'*************'); WRITELN(OUTPUT); FOR I := 0 TO MAXSET DO FOR N := 0 Tþ®wO MAXBIT DO IF N IN ERROR[I] THEN BEGIN M := I * MAXSETMOD + N; WRITE(OUTPUT,' ':3,M:6,':',' ':4); CASE I OF 0 : MESSAGE1; 1 : MESSAGE2; 2 : MESSAGE3; 3 : MESSAGE4; 4 : MESSAGE5; 5 : MESSAGE6; 6 : MESSAGE7; þSý… 8 : MESSAGE9; 7,9,10 : ;  END (*OF CASE*); END END (*OF PROGRAM*). ÿR2IFT.SRû­ ó ?þœs .TITL R2IFT ; A DUMMY SEGMENT TO SATISFY ALL UNDEFINED CUES ; TO READ REAL AND WRITE REAL .ENT XRDR,XWRR .EXTN PUNDF .NREL XRDR: XWRR: .PUND .END ÿNEW2P4ASME.ûkk þÇLPROGRAM NEW2P4ASME(OUTPUT); BEGIN WRITELN(OUTPUT, '****************', ' GENERATION OF N', 'EW PCODE ASSEMBL', 'ER COMPLETED. **', '***************'); WRITELN(OUTþB8PUT, 'YOU MAY DELETE A', 'LL OTHER FILES O', 'F RELEASE II MEN', 'TIONED AT THE '); WRITELN(OUTPUT, ' BEGINNING PLUS ', 'SETUP.SV, SETU' : 14, 'þzïxPA.SV, P4AMY2 AN', 'D P4MAC.SV EXCEP', 'T P4ASM.SV'); WRITELN(OUTPUT) END. ÿMAKE2P4AM.CMûrX þ9NEW2P4ASMB $TTO $TTI;^ PASCAL/Z SETUP $LPT/L;^ DELETE/V SETUP.RB;^ SETUP SETUP.TB $TTO;^ FASTHASH P4ASM.PC SETUPAY SETUP.TB $LPT;^ APPEND SETUPA SETUPAX SETUPAY SETUPAZ;^ PASCAL/Z SETUPA $LPT/L;^ DELETE/V SETUPA SETUPA.RB;^ SETUPA P4AMY2 $TTO;^ APPEND P4MAþ±+C HEADM2 P4AMX2 P4AMY2 P4MACZ2;^ PASCAL/Z P4MAC $LPT/L;^ DELETE/V P4MAC;^ APPEND P4ASM HEADA2 P4AMX2 P4AMY2 P4ASMZ2;^ PASCAL/Z/P P4ASM $LPT/L;^ DELETE/V P4ASM;^ NEW2P4ASME $TTO ÿR2RFNS.SRû­ ó <þ™Ö .TITL R2RFNS .ENT PFPIN,PFPES,PFPEX,PFPEF .ENT XATN,XCOS,XEXP,XLOG,XSIN,XSQT .ENT XRND .EXTD WSA .EXTN FENT, PTRC .NREL PFPFN: PFPIN: STA 3,TAC3 ;ENTRY USED BY UNARY OPERATORS SUB 3,3 ;AND EVERYTHING ELSE LDA 2,WSA ;RFPI WRITE AREA STA 3,0,2 þ§ ;OVFL UNFL FLAGS DSZ SP FENT FLDA 1,@SP FJMP @TAC3 TAC3: 0 PFPES: FSTA 0,@SP ;EXIT ROUTINE 3 ENTRIES PFPEX: FEXT ISZ SP PFPEF: LDA 2,WSA LDA 3,0,2 MOV 3,3,SNR ;ANY FP FLAGS SET ? NEXT ;NO ERR.P PERFP ;YES ERROR406 ;THE FOLLOWING STANDAþç&RD FUNCTION CALLS ;HAVE A COMMON FORMAT. THE JSR TO PFPFN ;LOADS THE FP OPERANDS INTO FP ACCUMULATOR ;1. THE FJMP TO PFPES ENSURES THAT THE ;RESULT IS STORED. IN THE EVENT OF OVFL OR ;UNDFL ERROR 406 IS REPORTED TO RDOS XATN: JSR PFPFN FATN 1,0 FJMP PFPþ^[ES XCOS: JSR PFPFN FCOS 1,0 FJMP PFPES XEXP: JSR PFPFN FEXP 1,0 FJMP PFPES XLOG: JSR PFPFN FALG 1,0 FJMP PFPES XSIN: JSR PFPFN FSIN 1,0 FJMP PFPES XSQT: JSR PFPFN FSQR 1,0 FJMP PFPES XRND: JSR PFPFN FRND 1,0 FSTA 0,@SP FLD3 .PTRC FJMP 1þ)t,3 .PTRC: PTRC .END ÿCOM.CMûÍÍ þ3ìTYPER2SHEAP.SRÿÿR2RFW.SRû­ ó =þ,5 .TITLE R2RFW .ENT WSA ;RELOCATABLE FLOATING POINT INTERPRETER (RFPI) ;NEEDS A WRITE AREA OF 100 DECIMAL LOCATIONS, THE ;ADDRESS OF THIS AREA TO BE GIVEN AT LOCATION ;WSA IN PAGE ZERO. THE AREA IS INITIALISED ONCE ;ONLY BY SEGMENT PR. .ZREL WSA: FPPAD þQ .NREL FPPAD: .BLK 100. .END ÿSETUP.ûmm þP(* UNIVERSITY OF LANCASTER DEPARTMENT OF CCOPUTER STUDIES ============================== AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE I/II DATE : MARCH, 1977 *) (*******þK'*************************************************** THIS PROGRAM IS TO PRODUCE A HASH TABLE FOR ALL THE PCODE MNEMONICS. NO OPTIMAL STRATEGY IS INCORPORATED TO SPEED UP THE ACCESSING MECHANISM. þù# TO ACTIVATE THIS PROGRAM, DO THE FOLLOWING COMMAND : SETUP SETUP.TB ======================= WHERE 'SETUP.TB' IS THE OUTPUT FILE USED TO CONTAIN THE HASH TABLE þä‡ AND WILL BE USED AS INPUT FILE TO THE PROGRAM "FASTHASH" IS THE PRR FILE USED TO CONTAIN SOME USEFUL INFORMATION FOR USER REFERENCE. ***********þôJ**********************************************) PROGRAM SETUP(OUTPUT, PRR); CONST TABLESIZE = 256; TABSIZE0 = 255; (*** IE TABLE SIZE WITH ZERO ORIGIN ***) TYPE STRING4 = ARRAY[1..4] OF CHAR; STRING6 = ARRAY[1..6] OF CHARþx; TEMPLATE = RECORD PCODE : STRING4; SEMICODE : STRING6; ACTION : INTEGER END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; þ; I, J, K : 1..TABLESIZE; ZERO, ENTRIES, PETTY : INTEGER; PROCEDURE HASH(HPCODE : STRING4; HSEMICODE : STRING6; HACTION : INTEGER); VAR TEMP, RNDM, PI : INTEGER; BEGIN TEMP := ORD(HPCODE[1]) þòã* 4 + ORD(HPCODE[2]) * 2 + ORD(HPCODE[3]) ; IF ORD(HPCODE[4]) <> 0 THEN TEMP := TEMP * 2 + ORD(HPCODE[4]); TEMP := TEMP MOD TABLESIZE; RNDM := 1; PI := 0; WHILE PCODETABLE[ (TEMP + PI) MþàýOD TABLESIZE].PCODE <> ' ' DO BEGIN (* OF THE REHASHING ALGORITHM MENTIONED BY DAVID GRIES IN HIS 'COMPILER CONSTRUCTION' *) RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); END; þ (* AN EMPTY ENTRY IN THE PCODE TABLE IS FOUND *) WITH PCODETABLE[ (TEMP + PI) MOD TABLESIZE ] DO BEGIN PCODE := HPCODE; SEMICODE := HSEMICODE; ACTION := HACTION; END; ENTRIES := ENTRIES + 1 þG0 END (* OF HASH *); PROCEDURE COMPLETETASK; PROCEDURE TASK1; BEGIN (********** GROUP 1 WITH NO OPERANDS **********) (* TYPES OF THE FOLLOWING FORMAT IN A 16-BIT WORD ................... þ†< : : : :00XXXXTT:XX000000: : : : :........:........: WHERE TT = 00 IF INTEGER, ADDRESS OR BOOLEAN = 01 IF REAL þa6 = 10 IF CHAR = 11 IF SET OR RECORD. X = 0 OR 1. NB THE ABOVE FORMAT APPLIES TO INSTRUCTIONS HAVING A 'C' FIELD *) þú¢ HASH('STOA', '004000', 0); HASH('STOB', '004000', 0); HASH('STOC', '005000', 0); HASH('STOI', '004000', 0); HASH('STOR', '004400', 0); HASH('STOS', '005400', 0); HASH('EOF ', '024400'þë, 0); HASH('ADI ', '007000', 0); HASH('ADR ', '013400', 0); HASH('SBI ', '007400', 0); HASH('SBR ', '014000', 0); HASH('SGS ', '022000', 0); HASH('FLT ', '014400', 0); HASH('FLO 'þò‚, '015000', 0); HASH('TRC ', '015400', 0); HASH('NGI ', '010000', 0); HASH('NGR ', '016000', 0); HASH('SQI ', '010400', 0); HASH('SQR ', '016400', 0); HASH('ABI ', '011000', 0); Hþ{×ASH('ABR ', '017000', 0); HASH('NOT ', '020400', 0); HASH('AND ', '021000', 0); HASH('IOR ', '021400', 0); HASH('DIF ', '022400', 0); HASH('INT ', '023000', 0); HASH('UNI ', '023400', 0); þ• HASH('INN ', '024000', 0); HASH('MOD ', '011400', 0); HASH('ODD ', '012000', 0); HASH('LCA ', '025400', 0); END (* TO BE CONTINUED IN TASK2 *); PROCEDURE TASK2; BEGIN (* CONTINUED FROMþu• TASK1 *) HASH('MPI ', '012400', 0); HASH('MPR ', '017400', 0); HASH('DVI ', '013000', 0); HASH('DVR ', '020000', 0); HASH('STP ', '025000', 0); HASH('CHR ', '030000', 0); HASH('þðQORDA', '026400', 0); HASH('ORDB', '027400', 0); HASH('ORDC', '027000', 0); HASH('ORDI', '026000', 0); (* COMPARISON TYPES WITH THE FOLLOWING FORMAT ................... : : þG : :00XXXXXX:XXXXXTTT: : : : :........:........: WHERE TTT = 001 IF INTEGER OR CHAR = 010 IF REAL = 011 IF BOOLEAN þ§ = 100 IF SET OR RECORD = 101 IF ADDRESS. X = 0 OR 1. *) HASH('EQUA', '001005', 0); HASH('EQUB', '001003', 0); HASH('EQUC', '001001', 0); HASH('EQUI',þG '001001', 0); HASH('EQUR', '001002', 0); HASH('EQUS', '001004', 0); HASH('NEQA', '001405', 0); HASH('NEQB', '001403', 0); HASH('NEQC', '001401', 0); HASH('NEQI', '001401', 0); Hþ¼ŒASH('NEQR', '001402', 0); HASH('NEQS', '001404', 0); HASH('GEQA', '002005', 0); HASH('GEQB', '002003', 0); HASH('GEQC', '002001', 0); HASH('GEQI', '002001', 0); HASH('GEQR', '002002', 0); þtR HASH('GEQS', '002004', 0); END (* TO BE CONTINUED IN TASK3 *); PROCEDURE TASK3; BEGIN (* CONTINUED FROM TASK3 *) HASH('GRTA', '002405', 0); HASH('GRTB', '002403', 0); HASH('GRTC', '00þº2401', 0); HASH('GRTI', '002401', 0); HASH('GRTR', '002402', 0); HASH('GRTS', '002404', 0); HASH('LEQA', '003005', 0); HASH('LEQB', '003003', 0); HASH('LEQC', '003001', 0); HASH(þIŸ'LEQI', '003001', 0); HASH('LEQR', '003002', 0);  HASH('LEQS', '003004', 0); HASH('LESA', '003405', 0); HASH('LESB', '003403', 0); HASH('LESC', '003401', 0); HASH('LESI', '003401', 0); þØÔ HASH('LESR', '003402', 0); HASH('LESS', '003404', 0); HASH('RETA', '006401', 0); HASH('RETB', '006401', 0); HASH('RETC', '006401', 0); HASH('RETI', '006401', 0); HASH('RETP', '006400'þkø, 0); HASH('RETR', '006402', 0); END (* OF TASK1 *); PROCEDURE TASK4; BEGIN (********** GROUP 2 WITH OPERANDS **********) (* TYPES WITH THE FOLLOWING FORMAT ................... þ£ß : : : :W1XXXXXX:XX000000: : : : :........:........: WHERE W = 0 IF ONE-WORD INSTRUCTION = 1 IF TWO-WORD INSTRUCTION X = 0 OR þdù1. *) (* COMPARISON TYPES *) (********************) HASH('EQUM', '001000', 10); HASH('NEQM', '001400', 10); HASH('GEQM', '002000', 10); HASH('GRTM', '002400', 10); HASH('LEQþf#M', '003000', 10); HASH('LESM', '003400', 10); (* OTHER TYPES *) (***************) HASH('LODA', '044000', 20); HASH('LODB', '044000', 20); HASH('LODC', '044000', 20); HASH('LODI', '044þŽÎ000', 20); HASH('LODR', '044000', 30); HASH('LODS', '044000', 40); HASH('STRA', '050000', 20); HASH('STRB', '050000', 20); HASH('STRC', '050000', 20); HASH('STRI', '050000', 20); HASH('þMSTRR', '050000', 30); HASH('STRS', '050000', 40); HASH('LDA ', '056000', 20); HASH('CXP ', '072400', 50); HASH('HLT ', '000400', 0); HASH('CUP ', '060400', 50); HASH('MST ', '006000', 60); þ>² HASH('LDOA', '046000', 70); HASH('LDOB', '046000', 70); HASH('LDOC', '046000', 70); HASH('LDOI', '046000', 70); HASH('LDOR', '046000', 90); HASH('LDOS', '046000', 100); END (* TO BE CONTINUED Iþ8.N TASK5 *); PROCEDURE TASK5; BEGIN (*CONTINUED FROM TASK4 *) HASH('SROA', '052000', 70); HASH('SROB', '052000', 70); HASH('SROC', '052000', 70); HASH('SROI', '052000', 70); HASH('SRORþ³ß', '052000', 90); HASH('SROS', '052000', 100); HASH('LAO ', '056400', 70); HASH('INDA', '054000', 70); HASH('INDB', '054000', 70); HASH('INDC', '054000', 80); HASH('INDI', '054000', 70); þ¨ï HASH('INDR', '054000', 90); HASH('INDS', '054000', 100); HASH('INCA', '064000', 110); HASH('INCI', '064000', 110); HASH('INCC', '065000', 110); HASH('IXA ', '057400', 110); HASH('MOV ', '0600þ%­00', 120); END (* TO BE CONTINUED IN TASK6 *); PROCEDURE TASK6; BEGIN (* CONTINUED FROM TASK5 *) HASH('DECA', '066000', 110); HASH('DECI', '066000', 110); HASH('DECC', '067000', 110); Hþ"ASH('ENT ', '061000', 130); HASH('UJC ', '040400', 140); HASH('UJP ', '062000', 150); HASH('FJP ', '062400', 150); HASH('XJP ', '063400', 150); HASH('TJP ', '063000', 150); HASH('CSP ', '061400'þ´, 160); HASH('CHKA', '171400', 170); HASH('CHKB', '070400', 170); HASH('CHKC', '070000', 170); HASH('CHKI', '070400', 170); HASH('CHKR', '070000', 170); HASH('CHKS', '070000', 170); HAþj+SH('LDC ', '057000', 180); HASH('LDCB', '057000', 190); HASH('LDCC', '057000', 200); HASH('LDCI', '057000', 190); HASH('LDCN', '057000', 210); HASH('LDCR', '057000', 220);  HASH('JNC ', '032000', 2þJd30); END (* OF TASK 4 *); PROCEDURE TASK7; BEGIN (* STANDARD PROCEDURES *) HASH('ATN ', '000023', 0); HASH('COS ', '000017', 0); HASH('ELN ', '000007', 0); HASH('EXP ', '000020', 0);þá HASH('GET ', '000000', 0); HASH('LOG ', '000021', 0); HASH('NEW ', '000004', 0); HASH('PUT ', '000001', 0); HASH('RDC ', '000015', 0); HASH('RDI ', '000013', 0); HASH('RDR ', '000þ)014', 0); HASH('RLN ', '000003', 0); HASH('RST ', '000002', 0); HASH('SAV ', '000024', 0); HASH('SIN ', '000016', 0); HASH('SQT ', '000022', 0); HASH('WLN ', '000005', 0); HASH('WþRžRC ', '000012', 0); HASH('WRI ', '000010', 0); HASH('WRR ', '000011', 0); HASH('WRS ', '000006', 0); HASH('OPN ', '000025', 0); HASH('RND ', '000026', 0); HASH('OVL ', '000027', 0); þ‡ HASH('CLS ', '000030', 0); HASH('RRR ', '000031', 0); HASH('WDR ', '000032', 0); HASH('PAG ', '000033', 0); HASH('EOR ', '000034', 0); HASH('RWR ', '000035', 0); HASH('RSE ', '000036', 0þñ9); END (* OF TASK7 *); BEGIN (* OF COMPLETETASK *) TASK1; TASK2; TASK3; TASK4; TASK5; TASK6; TASK7; END (* OF COMPLETE TASK *); BEGIN (* OF MAIN PROGRAM *) WRITELN(PRR, 'SETUP STARTS'); WRITþÍéELN; WRITELN; WRITELN; FOR I := 0 TO TABSIZE0 DO BEGIN PCODETABLE[I].PCODE := ' '; PCODETABLE[I].SEMICODE := ' '; PCODETABLE[I].ACTION := 0 END; ZERO := ORD('0'); COMPLETETASK; þ;à WRITE('*'); (* WRITE '*' AS THE HEADER TO INDICATE THAT HASH TABLE IS TO FOLLOW *) FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO BEGIN WRITE(PCODE); IF SEMICODE[1] = ' ' THEN þ¬ WRITE(0 : 6, 0 : 4) ELSE BEGIN PETTY := 0; IF SEMICODE[1] = '1' THEN PETTY := -8; WRITE( ((((PETTY + ORD(SEMICODE[2]) - ZERO ) * 8 + þ¸¢ ORD(SEMICODE[3]) - ZERO ) * 8 + ORD(SEMICODE[4]) - ZERO ) * 8 + ORD(SEMICODE[5]) - ZERO ) * 8 +  ORD(SEMICODE[6]) -ZERO : 6, ACTION : 4); END; þôv WRITELN END; WRITELN(PRR, '; HASH TABLE SIZ', 'E = ' : 8, TABLESIZE : 1); WRITELN(PRR, '; TOTAL PCODE EN', 'TRIES = ' : 8, ENTRIES : 1); WRITELN(PRR, '; LOADING FACTOR', ' = ' : 8, ENTRIES/TABLESIZE : 1) END. ÿR2RFILES.CMû‚‚þ•DR2SECHK,^ R2ROUTL,^ R2SMPD,^ R2STP,^ R2SINTEGER,^ R2SBOOLEAN,^ R2SRANDOM,^ R2SOPN,^ R2SADMIN,^ R2SRD,^ R2SIOIN,^ R2CRCODE,^ R2SSET,^ R2SMPY,^ R2STI,^ R2RFT,^ R2SITAB,^ R2SDIV,^ R2SMEMACC,^ R2SMISC,^ R2SDBIN,^ R2STESTS,^ R2SHEAP,^ R2SDECODER,^ R2SMYP,^ R2RRþ7&ƒEAL,^ R2SREWR,^ R2RFNS,^ R2SSPTAB,^ R2SCONSTS,^ R2RFW^ ÿR2SSET.SRû­ ó 6þŒš .TITL R2SSET ; THE P-CODE INTERPRETER'S SET OPERATIONS .ENT PSGS,PDIF,PINT,PUNI,PINN,MIN4 .ZREL N16: 20 ;USEFUL CONSTANTS MIN4: -4 ASP=Z1 ;AUXILLIARY SET PTR .MACRO SASP ;MACRO TO SET UP ASP IN ACCUMULATOR LDA ^1,SP ;SPECIFIED BY ^1. ASPþ{ IS DEFINED AS LDA 0,MIN4 ;SIMPLY "STACK PTR - 4". IT IS ADD 0,^1 ;USEFUL WHEN DEALING WITH 2 SETS ON T'STACK STA ^1,ASP % .NREL PSGS: LDA 2,MIN4 ;FORM SINGLETON SET FROM INTEGER POP1 1 ;GET INTO MORE CONVENIENT FORM INC 1,1 NEG 1,1 SUBZ 0,0 þÿ=; ; NOW SHIFT CIRCULAR (CARRY-WITH-AC0) WHILST COUNTING UP THRU ZERO ; EVERY 16 SHIFTS, WE PUSH "ALL ZEROES", BUT ALSO, WHEN COUNT=ZERO ; WE PUSH A WORD WITH JUST THE RIGHT BIT SET. STOP WHEN 4 WORDS PUSHED. ; SGS1: MOVR 0,0,SZR JMP SGS2 PUSH1 0 ;PUSH AþÃí ZERO WORD MOVR 0,0 INC 2,2,SNR ;ASSUMES NEXT EXPANDS TO EXACTLY NEXT ;ONE WORD SGS2: INC 1,1,SZR JMP SGS1 PUSH1 0 ;PUSH THE WORD HOLDING THE BIT INCC 2,2,SZR JMP SGS1 NEXT PDIF: SASP 3 ;FIND SET DIFFERENCE DIF1: POP1 2 ;SIMPLY DO "A & NOT þ¡ØB" FOR EACH LDA 1,@ASP ;OF THE 4 CORRESPONDING PAIRS OF WORDS COM 2,2 AND 2,1 STA 1,@ASP DSZ ASP INC 0,0,SZR JMP DIF1 NEXT PINT: SASP 3 ;FIND SET INTERSECTION INT1: POP1 2 ;SIMPLY "A & B" FOR EACH OF 4 PAIRS AGAIN LDA 1,@ASP AND 2,1 STA 1,@þÞÑASP DSZ ASP INC 0,0,SZR JMP INT1 NEXT PUNI: SASP 3 ;FIND SET UNION UNI1: POP1 2 ;"A OR B" THIS TIME LDA 1,@ASP COM 2,2 ;ON THIS SILLY M/C "OR" HAS TO BE AND 2,1 ;"COM - AND - ADC" ADC 2,1 STA 1,@ASP DSZ ASP INC 0,0,SZR JMP UNI1 NEXT þÖ†PINN: LDA 3,SP ;FORM BOOLEAN = "TRUE IFF NTH ELEMENT LDA 0,MIN4 ;OF SET PRESENT". SORRY, BUT SASP ADD 0,3 ;NOT QUITE SUITABLE HERE STA 3,SP LDA 0,0,3 LDA 1,N16 INN1: INC 3,3 ;THIS LOOP FINDS WHICH WORD SUBZ 1,0,SZC ;OF SET WE WANT JMP INN1 Sþ©µ¥UBZ 1,1 INN3: MOVL 1,1 ;THIS LOOP FINDS WHICH BIT OF THE WORD INC 0,0,SZR JMP INN3 LDA 0,0,3 AND 0,1,SZR SUBZL 1,1 ;TRUE IFF BIT IS THERE STOP1 1 NEXT .END ÿP4MACZ2.ûmm þ„. PROCEDURE DOTFILE; (* REDUNDANT IN RELEASE II *) BEGIN WRITELN(OUTPUT, 11008 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* READ OFF EOLN *) WRITELN(OUTPUT, '.TXT ''INPUT'''); WRITELN(OUTPUþ=æT, -8954); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8954);  WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, 8192); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8952); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT,þÞ 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''OUTPUT'''); WRITELN(OUTPUT, -8951); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8949); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITþò&ELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRD'''); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, 8192); þ´, WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8946); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRR'''); WRITELN(OUTPUT, -8945); WRITELN(OUTPUT, -7403); þVÐ WRITELN(OUTPUT, -8943); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITELN(OUTPUT, 2048 ); WRITELN END (*** OF DOTFILE ***); PROCEDURE PACKCODE; VAR SMCODE, I, P, Q : INTEGER; LITERALS þc¦: STRING3; OP, TEMPOP : STRING4; ERROR : BOOLEAN; PROCEDURE DUMMYLABELS; BEGIN ECOUNT := ECOUNT + 1; WRITELN(PRR, '**********', ' INSTR. NO. ' : 12, ICOUNT : 5, ' ''' : 2, OP, þ/ ''' HAS NOT YET BE', 'EN CATERED FOR '); WRITELN END (*** OF DUMMYLABELS ***); FUNCTION PKACTION : INTEGER; VAR TEMP, RNDM, PI : INTEGER; MORETRY : BOOLEAN; PROCEDURE ERRORP; þ¦è BEGIN ERROR := TRUE; ECOUNT := ECOUNT + 1; MORETRY := FALSE; WRITE(PRR, 'INSTR. NO. = ' : 13, ICOUNT : 1, ' ', OP); REPEAT READ(INPUT, CH); þ1á WRITE(PRR, CH)  UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WRITELN(PRR); WRITE(PRR, '** ', OP, ' ** ILLEGAL CODE'); WRITELN(PRR) END (*** ERRORP ***); BEGIþ;N (* OF PKACTION *) PKACTION := 0; TEMP := ORD(OP[1]) * 4 + ORD(OP[2]) * 2 + ORD(OP[3]); IF ORD(OP[4]) <> 0 THEN TEMP := TEMP * 2 + ORD(OP[4]); TEMP := TEMP MOD TABLESþ>IZE; MORETRY := TRUE; SMIN := SMIN + 1; SMAX := SMAX + 1; RNDM := 1; PI := 0; IF OP = ' ' THEN ERRORP ELSE WHILE MORETRY DO WITH PCODETABLE[ (TEMP + PI) MOD TABLESþ¢–IZE ] DO BEGIN IF OP = PCODE THEN BEGIN MORETRY := FALSE; SMCODE := SEMICODE; PKACTION:= ACTION; END ELSE IF PCODE = ' ' THEN ERRORP; þ‰Œ  IF MORETRY THEN BEGIN RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4 ); SMAX := SMAX + 1 END END END (*** OF PKACTION ***); PROCEDURE NILP(P1, P2 : INTEGERþca); (* PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1= 0)) THEN BEGIN WRITELN(OUTPUT, P2); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 ); REþ`AD(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILP ***); PROCEDURE NILPS(P1, P2, P3 : INTEGER); (* SPECIAL PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1 < HALFWORD) AND (P1 >= 0)) THEN BEGIN WRITELN(OUTPUT,þÝè P2 + P3 ); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 + P3 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILPS ***); PROCEDURE QTOP(P1, P2, P3 : INTEGER); (* PCODE WITH P þ½ÅAND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND (P2 < HALFWORD) AND (P2 >= 0)) THEN BEGIN WRITELN(OUTPUT, P3 + P1 ); WRITELN(OUTPUT, P2 : 7) END ELSE WRITELN(OUTPUT, BIT16 + P3 + P2 ); þŽ0 READ(INPUT, CH) (* READ OFF EOLN *) END (*** QTOP ***); PROCEDURE QTOPS(P1, P2, P3, P4 : INTEGER); (* SPECIAL PCODE WITH P AND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND ( P2 < HALFWORD) AND (P2 >= 0)) THEN BEGIN þ2 WRITELN(OUTPUT, P3 + P4 + P1 ); WRITELN(OUTPUT, P2) END ELSE WRITELN(OUTPUT, BIT16 + P2 + P3 + P4 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF QTOPS ***); PROCEDURE BOUNDS(SEMICODE,þQi LOWERBOUND, UPPERBOUND : INTEGER); (* GENERATE OFFENDING PCODE LOCATION IN CASE CHECK RANGE BEING INVALID *) BEGIN IF SEMICODE > 0 THEN BEGIN IF (LOWERBOUND = 0) AND (UPPERBOUND < HALFWORD) THEN þDS WRITELN(OUTPUT, SEMICODE + BIT16 + UPPERBOUND) ELSE BEGIN IF (LOWERBOUND >= 0) AND (LOWERBOUND < HALFWORD) THEN WRITELN(OUTPUT, SEMICODE + LOWERBOUND) ELSE þ,© BEGIN WRITELN(OUTPUT, SEMICODE + HALFWORD); WRITELN(OUTPUT, LOWERBOUND) END; WRITELN(OUTPUT, UPPERBOUND) END END ELSE IF þ+öLOWERBOUND > 0 THEN WRITELN(OUTPUT, SEMICODE + 1) ELSE WRITELN(OUTPUT, SEMICODE); WRITELN(OUTPUT, ICOUNT + 1) END (* OF BOUNDS *); PROCEDURE LOWCODE; (* TO PROVIDE FACILITIES FOR THOSE POOR SOULS WHO MUST LIVE Wþ9êITH MACHINE CODES *) VAR I, J, K, L, ACC, LEVEL, DISPL : INTEGER; CODEND : BOOLEAN; DIRECTIVE : STRING4; LINE : ARRAY[1..80] OF CHAR; GOODCHAR : SET OF CHAR; GOODIGIT : SET OF '0'þb..'9'; FUNCTION GETNUM : INTEGER; VAR NUMBER : INTEGER; BEGIN WHILE ((LINE[J] = ' ') OR (LINE[J] = ',')) AND (J < I) DO J := J + 1; IF NOT (LINE[J] IN GOODIGIT) THEN þµ BEGIN WRITELN(PRR, '** ASSEMBLER COD', 'E ERROR :'); FOR J := 1 TO I DO WRITE(PRR, LINE[J]); WRITELN(PRR); WRITELN(PRR, '** LAST RECORDED', ' PCODE COUNTER =',þüü ICOUNT); ECOUNT := ECOUNT + 1 END; NUMBER := ORD(LINE[J]) - ZERO; J := J + 1; WHILE (J <= I) AND (LINE[J] IN GOODIGIT) DO BEGIN NUMBER := Nþ­3UMBER * 10 + ORD(LINE[J]) - ZERO; J := J + 1 END; GETNUM := NUMBER END (* OF GETNUM *); PROCEDURE GETLABEL; VAR N : INTEGER; BEGIN IF J > 1 THEN þ§Ó BEGIN FOR N := 1 TO J DO WRITE(OUTPUT, LINE[N]); END END (* OF GET LABEL *); BEGIN (* OF LOWCODE *); WRITELN(OUTPUT, '.RDX 8'); WRITELN(OUTPUT, '.EXþùäTD .CST .CLD ', 'PCRTN'); CODEND := FALSE; FOR CH := '0' TO '9' DO GOODIGIT := GOODIGIT + [CH]; FOR CH := 'A' TO 'Z' DO GOODCHAR := GOODCHAR + [CH]; GOODCHAR := GOODCHAR + ['.', '$'] + GOODIGIT; REPEAT þAÄ IF EOF(INPUT) THEN BEGIN WRITELN(PRR, '** ASSEMBLY CODE', ' SECTION NOT PRO', 'PERLY ENDED.'); WRITELN(PRR, '** LAST RECORDED', ' PCODE COUNTER =', ICOUNT); HALT(311); þsÍ END; REPEAT WHILE EOLN(INPUT) DO READLN(INPUT); READ(INPUT, CH);  IF CH = ';' THEN READLN(INPUT) UNTIL CH IN GOODCHAR; LINE[1] := CH; þÁ] FOR I := 2 TO 80 DO LINE[I] := ' '; I := 1; J := 1; WHILE NOT( EOLN(INPUT) OR ( I = 80) OR (CH = ';')) DO BEGIN READ(INPUT, CH); IF CH <> ';' THEN þH+ BEGIN I := I + 1; LINE[I] := CH; IF CH = ':' THEN J := I END END; READLN(INPUT); IF J > 1 THEN þn< REPEAT J := J + 1; UNTIL LINE[J] <> ' '; L := 1; FOR K := J TO J + 3 DO BEGIN DIRECTIVE[L] := LINE[K]; L := L + 1 þ¹E END; IF DIRECTIVE = 'JPC ' THEN BEGIN GETLABEL;  CODEND := TRUE; WRITELN(OUTPUT, 'JSR @PCRTN') END ELSE IF DIRECTIVE = 'POþx†P ' THEN BEGIN GETLABEL; J := J + 4; WRITELN(OUTPUT, 'DSZ 41'); WRITE(OUTPUT, 'LDA ' : 5, GETNUM : 1, ' @41'); WRITELN(OUTPUT) þðY END ELSE IF DIRECTIVE = 'PUSH' THEN BEGIN GETLABEL;  J := J + 4; WRITELN(OUTPUT, 'ISZ 41'); WRITE(OUTPUT, 'STA ': 5, GETNUM : 1, ' @41');þ(B WRITELN(OUTPUT) END ELSE IF DIRECTIVE = 'LOAD' THEN BEGIN GETLABEL; J := J + 4; ACC := GETNUM; LEVEL := GETNUM; DISPL := þû{GETNUM; WRITELN(OUTPUT, 'JSR @.CLD'); WRITELN(OUTPUT, LEVEL); WRITELN(OUTPUT, DISPL); WRITE(OUTPUT, 'LDA ' : 5, ACC : 1, ' @47'); WRITELN(OUTPUT); þpž END ELSE IF (DIRECTIVE = 'STOR') AND (LINE[J + 4] = 'E') THEN BEGIN GETLABEL; J := J + 5; WRITE(OUTPUT, 'STA ' : 5, GETNUM : 1, ' 47'); þj) WRITELN(OUTPUT); WRITELN(OUTPUT, 'JSR @.CST');  WRITELN(OUTPUT, GETNUM); WRITELN(OUTPUT, GETNUM); END ELSE BEGIN FOR J := 1þÆ- TO I DO WRITE(OUTPUT, LINE[J]); WRITELN(OUTPUT) END; UNTIL CODEND; WRITELN(OUTPUT, '.RDX 10') END (* OF LOWCODE *); BEGIN (* OF PACKCODE *) OP[1] := CH; REAþ¥YD(INPUT, OP[2], OP[3]); IF EOLN(INPUT) THEN OP[4] := ' ' ELSE READ(INPUT, OP[4]); CASE PKACTION OF 0 : (* STOA STOA STOC STOI STOR STOS EOF ADI ADR SBI SBR SGS FLT FLOþÙª TRC NGI NGR SQI SQR ABI ABR NOT AND IOR DIF INT UNI INN MOD ODD LCA MPI MPR DVI DVR STP CHR ORDA ORDB ORDC ORDI EQUA EQUB þ�§ EQUC EQUI EQUR EQUS NEQA NEQB NEQC NEQI NEQR NEQS GEQA GEQB GEQC GEQI GEQR GEQS GRTA GRTB GRTC GRTI GRTR GRTR GRTS LEQA LEQB LEQC LEQI LEQR LEþëÇQS LESA LESB LESC LESI LESR LESS RETA RETB RETC RETI RETP RETR ATN COS ELN EXP GET LOG NEW PUT RDC RDI RDR RLN RST SAV SIN SQþwÛT WLN WRC WRI WRR WRS  OPS OPN OVL CMS RSN *) BEGIN IF ERROR THEN ERROR := FALSE ELSE BEGIN þ;‘ WRITELN(OUTPUT, SMCODE ); READLN(INPUT) (* RID EOLN *) END END; 1, 2, 3, 4, 5, 6, 7, 8, 9 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 10 :þ° (* EQUM NEQM GEQ GRTM LEQM LESM  *) BEGIN READ(INPUT, Q); NILP(Q, SMCODE + BIT15) END; 11, 12, 13, 14, 15, 16, 17, 18, 19 : DUMMYLABELS; (***** Fþ»OR FUTURE INSERTIONS *****) 20 : (* LODA LODB LODC LODI STRA STRB STRC STRI LDA *) BEGIN READ(INPUT, P, Q); QTOP(P, Q DIV 2, SMCODE) END;þþz 21, 22, 23, 24, 25, 26, 27, 28, 29 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 30 : (* LODR STRR *) BEGIN READ(INPUT, P, Q); QTOPS(P, Q DIV 2, SMCODE, HALFWORDþVÙ) END; 31, 32, 33, 34, 35, 36, 37, 38, 39 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 40 : (* LODS STRS *) BEGIN READ(INPUT, P, Q); QTOPS(P, Q Dþð IV 2, SMCODE, 3 * HALFWORD) END; 41, 42, 43, 44, 45, 46, 47, 48, 49 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 50 : (* CUP CXP *) BEGIN READ(INPUT, P); þY READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P DIV 2 ); WRITELN(OUTPUT, CH, Q : 1); READ(INPUT, CH) þ—î(* READ OFF EOLN *) END; 51, 52, 53, 54, 55, 56, 57, 58, 59 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 60 : (* MST *) BEGIN READ(INPUT, Q); WRITELþ“ˆN(OUTPUT, SMCODE + Q ); READ(INPUT, CH) (* READ OF EOLN *) END; 61, 62, 63, 64, 65, 66, 67, 68, 69 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 70 : (* LDOA LDOB LDOC LDOI  SROAþæy SROB SROC SROI INDA INDB INDI LAO *) BEGIN READ(INPUT, Q); NILP(Q DIV 2, SMCODE) END; 71, 72, 73, 74, 75, 76, 77,þHí 78, 79 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 80 : (* INDC *) BEGIN READ(INPUT, Q); NILPS(Q, SMCODE, 2 * HALFWORD) END; 81, 82, 83, 84, 85, 86, 8þ>7, 88, 89 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 90 : (* LDOR SROR INDR *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD) END; 91, 92þ|C, 93, 94, 95, 96, 97, 98, 99 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 100 : (*LDOS SROS INDS *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD * 3) þç‡ END; 101, 102, 103, 104, 105, 106, 107, 108, 109 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 110 : (* INCA INCI INCC IXA DECA DECI DECC *) BEGIN þm“ READ(INPUT, Q); NILP(Q, SMCODE) END; 111, 112, 113, 114, 115, 116, 117, 118, 119 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 120 : (*MOV *) BEGIN þ?ƒ READ(INPUT, Q); NILP((Q + 1) DIV 2, SMCODE) END; 121, 122, 123, 124, 125, 126, 127, 128, 129 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 130 : (* ENT *) BEGIN þÉ READ(INPUT, P); READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P ); WRITELN(OUTPUT, CH, Q : 1); þ¨] READ(INPUT, CH) (* READ OFF EOLN *) END; 131, 132, 133, 134, 135, 136, 137, 138, 139 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 140 : (* UJC *) BEGIN þê WRITELN(OUTPUT, SMCODE ); WRITELN(OUTPUT, 0 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 141, 142, 143, 144, 145, 146, 147, 148, 149 : DUMMYLABELS; (***** FOR FUTURE INSERTþX·IONS *****) 150 : (* UJP FJP XJP TJP JPF JPT SJP *) BEGIN READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODEþfi ); WRITELN(OUTPUT, CH, Q : 1); READ(INPUT, CH) (* READ OFF EOLN *) END; 151, 152, 153, 154, 155, 156, 157, 158, 159 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) þ¼ 160 : (* CSP *) BEGIN READ(INPUT, CH); WHILE CH = ' ' DO READ(INPUT, CH); I := SMCODE; TEMPOP := OP; OP[1] := CH; þÈREAD(INPUT, OP[2], OP[3]); OP[4] := ' '; P := PKACTION; (* P IS DUMMY, CALLING PKACTION IS JUST TO  OBTAIN SEMI-CODE VALUE IN SMCODE *) WRITELN(OUTPUT, SMCOþ8^DE + I + BIT16 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 161, 162, 163, 164, 165, 166, 167, 168, 169 :DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 170 : (* CHKA CHKB CHKC CHKI *) þ 5 BEGIN READLN(INPUT, P, Q); BOUNDS(SMCODE, P, Q) END; 171, 172, 173, 174, 175, 176, 177, 178, 179 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 180 : (*þÃõ LDC *) BEGIN WRITELN(OUTPUT, SMCODE + 3 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) þë™ FOR I := 1 TO 4 DO WRITELN(OUTPUT, SWITCHES[I]); END; 181, 182, 183, 184, 185, 186, 187, 188, 189 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 190 : (* LDCB LDCI *) BEGIN þ:‹ READ(INPUT, Q); QTOP(0, Q, SMCODE) END; 191, 192, 193, 194, 195, 196, 197, 198, 199 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 200 : (* LDCC *) (* SORRY FOR THIS MESS, þï BUT BLAME THE NOVA ASSEMBLER PLEASE. *) BEGIN READ(INPUT, CH); (* THE ORDINAL OF (') = 7 *) WHILE ORD(CH) <> 7 DO READ(INPUT, CH); LITERALS[1] := CH; þ®V READ(INPUT, LITERALS[2], LITERALS[3]); WRITELN(OUTPUT, SMCODE ); IF LITERALS[2] = CHR(7) (* IF LITERALS[2] = '''' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 39 (* NOVA þz CODE FOR (') *) : 1, CHR(30), CHR(7)) ELSE IF LITERALS[2] = CHR(12) (* IF LITERALS[2] = ',' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 44 (* NOVA Cþ‹ùODE FOR (,) *) : 1, CHR(30), CHR(7)) ELSE IF LITERALS[2] = CHR(28) (* IF LITERALS[2] = '<' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 60 (* NOVA CODE FOR (<) *) : 1, CHRþH(30), CHR(7)) ELSE WRITELN(OUTPUT, '.TXT ', LITERALS); READ(INPUT, CH) (* READ OFF EOLN *) END; 201, 202, 203, 204, 205, 206, 207, 208, 209 : DUMMYLABELS; (***** FOR FUTURE INSþžXERTIONS *****) 210 : (* LDCN *) QTOP(0, 0, SMCODE); 211, 212, 213, 214, 215, 216, 217, 218, 219 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 220 : (* LDCR *) (* NOTICE THE NON-FLOATINGþ“ì POINT OUTPUT FORMAT OF 'R' *) BEGIN WRITELN(OUTPUT, SMCODE + 1, '.'); READLN(INPUT, R); WRITELN(OUTPUT,'0', R : 0) END; 230 : (* JNC *) (* FOR MACHINE þTšCODE ADDICTS ONLY *) BEGIN WRITELN(OUTPUT, SMCODE); READLN(INPUT); LOWCODE; END; (* REDUNDANT 'CCP ' 240 : BEGIN WRIþä”TELN(OUTPUT, SMCODE); READLN(INPUT, Q); WRITELN(OUTPUT, Q); END; *) END (* OF CASE PKACTION *) END (*** OF PACKCODE ***); BEGIN (* OF MAIN *) WRITELN; WRITELN; WRITELN; þ¼E WRITELN(PRR, '; ==== P4MAC BEG', 'INS NOW'); ENT := TRUE; ZERO := ORD('0'); ICOUNT := 3; FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO PCODE := ' '; COMPLETABLE; (* START READING IN THE PCODEþ‡ PROGRAM FROM PRD FILE *) READ(INPUT, CH, CH, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF (CH <> '.') AND (DOTNAME <> 'TIT') THEN BEGIN WRITELN(PRR, '**********', ' NO TITLE FOUND ', '**********'); WRITELN(PRR); Hþ“xALT(311) END; WRITE(OUTPUT, CH: 16, DOTNAME); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); WRITELN; READ(INPUT, CH); (* RID EOLN *) REPEAT READ(INPUT, CH); IF Cþ2yH = 'I' THEN PCTYPE := COMMENT ELSE IF CH = 'L' THEN PCTYPE := LLABEL ELSE IF (CH = 'P') OR (CH = '?') THEN PCTYPE := PCODENTRY ELSE BEGIN READ(INPUT, CH); IF CH = '.' THEN PCTYPE := NONPCODE þÈò ELSE PCTYPE := PCODES END; CASE PCTYPE OF COMMENT : (* INSTRUCTION CHECK COUNT *) BEGIN READ(INPUT, J); IF (ICOUNT <> J) AND (J <> 0)þæz THEN BEGIN  WCOUNT := WCOUNT + 1; WRITELN(PRR, 'I', J : 5, ' ' : 14, '; ??? PCODE' , ' COUNT OUT OF ST', 'EP ???'); þÌý END; ICOUNT := J; READ(INPUT, CH) (* READ OFF EOLN *) END; LLABEL : (* LABELS *) BEGIN WRITþ£E(OUTPUT, CH);  READ(INPUT, I); WRITE(OUTPUT, I : 1); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) þOH UNTIL EOLN(INPUT); READLN(INPUT); WRITELN(OUTPUT) END; NONPCODE : (* NON STANDARD PCODE INSTRUCTIONS *) BEGIN þζ READ(INPUT, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF DOTNAME = 'FIL' THEN DOTFILE ELSE BEGIN IF ((DOTNAME = 'SW1') OR (DOTNAME = 'SW2') þ<„ OR (DOTNAME = 'SW3') OR (DOTNAME = 'SW4')) THEN BEGIN REPEAT READ(INPUT, CH) þ,  UNTIL (CH = '0') OR (CH = '1'); (* READ UNTIL BINARY IS FOUND *) BINARYSTR[1] := CH; IF CH = '1' THEN J := -1 ELSE J := 0; þÝq FOR I := 2 TO 16 DO BEGIN READ(INPUT, CH); BINARYSTR[I] := CH; þŸÅ J := J * 2 + ORD(CH) - ZERO END; I := ORD(DOTNAME[3]) - ZERO; SWITCHES[I] := J; READ(þüIINPUT, CH) (* READ OFF EOLN *) END ELSE IF (DOTNAME = 'TXT') AND (INPUT^ <> 'M') THEN BEGIN WRITE(OUTPUT, '.þçv', DOTNAME : 3); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL CH <> ' '; þ÷l FOR I := 1 TO 16 DO BEGIN READ(INPUT, CH); IF CH = CHR(2) (* IF CH = '"' *) THEN  þÓð WRITE(OUTPUT, CHR(28), 34 (*NOVA CODE FOR(") *) : 1, CHR(30)) ELSE IF CH = CHR(28) (* IF CH = '<' *) THEN þÄ WRITE(OUTPUT, CHR(28), 60 (* NOVA CODE FOR (<) *) : 1, CHR(30)) ELSE IF CH = CHR(30) (* IF CH = '>' *) THEN  þÓÙ WRITE(OUTPUT, CHR(28), 62 (* NOVA CODE FOR (>) *) : 1, CHR(30)) ELSE WRITE(OUTPUT, CH) END; þ ¯ READLN(INPUT, CH); WRITELN(OUTPUT, CH) END ELSE BEGIN  IF DOTNAME = 'ENT' THEN þ÷Ù WRITE(OUTPUT, '.', DOTNAME) ELSE IF NOT (DOTNAME = 'END') THEN WRITE(OUTPUT, '.', þÆDOTNAME); IF NOT EOLN(INPUT) THEN REPEAT READ(INPUT, CH);  WRITE(OUTPUT, CH) þôø UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WRITELN END END þF END; PCODES : (* STANDARD PCODE INSTRUCTIONS *) BEGIN PACKCODE; ICOUNT := ICOUNT + 1  END; PCODENTRY : (* PACKED PCODE þÞ¾ENTRY POINT *) BEGIN WRITE(OUTPUT, CH); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EþUJOLN(INPUT); WRITELN; READ(INPUT, CH) (* READ OFF EOLN *) END; END (* OF CASE PCTYPE *); WHILE EOLN(INPUT) DO BEGIN WRITELN; þó£ READ(INPUT, CH) (* READ OF EOLN *) END UNTIL EOF(INPUT); (* THE PCODE PROGRAM HAS BEEN PACKED FOR INTERPRETER *) (* WRITELN; WRITELN; WRITELN; WRITELN(PRR, '; IDEAL SEARCHES', ' = ', SMIN); WRITELþÚ N(PRR, '; ACTUAL SEARCHE', 'S = ', SMAX); *) IF WCOUNT > 0 THEN WRITELN(PRR, ';---- NO. OF WAR', 'NINGS = ', WCOUNT : 6); IF ECOUNT > 0 THEN WRITELN(PRR, ';**** NO. OF FAT', 'AL ERRORS = ', ECOUNT : 6); WRITELNþkn(OUTPUT, '.END' : 16); IF ECOUNT > 0 THEN HALT(311); WRITELN; WRITELN; WRITELN END. ÿP4COMPILE1.û¡Nþm˜(*$T-,D-*) (********************************************** * * * * * PORTABLE PASCAL COMPILER * * ************************ * þZ_ *  * * PASCAL P4 * * * * * * AUTHORS: * * þ�M URS AMMANN * * KESAV NORI * * CHRISTIAN JACOBI * * * * ADDRESS: * * þ×  * * INSTITUT FUER INFORMATIK * * EIDG. TECHNISCHE HOCHSCHULE * * CH-8096 ZUERICH * * * * þìI * * LAST CHANGES COMPLETED IN MAY 76 * * * * LANCASTER AMENDMENTS BY * * * * A. FOSTER  þÔW * * * * DEPARTMENT OF COMPUTER STUDIES * * UNIVERSITY OF LANCASTER * * BAILRIGG * * LANCASTER LA1 4YX * * þm“ * * * * LAST LANCASTER CHANGES JUNE 77 * * * **********************************************) PROGRAM PASCALþKpCOMPILER(INPUT,OUTPUT,PRR); CONST DISPLIMIT = 20; MAXLEVEL = 10; INTSIZE = 2; INTAL = 2; REALSIZE = 4; REALAL = 2; CHARSIZE = 1; CHARAL = 2; FILEMAX = 6; CHARMAX = 1; BOOLSIZE = 2; BOOLAþPL = 2; PTRSIZE = 2; ADRAL = 2; SETSIZE = 8; SETAL = 2; STACKAL = 2; STACKELSIZE = 2; STRGLGTH = 16; SETHIGH = 63; SETLOW = 0; ORDMAXCHAR = 63; ORDMINCHAR = 0; MAXINT  = 32767; LCAFTERMþ2�ARKSTACK = 12; FILEAL = CHARAL; (* STACKELSIZE = MINIMUM SIZE FOR 1 STACKELEMENT = K*STACKAL STACKAL = SCM(ALL OTHER AL-CONSTANTS) CHARMAX = SCM(CHARSIZE,CHARAL) SCM = SMALLEST COMMON MULTIþ—ÌPLE LCAFTERMARKSTACK >= 4*PTRSIZE+MAX(X-SIZE) = K1*STACKELSIZE *) MAXSTACK = 2; PARMAL = STACKAL; PARMSIZE = STACKELSIZE; RECAL = STACKAL; FILEBUFFER = 4; MAXADDR = MAXINT; (*EþQRROR REPORTING CONSTANTS*) MAXERRBIT = 59; MAXERRMOD = 60; MAXERRSET = 10; TYPE (*DESCRIBING:*) (*************) þÏî (*BASIC SYMBOLS*) (***************) SYMBOL = (IDENT,INTCONST,REALCONST,STRINGCONST,NOTSY,MULOP,ADDOP,RELOP, LPARENT,RPAREþßJNT,LBRACK,RBRACK,COMMA,SEMICOLON,PERIOD,ARROW, COLON,BECOMES,LABELSY,CONSTSY,TYPESY,VARSY,FUNCSY,PROGSY, PROCSY,SETSY,PACKEDSY,ARRAYSY,RECORDSY,FILESY,FORWARDSY, BEGINSY,IFSY,CASESY,REPEATSY,WHILESY,FORSY,WITHSYþÑ;, GOTOSY,ENDSY,ELSESY,UNTILSY,OFSY,DOSY,TOSY,DOWNTOSY, THENSY,OTHERSY,RANDOMSY,EXTRNSY); OPERATOR = (MUL,RDIV,ANDOP,IDIV,IMOD,PLUS,MINUS,OROP,LTOP,LEOP,GEOP,GTOP, NEOP,EQOP,INOP,NOOP); SETOFSYS = SETþ6« OF SYMBOL; CHTP = (LETTER,NUMBER,SPECIAL,ILLEGAL); (*CONSTANTS*) (***********) CSTCLASS = (REEL,PSET,STRG); CSP = ^ COþÑ0NSTANT; CONSTANT = RECORD CASE CCLASS: CSTCLASS OF REEL: (RVAL: PACKED ARRAY [1..STRGLGTH] OF CHAR); PSET: (PVAL: SET OF 0..58); STRG: (SLGTH: 0..STRGLGTH; þ‡ SVAL: PACKED ARRAY [1..STRGLGTH] OF CHAR) END; VALU = RECORD CASE INTVAL: BOOLEAN OF (*INTVAL NEVER SET NORE TESTED*) TRUE: (IVAL: INTEGER); FALSE: (VALP: CSP) þ„ END; (*DATA STRUCTURES*) (*****************) LEVRANGE = 0..MAXLEVEL; ADDRRANGE = 0..MAXADDR; STRUCTFORM = (SCALAR,SUBRAþUNGE,POINTER,POWER,ARRAYS,RECORDS,FILES, TAGFLD,VARIANT); DECLKIND = (STANDARD,DECLARED); STP = ^ STRUCTURE; CTP = ^ IDENTIFIER; STRUCTURE = PACKED RECORD MARKED: BOOLEAN; (*FOR TEST PHASE ONLY*) þG SIZE: ADDRRANGE; CASE FORM: STRUCTFORM OF SCALAR: (CASE SCALKIND: DECLKIND OF  DECLARED: (FCONST: CTP)); SUBRANGE: (RANGETYPE: STP; MIN,MAX: VALU)þwo; POINTER: (ELTYPE: STP); POWER: (ELSET: STP); ARRAYS: (AELTYPE,INXTYPE: STP); RECORDS: (FSTFLD: CTP; RECVAR: STP); FILES: (FILTYPE: STP; RANþ¡…DOMFILE :BOOLEAN); TAGFLD: (TAGFIELDP: CTP; FSTVAR: STP); VARIANT: (NXTVAR,SUBVAR: STP; VARVAL: VALU)  END; (*NAMES*) þ4 (*******) IDCLASS = (TYPES,KONST,VARS,FIELD,PROC,FUNC); SETOFIDS = SET OF IDCLASS; IDKIND = (ACTUAL,FORMAL); ALPHA = PACKED ARRAY [1..8] OF CHAR; IDENTIFIER = PACKED RECORD þhŠ NAME: ALPHA; LLINK, RLINK: CTP; IDTYPE: STP; NEXT: CTP; CASE KLASS: IDCLASS OF  KONST: (VALUES: VALU); VARS: (VKIND: IDKIND; VLEV: LEVRANGE; VADDR: ADDRRANGE); þMî FIELD: (FLDADDR: ADDRRANGE); PROC, FUNC: (CASE PFDECKIND: DECLKIND OF STANDARD: (KEY: 1..17); DECLARED: (PFLEV: LEVRANGE; PFNAME: INTEGER; þ­ CASE PFKIND: IDKIND OF ACTUAL: (FORWDECL,EXTDEC, EXTERN: BOOLEAN))) END; DISPRANGE = 0..DISPLþ½IMIT; WHERE = (BLCK,CREC,VREC,REC); (*EXPRESSIONS*) (*************) ATTRKIND = (CST,VARBL,EXPR); VACCESS = (DRCT,INDRCT,þÒ¥INXD); ATTR = RECORD TYPTR: STP; CASE KIND: ATTRKIND OF CST: (CVAL: VALU); VARBL: (CASE ACCESS: VACCESS OF DRCT: (VLEVEL: LEVRANGE; DPLMT: ADDRRANGE); þN' INDRCT: (IDPLMT: ADDRRANGE)) END; TESTP = ^ TESTPOINTER; TESTPOINTER = PACKED RECORD ELT1,ELT2 : STP; LASTTESTP : TESTP END; þß (*LABELS*) (********) LBP = ^ LABL; LABL = RECORD NEXTLAB: LBP; DEFINED: BOOLEAN; LABVAL, LABNAME: INTEGER END; EXTFILEP =þ<ç ^FILEREC; FILEREC = RECORD FILENAME:ALPHA; NEXTFILE:EXTFILEP; FTYPE : CTP END; (*-------------------------------------------------------------------------*) VAR (*RETURNED BY SOURCE PROGRAM SCANNER þÖA INSYMBOL: **********)  SY: SYMBOL; (*LAST SYMBOL*) OP: OPERATOR; (*CLASSIFICATION OF LAST SYMBOL*) VAL: VALU; (*VALUE OF LASþà~T CONSTANT*) LGTH: INTEGER; (*LENGTH OF LAST STRING CONSTANT*) ID: ALPHA; (*LAST IDENTIFIER (POSSIBLY TRUNCATED)*) KK: 1..8; (*NR OF CHARS IN LAST IDENTIFIER*) CH: CHAR; þŒÒ (*LAST CHARACTER*) EOL: BOOLEAN; (*END OF LINE FLAG*) (*COUNTERS:*) (***********) CHCNT: INTEGER; (*CHARACTER COUNTER*) LC,þzÚIC: ADDRRANGE; (*DATA LOCATION AND INSTRUCTION COUNTER*) LINECOUNT: INTEGER; (*SWITCHES:*) (***********) DP, (*DECLARATION PART*) þeˆ PRTERR, (*TO ALLOW FORWARD REFERENCES IN POINTER TYPE DECLARATION BY SUPPRESSING ERROR MESSAGE*) LIST,PRCODE,PRTABLES: BOOLEAN; (*OUTPUT OPTIONS FOR -- SOþ¾·URCE PROGRAM LISTING -- PRINTING SYMBOLIC CODE -- DISPLAYING IDENT AND STRUCT TABLES --> PROCEDURE OPTION*) DEBUG: BOOLEAN; þ…Ž (*POINTERS:*)  (***********) PARMPTR, INTPTR,REALPTR,CHARPTR, BOOLPTR,NILPTR,TEXTPTR: STP; (*POINTERS TO ENTRIES OF STANDARD IDS*) UTYPPTR,UCSTPTR,UVARPTR, UFLDPTR,UPRCþ?PTR,UFCTPTR, (*POINTERS TO ENTRIES FOR UNDECLARED IDS*) FWPTR: CTP; (*HEAD OF CHAIN OF FORW DECL TYPE IDS*) FEXTFILEP: EXTFILEP; (*HEAD OF CHAIN OF EXTERNAL FILES*) GLOBTESTP: TESTP; (*LAST Tþ+aESTPOINTER*)  (*BOOKKEEPING OF DECLARATION LEVELS:*) (************************************) LEVEL: LEVRANGE; (*CURRENT STATIC LEVEL*) DISX, þú (*LEVEL OF LAST ID SEARCHED BY SEARCHID*) TOP: DISPRANGE; (*TOP OF DISPLAY*) DISPLAY: (*WHERE: MEANS:*) ARRAY [DISPRANGE] OF PACKED RECORD (*=BLCK: ID IS VARIABLE ID*) þ³… FNAME: CTP; FLABEL: LBP; (*=CREC: ID IS FIELD ID IN RECORD WITH*) CASE OCCUR: WHERE OF (* CONSTANT ADDRESS*) CREC: (CLEV: LEVRANGE; (*=VREC: ID IS FIELD ID IN RECORD WITH*) CDSPL: ADDRRANGþ„!E);(* VARIABLE ADDRESS*) VREC: (VDSPL: ADDRRANGE) END; (* --> PROCEDURE WITHSTATEMENT*) (*ERROR MESSAGES:*) (*****************) þ˜* ERRINX: 0..10; (*NR OF ERRORS IN CURRENT SOURCE LINE*) ERRLIST: ARRAY [1..10] OF (*BIT MAP OF COMPILE-TIME ERRORS*) PACKED RECORD POS: INTEGER; NMR: 1..400 END; þsc (*FILE USE TO PASS BIT MAP TO THE ERROR*) (*SUMMARY GENERATOR PROGRAM*) ERRORS : ARRAY [0..MAXERRSET] OF SET OF 0..MAXERRBIT; ERRFLAG : BOOLEAN; þ¿ (*EXPRESSION COMPILATION:*) (*************************) GATTR: ATTR; (*DESCRIBES THE EXPR CURRENTLY COMPILED*) (*STRUCTURED CONSTANTS:*) þ)~ (***********************) CONSTBEGSYS,SIMPTYPEBEGSYS,TYPEBEGSYS,BLOCKBEGSYS,SELECTSYS,FACBEGSYS, STATBEGSYS,TYPEDELS: SETOFSYS; CHARTP : ARRAY[CHAR] OF CHTP; RW: ARRAY [1..37(*NR. OF RES. WORDS*)] OF ALPHA; FRW: ARRAY þ"”[1..9] OF 1..38(*NR. OF RES. WORDS + 1*); RSY: ARRAY [1..37(*NR. OF RES. WORDS*)] OF SYMBOL; SSY: ARRAY [CHAR] OF SYMBOL; ROP: ARRAY [1..37(*NR. OF RES. WORDS*)] OF OPERATOR; SOP: ARRAY [CHAR] OF OPERATOR; NA: ARRAY [1..41] OF ALPHA; þ'› MN: ARRAY[0..62] OF PACKED ARRAY[1..4] OF CHAR; SNA: ARRAY [1..31] OF PACKED ARRAY [1..4] OF CHAR; CDX: ARRAY[0..62] OF -4..+4; PDX: ARRAY[1..31] OF -7..+7; ORDINT: ARRAY[CHAR] OF INTEGER; INTLABEL,MXINT10,DIGMAX: INTEGER; (*-----þa¨--------------------------------------------------------------------*) PROCEDURE ENDOFLINE; VAR LASTPOS,FREEPOS,CURRPOS,CURRNMR,F,K: INTEGER; BEGIN IF ERRINX > 0 THEN (*OUTPUT ERROR MESSAGES*) BEGIN WRITE(OUTPUT,' **** ':15); LþlµASTPOS := 0; FREEPOS := 1; FOR K := 1 TO ERRINX DO BEGIN WITH ERRLIST[K] DO BEGIN CURRPOS := POS; CURRNMR := NMR END; IF CURRPOS = LASTPOS THEN WRITE(OUTPUT,',')  ELSE BEGIN þVÐ WHILE FREEPOS < CURRPOS DO BEGIN WRITE(OUTPUT,' '); FREEPOS := FREEPOS + 1 END; WRITE(OUTPUT,'^'); LASTPOS := CURRPOS END; IF CURRNMR < 10 THEN F := 1 ELþ@-SE IF CURRNMR < 100 THEN F := 2 ELSE F := 3; WRITE(OUTPUT,CURRNMR:F); FREEPOS := FREEPOS + F + 1 END; WRITELN(OUTPUT); ERRINX := 0 END; IF LIST AND (NOT EOF(INPUT)) THEN BEGIN LINECOUNþöPT := LINECOUNT + 1; WRITE(OUTPUT,LINECOUNT:6,' ':2); IF DP THEN WRITE(OUTPUT,LC:7) ELSE WRITE(OUTPUT,IC:7); WRITE(OUTPUT,' ') END; CHCNT := 0 END (*ENDOFLINE*) ; PROCEDURE ERROR(FERRNR: INTEGER); VAR I : 0..MAXERRSET; þ’� BEGIN I := FERRNR DIV MAXERRMOD; ERRORS[I] := [FERRNR MOD MAXERRMOD] + ERRORS[I]; ERRFLAG := TRUE; IF ERRINX >= 9 THEN BEGIN ERRLIST[10].NMR := 255; ERRINX := 10; ERRORS[4] := ERRORS[4] + [15] END ELSE BEGIþ@ËN ERRINX := ERRINX + 1; ERRLIST[ERRINX].NMR := FERRNR END; ERRLIST[ERRINX].POS := CHCNT END (*ERROR*) ; PROCEDURE ERRORREPORT; VAR P4ERRORS : FILE OF SET OF 0..MAXERRBIT; I : 0..MAXERRSET; BEGIN FOR I := 0 TO MAXERþáRSET DO BEGIN P4ERRORS^ := ERRORS[I]; PUT(P4ERRORS) END END (*ERROR REPORT*); PROCEDURE INSYMBOL; (*READ NEXT BASIC SYMBOL OF SOURCE PROGRAM AND RETURN ITS DESCRIPTION IN THE GLOBAL VARIABLES SY, OP, ID, VAL AND LGþÑŠTH*) LABEL 1,2,3; VAR I,K: INTEGER; DIGIT: PACKED ARRAY [1..STRGLGTH] OF CHAR; STRING: PACKED ARRAY [1..STRGLGTH] OF CHAR; LVP: CSP;TEST: BOOLEAN; PROCEDURE NEXTCH; BEGIN IF EOL THEN BEGIN IF LIST THEN WRITELNþhG(OUTPUT); ENDOFLINE END; IF NOT EOF(INPUT) THEN BEGIN EOL := EOLN(INPUT); READ(INPUT,CH); IF LIST THEN WRITE(OUTPUT,CH); CHCNT := CHCNT + 1  END ELSE BEGIN WRITELN(OUTPUT,' *** EOF ','ENCOUNTERED'); þ) TEST := FALSE END END; PROCEDURE OPTIONS; BEGIN REPEAT NEXTCH; IF CH <> '*' THEN BEGIN IF CH = 'T' THEN BEGIN NEXTCH; PRTABLES := CH = '+' END ELSE Iþõ�F CH = 'L' THEN BEGIN NEXTCH; LIST := CH = '+'; IF NOT LIST THEN WRITELN(OUTPUT) END ELSE IF CH = 'D' THEN BEGIN NEXTCH; DEBUG := CH = '+' END ELSE þ& IF CH = 'C' THEN BEGIN NEXTCH; PRCODE := CH = '+' END; NEXTCH END UNTIL CH <> ',' END (*OPTIONS*) ; BEGIN (*INSYMBOL*) 1: REPEAT WHILE (CH = ' ') AND NOT EOL DO NEXTCH; TEST := Eþ½ OL; IF TEST THEN NEXTCH UNTIL NOT TEST; IF CHARTP[CH] = ILLEGAL THEN BEGIN SY := OTHERSY; OP := NOOP; ERROR(399); NEXTCH END ELSE CASE CH OF 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O',þ†¡'P','Q','R', 'S','T','U','V','W','X','Y','Z': BEGIN K := 0; REPEAT IF K < 8 THEN BEGIN K := K + 1; ID[K] := CH END ; NEXTCH UNTIL CHARTP[CH] IN [SPECIAL,ILLEGAL]; IF K >= KK þFýTHEN KK := K ELSE REPEAT ID[KK] := ' '; KK := KK - 1 UNTIL KK = K; FOR I := FRW[K] TO FRW[K+1] - 1 DO IF RW[I] = ID THEN BEGIN SY := RSY[I]; OP := ROP[I]; GOTO 2 END; SY := IþáˆDENT; OP := NOOP; 2: END; '0','1','2','3','4','5','6','7','8','9': BEGIN OP := NOOP; I := 0; REPEAT I := I+1; IF I<= DIGMAX THEN DIGIT[I] := CH; NEXTCH UNTIL CHARTP[CH] <> NUMBER; IF (CH = '.') OR (CH = 'E')þ•[ THEN BEGIN K := I; IF CH = '.' THEN BEGIN K := K+1; IF K <= DIGMAX THEN DIGIT[K] := CH; NEXTCH; IF CH = '.' THEN BEGIN CH := ':'; GOTO 3 END; Iþú#F CHARTP[CH] <> NUMBER THEN ERROR(201) ELSE REPEAT K := K + 1; IF K <= DIGMAX THEN DIGIT[K] := CH; NEXTCH UNTIL CHARTP[CH] <> NUMBER END; þï IF CH = 'E' THEN BEGIN K := K+1; IF K <= DIGMAX THEN DIGIT[K] := CH;  NEXTCH; IF (CH = '+') OR (CH ='-') THEN BEGIN K := K+1; IF K <= DIGMAX THEN DIGIT[þÏéK] := CH; NEXTCH END; IF CHARTP[CH] <> NUMBER THEN ERROR(201) ELSE REPEAT K := K+1; IF K <= DIGMAX THEN DIGIT[K]þ9Ü := CH; NEXTCH UNTIL CHARTP[CH] <> NUMBER END;  NEW(LVP,REEL); SY:= REALCONST; LVP^.CCLASS := REEL; WITH LVP^ DO BEGIN FOR I := 1 TO STRGLGTH DO RVAL[I] þ.:= ' '; IF K <= DIGMAX THEN FOR I := 2 TO K + 1 DO RVAL[I] := DIGIT[I-1] ELSE BEGIN ERROR(203); RVAL[2] := '0'; RVAL[3] := '.'; RVAL[4] := '0' þ END END; VAL.VALP := LVP END ELSE 3: BEGIN IF I > DIGMAX THEN BEGIN ERROR(203); VAL.IVAL := 0 END ELSE WITH VAL DO þä§ BEGIN IVAL := 0; FOR K := 1 TO I DO BEGIN IF IVAL <= MXINT10 THEN IVAL := IVAL*10+ORDINT[DIGIT[K]] ELSE BEGIN ERROR(203); IVAL := 0 þu«END END; SY := INTCONST END END END; '''': BEGIN LGTH := 0; SY := STRINGCONST; OP := NOOP; REPEAT REPEAT NEXTCH; LGTH := LGTH + 1; þ¯ IF LGTH <= STRGLGTH THEN STRING[LGTH] := CH UNTIL (EOL) OR (CH = ''''); IF EOL THEN ERROR(202) ELSE NEXTCH UNTIL CH <> ''''; LGTH := LGTH - 1; (*NOW LGTH = NR OF CHARS IN STRING*) IF LGTH = þv�1 THEN VAL.IVAL := ORD(STRING[1]) ELSE BEGIN NEW(LVP,STRG); LVP^.CCLASS:=STRG; IF LGTH > STRGLGTH THEN BEGIN ERROR(399); LGTH := STRGLGTH END; WITH LVP^ DO BEGIN SLGTH := LGTþFŒH; FOR I := 1 TO LGTH DO SVAL[I] := STRING[I] END; VAL.VALP := LVP END END; ':': BEGIN OP := NOOP; NEXTCH; IF CH = '=' THEN BEGIN SY := BECOMES; NEXTCH þ,END ELSE SY := COLON END; '.':  BEGIN OP := NOOP; NEXTCH; IF CH = '.' THEN BEGIN SY := COLON; NEXTCH END ELSE SY := PERIOD END; '<': BEGIN NEXTCH; SY := RELOP; IþdÀF CH = '=' THEN BEGIN OP := LEOP; NEXTCH END ELSE IF CH = '>' THEN BEGIN OP := NEOP; NEXTCH END ELSE OP := LTOP END; '>': BEGIN NEXTCH; SY := RELOP; IF CH = '=' THEþZ4N BEGIN OP := GEOP; NEXTCH END  ELSE OP := GTOP END; '(': BEGIN NEXTCH; IF CH = '*' THEN BEGIN NEXTCH; IF CH = '$' THEN OPTIONS; REPEAT WHILE CH <> '*' þpDDO NEXTCH; NEXTCH UNTIL CH = ')'; NEXTCH; GOTO 1 END; SY := LPARENT; OP := NOOP END; '*','+','-', '=','/',')', '[',']',',',';','^','$': BEGIN SY := SSY[CH]; OP :=þ(Õ SOP[CH]; NEXTCH END; ' ': SY := OTHERSY END (*CASE*) END (*INSYMBOL*) ; PROCEDURE ENTERID(FCP: CTP); (*ENTER ID POINTED AT BY FCP INTO THE NAME-TABLE, WHICH ON EACH DECLARATION LEVEL IS ORGANISED AS AN UNBALAþˆ»NCED BINARY TREE*) VAR NAM: ALPHA; LCP, LCP1: CTP; LLEFT: BOOLEAN; BEGIN NAM := FCP^.NAME; LCP := DISPLAY[TOP].FNAME; IF LCP = NIL THEN DISPLAY[TOP].FNAME := FCP ELSE BEGIN REPEAT LCP1 := LCP; IF LCP^.NAME = þU»NAM THEN (*NAME CONFLICT, FOLLOW RIGHT LINK*) BEGIN ERROR(101); LCP := LCP^.RLINK; LLEFT := FALSE END ELSE IF LCP^.NAME < NAM THEN BEGIN LCP := LCP^.RLINK; LLEFT := FALSE END ELSE BEGIN LCP := LþÒCP^.LLINK; LLEFT := TRUE END UNTIL LCP = NIL; IF LLEFT THEN LCP1^.LLINK := FCP ELSE LCP1^.RLINK := FCP END; FCP^.LLINK := NIL; FCP^.RLINK := NIL END (*ENTERID*) ; PROCEDURE SEARCHSECTION(FCP: CTP; VAR FCP1: CTP); (*TO FINþˆ¿D RECORD FIELDS AND FORWARD DECLARED PROCEDURE ID'S --> PROCEDURE PROCEDUREDECLARATION --> PROCEDURE SELECTOR*) LABEL 1; BEGIN WHILE FCP <> NIL DO IF FCP^.NAME = ID THEN GOTO 1 ELSE IF FCP^.NAME < ID THEN FCP := FCP^.RLINK þ‘C ELSE FCP := FCP^.LLINK; 1: FCP1 := FCP END (*SEARCHSECTION*) ; PROCEDURE SEARCHID(FIDCLS: SETOFIDS; VAR FCP: CTP); LABEL 1; VAR LCP: CTP; BEGIN FOR DISX := TOP DOWNTO 0 DO BEGIN LCP := DISPLAY[DISX].FNAME; WHILE LCþP <> NIL DO IF LCP^.NAME = ID THEN IF LCP^.KLASS IN FIDCLS THEN GOTO 1 ELSE BEGIN IF PRTERR THEN ERROR(103); LCP := LCP^.RLINK END ELSE IF LCP^.NAME < ID THþ.¼EN LCP := LCP^.RLINK ELSE LCP := LCP^.LLINK END; (*SEARCH NOT SUCCSESSFUL; SUPPRESS ERROR MESSAGE IN CASE OF FORWARD REFERENCED TYPE ID IN POINTER TYPE DEFINITION --> PROCEDURE SIMPLETYPE*) IF PRTERR THEN þ06 BEGIN ERROR(104); (*TO AVOID RETURNING NIL, REFERENCE AN ENTRY FOR AN UNDECLARED ID OF APPROPRIATE CLASS --> PROCEDURE ENTERUNDECL*) IF TYPES IN FIDCLS THEN LCP := UTYPPTR ELSE IF VARS IN FIDCLS THENþ�6 LCP := UVARPTR ELSE IF FIELD IN FIDCLS THEN LCP := UFLDPTR ELSE IF KONST IN FIDCLS THEN LCP := UCSTPTR ELSE IF PROC IN FIDCLS THEN LCP := UPRCPTR  ELSE LCP := UFCþ6TPTR; END; 1: FCP := LCP END (*SEARCHID*) ; PROCEDURE GETBOUNDS(FSP: STP; VAR FMIN,FMAX: INTEGER); (*GET INTERNAL BOUNDS OF SUBRANGE OR SCALAR TYPE*) (*ASSUME FSP<>INTPTR AND FSP<>REALPTR*) BEGIN FMIN := 0; FMAX := 0; IF FSP <>þRÉ NIL THEN WITH FSP^ DO IF FORM = SUBRANGE THEN BEGIN FMIN := MIN.IVAL; FMAX := MAX.IVAL END ELSE IF FSP = CHARPTR THEN BEGIN FMIN := ORDMINCHAR; FMAX := ORDMAXCHAR END ELSE IF þ¦”FCONST <> NIL THEN FMAX := FCONST^.VALUES.IVAL END (*GETBOUNDS*) ; FUNCTION ALIGNQUOT(FSP: STP): INTEGER; BEGIN ALIGNQUOT := 1; IF FSP <> NIL THEN WITH FSP^ DO CASE FORM OF SCALAR: IF FSP=INTPTR THEN Aþ;,LIGNQUOT := INTAL ELSE IF FSP=BOOLPTR THEN ALIGNQUOT := BOOLAL ELSE IF SCALKIND=DECLARED THEN ALIGNQUOT := INTAL ELSE IF FSP=CHARPTR THEN ALIGNQUOT := CHARAL ELSE IF FSP=REALPTþ‚YR THEN ALIGNQUOT := REALAL ELSE (*PARMPTR*) ALIGNQUOT := PARMAL; SUBRANGE: ALIGNQUOT := ALIGNQUOT(RANGETYPE); POINTER: ALIGNQUOT := ADRAL; POWER: ALIGNQUOT := SETAL; FILES: ALIGNQUOT := FILþ|FEAL; ARRAYS: ALIGNQUOT := ALIGNQUOT(AELTYPE); RECORDS: ALIGNQUOT := RECAL; VARIANT,TAGFLD: ERROR(501) END END (*ALIGNQUOT*); PROCEDURE ALIGN(FSP: STP; VAR FLC: INTEGER); VAR K,L: INTEGER; BEGIN K := Aþ�ìLIGNQUOT(FSP); L := FLC-1; FLC := L + K - (K + L) MOD K (*CORRECTION TO ALIGN (K + L) AS MOD ONLY TRUE FOR +VE INTS*) END (*ALIGN*); PROCEDURE GENLABEL(VAR NXTLAB: INTEGER); BEGIN INTLABEL := INTLABEL + 1; NXTLAB := INTLABEL ENDþVû (*GENLABEL*); PROCEDURE BLOCK(FSYS: SETOFSYS; FSY: SYMBOL; FPROCP: CTP; NOTEXTDEC,EXTN : BOOLEAN); VAR LSY: SYMBOL; TEST: BOOLEAN; PLOCFP,FLOCFP,LOCFP : EXTFILEP; RANDOMFLAG : BOOLEAN; PARMSUM,PARMNO : INTEGER; PROCEDURE SKIP(FSYS: SþFlETOFSYS); (*SKIP INPUT STRING UNTIL RELEVANT SYMBOL FOUND*) BEGIN IF NOT EOF(INPUT) THEN BEGIN WHILE NOT(SY IN FSYS) AND (NOT EOF(INPUT)) DO INSYMBOL; IF NOT (SY IN FSYS) THEN INSYMBOL END END (*SKIP*) ; PþÜBROCEDURE CONSTANT(FSYS: SETOFSYS; VAR FSP: STP; VAR FVALU: VALU); VAR LSP: STP; LCP: CTP; SIGN: (NONE,POS,NEG); LVP: CSP; I: 2..STRGLGTH; BEGIN LSP := NIL; FVALU.IVAL := 0; IF NOT(SY IN CONSTBEGSYS) THEN BEGIN ERROR(50); SþÜUKIP(FSYS+CONSTBEGSYS) END; IF SY IN CONSTBEGSYS THEN BEGIN IF SY = STRINGCONSTSY THEN BEGIN IF LGTH = 1 THEN LSP := CHARPTR ELSE BEGIN NEW(LSP,ARRAYS); þŒE WITH LSP^ DO BEGIN AELTYPE := CHARPTR; INXTYPE := NIL; SIZE := LGTH*CHARSIZE; FORM := ARRAYS  END END; FVALU := VAL; INSYMBOL END þâðELSE BEGIN SIGN := NONE; IF (SY = ADDOP) AND (OP IN [PLUS,MINUS]) THEN BEGIN IF OP = PLUS THEN SIGN := POS ELSE SIGN := NEG; INSYMBOL END; IF SY = IDENTþ7) THEN BEGIN SEARCHID([KONST],LCP); WITH LCP^ DO BEGIN LSP := IDTYPE; FVALU := VALUES END;  IF SIGN <> NONE THEN IF LSP = INTPTR THEN BEGIN IF SþgGIGN = NEG THEN FVALU.IVAL := -FVALU.IVAL END ELSE IF LSP = REALPTR THEN BEGIN IF SIGN = NEG THEN BEGIN NEW(LVP,REEL); þm» IF FVALU.VALP^.RVAL[1] = ' ' THEN LVP^.RVAL[1] := '+' ELSE LVP^.RVAL[1] := '-'; FOR I := 2 TO STRGLGTH DO LVP^.RVAL[I] :þšk= FVALU.VALP^.RVAL[I]; FVALU.VALP := LVP; END END ELSE ERROR(105); INSYMBOL; END ELSE þ¶¹ IF SY = INTCONST THEN BEGIN IF SIGN = NEG THEN VAL.IVAL := -VAL.IVAL; LSP := INTPTR; FVALU := VAL; INSYMBOL END ELSE IF SY = REALCONST THEN BEGIþ?ÈN IF SIGN = NEG THEN VAL.VALP^.RVAL[1] := '-'; LSP := REALPTR; FVALU := VAL; INSYMBOL END ELSE BEGIN ERROR(106); SKIP(FSYS) END END; IF NOT (SY IN FSYS) TþB¤HEN BEGIN ERROR(6); SKIP(FSYS) END END; FSP := LSP END (*CONSTANT*) ; FUNCTION EQUALBOUNDS(FSP1,FSP2: STP): BOOLEAN; VAR LMIN1,LMIN2,LMAX1,LMAX2: INTEGER; BEGIN IF (FSP1=NIL) OR (FSP2=NIL) THEN EQUALBOUNþ2ÔDS := TRUE ELSE BEGIN GETBOUNDS(FSP1,LMIN1,LMAX1); GETBOUNDS(FSP1,LMIN2,LMAX2); EQUALBOUNDS := (LMIN1=LMIN2) AND (LMAX1=LMAX2) END END (*EQUALBOUNDS*) ; FUNCTION COMPTYPES(FSP1,FSP2: STP) : BOOLEþr°AN; (*DECIDE WHETHER STRUCTURES POINTED AT BY FSP1 AND FSP2 ARE COMPATIBLE*) VAR NXT1,NXT2: CTP; COMP: BOOLEAN; LTESTP1,LTESTP2 : TESTP; BEGIN IF FSP1 = FSP2 THEN COMPTYPES := TRUE ELSE IF (FSP1 <> NIL) AND (FSP2þK <> NIL) THEN IF FSP1^.FORM = FSP2^.FORM THEN CASE FSP1^.FORM OF SCALAR: COMPTYPES := FALSE; (* IDENTICAL SCALARS DECLARED ON DIFFERENT LEVELS ARE NOT RECOGNIZED TO BE COMþ^’PATIBLE*) SUBRANGE: COMPTYPES := COMPTYPES(FSP1^.RANGETYPE,FSP2^.RANGETYPE); POINTER: BEGIN COMP := FALSE; LTESTP1 := GLOBTESTP; LTESTP2 := GLOBTESTP; þ­ WHILE LTESTP1 <> NIL DO WITH LTESTP1^ DO BEGIN IF (ELT1 = FSP1^.ELTYPE) AND (ELT2 = FSP2^.ELTYPE) THEN COMP := TRUE; þìZ LTESTP1 := LASTTESTP END; IF NOT COMP THEN BEGIN NEW(LTESTP1); WITH LTESTP1^ DO BEGIN ELT1 := FSP1^.ELTYPE; þüÍELT2 := FSP2^.ELTYPE; LASTTESTP := GLOBTESTP END; GLOBTESTP := LTESTP1; COMP := COMPTYPES(FSP1^.ELTYPE,FSP2^.ELTYPE) END; þ�Á COMPTYPES := COMP; GLOBTESTP := LTESTP2 END; POWER: COMPTYPES := COMPTYPES(FSP1^.ELSET,FSP2^.ELSET); ARRAYS: BEGIN COMP := COMPTYPES(FSP1^.AELTYPE,FSPþë`2^.AELTYPE) AND COMPTYPES(FSP1^.INXTYPE,FSP2^.INXTYPE); COMPTYPES := COMP AND EQUALBOUNDS(FSP1^.INXTYPE,FSP2^.INXTYPE) END; RECORDS: BEGIN NXT1 := FSþ|=P1^.FSTFLD; NXT2 := FSP2^.FSTFLD; COMP:=TRUE;  WHILE (NXT1 <> NIL) AND (NXT2 <> NIL) DO BEGIN COMP:=COMP AND COMPTYPES(NXT1^.IDTYPE,NXT2^.IDTYPE); NXT1 := NXT1^.NEXT; NXT2 := NXT2^.NEXT þ¤œ END; COMPTYPES := COMP AND (NXT1 = NIL) AND (NXT2 = NIL) AND(FSP1^.RECVAR = NIL)AND(FSP2^.RECVAR = NIL) END; (*IDENTICAL RECORDS ARE RECOGNIZED TO BE COMPATIBLE þ c IFF NO VARIANTS OCCUR*)  FILES: COMPTYPES := COMPTYPES(FSP1^.FILTYPE,FSP2^.FILTYPE) END (*CASE*) ELSE (*FSP1^.FORM <> FSP2^.FORM*) IF FSP1^.FORM = SUBRANGE THEN COMPTYPþ»zES := COMPTYPES(FSP1^.RANGETYPE,FSP2) ELSE IF FSP2^.FORM = SUBRANGE THEN COMPTYPES := COMPTYPES(FSP1,FSP2^.RANGETYPE) ELSE COMPTYPES := FALSE ELSE COMPTYPES := TRUE END (*COMPTYPES*) ; þF FUNCTION STRING(FSP: STP) : BOOLEAN; BEGIN STRING := FALSE; IF FSP <> NIL THEN IF FSP^.FORM = ARRAYS THEN IF COMPTYPES(FSP^.AELTYPE,CHARPTR) THEN STRING := TRUE END (*STRING*) ; PROCEDURE TYP(FSYS: SETOFSYS; VAR FSP: þgSTP; VAR FSIZE: ADDRRANGE); VAR LSP,LSP1,LSP2: STP; OLDTOP: DISPRANGE; LCP: CTP; LSIZE,DISPL: ADDRRANGE; LMIN,LMAX: INTEGER; PROCEDURE SIMPLETYPE(FSYS:SETOFSYS; VAR FSP:STP; VAR FSIZE:ADDRRANGE); VAR LSP,LSP1: STP; LCP,LCP1: þšíCTP; TTOP: DISPRANGE; LCNT: INTEGER; LVALU: VALU; BEGIN FSIZE := 1; IF NOT (SY IN SIMPTYPEBEGSYS) THEN BEGIN ERROR(1); SKIP(FSYS + SIMPTYPEBEGSYS) END; IF SY IN SIMPTYPEBEGSYS THEN BEGIN IF þÎSY = LPARENT THEN BEGIN TTOP := TOP; (*DECL. CONSTS LOCAL TO INNERMOST BLOCK*) WHILE DISPLAY[TOP].OCCUR <> BLCK DO TOP := TOP - 1; NEW(LSP,SCALAR,DECLARED); WITH LSP^ DO BEGIþ”N SIZE := INTSIZE; FORM := SCALAR; SCALKIND := DECLARED END; LCP1 := NIL; LCNT := 0; REPEAT INSYMBOL; IF SY = IDENT THEN BEGIN NEW(LCP,KONST); þ×H WITH LCP^ DO BEGIN NAME := ID; IDTYPE := LSP; NEXT := LCP1; VALUES.IVAL := LCNT; KLASS := KONST END; ENTERID(LCP); LCNT :þï = LCNT + 1; LCP1 := LCP; INSYMBOL END ELSE ERROR(2); IF NOT (SY IN FSYS + [COMMA,RPARENT]) THEN BEGIN ERROR(6); SKIP(FSYS + [COMMA,RPARENT]) END þ0È UNTIL SY <> COMMA; LSP^.FCONST := LCP1; TOP := TTOP; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END ELSE BEGIN IF SY = IDENT THEN BEGIN SEARCHID([þâTYPES,KONST],LCP); INSYMBOL; IF LCP^.KLASS = KONST THEN BEGIN NEW(LSP,SUBRANGE); WITH LSP^, LCP^ DO BEGIN RANGETYPE := IDTYPE; FORM := SUBRANGE;þ!% IF STRING(RANGETYPE) THEN BEGIN ERROR(148); RANGETYPE := NIL END; MIN := VALUES; SIZE := INTSIZE END;  IF SY = COLON THEþœœN INSYMBOL ELSE ERROR(5); CONSTANT(FSYS,LSP1,LVALU); LSP^.MAX := LVALU; IF LSP^.RANGETYPE <> LSP1 THEN ERROR(107) END ELSE þ–H BEGIN LSP := LCP^.IDTYPE; IF LSP <> NIL THEN FSIZE := LSP^.SIZE END END (*SY = IDENT*) ELSE BEGIN NEW(LSP,SUBRANGE); LSP^.FORM := SUBRANGE; þm CONSTANT(FSYS + [COLON],LSP1,LVALU); IF STRING(LSP1) THEN BEGIN ERROR(148); LSP1 := NIL END; WITH LSP^ DO BEGIN RANGETYPE:=LSP1; MIN:=LVALU; SIZE:=INTSIZE END; þì¢ IF SY = COLON THEN INSYMBOL ELSE ERROR(5); CONSTANT(FSYS,LSP1,LVALU); LSP^.MAX := LVALU; IF LSP^.RANGETYPE <> LSP1 THEN ERROR(107)  END; IF LSP <> NILþ· THEN WITH LSP^ DO IF FORM = SUBRANGE THEN IF RANGETYPE <> NIL THEN IF RANGETYPE = REALPTR THEN ERROR(399) ELSE IF MIN.IVAþâãL > MAX.IVAL THEN ERROR(102) END; FSP := LSP; IF NOT (SY IN FSYS) THEN BEGIN ERROR(6); SKIP(FSYS) END END ELSE FSP := NIL  END (*SIMPLETYPE*) ; PROCEDURE FIELDLIST(FSYS: þŸSETOFSYS; VAR FRECVAR: STP); VAR LCP,LCP1,NXT,NXT1: CTP; LSP,LSP1,LSP2,LSP3,LSP4: STP; MINSIZE,MAXSIZE,LSIZE: ADDRRANGE; LVALU: VALU; BEGIN NXT1 := NIL; LSP := NIL; IF NOT (SY IN (FSYS+[IDENT,CASESY])) THEN BEGINþþÕ ERROR(19); SKIP(FSYS + [IDENT,CASESY]) END; WHILE SY = IDENT DO BEGIN NXT := NXT1; REPEAT IF SY = IDENT THEN BEGIN NEW(LCP,FIELD); WITH LCP^ DO BEGIN NAME :=þ�d ID; IDTYPE := NIL; NEXT := NXT; KLASS := FIELD END; NXT := LCP; ENTERID(LCP); INSYMBOL END ELSE ERROR(2); IF NOT (SþÿiY IN [COMMA,COLON]) THEN BEGIN ERROR(6); SKIP(FSYS + [COMMA,COLON,SEMICOLON,CASESY]) END; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN INSYMþ­GBOL ELSE ERROR(5); TYP(FSYS + [CASESY,SEMICOLON],LSP,LSIZE); WHILE NXT <> NXT1 DO WITH NXT^ DO BEGIN ALIGN(LSP,DISPL); ÿP4COMPILE2.ûNNþmž IDTYPE := LSP; FLDADDR := DISPL; NXT := NEXT; DISPL := DISPL + LSIZE END; NXT1 := LCP; IF SY = SEMICOLON THEN BEGIN INSYMBOL;  IF NOT (SY IN [IDENT,CASþ²#ESY]) THEN BEGIN ERROR(19); SKIP(FSYS + [IDENT,CASESY]) END END END (*WHILE*); NXT := NIL; WHILE NXT1 <> NIL DO WITH NXT1^ DO BEGIN LCP := NEXT; NEXT := NXT; NXT := NXT1; NXT1 þп:= LCP END; IF SY = CASESY THEN BEGIN NEW(LSP,TAGFLD); WITH LSP^ DO BEGIN TAGFIELDP := NIL; FSTVAR := NIL; FORM:=TAGFLD END; FRECVAR := LSP; INSYMBOL; IF SY = IDENT THEN þÙÖ BEGIN NEW(LCP,FIELD); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; KLASS:=FIELD; NEXT := NIL; FLDADDR := DISPL END; ENTERID(LCP); INSYMBOL; þA± IF SY = COLON THEN INSYMBOL ELSE ERROR(5); IF SY = IDENT THEN BEGIN SEARCHID([TYPES],LCP1); LSP1 := LCP1^.IDTYPE;  IF LSP1 <> NIL THEN BEGIN ALIGN(LþPCP^.IDTYPE,DISPL); LCP^.FLDADDR := DISPL; DISPL := DISPL+LSP1^.SIZE; IF (LSP1^.FORM <= SUBRANGE) OR STRING(LSP1) THEN BEGIN IF COMPTYPES(REALPTR,LSP1) THEN ERþ ROR(109) ELSE IF STRING(LSP1) THEN ERROR(399); LCP^.IDTYPE := LSP1; LSP^.TAGFIELDP := LCP; END  ELSE ERROR(110); END; þÛ INSYMBOL; END ELSE BEGIN ERROR(2); SKIP(FSYS + [OFSY,LPARENT]) END END ELSE BEGIN ERROR(2); SKIP(FSYS + [OFSY,LPARENT]) END; LSP^.SIZE := DISPL; IF SY = OFSY THEN INþD–SYMBOL ELSE ERROR(8); LSP1 := NIL; MINSIZE := DISPL; MAXSIZE := DISPL; REPEAT LSP2 := NIL; IF NOT (SY IN [SEMICOLON,ENDSY]) THEN  BEGIN REPEAT CONSTANT(FSYS + [COMMA,COLON,LPARENT],LSP3,LVALUþqË); IF LSP^.TAGFIELDP <> NIL THEN IF NOT COMPTYPES(LSP^.TAGFIELDP^.IDTYPE,LSP3)THEN ERROR(111); NEW(LSP3,VARIANT); WITH LSP3^ DO BEGIN NXTVAR := LSP1; SUBVAR := LSP2; VARVAL þ›9:= LVALU; FORM := VARIANT END; LSP4 := LSP1; WHILE LSP4 <> NIL DO WITH LSP4^ DO BEGIN IF VARVAL.IVAL = LVALU.IVAL THEN ERROR(1þ†Ä78); LSP4 := NXTVAR END; LSP1 := LSP3; LSP2 := LSP3; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN INSYMBOþåKL ELSE ERROR(5); IF SY = LPARENT THEN INSYMBOL ELSE ERROR(9); FIELDLIST(FSYS + [RPARENT,SEMICOLON],LSP2); IF DISPL > MAXSIZE THEN MAXSIZE := DISPL; WHILE LSP3 <> NIL DO BEGIN LSP4 := LþÁáSP3^.SUBVAR; LSP3^.SUBVAR := LSP2; LSP3^.SIZE := DISPL; LSP3 := LSP4 END; IF SY = RPARENT THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [SEMICOLON]) THEN þ˜› BEGIN ERROR(6); SKIP(FSYS + [SEMICOLON]) END END ELSE ERROR(4); END;  TEST := SY <> SEMICOLON; IF NOT TEST THEN BEGIN DISPL := MINSIZE; þ¶ INSYMBOL END UNTIL TEST; DISPL := MAXSIZE; LSP^.FSTVAR := LSP1; END ELSE FRECVAR := NIL END (*FIELDLIST*) ; BEGIN (*TYP*) IF NOT (SY IN TYPEBEGSYS) THEN BEGIþÕ#N ERROR(10); SKIP(FSYS + TYPEBEGSYS) END; IF SY IN TYPEBEGSYS THEN BEGIN IF SY IN SIMPTYPEBEGSYS THEN SIMPLETYPE(FSYS,FSP,FSIZE) ELSE (*^*) IF SY = ARROW THEN BEGIN NEW(LSP,POINTER); FSP := LSP; þãd WITH LSP^ DO BEGIN ELTYPE := NIL; SIZE := PTRSIZE; FORM:=POINTER END; INSYMBOL; IF SY = IDENT THEN BEGIN PRTERR := FALSE; (*NO ERROR IF SEARCH NOT SUCCESSFUL*) þ  SEARCHID([TYPES],LCP); PRTERR := TRUE; IF LCP = NIL THEN (*FORWARD REFERENCED TYPE ID*)  BEGIN NEW(LCP,TYPES); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := LSP; þ¦® NEXT := FWPTR; KLASS := TYPES END; FWPTR := LCP END ELSE BEGIN IF LCP^.IDTYPE <> NIL THEN þ¯a IF LCP^.IDTYPE^.FORM = FILES THEN ERROR(108) ELSE LSP^.ELTYPE := LCP^.IDTYPE END; INSYMBOL; END ELSE ERROR(2); END þE¯ ELSE BEGIN IF SY = PACKEDSY THEN BEGIN INSYMBOL; IF NOT (SY IN TYPEDELS) THEN BEGIN ERROR(10); SKIP(FSYS + TYPEDELS) þ׆ END END; (*ARRAY*) IF SY = ARRAYSY THEN BEGIN INSYMBOL; IF SY = LBRACK THEN INSYMBOL ELSE ERROR(11); LSP1 := NIL; REPEAT NEW(LSP,ARRAYS); þ2{ WITH LSP^ DO BEGIN AELTYPE := LSP1; INXTYPE := NIL; FORM:=ARRAYS END; LSP1 := LSP; SIMPLETYPE(FSYS + [COMMA,RBRACK,OFSY],LSP2,LSIZE); LSP1^.SIZE := LSIþbêZE; IF LSP2 <> NIL THEN IF LSP2^.FORM <= SUBRANGE THEN BEGIN IF LSP2 = REALPTR THEN BEGIN ERROR(109); LSP2 := NIL END þp� ELSE IF LSP2 = INTPTR THEN BEGIN ERROR(149); LSP2 := NIL END; LSP^.INXTYPE := LSP2 END ELSE BEGIþ4N ERROR(113); LSP2 := NIL END; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = RBRACK THEN INSYMBOL ELSE ERROR(12); IF SY = OFSY THENþfœ INSYMBOL ELSE ERROR(8); TYP(FSYS,LSP,LSIZE); REPEAT WITH LSP1^ DO BEGIN LSP2 := AELTYPE; AELTYPE := LSP; IF INXTYPE <> NIL THEN þ<» BEGIN GETBOUNDS(INXTYPE,LMIN,LMAX);  IF AELTYPE = CHARPTR THEN LSIZE := CHARSIZE ELSE ALIGN(LSP,LSIZE); LSIZE := LSIZE*(LMAX - LMIN + 1); þßA SIZE := LSIZE END END; LSP := LSP1; LSP1 := LSP2 UNTIL LSP1 = NIL END ELSE (*RECORD*) IF SY = RECORDSYþÝ THEN BEGIN INSYMBOL;  OLDTOP := TOP; IF TOP < DISPLIMIT THEN BEGIN TOP := TOP + 1; WITH DISPLAY[TOP] DO BEGIN FNAMþñE := NIL; FLABEL := NIL; OCCUR := REC END END ELSE ERROR(250); DISPL := 0; þòå FIELDLIST(FSYS-[SEMICOLON]+[ENDSY],LSP1); NEW(LSP,RECORDS); WITH LSP^ DO BEGIN FSTFLD := DISPLAY[TOP].FNAME; RECVAR := LSP1; SIZE := DISPL; FORM := RECORDS þ0( END; TOP := OLDTOP; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13) END ELSE (*SET*) IF SY = SETSY THEN BEGIN INSYMBOL; þMž  IF SY = OFSY THEN INSYMBOL ELSE ERROR(8); SIMPLETYPE(FSYS,LSP1,LSIZE); IF LSP1 <> NIL THEN IF LSP1^.FORM > SUBRANGE THEN BEGIN ERROR(1þ”á15); LSP1 := NIL END ELSE IF LSP1 = REALPTR THEN ERROR(114); NEW(LSP,POWER); WITH LSP^ DO BEGIN ELSET:=LSP1; SIZE:=SETSIZE; FORMþëì:=POWER END; END ELSE BEGIN IF SY = RANDOMSY THEN BEGIN INSYMBOL; RANDOMFLAG := TRUE END ELSE RANDþßâOMFLAG := FALSE; (*FILE*) IF SY = FILESY THEN BEGIN INSYMBOL; IF SY = OFSY THEN INSYMBOL ELSE ERROR(8); IF SY<> FILESY THEN TYP(FSYS,LSP1,LSIZE) þ(t ELSE BEGIN ERROR(121); SKIP(FSYS+TYPEBEGSYS) END; NEW(LSP,FILES); WITH LSP^ DO BEGIN FILTYPE:=LSP1; FORM:=FILES; SIZE := LSþ‰IZE; RANDOMFILE := RANDOMFLAG END END; END; FSP := LSP END; IF NOT (SY IN FSYS) THEN BEGIN ERROR(6); SKIP(FSYS) END END ELSE FSP := NIL; þÞ; IF FSP = NIL THEN FSIZE := 1 ELSE FSIZE := FSP^.SIZE END (*TYP*) ; PROCEDURE LABELDECLARATION; VAR LLP: LBP; REDEF: BOOLEAN; LBNAME: INTEGER; BEGIN REPEAT IF SY = INTCONST THEN WITH DISPLAY[TOP] DO BEþôçGIN LLP := FLABEL; REDEF := FALSE; WHILE (LLP <> NIL) AND NOT REDEF DO IF LLP^.LABVAL <> VAL.IVAL THEN LLP := LLP^.NEXTLAB ELSE BEGIN REDEF := TRUE; ERROR(166) END;  IF NOT REDEF þÒæTHEN BEGIN NEW(LLP); WITH LLP^ DO BEGIN LABVAL := VAL.IVAL; GENLABEL(LBNAME); DEFINED := FALSE; NEXTLAB := FLABEL; LABNAME := LBNAME END; FLABþžEL := LLP END; INSYMBOL END ELSE ERROR(15); IF NOT ( SY IN FSYS + [COMMA, SEMICOLON] ) THEN BEGIN ERROR(6); SKIP(FSYS+[COMMA,SEMICOLON]) END; TEST := SY <> COMMA; IF NOT TEþ€,ST THEN INSYMBOL UNTIL TEST; IF SY = SEMICOLON THEN INSYMBOL ELSE ERROR(14) END (* LABELDECLARATION *) ; PROCEDURE CONSTDECLARATION; VAR LCP: CTP; LSP: STP; LVALU: VALU; BEGIN IF SY <> IDENT THEN BEGIN ERROR(2);þN) SKIP(FSYS + [IDENT]) END; WHILE SY = IDENT DO BEGIN NEW(LCP,KONST); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; NEXT := NIL; KLASS:=KONST END; INSYMBOL;  IF (SY = RELOP) AND (OP = EQOP) THEN INSYMBOþœ}L ELSE ERROR(16); CONSTANT(FSYS + [SEMICOLON],LSP,LVALU); ENTERID(LCP); LCP^.IDTYPE := LSP; LCP^.VALUES := LVALU; IF SY = SEMICOLON THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT]) THEN þ7° BEGIN ERROR(6); SKIP(FSYS + [IDENT]) END END ELSE ERROR(14) END END (*CONSTDECLARATION*) ; PROCEDURE TYPEDECLARATION; VAR LCP,LCP1,LCP2: CTP; LSP: STP; LSIZE: ADDRRANGE; BEGIN IF SY <> IDþŸ”ENT THEN BEGIN ERROR(2); SKIP(FSYS + [IDENT]) END; WHILE SY = IDENT DO BEGIN NEW(LCP,TYPES); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; KLASS := TYPES END; INSYMBOL; IF (SY = RELOP) AND (OPþÍ« = EQOP) THEN INSYMBOL ELSE ERROR(16); TYP(FSYS + [SEMICOLON],LSP,LSIZE); ENTERID(LCP); LCP^.IDTYPE := LSP; (*HAS ANY FORWARD REFERENCE BEEN SATISFIED:*) LCP1 := FWPTR; WHILE LCP1 <> NIL DO þâ} BEGIN IF LCP1^.NAME = LCP^.NAME THEN BEGIN LCP1^.IDTYPE^.ELTYPE := LCP^.IDTYPE; IF LCP1 <> FWPTR THEN LCP2^.NEXT := LCP1^.NEXT ELSE FWPTR := LCP1^.NEXT; þ/ý END; LCP2 := LCP1; LCP1 := LCP1^.NEXT END; IF SY = SEMICOLON THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT]) THEN BEGIN ERROR(6); SKIP(FSYS + [IDENT]) END ENDþŒ„ ELSE ERROR(14) END; IF FWPTR <> NIL THEN BEGIN ERROR(117); WRITELN(OUTPUT); REPEAT WRITELN(OUTPUT,' TYPE-ID ',FWPTR^.NAME); FWPTR := FWPTR^.NEXT UNTIL FWPTR = NIL; IF NOT EOL THEN WþÈRITE(OUTPUT,' ': CHCNT+16) END END (*TYPEDECLARATION*) ; PROCEDURE VARDECLARATION; VAR LCP,NXT: CTP; LSP: STP; LSIZE: ADDRRANGE; BEGIN NXT := NIL; REPEAT REPEAT IF SY = IDENT THEN BEGIN NEW(LCPþ”A,VARS); WITH LCP^ DO BEGIN NAME := ID; NEXT := NXT; KLASS := VARS; IDTYPE := NIL; VKIND := ACTUAL; VLEV := LEVEL END; ENTERID(LCP); NXT := LCP; INSYMBOþLAL; END ELSE ERROR(2); IF NOT (SY IN FSYS + [COMMA,COLON] + TYPEDELS) THEN BEGIN ERROR(6); SKIP(FSYS+[COMMA,COLON,SEMICOLON]+TYPEDELS) END; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL þNÜ UNTIL TEST; IF SY = COLON THEN INSYMBOL ELSE ERROR(5); TYP(FSYS + [SEMICOLON] + TYPEDELS,LSP,LSIZE); IF LSP^.FORM = FILES THEN (*MACHINE DEPENDENT*) IF LSIZE > 510 THEN ERROR(399) ELSE Iþ”úF LSP^.RANDOMFILE THEN BEGIN IF LSIZE > 126 THEN LSIZE := 512 ELSE LSIZE := 128  END; WHILE NXT <> NIL DO WITH NXT^ DO BEGIN ALIGN(LSP,LC); IF LSþñ?P^.FORM = FILES THEN BEGIN LC := LC+4; (*SPACE FOR FLAGS*) LOCFP := FEXTFILEP; TEST := TRUE; WHILE ((LOCFP <> NIL) AND TEST) DO IF LOCFP^.FILENAME = NXT^.NAME THEN TEST :=þªz FALSE ELSE LOCFP := LOCFP^.NEXTFILE; IF LOCFP <> NIL THEN (*DEAL WITH EXTERNAL FILES*) LOCFP^.FTYPE := NXT ELSE (* IT WAS AN INTERNAL þþFILE*) BEGIN NEW(PLOCFP); WITH PLOCFP^ DO BEGIN FILENAME := NXT^.NAME; NEXTFILE := FLOCFP; FTYPE := Nþ ­XT; END; FLOCFP := PLOCFP END;  END; IDTYPE := LSP; VADDR := LC; LC := LC + LSIZE; NXT := NEXT END; IF SY = SEMICOLONþÚ4 THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT]) THEN BEGIN ERROR(6); SKIP(FSYS + [IDENT]) END END ELSE ERROR(14) UNTIL (SY <> IDENT) AND NOT (SY IN TYPEDELS); IF FWPTR <> NIL THEN þ ¦ BEGIN ERROR(117); WRITELN(OUTPUT); REPEAT WRITELN(OUTPUT,' TYPE-ID ',FWPTR^.NAME);  FWPTR := FWPTR^.NEXT UNTIL FWPTR = NIL; IF NOT EOL THEN WRITE(OUTPUT,' ': CHCNT+16) END END (*VARDECLARATION*) ; þ ç PROCEDURE PROCDECLARATION(FSY: SYMBOL); VAR OLDLEV: 0..MAXLEVEL; LSY: SYMBOL; LCP,LCP1: CTP; LSP: STP; FORW: BOOLEAN; OLDTOP: DISPRANGE; PARCNT: INTEGER; LLC,LCM: ADDRRANGE; LBNAME: INTEGER; MARKP: ^INTEGER; PROCEDURE PARAþÈlMETERLIST(FSY: SETOFSYS; VAR FPAR: CTP); VAR LCP,LCP1,LCP2,LCP3: CTP; LSP: STP; LKIND: IDKIND; LLC: ADDRRANGE; COUNT,LSIZE: INTEGER; BEGIN LCP1 := NIL; IF NOT (SY IN FSY + [LPARENT]) THEN BEGIN ERROR(7); SKIP(FSYS þ€–+ FSY + [LPARENT]) END; IF SY = LPARENT THEN BEGIN IF FORW THEN ERROR(119); INSYMBOL; IF NOT (SY IN [IDENT,VARSY,PROCSY,FUNCSY]) THEN BEGIN ERROR(7); SKIP(FSYS + [IDENT,RPARENT]) END; WHILþ*TE SY IN [IDENT,VARSY,PROCSY,FUNCSY] DO BEGIN IF SY = PROCSY THEN BEGIN ERROR(399); REPEAT INSYMBOL; IF SY = IDENT THEN BEGIN NEW(LCP,PROC,DECLARþÚrED,FORMAL); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; NEXT := LCP1; PFLEV := LEVEL (*BEWARE OF PARAMETER PROCEDURES*); KLASS:=PROC;PFDECKIþö�ND:=DECLARED;PFKIND:=FORMAL END;  ENTERID(LCP); LCP1 := LCP; ALIGN(PARMPTR,LC); (*LC := LC + SOME SIZE *) þÅX INSYMBOL END ELSE ERROR(2); IF NOT (SY IN FSYS + [COMMA,SEMICOLON,RPARENT]) THEN BEGIN ERROR(7);SKIP(FSYS+[COMMA,SEMICOLON,RPARENT])END UþpWNTIL SY <> COMMA END  ELSE BEGIN IF SY = FUNCSY THEN BEGIN ERROR(399); LCP2 := NIL; REPEAT INSYMBOL; IF SY = IDENþ'wT THEN BEGIN NEW(LCP,FUNC,DECLARED,FORMAL); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; NEXT := LCP2; PFLEV := LEVEL (*BEWARE PARAþ“M FUNCS*);  KLASS:=FUNC;PFDECKIND:=DECLARED; PFKIND:=FORMAL END; ENTERID(LCP); LCP2 := LCP; þ. ALIGN(PARMPTR,LC); (*LC := LC + SOME SIZE*) INSYMBOL; END; IF NOT (SY IN [COMMA,COLON] + FSYS) THEN þ�† BEGIN ERROR(7);SKIP(FSYS+[COMMA,SEMICOLON,RPARENT]) END UNTIL SY <> COMMA; IF SY = COLON THEN BEGIN INSYMBOL; IF SY = IþjÐDENT THEN BEGIN SEARCHID([TYPES],LCP); LSP := LCP^.IDTYPE; IF LSP <> NIL THEN IF NOT(LSP^.FORM IN[SCALAR,SUBRANGE,POINTER]) þþH  THEN BEGIN ERROR(120); LSP := NIL END; LCP3 := LCP2; WHILE LCP2 <> NIL DO BEGIN LCP2^.IDTYPE := LSP; LCP := LCP2; þ·¹ LCP2 := LCP2^.NEXT END; LCP^.NEXT := LCP1; LCP1 := LCP3; INSYMBOL END ELSE ERþ‰\ROR(2); IF NOT (SY IN FSYS + [SEMICOLON,RPARENT]) THEN BEGIN ERROR(7);SKIP(FSYS+[SEMICOLON,RPARENT])END END ELSE ERROR(5) END þIA ELSE BEGIN IF SY = VARSY THEN BEGIN LKIND := FORMAL; INSYMBOL END ELSE LKIND := ACTUAL; LCP2 := NIL;  þ�N COUNT := 0; REPEAT IF SY = IDENT THEN BEGIN NEW(LCP,VARS); WITH LCP^ DO BEGIN NAME:=ID; IDTYPE:=NIL; KLASS:þvÉ=VARS; VKIND := LKIND; NEXT := LCP2; VLEV := LEVEL; END; ENTERID(LCP); LCP2 := LCP; COUNT := COUNT+1;  þ > INSYMBOL; END; IF NOT (SY IN [COMMA,COLON] + FSYS) THEN BEGIN ERROR(7);SKIP(FSYS+[COMMA,SEMICOLON,RPARENT]) END; TEST :þÕ= SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN BEGIN INSYMBOL; IF SY = IDENT THEN þ©± BEGIN SEARCHID([TYPES],LCP); LSP := LCP^.IDTYPE; LSIZE := PTRSIZE; IF LSP <> NIL THEN IF LKIND=ACTUAL THEN þ¬� IF LSP^.FORM<=POWER THEN LSIZE := LSP^.SIZE ELSE IF LSP^.FORM=FILES THEN ERROR(121); ALIGN(PARMPTR,LSIZE);  LCP3 := LCP2; þ1° ALIGN(PARMPTR,LC); LC := LC+COUNT*LSIZE; LLC := LC; WHILE LCP2 <> NIL DO BEGIN LCP := LCP2; þ– WITH LCP2^ DO BEGIN IDTYPE := LSP; LLC := LLC-LSIZE; VADDR := LLC; END; þA/ LCP2 := LCP2^.NEXT END; LCP^.NEXT := LCP1; LCP1 := LCP3; INSYMBOL END þ£ù ELSE ERROR(2); IF NOT (SY IN FSYS + [SEMICOLON,RPARENT]) THEN BEGIN ERROR(7);SKIP(FSYS+[SEMICOLON,RPARENT])END  END ELSE ERROR(5); þÄË END; END; IF SY = SEMICOLON THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT,VARSY,PROCSY,FUNCSY]) THEN BEGIN ERROR(7); SKIP(FSYS + [IDENT,RPARENT])END þQ× END END (*WHILE*) ; IF SY = RPARENT THEN BEGIN INSYMBOL; IF NOT (SY IN FSY + FSYS) THEN BEGIN ERROR(6); SKIP(FSY + FSYS) END END ELSE ERROR(4þ¥Y); LCP3 := NIL; (*REVERSE POINTERS AND RESERVE LOCAL CELLS FOR COPIES OF MULTIPLE VALUES*) WHILE LCP1 <> NIL DO WITH LCP1^ DO BEGIN LCP2 := NEXT; NEXT := LCP3; þ ~ IF KLASS = VARS THEN IF IDTYPE <> NIL THEN IF (VKIND=ACTUAL)AND(IDTYPE^.FORM>POWER) THEN BEGIN ALIGN(IDTYPE,LC); VADDR := LC; LC := LC+IDþEÙTYPE^.SIZE; END; LCP3 := LCP1; LCP1 := LCP2 END; FPAR := LCP3 END ELSE FPAR := NIL END (*PARAMETERLIST*) ; BEGIN (*PROCDECLARATION*) LLC := LC; LC :=þV˜ LCAFTERMARKSTACK; FORW := FALSE; IF SY = IDENT THEN BEGIN SEARCHSECTION(DISPLAY[TOP].FNAME,LCP); (*DECIDE WHETHER FORW.*) IF LCP <> NIL THEN BEGIN IF LCP^.KLASS = PROC THEN FORW := LCP^.FORWDECL þ–¨AND(FSY = PROCSY)AND(LCP^.PFKIND = ACTUAL) ELSE IF LCP^.KLASS = FUNC THEN FORW:=LCP^.FORWDECL AND(FSY=FUNCSY)AND(LCP^.PFKIND=ACTUAL) ELSE FORW := FALSE; IF NOT FORW THEN ERROR(160) þ3 END; IF NOT FORW THEN BEGIN IF FSY = PROCSY THEN NEW(LCP,PROC,DECLARED,ACTUAL) ELSE NEW(LCP,FUNC,DECLARED,ACTUAL); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; EXTDEC := FAþ¢¶LSE; EXTERN := FALSE; PFLEV := LEVEL; GENLABEL(LBNAME); PFDECKIND := DECLARED; PFKIND := ACTUAL; PFNAME := LBNAME; IF FSY = PROCSY THEN KLASS := PROC ELSE KLASS := FUNC þî< END; ENTERID(LCP) END ELSE BEGIN LCP1 := LCP^.NEXT; WHILE LCP1 <> NIL DO BEGIN WITH LCP1^ DO IF KLASS = VARS THEN IF þ¨+IDTYPE <> NIL THEN BEGIN LCM := VADDR + IDTYPE^.SIZE; IF LCM > LC THEN LC := LCM END; LCP1 := LCP1^.NEXT END END; INSYMBOL þŠA END ELSE BEGIN ERROR(2); LCP := UFCTPTR END; OLDLEV := LEVEL; OLDTOP := TOP; IF LEVEL < MAXLEVEL THEN LEVEL := LEVEL + 1 ELSE ERROR(251); IF TOP < DISPLIMIT THEN BEGIN TOP := TOP + 1; WITH DISPLAY[TOþ·6P] DO BEGIN IF FORW THEN FNAME := LCP^.NEXT ELSE FNAME := NIL; FLABEL := NIL; OCCUR := BLCK END END ELSE ERROR(250); IF FSY = PROCSY THEN BEGIN PARAþòÍMETERLIST([SEMICOLON],LCP1); IF NOT FORW THEN LCP^.NEXT := LCP1 END ELSE BEGIN PARAMETERLIST([SEMICOLON,COLON],LCP1); IF NOT FORW THEN LCP^.NEXT := LCP1; IF SY = COLON THEN BEGIN INSYMBOL; þÛ‹ IF SY = IDENT THEN BEGIN IF FORW THEN ERROR(122); SEARCHID([TYPES],LCP1); LSP := LCP1^.IDTYPE; LCP^.IDTYPE := LSP; IF LSP <> NIL THEN IF þhaNOT (LSP^.FORM IN [SCALAR,SUBRANGE,POINTER]) THEN BEGIN ERROR(120); LCP^.IDTYPE := NIL END; INSYMBOL END ELSE BEGIN ERROR(2); SKIP(FSYS + [SEMICOLON]) END END ELSE þÝ[ IF NOT FORW THEN ERROR(123) END; IF SY = SEMICOLON THEN INSYMBOL ELSE ERROR(14); IF SY = EXTRNSY THEN BEGIN WITH LCP^ DO BEGIN EXTDEC := TRUE; IF PRCODE THEN þ¸7 BEGIN WRITELN(PRR); WRITELN(PRR,' .EXTN ?',NAME); WRITELN(PRR);  WRITELN(PRR,'L',' ',PFNAME:4,':','?':3,NAME); END; INSYMBOL; IF SY =SEMICOLON THEN INSYMBOL ELSE ERROR(14); ENþ»ÂD END ELSE IF SY = FORWARDSY THEN BEGIN IF FORW THEN ERROR(161) ELSE LCP^.FORWDECL := TRUE; INSYMBOL; IF SY = SEMICOLON THEN INSYMBOL ELSE ERROR(14); IF NOT (SY IN FSYS) THEN þÖö BEGIN ERROR(6); SKIP(FSYS) END END ELSE BEGIN LCP^.FORWDECL := FALSE; MARK(MARKP); REPEAT BLOCK(FSYS,SEMICOLON,LCP,TRUE,NOT(NOTEXTDEC)); IF SY = SEMICOLON THEN BEGIN INSYMBOL; Iþ‰4F NOT (SY IN [BEGINSY,PROCSY,FUNCSY]) THEN BEGIN ERROR(6); SKIP(FSYS) END END ELSE IF NOT ((SY =PERIOD) AND EXTN) THEN ERROR(14) UNTIL ((SY IN [BEGINSY,PROCSY,FUNCSY]) OR EOF(INPUT)) OR ((SY=PERþ1úIOD) AND EXTN); RELEASE(MARKP); (* RETURN LOCAL ENTRIES ON RUNTIME HEAP *) END; LEVEL := OLDLEV; TOP := OLDTOP; LC := LLC; END (*PROCDECLARATION*) ; PROCEDURE BODY(FSYS: SETOFSYS); CONST CSTOCCMAX=65; CIXMAX=1000; þ™Õ TYPE OPRANGE = 0..63; VAR LLCP:CTP; SAVEID:ALPHA; CSTPTR: ARRAY [1..CSTOCCMAX] OF CSP; CSTPTRIX: 0..CSTOCCMAX; (*ALLOWS REFERENCING OF NONINTEGER CONSTANTS BY AN INDEX (INSTEAD OF A POINTER), WHICþU}H CAN BE STORED IN THE P2-FIELD OF THE INSTRUCTION RECORD UNTIL WRITEOUT. --> PROCEDURE LOAD, PROCEDURE WRITEOUT*) I, ENTNAME, SEGSIZE: INTEGER; STACKTOP, TOPNEW, TOPMAX: INTEGER; LCMAX,LLC1: ADDRRANGE; LþåCP: CTP; LLP: LBP; PROCEDURE MES(I: INTEGER); BEGIN TOPNEW := TOPNEW + CDX[I]*MAXSTACK; IF TOPNEW > TOPMAX THEN TOPMAX := TOPNEW END; PROCEDURE PUTIC; BEGIN IF IC MOD 10 = 0 THEN WRITELN(PRR,'I',' ',IC:5) EþxñND; PROCEDURE GEN0(FOP: OPRANGE); BEGIN IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[FOP]:4) END; IC := IC + 1; MES(FOP) END (*GEN0*) ; PROCEDURE GEN1(FOP: OPRANGE; FP2: INTEGER); VAR K: INTEGER; BEGINþ;¹ IF PRCODE THEN BEGIN PUTIC; WRITE(PRR,MN[FOP]:4); IF FOP = 30 THEN BEGIN WRITELN(PRR,SNA[FP2]:12); TOPNEW := TOPNEW + PDX[FP2]*MAXSTACK; IF TOPNEW > TOPMAX THEN TOPMAX := TOPNEW þì END  ELSE BEGIN IF FOP = 38 THEN BEGIN WRITELN(PRR); WRITE(PRR,' .TXT ','"'); WITH CSTPTR[FP2]^ DO BEGIN FOR K := 1 TOþC SLGTH DO WRITE(PRR,SVAL[K]:1); FOR K := SLGTH+1 TO STRGLGTH DO WRITE(PRR,' '); END; WRITELN(PRR,'"') END ELSE IF FOP = 42 THEN WRITELN(PRR,CHR(FP2)) þ=®  ELSE WRITELN(PRR,FP2:12); MES(FOP) END END; IC := IC + 1 END (*GEN1*) ; PROCEDURE GEN2(FOP: OPRANGE; FP1,FP2: INTEGER); VAR K,H,M : INTEGER; BEGIN IF PRCODE þÁ†THEN BEGIN PUTIC; IF ((FOP=51) AND (FP1=5)) THEN BEGIN FOR K := 1 TO 4 DO BEGIN WRITE(PRR,' .SW',K:1,'=':2,' '); FOR H := 0 TO 15 DO þô»  BEGIN M := (K-1)*16+H; WITH CSTPTR[FP2]^ DO IF M IN PVAL THEN WRITE(PRR,'1':1) ELSE WRITE(PRR,'0':1) þ/ END; WRITELN(PRR) END END; WRITE(PRR,MN[FOP]:4); CASE FOP OF 45,50,54,56: WRITELN(PRR,' ',FP1:3,FP2:8);  47,4þ°8,49,52,53,55: BEGIN WRITE(PRR,CHR(FP1)); IF CHR(FP1) = 'M' THEN WRITE(PRR,FP2:11); WRITELN(PRR) END; 51: CASE FP1 OF 1: WRITELN(PRR,'I',' 'þí>,FP2); 2: BEGIN WRITE(PRR,'R',' '); WITH CSTPTR[FP2]^ DO FOR K := 1 TO STRGLGTH DO WRITE(PRR,RVAL[K]); WRITELN(PRR) END;  3: WRITþ‘´ELN(PRR,'B',' ',FP2); 4: WRITELN(PRR,'N'); 6: WRITELN(PRR,'C','''':2,CHR(FP2),''''); 5: BEGIN WRITE(PRR,'(':2,' '); WRITE(PRR,'W1 W2 W3 W4'); WRITELN(PRR,')':2) þŸ END END END; END; IC := IC + 1; MES(FOP) END (*GEN2*) ; PROCEDURE GENTYPINDICATOR(FSP: STP); BEGIN IF FSP<>NIL THEN WITH FSP^ DO CASE FORM OF þ-t SCALAR: IF FSP=INTPTR THEN WRITE(PRR,'I') ELSE IF FSP=BOOLPTR THEN WRITE(PRR,'B') ELSE IF FSP=CHARPTR THEN WRITE(PRR,'C') ELSE þ¸ IF SCALKIND = DECLARED THEN WRITE(PRR,'I') ELSE WRITE(PRR,'R'); SUBRANGE: GENTYPINDICATOR(RANGETYPE); POINTER: WRITE(PRR,'A');  POWER: WRITE(PRR,'S'); þV] RECORDS,ARRAYS: WRITE(PRR,'M'); FILES,TAGFLD,VARIANT: ERROR(500) END END (*TYPINDICATOR*); PROCEDURE GEN0T(FOP: OPRANGE; FSP: STP); BEGIN IF PRCODE THEN BEGIN PUTIC; WRITE(PRR,MN[þ~;FOP]:4); GENTYPINDICATOR(FSP); WRITELN(PRR); END; IC := IC + 1; MES(FOP) END (*GEN0T*); PROCEDURE GEN1T(FOP: OPRANGE; FP2: INTEGER; FSP: STP);  BEGIN IF PRCODE THEN BEGIN PUTIC; þ[E WRITE(PRR,MN[FOP]:4); GENTYPINDICATOR(FSP); WRITELN(PRR,FP2:11) END; IC := IC + 1; MES(FOP) END (*GEN1T*); PROCEDURE GEN2T(FOP: OPRANGE; FP1,FP2: INTEGER; FSP: STP); BEGIN IF þù�PRCODE THEN BEGIN PUTIC; WRITE(PRR,MN[FOP]: 4); GENTYPINDICATOR(FSP); WRITELN(PRR,FP1:3,FP2:8); END; IC := IC + 1; MES(FOP)  END (*GEN2T*); PROCEDURE LOAD; BEGIN WITHþžd GATTR DO IF TYPTR <> NIL THEN BEGIN CASE KIND OF CST: IF (TYPTR^.FORM = SCALAR) AND (TYPTR <> REALPTR) THEN IF TYPTR = BOOLPTR THEN GEN2(51(*LDC*),3,CVAL.IVAL) þU´ ELSE IF TYPTR=CHARPTR THEN GEN2(51(*LDC*),6,CVAL.IVAL) ELSE GEN2(51(*LDC*),1,CVAL.IVAL) ELSE IF TYPTR = NILPTR THEN þ�SGEN2(51(*LDC*),4,0) ELSE IF CSTPTRIX >= CSTOCCMAX THEN ERROR(254) ELSE BEGIN CSTPTRIX := CSTPTRIX + 1; CSTPTR[CSTPTRIþ±EX] := CVAL.VALP; IF TYPTR = REALPTR THEN GEN2(51(*LDC*),2,CSTPTRIX) ELSE GEN2(51(*LDC*),5,CSTPTRIX) þÔb END; VARBL: CASE ACCESS OF DRCT: IF VLEVEL<=1 THEN GEN1T(39(*LDO*),DPLMT,TYPTR) ELSE GEN2T(54(*LOD*),LEVEL-VLEVEL,DPLMT,TYPTR); þG INDRCT: GEN1T(35(*IND*),IDPLMT,TYPTR); INXD: ERROR(400) END; EXPR:  END; KIND := EXPR END END (*LOAD*) ; PROCEDURE STORE(VAR FATþR NIL THEN CASE ACCESS OF DRCT: IF VLEVEL <= 1 THEN GEN1T(43(*SRO*),DPLMT,TYPTR) ELSE GEN2T(56(*STR*),LEVEL-VLEVEL,DPLMT,TYPTR); þ; INDRCT: IF IDPLMT <> 0 THEN ERROR(400) ELSE GEN0T(26(*STO*),TYPTR); INXD: ERROR(400) END  END (*STORE*) ; PROCEDURE LOADADDRESS; BEGIN WITH GATTR DO IF TYPTR <> NIL THEþtÉN BEGIN CASE KIND OF CST: IF STRING(TYPTR) THEN IF CSTPTRIX >= CSTOCCMAX THEN ERROR(254) ELSE BEGIN CSTPTRIX := CSTPTRIX + 1; þ¯' CSTPTR[CSTPTRIX] := CVAL.VALP; GEN1(38(*LCA*),CSTPTRIX)  END ELSE ERROR(400); VARBL: CASE ACCESS OF DRCT: IF VLEVELþçJ <= 1 THEN GEN1(37(*LAO*),DPLMT) ELSE GEN2(50(*LDA*),LEVEL-VLEVEL,DPLMT); INDRCT: IF IDPLMT <> 0 THEN GEN1T(34(*INC*),IDPLMT,NILPTR); INXDþ¯w: ERROR(400) END; EXPR: ERROR(400) END; KIND := VARBL; ACCESS := INDRCT; IDPLMT := 0 END END (*LOADADDRESS*) ; PROCEDURE GENFJP(FADDR: INTEGER); BEGIN LOAþ÷ƒD; IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> BOOLPTR THEN ERROR(144); IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[33]:4,'L':7,' ',FADDR:4) END; IC := IC + 1; MES(33) END (*GENFJP*) ; PROCEDURE GENUJPXJP(FOP:þv> OPRANGE; FP2: INTEGER); BEGIN IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR, MN[FOP]:4, 'L':7,' ',FP2:4) END; IC := IC + 1; MES(FOP) END (*GENUJPENT*); PROCEDURE GENCUPENT(FOP: OPRANGE; FP1,FP2: INTEGER); BEGIN þrD IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[FOP]:4,FP1:4,'L':3,' ',FP2:4) END; IC := IC + 1; MES(FOP) END; PROCEDURE CHECKBNDS(FSP: STP); VAR LMIN,LMAX: INTEGER; BEGIN IF FSþ ?P <> NIL THEN IF FSP <> INTPTR THEN IF FSP <> REALPTR THEN  IF FSP^.FORM <= SUBRANGE THEN BEGIN GETBOUNDS(FSP,LMIN,LMAX); GEN2T(45(*CHK*),LMIN,LMAX,FSP) þÀ(END END (*CHECKBNDS*); PROCEDURE PUTLABEL(LABNAME: INTEGER); BEGIN IF PRCODE THEN WRITELN(PRR, 'L',' ', LABNAME:4,':') END (*PUTLABEL*); PROCEDURE OPENFILES(LOCFP : EXTFILEP); BEGIN WHILE LOCFP <> NIL DO þù]0 WITH LOCFP^ DO BEGIN IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[38]:4); WRITELN(PRR,' .TXT ','"',FILENAME,' ':8,'"'); IC := IC+1; MES(38) END; ÿR2SMISC.SRû­U,þP .TITL R2SMISC ; VARIOUS OTHER OPERATIONS FOR THE P-CODE INTERPRETER .ENT PIXA,PSTP,PHLT,PNON .ENT PORD,PORDA,PORDC,PCHR,PORDB,PORDI .ENT PSTOC,PINDC .EXTN MPY .EXTN PUNDF .EXTD LHBNP,RHBNP .NREL PINDC: POP1 1 ; B.AD FROM STACK ADDZR 1,2 ; þUADD Q FIELD..SET CARRY LDA 1,0,2 ; GET HOLD OF BYTE PAIR LDA 0,RHBNP ; GET MASK MOV 0,0,SNC ; WHICH BYTE REQD ? MOVS 1,1 ; LEFT ANDS 1,0 ; MASK PUSH1 0 ; BYTE TO STACK NEXT PSTOC: POP1 1 ;CHAR FROM STACK LHB POP1 2 ; BYTE DESTINATION LDA þØÊ0,LHBNP ; GET MASK AND 0,1 MOVZR 2,2,SNC ; MAKE WD ADDRESS - WHICH HALF ? MOVS 0,0,SKP ; LH MOVS 1,1 ; RH LDA 3,0,2 ; GET EXISTING CONTENTS AND 0,3 ; REMOVE UNWANTED BYTE ADD 1,3 ; ADD IN NEW BYTE STA 3,0,2 NEXT PIXA: POP1 1 ;INDEXED ADDRþ"|ESS LTOP1 0 MPY STOP1 1 NEXT PSTP: .SYSTM ;SOFT HALT .RESET ; (RETURN TO CALLING PROGRAM) ERR.2 .SYSTM .RTN JMP . PHLT: POP1 2 ;HARD HALT .SYSTM .ERTN JMP . NEXT PCHR: POP1 0 LDA 1,RHB40 ADD 1,0 LDA 1,RHBNP ROT: ANDS 1,0 PUSH1 0 þ½NEXT RHB40: 40 LHB40: 40B7 PORD: NEXT PORDA: LTOP1 0 MOVZR 0,0 STOP1 0 NEXT PORDB: LTOP1 0 SUB 1,1 ;CLEAR AC1 MOVR 0,0 ;B15 INTO CARRY MOVL 1,1 ;CARRY INTO AC1 STOP1 1 NEXT PORDI: NEXT PORDC: POP1 0 LDA 1,LHB40 SUB 1,0 LDA 1,LHBNP JMþ4-P ROT PNON: .PUND ;UNDEFINED INSTRUCTION .END ÿR2SSYMBOLS.SRû­ ó Dþ~B .TITL R2SSYMBOLS .DUSR PC = 20 ;ADDRESS OF PCODE INSTRUCTION .DUSR IP = 40 .DUSR SP = 41 ;CURRENT TOP OF STACK .DUSR MP = 42 ;MARK POINTER .DUSR DSP = 43 ;DATA SEGMENT POINTER (STACK BASE) .DUSR HP = 44 ;HEAP POINTER .DUSR EP = 45 ;STþuACK MAX .DUSR AI1 = 27 ;AUTO INC 1 .DUSR AI2 = 26 ;AUTO INC 2 .DUSR AD1 = 37 ;AUTO DEC 1 .DUSR AD2 = 36 ;AUTO DEC 2 .DUSR Z1 = 47 .DUSR Z2 = 46 .DUSR .ERR2 = 50 ;RETURN WITH RDOS ERROR  .DUSR .ERRP = 51 ;RETURN WITH PCODE ERROR .DUSR NEXTþ@³ = JMP @IP ;OBEY NEXT PCODE INSTRUCTION .DUSR PUSH = ISZ SP .DUSR POP = DSZ SP .MACRO LTOP1 LDA ^1,@SP % .MACRO STOP1 STA ^1,@SP % .MACRO PUSH1 PUSH STOP1 ^1 % .MACRO POP1 LTOP1 ^1 POP % .MACRO .PUND JMP @.+1 PUNDF % .DUSR ERR.2 = JþLSR @.ERR2 .DUSR ERR.P = JSR @.ERRP .DUSR ANS = 0 ;OFFSET FOR FUNCTION VALUE .DUSR SL = 2 ; STATIC LINK .DUSR DL = 3 ; DYNAMIC LINK .DUSR MTS = 4 ;MAX TOP OF STACK .DUSR RA = 5 ; RETURN ADDRESS .DUSR MSL = 6 ;MARK STACK LENGTHþû .DUSR FCH = -1 ;FILE CHANNEL OFFSET .DUSR FST = -2 ;FILE STATUS OFFSET ;INTERPRETER ERROR CODES .DUSR PEROP = 400 ; UNDEFINED OP. CODE OR S.P. CODE .DUSR PERSO = 401 ; STORE OVERFLOW .DUSR PERGE = 402 ; EOF SET FOR GET .DUSR PERRE = 403 ; REþf AD ERROR .DUSR PERPE = 404 ; PUT ERROR .DUSR PERIW = 405 ;INTEGER FIELD WIDTH .DUSR PERFP = 406 ; OV UN FLAGS RFPI .DUSR PERTR = 407 ; TRUNCATE OV ERROR .DUSR PERCJ = 410 ;CASE ERROR .. UJC .DUSR PERRB = 411 ; ASCII BUFFERRING ERROR .DUSR PERXþß9hP = 412 ;ILLEGAL EXTERNAL PROCEDURE CALL .DUSR PERCK = 413 ; CHK ERROR .DUSR PERHO = 414 ; HEAP OVERFLOW .DUSR PERFW = 415 ; FIELD WIDTH ERROR .DUSR PERFI = 416 ;FPI ERROR .DUSR PERFO = 417 ;FPI I/O ERROR .END ÿEXAMPLES.CMû´rþaÚROMAN,LIFE,GRAPH,PRIMES,RGCD^ ÿP4COMPILE3.ûNNþ~s IF FTYPE <> NIL THEN WITH FTYPE^ DO BEGIN GEN2(51(*LDC*),1,IDTYPE^.SIZE-1); GEN2(50(*LDA*),LEVEL-VLEV,VADDR); GEN1(30(*CSP*),11(*OPN*)); ENDþUT; LOCFP := NEXTFILE END; END; (* OF OPENFILES*) PROCEDURE CLOSEFILES(LOCFP: EXTFILEP); BEGIN WHILE LOCFP <> NIL DO WITH LOCFP^ DO BEGIN IF FTYPE <> NIL THEN þ­ WITH FTYPE^ DO GEN2(50(*LDA*),LEVEL-VLEV,VADDR); GEN1(30(*CSP*),24(*CLS*));  LOCFP := NEXTFILE END END; (* OF CLOSEFILES*) PROCEDURE STATEMENT(FSYS: SETOFSYS); LABEL 1; VAR þûéLCP: CTP; LLP: LBP; PROCEDURE EXPRESSION(FSYS: SETOFSYS); FORWARD; PROCEDURE SELECTOR(FSYS: SETOFSYS; FCP: CTP); VAR LATTR: ATTR; LCP: CTP; LSIZE,LMIN,LMAX: INTEGER; BEGIN WITH FCP^, GATTR DO BEGIN TYþPTR := IDTYPE; KIND := VARBL; CASE KLASS OF VARS:  IF VKIND = ACTUAL THEN BEGIN ACCESS := DRCT; VLEVEL := VLEV; DPLMT := VADDR END þ‡ö ELSE BEGIN GEN2T(54(*LOD*),LEVEL-VLEV,VADDR,NILPTR); ACCESS := INDRCT; IDPLMT := 0 END; FIELD: WITH DISPLAY[DISX] DO IF OCCUR = CREC THEN þmJ BEGIN ACCESS := DRCT; VLEVEL := CLEV;  DPLMT := CDSPL + FLDADDR END ELSE BEGIN IF LEVEL = 1 THEN GEN1T(39(*LOD*),VDSPL,NILPþVúTR) ELSE GEN2T(54(*LOD*),0,VDSPL,NILPTR); ACCESS := INDRCT; IDPLMT := FLDADDR END; FUNC: IF PFDECKIND = STANDARD THEN BEGIN ERROR(15þD0); TYPTR := NIL END ELSE BEGIN  IF PFKIND = FORMAL THEN ERROR(151) ELSE IF (PFLEV+1<>LEVEL)OR(FPROCP<>FCP) THEN ERROR(177); BEþìGIN ACCESS := DRCT; VLEVEL := PFLEV + 1; DPLMT := 0 (*IMPL. RELAT. ADDR. OF FCT. RESULT*) END END END (*CASE*) END (*WITH*); IF NOT (SY IN SELECTSYSþ‚m + FSYS) THEN BEGIN ERROR(59); SKIP(SELECTSYS + FSYS) END; WHILE SY IN SELECTSYS DO BEGIN (*[*) IF SY = LBRACK THEN BEGIN REPEAT LATTR := GATTR; WITH LATTR DOþˆ IF TYPTR <> NIL THEN IF TYPTR^.FORM <> ARRAYS THEN BEGIN ERROR(138); TYPTR := NIL END; LOADADDRESS; INSYMBOL; EXPRESSION(FSYS + [COMMA,RBRACK])þMø; LOAD;  IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM<>SCALAR THEN ERROR(113) ELSE IF NOT COMPTYPES(GATTR.TYPTR,INTPTR) THEN GEN0T(58(*ORD*),þ0GATTR.TYPTR); IF LATTR.TYPTR <> NIL THEN WITH LATTR.TYPTR^ DO BEGIN IF COMPTYPES(INXTYPE,GATTR.TYPTR) THEN BEGIN þU IF INXTYPE <> NIL THEN  BEGIN GETBOUNDS(INXTYPE,LMIN,LMAX); IF DEBUG THEN GEN2T(45(*CHK*),LMIN,LMAX,INTPTR); IF LMIN>0þý™ THEN GEN1T(31(*DEC*),LMIN,INTPTR) ELSE IF LMIN<0 THEN GEN1T(34(*INC*),-LMIN,INTPTR); (*OR SIMPLY GEN1(31,LMIN)*) END þ3Ÿ  END ELSE ERROR(139); WITH GATTR DO BEGIN TYPTR := AELTYPE; KIND := VARBL; ACCESS := INDRCT; IDPLMT := 0 þÀ� END; IF GATTR.TYPTR <> NIL THEN BEGIN LSIZE := GATTR.TYPTR^.SIZE; IF COMPTYPES(GATTR.TYPTR,CHARPTR) THEN LSIZE :=CHARSIZE þø÷  ELSE ALIGN(GATTR.TYPTR,LSIZE); GEN1(36(*IXA*),LSIZE) END END UNTIL SY <> COMMA; IF SY = RBRACK THEN INSYMBOL ELSE ERþãdROR(12) END (*IF SY = LBRACK*) ELSE (*.*) IF SY = PERIOD THEN BEGIN WITH GATTR DO BEGIN IF TYPTR <> NIL THEN þ¹ IF TYPTR^.FORM <> RECORDS THEN BEGIN ERROR(140); TYPTR := NIL END; INSYMBOL; IF SY = IDENT THEN BEGIN IF TYPTR <> NIL THEþÆ&N BEGIN SEARCHSECTION(TYPTR^.FSTFLD,LCP); IF LCP = NIL THEN BEGIN ERROR(152); TYPTR := NIL END ELSE  þ WITH LCP^ DO BEGIN TYPTR := IDTYPE; CASE ACCESS OF DRCT: DPLMT := DPLMT + FLDADDR; INDRCT: IDPþû•LMT := IDPLMT + FLDADDR; INXD: ERROR(400) END END END; INSYMBOL þo END (*SY = IDENT*) ELSE ERROR(2) END (*WITH GATTR*) END (*IF SY = PERIOD*) ELSE (*^*) BEGIN IF GATTR.TYPTR <> NIL THEN þF WITH GATTR,TYPTR^ DO IF FORM = POINTER THEN BEGIN LOAD; TYPTR := ELTYPE; IF DEBUG THEN GEN2T(45(*CHK*),1,MAXADDR,NILPTR);  WITH GATTR DO þ¤Ù BEGIN KIND := VARBL; ACCESS := INDRCT; IDPLMT := 0 END END ELSE IF FORM = FILES THEN TYPTR := FþÈïILTYPE ELSE ERROR(141); INSYMBOL END; IF NOT (SY IN FSYS + SELECTSYS) THEN BEGIN ERROR(6); SKIP(FSYS + SELECTSYS) END END (*WHILE*) END (*SELEþ'CTOR*) ; PROCEDURE CALL(FSYS: SETOFSYS; FCP: CTP); VAR LKEY: 1..15; PROCEDURE VARIABLE(FSYS: SETOFSYS); VAR LCP: CTP; BEGIN IF SY = IDENT THEN BEGIN SEARCHID([VARS,FIELD],LCP); IþBNSYMBOL END ELSE BEGIN ERROR(2); LCP := UVARPTR END; SELECTOR(FSYS,LCP) END (*VARIABLE*) ; PROCEDURE GETPUTRESETREWRITE; BEGIN VARIABLE(FSYS + [RPARENT]); LOADADDRESS; IF GATTR.TYPTR <> NILþ;~ THEN IF GATTR.TYPTR^.FORM <> FILES THEN ERROR(116); IF LKEY <= 2 THEN GEN1(30(*CSP*),LKEY(*GET,PUT*)) ELSE GEN1(30(*CSP*),LKEY+26(*RESET,REWRITE*)) END (*GETPUTRESETREWRITE*) ; PROCEDURE FILEDEFAULTþmò(FNAME : ALPHA; ERRNO:INTEGER; VAR LLEV,LADDR:INTEGER); BEGIN SAVEID := ID; ID := FNAME; SEARCHID([VARS],LLCP); IF LLCP^.IDTYPE <> NIL THEN LADDR := LLCP^.VADDR ELSE BEGIN þÒPERROR(ERRNO); LADDR := 0 END; LLEV := 1; ID := SAVEID END; PROCEDURE READ; VAR LCP:CTP; LLEV:LEVRANGE; LADDR:ADDRRANGE; LSP : STP; BEGIN IF SY = LPARENT THEN BEGþÇ„IN INSYMBOL; VARIABLE(FSYS + [COMMA,RPARENT]); LSP := GATTR.TYPTR; TEST := FALSE; IF LSP <> NIL THEN IF LSP^.FORM = FILES THEN WITH GATTR, LSP^ DO BEGIN þc¼ IF FILTYPE = CHARPTR THEN BEGIN LLEV := VLEVEL; LADDR := DPLMT; IF ACCESS = INDRCT THEN ERROR(399) END ELSE ERROR(399); IF þD°SY = RPARENT THEN BEGIN IF LKEY = 8 THEN ERROR(116); TEST := TRUE END ELSE  IF SY <> COMMA THEN BEGIN ERROR(116); SKIP(FSYSþjü + [COMMA,RPARENT]) END; IF SY = COMMA THEN BEGIN INSYMBOL; VARIABLE(FSYS + [COMMA,RPARENT]) END ELSE TEST := TRUE END ELSE FILEDEFAULT(NA[3],175,LLEV,LADþEDR); IF NOT TEST THEN REPEAT LOADADDRESS; GEN2(50(*LDA*),LEVEL-LLEV,LADDR); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= SUBRANGE THEN IF COMPTYPES(INTPTR,GATTR.TYPTþ0.R) THEN GEN1(30(*CSP*),3(*RDI*)) ELSE IF COMPTYPES(REALPTR,GATTR.TYPTR) THEN GEN1(30(*CSP*),4(*RDR*)) ELSE IF COMPTYPES(CHARPTR,GATTR.þêWTYPTR) THEN GEN1(30(*CSP*),5(*RDC*)) ELSE ERROR(399) ELSE ERROR(116);  TEST := SY <> COMMA; IF NOT TEST THEN BEGIN INSYMBOL; VARIABLE(FSYS + [COMMA,RPAþ™ÉRENT]) END UNTIL TEST; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END ELSE IF LKEY = 5 THEN ERROR(116) ELSE FILEDEFAULT(NA[3],175,LLEV,LADDR); IF LKEY = þ�Ú11 THEN BEGIN GEN2(50(*LDA*),LEVEL - LLEV, LADDR); GEN1(30(*CSP*),21(*RLN*)) END  END (*READ*) ; PROCEDURE WRITE; VAR LSP: STP; DEFAULT : BOOLEAN; LLKEY: 1..15; LCP:CTþjÎP; LLEV:LEVRANGE; LADDR,LEN:ADDRRANGE; BEGIN LLKEY := LKEY; IF SY = LPARENT THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,COLON,RPARENT]); LSP := GATTR.TYPTR; TEST := FALSE; IF LSP <> NIþðèL THEN IF LSP^.FORM = FILES THEN WITH GATTR, LSP^ DO BEGIN  IF FILTYPE = CHARPTR THEN BEGIN LLEV := VLEVEL; LADDR := DPLMT; þ IF ACCESS = INDRCT THEN ERROR(399) END ELSE ERROR(399); IF SY = RPARENT THEN BEGIN IF LLKEY = 10 THEN ERROR(116); TEST := TRUE þhæ END ELSE IF SY <> COMMA THEN BEGIN ERROR(116); SKIP(FSYS+[COMMA,RPARENT]) END; IF SY = COMMA THEN BEGIN INSYMBOL; EXPRESSION(FSYS+[COMMA,COLONþÿ,RPARENT]) END ELSE TEST := TRUE END ELSE FILEDEFAULT(NA[4],176,LLEV,LADDR); IF NOT TEST THEN REPEAT LSP := GATTR.TYPTR; IF LSP <> NIL THEN þ&b IF LSP^.FORM <= SUBRANGE THEN LOAD ELSE LOADADDRESS; IF SY = COLON THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,COLON,RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> INþåHTPTR THEN ERROR(116); LOAD; DEFAULT := FALSE END ELSE DEFAULT := TRUE; IF SY = COLON THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> þ&ÏNIL THEN IF GATTR.TYPTR <> INTPTR THEN ERROR(116);  IF LSP <> REALPTR THEN ERROR(124); LOAD; ERROR(399); END ELSE IF LSP = INTPTR THEN BEþÔçGIN IF DEFAULT THEN GEN2(51(*LDC*),1,10); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),6(*WRI*)) END ELSE IF LSP = REALPTR THEN BEGIN IF DEFþAULT THEN GEN2(51(*LDC*),1,20); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),8(*WRR*)) END ELSE IF LSP = CHARPTR THEN BEGIN IF Dþ#vEFAULT THEN GEN2(51(*LDC*),1,1); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),9(*WRC*)) END ELSE IF LSP <> NIL THEN þK„BEGIN IF LSP^.FORM = SCALAR THEN ERROR(399) ELSE IF STRING(LSP) THEN BEGIN LEN := LSP^.SIZE DIV CHARMAX; IF DEFAULþ‘‡T THEN GEN2(51(*LDC*),1,LEN); GEN2(51(*LDC*),1,LEN); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),10(*WRS*)) þvÒ END  ELSE ERROR(116) END; TEST := SY <> COMMA; IF NOT TEST THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,COLON,RPARENT]) ENDþ8 UNTIL TEST; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END ELSE IF LKEY = 6 THEN ERROR(116) ELSE FILEDEFAULT(NA[4],176,LLEV,LADDR); IF LLKEY = 12 THEN (*WRITELN*) þº¢ BEGIN GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),22(*WLN*)) END END (*WRITE*) ; PROCEDURE PACK; VAR LSP,LSP1: STP; BEGIN ERROR(399); VARIABLE(FSYS + [COMMA,RPARENT]); þ*R LSP := NIL; LSP1 := NIL; IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = ARRAYS THEN BEGIN LSP := INXTYPE; LSP1 := AELTYPE END ELSE ERROR(116); IF SY þ›e= COMMA THEN INSYMBOL ELSE ERROR(20); EXPRESSION(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN ERROR(116) ELSE IF NOT COMPTYPES(LSP,GATTR.TYPTR) TþË¿HEN ERROR(116); IF SY = COMMA THEN INSYMBOL ELSE ERROR(20); VARIABLE(FSYS + [RPARENT]); IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = ARRAYS THEN BEGIN þVí  IF NOT COMPTYPES(AELTYPE,LSP1) OR NOT COMPTYPES(INXTYPE,LSP) THEN ERROR(116) END ELSE ERROR(116) END (*PACK*) ; PROCEDURE UNPACK; VARþ¡ LSP,LSP1: STP; BEGIN ERROR(399); VARIABLE(FSYS + [COMMA,RPARENT]); LSP := NIL; LSP1 := NIL; IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = ARRAYS THEN BEGIN LSP :þø= INXTYPE; LSP1 := AELTYPE END ELSE ERROR(116); IF SY = COMMA THEN INSYMBOL ELSE ERROR(20); VARIABLE(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO þàIF FORM = ARRAYS THEN BEGIN IF NOT COMPTYPES(AELTYPE,LSP1) OR NOT COMPTYPES(INXTYPE,LSP) THEN ERROR(116) END ELSE ERROR(116);  IFþ”L SY = COMMA THEN INSYMBOL ELSE ERROR(20); EXPRESSION(FSYS + [RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN ERROR(116) ELSE IF NOT COMPTYPES(LSP,GATTR.TYPTR) THEþON ERROR(116); END (*UNPACK*) ; PROCEDURE NEW; LABEL 1; VAR LSP,LSP1: STP; VARTS,LMIN,LMAX: INTEGER; LSIZE,LSZ: ADDRRANGE; LVAL: VALU; BEGIN VARIABLE(FSYS + [COMMA,RPARENT]); LOADADDRESSþd ; LSP := NIL; VARTS := 0; LSIZE := 0; IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = POINTER THEN BEGIN IF ELTYPE <> NIL THEN BEGINþ¯¿ LSIZE := ELTYPE^.SIZE; IF ELTYPE^.FORM = RECORDS THEN LSP := ELTYPE^.RECVAR END END ELSE ERROR(116); WHILE SY = COMMA DO  BEGIN INSYMBOL;CONSTANT(FSYSþ�‘ + [COMMA,RPARENT],LSP1,LVAL); VARTS := VARTS + 1; (*CHECK TO INSERT HERE: IS CONSTANT IN TAGFIELDTYPE RANGE*) IF LSP = NIL THEN ERROR(158) ELSE IF LSP^.FORM <> TAGFLD THEN EþÛ¢RROR(162) ELSE IF LSP^.TAGFIELDP <> NIL THEN IF STRING(LSP1) OR (LSP1 = REALPTR) THEN ERROR(159) ELSE IF COMPTYPES(LSP^.TAGFIELDP^.IDTYPE,LSP1) THEN þ[Ä BEGIN LSP1 := LSP^.FSTVAR; WHILE LSP1 <> NIL DO WITH LSP1^ DO IF VARVAL.IVAL = LVAL.IVAL THEN þKL BEGIN LSIZE := SIZE; LSP := SUBVAR; GOTO 1 END ELSE LSP1 := NXTVAR;  LSIZE := LSP^.SIZE; LSP := NIL; þkO END ELSE ERROR(116); 1: END (*WHILE*) ; GEN2(51(*LDC*),1,LSIZE); GEN1(30(*CSP*),12(*NEW*)); END (*NEW*) ; PROCEDURE MARK; BEGIN VARIABLE(FSYS+[RPARENT]þÇŽ); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = POINTER THEN BEGIN LOADADDRESS; GEN1(30(*CSP*),23(*SAV*)) END ELSE ERROR(125) END(*MARK*); PROCEDURE RELEASE; BEþÓ$GIN VARIABLE(FSYS+[RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = POINTER THEN BEGIN LOAD; GEN1(30(*CSP*),13(*RST*)) END ELSE ERROR(125) END (*RELEASE*); þ$Ÿ PROCEDURE PUTGETRANDOM; VAR LLEV,LADDR : INTEGER; BEGIN VARIABLE(FSYS+[COMMA]); IF GATTR.TYPTR <> NIL THEN  WITH GATTR, GATTR.TYPTR^ DO IF FORM <> FILES THEN ERROR(1þö016) ELSE BEGIN LLEV := VLEVEL; LADDR := DPLMT; IF NOT RANDOMFILE THEN ERROR(116); IF ACCESS = INDRCT THEN ERROR(399); IF SY <> COMMA THEN ERROR(116) ELSE INSYMBOL; þ{e EXPRESSION(FSYS+[RPARENT]); LOAD; IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> INTPTR THEN ERROR(116);  GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),LKEY+11(*WDR,RRR*)þq) END END (*OF PUTGETRANDOM*); PROCEDURE HALT; BEGIN EXPRESSION(FSYS+[RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR = INTPTR THEN BEGIN LOAD; GEN0(62(*HLT*þ66)) END ELSE ERROR(116) END; (*OF HALT*) PROCEDURE ABS; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR = INTPTR THEN GEN0(0(*ABI*)) ELSE IF GATTR.TYPTRþ   = REALPTR THEN GEN0(1(*ABR*)) ELSE BEGIN ERROR(125); GATTR.TYPTR := INTPTR END END (*ABS*) ; PROCEDURE SQR; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR = INTPTR THEN GEN0(24(*SQIþft*)) ELSE IF GATTR.TYPTR = REALPTR THEN GEN0(25(*SQR*)) ELSE BEGIN ERROR(125); GATTR.TYPTR := INTPTR END END (*SQR*) ; PROCEDURE TRUNC; BEGIN IF GATTR.TYPTR <> NIL THENþÝà IF GATTR.TYPTR <> REALPTR THEN ERROR(125); IF LKEY=12 THEN GEN1(30(*CSP*),31(*RND*)) ELSE GEN0(27(*TRC*)); GATTR.TYPTR := INTPTR END (*TRUNC*) ; PROCEDURE ODD; BEGIN IF GATTRþ".TYPTR <> NIL THEN IF GATTR.TYPTR <> INTPTR THEN ERROR(125); GEN0(20(*ODD*)); GATTR.TYPTR := BOOLPTR END (*ODD*) ; PROCEDURE ORD; BEGIN IF GATTR.TYPTR <> NIL THEN þi: IF GATTR.TYPTR^.FORM >= POWER THEN ERROR(125); GEN0T(58(*ORD*),GATTR.TYPTR); GATTR.TYPTR := INTPTR END (*ORD*) ; PROCEDURE CHR; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPþÚêTR <> INTPTR THEN ERROR(125); GEN0(59(*CHR*)); GATTR.TYPTR := CHARPTR END (*CHR*) ; PROCEDURE PREDSUCC; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN þ%ERROR(125); IF LKEY = 7 THEN GEN1T(31(*DEC*),1,GATTR.TYPTR) ELSE GEN1T(34(*INC*),1,GATTR.TYPTR) END (*PREDSUCC*) ; PROCEDURE EOF; VAR LLEV,LADDR : INTEGER; BEGIN IF SY = LPARENTþïŽ THEN BEGIN INSYMBOL; VARIABLE(FSYS + [RPARENT]); IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> FILES THEN ERROR(125) þœy ELSE IF (GATTR.TYPTR^.RANDOMFILE AND NOT (LKEY = 9)) THEN ERROR(116); LOADADDRESS END ELSE WITH GATTR DO BEGIN þäú IF LKEY = 9 THEN ERROR(116) ELSE FILEDEFAULT(NA[3],175,LLEV,LADDR); GEN2(50(*LDA*),LEVEL-LLEV,LADDR) END; IF LKEY = 9 THEN GEN1(30(*CSP*),28(*EOR*)) ELSE IF Lþ³KEY = 10 THEN GEN0(8(*EOF*)) ELSE GEN1(30(*CSP*),14(*ELN*)); GATTR.TYPTR := BOOLPTR END (*EOF*) ; PROCEDURE PAGE; VAR LLEV,LADDR : INTEGER; BEGIN IF SY = LPARENT THEN BEGIN þñˆ INSYMBOL; VARIABLE(FSYS+[RPARENT]); IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = FILES THEN LOADADDRESS ELSE ERROR(116þÆg) END ELSE BEGIN FILEDEFAULT(NA[4],176,LLEV,LADDR); GEN2(50(*LDA*),LEVEL-LLEV,LADDR) END; GEN1(30(*CSP*),27(*PAG*)) END (*PAGE*); PROCEDURE CALLNONSTAþ.VNDARD; VAR NXT,LCP: CTP; LSP: STP; LKIND: IDKIND; LB: BOOLEAN; LOCPAR, LLC: ADDRRANGE; BEGIN LOCPAR := 0; WITH FCP^ DO BEGIN NXT := NEXT; LKIND := PFKIND; IF NOT EXTERN THEN GEþþ”N1(41(*MST*),LEVEL-PFLEV) END; IF SY = LPARENT THEN BEGIN LLC := LC; REPEAT LB := FALSE; (*DECIDE WHETHER PROC/FUNC MUST BE PASSED*) IF LKIND = ACTUAL THEN BEGIN þà IF NXT = NIL THEN ERROR(126)  ELSE LB := NXT^.KLASS IN [PROC,FUNC] END ELSE ERROR(399); (*FOR FORMAL PROC/FUNC LB IS FALSE AND EXPRESSION WILL BE CALLED, WHþ•ICH WILL ALLWAYS INTERPRET A PROC/FUNC ID AT ITS BEGINNING AS A CALL RATHER THAN A PARAMETER PASSING. IN THIS IMPLEMENTATION, PARAMETER PROCEDURES/FUNCTIONS ARE THEREFORE NOT ALLOWED TO HAVE PROCEDURE/Fþ0UNCTION PARAMETERS*)  INSYMBOL; IF LB THEN (*PASS FUNCTION OR PROCEDURE*) BEGIN ERROR(399); IF SY <> IDENT THEN BEGIN ERROR(2); SKIP(FSþ=†YS + [COMMA,RPARENT]) END ELSE BEGIN IF NXT^.KLASS = PROC THEN SEARCHID([PROC],LCP) ELSE BEGIN SEARCHID([FUNC],LCP); þúî IF NOT COMPTYPES(LCP^.IDTYPE,NXT^.IDTYPE) THEN ERROR(128) END; INSYMBOL; IF NOT (SY IN FSYS + [COMMA,RPARENT]) THEN þxF BEGIN ERROR(6); SKIP(FSYS + [COMMA,RPARENT]) END END END (*IF LB*) ELSE BEGIN EXPRESSION(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> NILþ;þ THEN  IF LKIND = ACTUAL THEN BEGIN IF NXT <> NIL THEN BEGIN LSP := NXT^.IDTYPE; IF LSP <> NIL THEN þ–« BEGIN IF (NXT^.VKIND = ACTUAL) THEN IF LSP^.FORM <= POWER THEN BEGIN LOAD; IF DEBUG THEþ²êN CHECKBNDS(LSP); IF COMPTYPES(REALPTR,LSP) AND (GATTR.TYPTR = INTPTR) THEN BEGIN GEN0(10(*FLT*)); þÌ— GATTR.TYPTR := REALPTR END; LOCPAR := LOCPAR+LSP^.SIZE; ALIGN(PARMPTR,LOCPAR); END þ6E ELSE BEGIN LOADADDRESS; LOCPAR := LOCPAR+PTRSIZE; ALIGN(PARMPþ]#TR,LOCPAR) END ELSE IF GATTR.KIND = VARBL THEN BEGIN LOADADDRESS;  þ­. LOCPAR := LOCPAR+PARMSIZE END ELSE ERROR(154); IF NOT COMPTYPES(LSP,GATTR.TYPTR) THEN ERROR(142) þ‡¨ END END END ELSE (*LKIND = FORMAL*) BEGIN (*PASS FORMAL PARAM*) END  END; þí¦ IF (LKIND = ACTUAL) AND (NXT <> NIL) THEN NXT := NXT^.NEXT UNTIL SY <> COMMA; LC := LLC; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END (*IF LPARENT*); IF LKIND = ACTUAL THEN þKö BEGIN IF NXT <> NIL THEN ERROR(126); WITH FCP^ DO BEGIN IF EXTDEC THEN GENCUPENT(61(*CXP*),LOCPAR,PFNAME) ELSE IF EXTERN THEN GEN1(30(*CSP*),PFNAME) þÈ– ELSE GENCUPENT(46(*CUP*),LOCPAR,PFNAME); END END; GATTR.TYPTR := FCP^.IDTYPE END (*CALLNONSTANDARD*) ; BEGIN (*CALL*) IF FCP^.PFDECKIND = STANDARD THEN BEGIN LKEþ»·Y := FCP^.KEY; IF FCP^.KLASS = PROC THEN BEGIN IF NOT(LKEY IN [5,6,11,12,16]) THEN IF SY = LPARENT THEN INSYMBOL ELSE ERROR(9);  CASE LKEY OF 1,2, þø2 3,4: GETPUTRESETREWRITE; 5,11: READ; 6,12: WRITE; 7: PACK; 8: UNPACK; 9: NEW; 10: RELEASE; 13: MARK; þ…t 14,15: PUTGETRANDOM; 16: PAGE; 17: HALT END; IF NOT(LKEY IN [5,6,11,12,16]) THEN IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END þ{ ELSE BEGIN IF (LKEY <= 8) OR (LKEY >= 12) THEN BEGIN IF SY = LPARENT THEN INSYMBOL ELSE ERROR(9); EXPRESSION(FSYS+[RPARENT]); LOAD þ—« END; CASE LKEY OF 1: ABS; 2: SQR; 3,12: TRUNC; 4: ODD;  5: ORD; 6: CHR; 7,8þiƒ: PREDSUCC; 9,10,11 : EOF END; IF (LKEY <= 8) OR (LKEY >= 12) THEN IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END; END (*STANDARD PROCEDURES AND þÉÆFUNCTIONS*) ELSE CALLNONSTANDARD END (*CALL*) ; PROCEDURE EXPRESSION; VAR LATTR: ATTR; LOP: OPERATOR; TYPIND: CHAR; LSIZE: ADDRRANGE; PROCEDURE SIMPLEEXPRESSION(FSYS: SETOFSYS); VAR LATTR: ATTR; Lþ©�OP: OPERATOR; SIGNED: BOOLEAN; PROCEDURE TERM(FSYS: SETOFSYS); VAR LATTR: ATTR; LOP: OPERATOR; PROCEDURE FACTOR(FSYS: SETOFSYS); VAR LCP: CTP; LVP: CSP; VARPART: BOOLEAN; CSTPARTþƒR: SET OF 0..58; LSP: STP; BEGIN IF NOT (SY IN FACBEGSYS) THEN BEGIN ERROR(58); SKIP(FSYS + FACBEGSYS);  GATTR.TYPTR := NIL END; WHILE SY IN FACBEGSYS DO þ Œ BEGIN CASE SY OF (*ID*) IDENT: BEGIN SEARCHID([KONST,VARS,FIELD,FUNC],LCP); INSYMBOL; IF LCP^.KLASS = FUNC THEN þÒd BEGIN CALL(FSYS,LCP); WITH GATTR DO BEGIN KIND := EXPR;  IF TYPTR <> NIL THEN IF TYPTR^.FORM=SUBRANGE THEN þ;´ TYPTR := TYPTR^.RANGETYPE END END ELSE IF LCP^.KLASS = KONST THEN WITH GATTR, LþØ CP^ DO BEGIN TYPTR := IDTYPE; KIND := CST; CVAL := VALUES  END ELSE BEGIN SELECTOR(FSYS,LCP); þ27 IF GATTR.TYPTR<>NIL THEN(*ELIM.SUBR.TYPES TO*) WITH GATTR,TYPTR^ DO(*SIMPLIFY LATER TESTS*) IF FORM = SUBRANGE THEN TYPTR :þå= RANGETYPE END END; (*CST*) INTCONST:  BEGIN WITH GATTR DO BEGIN TYPTR := INTPTR; KIND := CST; þÅ CVAL := VAL END; INSYMBOL END; REALCONST: BEGIN WITH GATTR DO þ³‚ BEGIN TYPTR := REALPTR; KIND := CST; CVAL := VAL END; INSYMBOL END; STRINGCONST: BEGIN þéé WITH GATTR DO BEGIN IF LGTH = 1 THEN TYPTR := CHARPTR ELSE BEGIN NEW(LSP,ARRAYS); WITH LSPþd^ DO BEGIN AELTYPE := CHARPTR; FORM:=ARRAYS;  INXTYPE := NIL; SIZE := LGTH*CHARSIZE END; TYPTR := LSP þQ END; KIND := CST; CVAL := VAL END; INSYMBOL END; (*(*) LPARENT: BEGIN INSYMBOL; EXPREþ¦kSSION(FSYS + [RPARENT]); IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END; (*NOT*) NOTSY: BEGIN INSYMBOL; FACTOR(FSYS); LOAD; GEN0(19(*NOT*))þÉa; IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> BOOLPTR THEN BEGIN ERROR(135); GATTR.TYPTR := NIL END; END; (*[*) LBRACK: þî¼ BEGIN INSYMBOL; CSTPART := [ ]; VARPART := FALSE;  NEW(LSP,POWER); WITH LSP^ DO BEGIN ELSET:=NIL;SIZE:=SETSIZE;FORM:=POWER END; IF SY = þεRBRACK THEN BEGIN WITH GATTR DO BEGIN TYPTR := LSP; KIND := CST END; INSYMBOL END þÏ;ELSE BEGIN  REPEAT EXPRESSION(FSYS + [COMMA,RBRACK]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN þÖ BEGIN ERROR(136); GATTR.TYPTR := NIL END ELSE IF COMPTYPES(LSP^.ELSET,GATTR.TYPTR) THEN BEGIN þýà IF GATTR.KIND = CST THEN  IF (GATTR.CVAL.IVAL < SETLOW) OR (GATTR.CVAL.IVAL > SETHIGH) THEN ERROR(304) þ8> ELSE CSTPART := CSTPART+[GATTR.CVAL.IVAL] ELSE BEGIN LOAD; IF þcNOT COMPTYPES(GATTR.TYPTR,INTPTR)  THEN GEN0T(58(*ORD*),GATTR.TYPTR); GEN0(23(*SGS*)); IF VARPART THEN GEN0(28(*UNI*)) þÞ ELSE VARPART := TRUE END; LSP^.ELSET := GATTR.TYPTR; GATTR.TYPTR := LSP þg END  ELSE ERROR(137); TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IFþk SY = RBRACK THEN INSYMBOL ELSE ERROR(12) END; IF VARPART THEN BEGIN IF CSTPART <> [ ] THEN BEGIN NEW(LVP,PSET);þ:¤ LVP^.PVAL := CSTPART; LVP^.CCLASS := PSET; IF CSTPTRIX = CSTOCCMAX THEN ERROR(254) ELSE BEGIN CSTPTRIX := CSTPTRIX + þè°1; CSTPTR[CSTPTRIX] := LVP; GEN2(51(*LDC*),5,CSTPTRIX); GEN0(28(*UNI*)); GATTR.KIND := EXPR END þ9K  END END ELSE BEGIN NEW(LVP,PSET); LVP^.PVAL := CSTPART; LVP^.CCLASS := PSET; GATTR.CVAL.VALPþåÊ := LVP END END END (*CASE*) ; IF NOT (SY IN FSYS) THEN BEGIN ERROR(6); SKIP(FSYS + FACBEGSYS) END END (*WHILE*)  þËž END (*FACTOR*) ; BEGIN (*TERM*) FACTOR(FSYS + [MULOP]); WHILE SY = MULOP DO BEGIN LOAD; LATTR := GATTR; LOP := OP; INSYMBOL; FACTOR(FSYS + [MULOP]); LOAD; þ‡Ž IF (LATTR.TYPTR <> NIL) AND (GATTR.TYPTR <> NIL) THEN CASE LOP OF (***) MUL: IF (LATTR.TYPTR=INTPTR)AND(GATTR.TYPTR=INTPTR) THEN GEN0(15(*MPI*))  ELSE þ± BEGIN IF LATTR.TYPTR = INTPTR THEN BEGIN GEN0(9(*FLO*)); LATTR.TYPTR := REALPTR END þš2 ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR  END; þZ IF (LATTR.TYPTR = REALPTR) AND(GATTR.TYPTR=REALPTR)THEN GEN0(16(*MPR*)) ELSE IF(LATTR.TYPTR^.FORM=POWER) þs¼ AND COMPTYPES(LATTR.TYPTR,GATTR.TYPTR)THEN GEN0(12(*INT*)) ELSE BEGIN ERROR(134);GATTR.TYPTR:=NIL END END; (*/*) RDIV: BEGIN þ8 IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR END; IF LATTR.TYPTR = INTPþ½^TR THEN BEGIN GEN0(9(*FLO*)); LATTR.TYPTR := REALPTR END; IF (LATTR.TYPTR = REALPTR) AND (GATTR.þiTYPTR=REALPTR)THEN GEN0(7(*DVR*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END; (*DIV*) IDIV: IF (LATTR.TYPTR = INTPTR) AND (GATTR.TYPTR = INTPTR) þ¾ÚTHEN GEN0(6(*DVI*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END; (*MOD*) IMOD: IF (LATTR.TYPTR = INTPTR) AND (GATTR.TYPTR = INTPTR) THEN GEN0(14(*MOD*)) þpT ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END; (*AND*) ANDOP:IF (LATTR.TYPTR = BOOLPTR) AND (GATTR.TYPTR = BOOLPTR) THEN GEN0(4(*AND*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL ENDþ.A END (*CASE*) ELSE GATTR.TYPTR := NIL END (*WHILE*) END (*TERM*) ; BEGIN (*SIMPLEEXPRESSION*)  SIGNED := FALSE; IF (SY = ADDOP) AND (OP IN [PLUS,MINUS]) THEþrN BEGIN SIGNED := OP = MINUS; INSYMBOL END; TERM(FSYS + [ADDOP]); IF SIGNED THEN BEGIN LOAD; IF GATTR.TYPTR = INTPTR THEN GEN0(17(*NGI*)) ELSE IF GATTR.TYþ§PTR = REALPTR THEN GEN0(18(*NGR*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END; WHILE SY = ADDOP DO BEGIN LOAD; LATTR := GATTR; LOP := OP; INSYMBOL; TERM(FSYS + [ADDOP]); LOAD;þûi IF (LATTR.TYPTR <> NIL) AND (GATTR.TYPTR <> NIL) THEN CASE LOP OF (*+*) PLUS: IF (LATTR.TYPTR = INTPTR)AND(GATTR.TYPTR = INTPTR) THEN GEN0(2(*ADI*)) þ T ELSE BEGIN IF LATTR.TYPTR = INTPTR THEN BEGIN GEN0(9(*FLO*));  LATTR.TYPTR := REALPTR END þ·‚ ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR END; IF (LATTR.TYPTR = þŸœREALPTR)AND(GATTR.TYPTR = REALPTR) THEN GEN0(3(*ADR*)) ELSE IF(LATTR.TYPTR^.FORM=POWER)  AND COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN GEN0þÐt(28(*UNI*)) ELSE BEGIN ERROR(134);GATTR.TYPTR:=NIL END END; (*-*) MINUS: IF (LATTR.TYPTR = INTPTR)AND(GATTR.TYPTR = INTPTR) THEN GEN0(21(*SþAsBI*)) ELSE BEGIN IF LATTR.TYPTR = INTPTR THEN  BEGIN GEN0(9(*FLO*)); LATTR.TYPTR := REALPTR END þ¿íí ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR ÿP4COMPILE4.ûNNþ Í END; IF (LATTR.TYPTR = REALPTR)AND(GATTR.TYPTR = REALPTR) THEN GEN0(22(*SBR*)) ELSE IF (LATTR.TYPTR^.FORM = POWER) þ† AND COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN GEN0(5(*DIF*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END; (*OR*) OROP: þS€ IF(LATTR.TYPTR=BOOLPTR)AND(GATTR.TYPTR=BOOLPTR)THEN GEN0(13(*IOR*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END (*CASE*) ELSE GATTR.TYPTR := NIL þR© END (*WHILE*) END (*SIMPLEEXPRESSION*) ; BEGIN (*EXPRESSION*) SIMPLEEXPRESSION(FSYS + [RELOP]); IF SY = RELOP THEN BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= PþîiOWER THEN LOAD ELSE LOADADDRESS; LATTR := GATTR; LOP := OP; IF LOP = INOP THEN  IF NOT COMPTYPES(GATTR.TYPTR,INTPTR) THEN GEN0T(58(*ORD*),GATTR.TYPTR); INSYMBOL; SIMPþèLEEXPRESSION(FSYS); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= POWER THEN LOAD ELSE LOADADDRESS; IF (LATTR.TYPTR <> NIL) AND (GATTR.TYPTR <> NIL) THEN IF LOP = INOP THEN þZ† IF GATTR.TYPTR^.FORM = POWER THEN IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR^.ELSET) THEN  GEN0(11(*INN*)) ELSE BEGIN ERROR(129); GATTR.TYPTR := NIL END ELSE BEGIN ERRþ® OR(130); GATTR.TYPTR := NIL END ELSE BEGIN IF LATTR.TYPTR <> GATTR.TYPTR THEN IF LATTR.TYPTR = INTPTR THEN BEGIN GEN0(9(*FLO*)); LþPŒATTR.TYPTR := REALPTR END ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR þ.›END; IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN BEGIN LSIZE := LATTR.TYPTR^.SIZE; CASE LATTR.TYPTR^.FORM OF SCALAR: IF LATTR.TYPTR = REAþáÅLPTR THEN TYPIND := 'R' ELSE IF LATTR.TYPTR = BOOLPTR THEN TYPIND := 'B' ELSE IF LATTR.TYPTR = CHARPTR THEN TYPIND := 'C' þ1 ELSE TYPIND := 'I'; POINTER: BEGIN IF LOP IN [LTOP,LEOP,GTOP,GEOP] THEN ERROR(131); TYPIND := 'A' þÚQ END; POWER: BEGIN IF LOP IN [LTOP,GTOP] THEN ERROR(132); TYPIND := 'S' END; ARRAYS: BEGIN þ¹8 IF NOT STRING(LATTR.TYPTR) AND(LOP IN[LTOP,LEOP,GTOP,GEOP])THEN ERROR(131); TYPIND := 'M' END; RECORDS: þá BEGIN IF LOP IN [LTOP,LEOP,GTOP,GEOP] THEN ERROR(131); TYPIND := 'M' END; FILES: BEGIN ERROR(1þ‹¬33); TYPIND := 'F' END END; CASE LOP OF LTOP: GEN2(53(*LES*),ORD(TYPIND),LSIZE); LEOP: GEN2(52(*LEQ*),ORD(TYPIND),LSIZE); GTOP: GEþ?wN2(49(*GRT*),ORD(TYPIND),LSIZE); GEOP: GEN2(48(*GEQ*),ORD(TYPIND),LSIZE); NEOP: GEN2(55(*NEQ*),ORD(TYPIND),LSIZE); EQOP: GEN2(47(*EQU*),ORD(TYPIND),LSIZE) þe’ END END ELSE ERROR(129) END; GATTR.TYPTR := BOOLPTR; GATTR.KIND := EXPR END (*SY = RELOP*) END (*EXPRESSION*) ; PROCEDURE ASSIGNMENT(FCP: CTP); þ�‡ VAR LATTR: ATTR; BEGIN SELECTOR(FSYS + [BECOMES],FCP); IF SY = BECOMES THEN BEGIN IF GATTR.TYPTR <> NIL THEN IF (GATTR.ACCESS<>DRCT) OR (GATTR.TYPTR^.FORM>POWER) THEN LOADADDREþ�}SS; LATTR := GATTR; INSYMBOL; EXPRESSION(FSYS); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= POWER THEN LOAD ELSE LOADADDRESS; IF (LATTR.TYPTR <> NIL) AND (GATTR.þümTYPTR <> NIL) THEN BEGIN  IF COMPTYPES(REALPTR,LATTR.TYPTR)AND(GATTR.TYPTR=INTPTR)THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR END; IF COþÿ3MPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN CASE LATTR.TYPTR^.FORM OF SCALAR, SUBRANGE: BEGIN IF DEBUG THEN CHECKBNDS(LATTR.TYPTR); þÅ? STORE(LATTR)  END; POINTER: BEGIN IF DEBUG THEN GEN2T(45(*CHK*),0,MAXADDR,NILPTR); STORE(LATTR) þ END; POWER: STORE(LATTR); ARRAYS, RECORDS: GEN1(40(*MOV*),LATTR.TYPTR^.SIZE); FILES: ERROR(146) END EþçöLSE ERROR(129)  END END (*SY = BECOMES*) ELSE ERROR(51) END (*ASSIGNMENT*) ; PROCEDURE GOTOSTATEMENT; VAR LLP: LBP; FOUND: BOOLEAN; TTOP,TTOP1: DISPRANGE; BEGIN IF SY = INTCOþEõNST THEN BEGIN FOUND := FALSE; TTOP1 := TOP; WHILE DISPLAY[TTOP1].OCCUR <> BLCK DO TTOP1 := TTOP1 - 1; TTOP := TTOP1; REPEAT WHILE DISPLAY[TTOP].OCCUR <> BLCK DO þKÑTTOP := TTOP - 1; LLP := DISPLAY[TTOP].FLABEL; WHILE (LLP <> NIL) AND NOT FOUND DO WITH LLP^ DO IF LABVAL = VAL.IVAL THEN BEGIN FOUND := TRUE; þw£ IF TTOP = TTOP1 THEN GENUJPXJP(57(*UJP*),LABNAME) ELSE (*GOTO LEADS OUT OF PROCEDURE*) ERROR(399) END ELSE LLP := NEXTLAB; TTOP := TTOP - 1  þö… UNTIL FOUND OR (TTOP = 0); IF NOT FOUND THEN ERROR(167); INSYMBOL END ELSE ERROR(15) END (*GOTOSTATEMENT*) ; PROCEDURE COMPOUNDSTATEMENT; BEGIN REPEAT þUñ REPEAT STATEMENT(FSYS + [SEMICOLON,ENDSY]) UNTIL NOT (SY IN STATBEGSYS); TEST := SY <> SEMICOLON; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13)  END (*COMPOUþ•”NDSTATEMENET*) ; PROCEDURE IFSTATEMENT; VAR LCIX1,LCIX2: INTEGER; BEGIN EXPRESSION(FSYS + [THENSY]); GENLABEL(LCIX1); GENFJP(LCIX1); IF SY = THENSY THEN INSYMBOL ELSE ERROR(52); STATEMENT(FSYS + [ELSþ¸†ESY]); IF SY = ELSESY THEN BEGIN GENLABEL(LCIX2); GENUJPXJP(57(*UJP*),LCIX2); PUTLABEL(LCIX1); INSYMBOL; STATEMENT(FSYS); PUTLABEL(LCIX2) END ELSE PUTLABEL(LCIX1) þ…· END (*IFSTATEMENT*) ; PROCEDURE CASESTATEMENT; LABEL 1; TYPE CIP = ^CASEINFO; CASEINFO = PACKED RECORD NEXT: CIP; CSSTART: INTEGER; þ»™ CSLAB: INTEGER END; VAR LSP,LSP1: STP; FSTPTR,LPT1,LPT2,LPT3: CIP; LVAL: VALU; LADDR, LCIX, LCIX1, LMIN, LMAX: INTEGER; BEGIN EXPRESSION(FSYS + [OFSY,COMMA,COLON]); LOAD; LSP þo%:= GATTR.TYPTR; IF LSP <> NIL THEN IF (LSP^.FORM <> SCALAR) OR (LSP = REALPTR) THEN BEGIN ERROR(144); LSP := NIL END ELSE IF NOT COMPTYPES(LSP,INTPTR) THEN GEN0T(58(*ORD*),LSP); (*BUG CORRECTION þfHBY A.F. ON 11/11/76*) GENLABEL(LCIX); GENUJPXJP(57(*UJP*),LCIX); IF SY = OFSY THEN INSYMBOL ELSE ERROR(8); FSTPTR := NIL; GENLABEL(LADDR); REPEAT LPT3 := NIL; GENLABEL(LCIX1); IF NOT(SY IþùN [SEMICOLON,ENDSY]) THEN BEGIN REPEAT CONSTANT(FSYS + [COMMA,COLON],LSP1,LVAL); IF LSP <> NIL THEN IF COMPTYPES(LSP,LSP1) THEN BEGIN LPT1 := FSTPTR; LPT2 := NIL; Wþ 0HILE LPT1 <> NIL DO WITH LPT1^ DO BEGIN IF CSLAB <= LVAL.IVAL THEN BEGIN IF CSLAB = LVAL.IVAL THEN ERROR(156); GOTO 1 þC END; LPT2 := LPT1; LPT1 := NEXT END; 1: NEW(LPT3); WITH LPT3^ DO BEGIN NEXT := LPT1; CSLAB := LVAL.IVAL; þ¥5 CSSTART := LCIX1 END; IF LPT2 = NIL THEN FSTPTR := LPT3 ELSE LPT2^.NEXT := LPT3 END ELSE ERROR(147); TEST := SY <> COMMA; IF NOT TþR¨EST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN INSYMBOL ELSE ERROR(5); PUTLABEL(LCIX1); REPEAT STATEMENT(FSYS + [SEMICOLON]) UNTIL NOT (SY IN STATBEGSYS); IF LPT3 <> NIL THEN þ.6 GENUJPXJP(57(*UJP*),LADDR); END; TEST := SY <> SEMICOLON; IF NOT TEST THEN INSYMBOL UNTIL TEST; PUTLABEL(LCIX); IF FSTPTR <> NIL THEN BEGIN LMAX := FSTPTR^.CSLAB; þ©´ (*REVERSE POINTERS*) LPT1 := FSTPTR; FSTPTR := NIL; REPEAT LPT2 := LPT1^.NEXT; LPT1^.NEXT := FSTPTR; FSTPTR := LPT1; LPT1 := LPT2 UNTIL LPT1 = NIL; LMIN := FSTPTR^.CSLAB; þe} IF LMAX - LMIN < CIXMAX THEN BEGIN GEN2T(45(*CHK*),LMIN,LMAX,INTPTR); GEN2(51(*LDC*),1,LMIN); GEN0(21(*SBI*)); GENLABEL(LCIX); GENUJPXJP(44(*XJP*),LCIX); PUTLABEL(LCIX); þ‡n REPEAT WITH FSTPTR^ DO BEGIN WHILE CSLAB > LMIN DO BEGIN GEN0(60(*UJC ERROR*)); LMIN := LMIN+1 ENDþÉG; GENUJPXJP(57(*UJP*),CSSTART); FSTPTR := NEXT; LMIN := LMIN + 1 END  UNTIL FSTPTR = NIL; PUTLABEL(LADDR) END ELSE ERROR(þì‘157) END; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13) END (*CASESTATEMENT*) ; PROCEDURE REPEATSTATEMENT; VAR LADDR: INTEGER; BEGIN GENLABEL(LADDR); PUTLABEL(LADDR); REPEAT STATEMENT(FSYS +þ˜ [SEMICOLON,UNTILSY]); IF SY IN STATBEGSYS THEN ERROR(14) UNTIL NOT(SY IN STATBEGSYS); WHILE SY = SEMICOLON DO BEGIN INSYMBOL; REPEAT STATEMENT(FSYS + [SEMICOLON,UNTILSY]); IF SY IN þÇXSTATBEGSYS THEN ERROR(14) UNTIL NOT (SY IN STATBEGSYS); END; IF SY = UNTILSY THEN BEGIN INSYMBOL; EXPRESSION(FSYS); GENFJP(LADDR) END ELSE ERROR(53) END (*REPEATSTATEMENT*) ; þ@e PROCEDURE WHILESTATEMENT; VAR LADDR, LCIX: INTEGER; BEGIN GENLABEL(LADDR); PUTLABEL(LADDR);  EXPRESSION(FSYS + [DOSY]); GENLABEL(LCIX); GENFJP(LCIX); IF SY = DOSY THEN INSYMBOL ELSE ERROR(54); STATEMENT(þ^lFSYS); GENUJPXJP(57(*IJP*),LADDR); PUTLABEL(LCIX) END (*WHILESTATEMENT*) ; PROCEDURE FORSTATEMENT; VAR LATTR: ATTR; LSP: STP; LSY: SYMBOL; LCIX, LADDR: INTEGER; LLC: ADDRRANGE; BEGIN LLCþ‚ := LC; WITH LATTR DO BEGIN TYPTR := NIL; KIND := VARBL; ACCESS := DRCT; VLEVEL := LEVEL; DPLMT := 0 END; IF SY = IDENT THEN BEGIN SEARCHID([VARS],LCP); WITH LCP^, LATTR DOþ v BEGIN TYPTR := IDTYPE; KIND := VARBL; IF VKIND = ACTUAL THEN BEGIN ACCESS := DRCT; VLEVEL := VLEV; DPLMT := VADDR END ELSE BEGIN ERROR(155); þA TYPTR := NIL END END; IF LATTR.TYPTR <> NIL THEN IF (LATTR.TYPTR^.FORM > SUBRANGE) OR COMPTYPES(REALPTR,LATTR.TYPTR) THEN BEGIN ERROR(143); LATTR.TYPTR := NIL END; þ¬Ô INSYMBOL END ELSE BEGIN ERROR(2); SKIP(FSYS + [BECOMES,TOSY,DOWNTOSY,DOSY]) END; IF SY = BECOMES THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [TOSY,DOWNTOSY,DOSY]); IF GATTR.TYPTR <> NIL þ‚\THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN ERROR(144)  ELSE IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN BEGIN LOAD; STORE(LATTR) END ELSE ERROR(145) EþßÅND ELSE BEGIN ERROR(51); SKIP(FSYS + [TOSY,DOWNTOSY,DOSY]) END; IF SY IN [TOSY,DOWNTOSY] THEN BEGIN LSY := SY; INSYMBOL; EXPRESSION(FSYS + [DOSY]); IF GATTR.TYPTR <> NIL THEN IF GATTR.þJmTYPTR^.FORM <> SCALAR THEN ERROR(144) ELSE  IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN BEGIN LOAD; IF NOT COMPTYPES(LATTR.TYPTR,INTPTR) THEN GEN0T(58(*ORD*),þ[1GATTR.TYPTR); ALIGN(INTPTR,LC); GEN2T(56(*STR*),0,LC,INTPTR); GENLABEL(LADDR); PUTLABEL(LADDR); GATTR := LATTR; LOAD; IF NOT COMPTYPES(GATTR.TYPTRþ€´,INTPTR) THEN GEN0T(58(*ORD*),GATTR.TYPTR); GEN2T(54(*LOD*),0,LC,INTPTR); LC := LC + INTSIZE; IF LC > LCMAX THEN LCMAX := LC; IF LSY = TOSY THENþ#' GEN2(52(*LEQ*),ORD('I'),1) ELSE GEN2(48(*GEQ*),ORD('I'),1); END ELSE ERROR(145) END ELSE BEGIN ERROR(55); SKIP(FSYS + [DOSY]) END; GENLABEL(LCIX); GENUJPXJP(33(*FJþÖP*),LCIX); IF SY = DOSY THEN INSYMBOL ELSE ERROR(54); STATEMENT(FSYS); GATTR := LATTR; LOAD; IF LSY=TOSY THEN GEN1T(34(*INC*),1,GATTR.TYPTR) ELSE GEN1T(31(*DEC*),1,GATTR.TYPTR); STORE(LATTR); GENþƒßUJPXJP(57(*UJP*),LADDR); PUTLABEL(LCIX); LC := LLC; END (*FORSTATEMENT*) ; PROCEDURE WITHSTATEMENT; VAR LCP: CTP; LCNT1: DISPRANGE; LLC: ADDRRANGE; BEGIN LCNT1 := 0; LLC := LC; REPEAT IF SþY = IDENT THEN BEGIN SEARCHID([VARS,FIELD],LCP); INSYMBOL END ELSE BEGIN ERROR(2); LCP := UVARPTR END; SELECTOR(FSYS + [COMMA,DOSY],LCP); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = RECOþűRDS THEN IF TOP < DISPLIMIT THEN BEGIN TOP := TOP + 1; LCNT1 := LCNT1 + 1; WITH DISPLAY[TOP] DO BEGIN FNAME := GATTR.TYPTR^.FSTFLD; FLABEL := NIL þS¾ END;  IF GATTR.ACCESS = DRCT THEN WITH DISPLAY[TOP] DO BEGIN OCCUR := CREC; CLEV := GATTR.VLEVEL; CDSPL := GATTR.DPLMT END þy~ ELSE BEGIN LOADADDRESS; ALIGN(NILPTR,LC); GEN2T(56(*STR*),0,LC,NILPTR); WITH DISPLAY[TOP] DO BEGIN OCCUR := VREC; VDSPL :=þ¢ç LC END;  LC := LC+PTRSIZE; IF LC > LCMAX THEN LCMAX := LC END END ELSE ERROR(250) ELSE ERROR(140); TEST := SY <> COMMA; þ“É IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = DOSY THEN INSYMBOL ELSE ERROR(54); STATEMENT(FSYS); TOP := TOP-LCNT1; LC := LLC; END (*WITHSTATEMENT*) ; BEGIN (*STATEMENT*) IF SY = INTCONSTþ¾4 THEN (*LABEL*) BEGIN LLP := DISPLAY[TOP].FLABEL; WHILE LLP <> NIL DO WITH LLP^ DO IF LABVAL = VAL.IVAL THEN BEGIN IF DEFINED THEN ERROR(165); PUTLABEL(LABNAME); DEFIþÛÂNED := TRUE; GOTO 1 END ELSE LLP := NEXTLAB; ERROR(167); 1: INSYMBOL; IF SY = COLON THEN INSYMBOL ELSE ERROR(5) END; IF NOT (SY IN FSYS + [IDENT]) THENþ¡i BEGIN ERROR(6); SKIP(FSYS) END; IF SY IN STATBEGSYS + [IDENT] THEN BEGIN CASE SY OF IDENT: BEGIN SEARCHID([VARS,FIELD,FUNC,PROC],LCP); INSYMBOL; IF LCP^.KLASS = PROC THEN Cþ›çALL(FSYS,LCP) ELSE ASSIGNMENT(LCP) END; BEGINSY: BEGIN INSYMBOL; COMPOUNDSTATEMENT END; GOTOSY: BEGIN INSYMBOL; GOTOSTATEMENT END; IFSY: BEGIN INSYMBOL; IFSTþ»¦ATEMENT END; CASESY: BEGIN INSYMBOL; CASESTATEMENT END; WHILESY: BEGIN INSYMBOL; WHILESTATEMENT END; REPEATSY: BEGIN INSYMBOL; REPEATSTATEMENT END; FORSY: BEGIN INSYMBOL; FORSTATEMENT END; þ¬C WITHSY: BEGIN INSYMBOL; WITHSTATEMENT END END; IF NOT (SY IN [SEMICOLON,ENDSY,ELSESY,UNTILSY]) THEN BEGIN ERROR(6); SKIP(FSYS) END END END (*STATEMENT*) ; BEGIN (*BODY*) IF FPROCP þ‡e<> NIL THEN ENTNAME := FPROCP^.PFNAME ELSE GENLABEL(ENTNAME); IF PRCODE THEN BEGIN WRITELN(PRR); IF EXTN THEN WRITELN(PRR,' .ENT ?',FPROCP^.NAME) ELSE BEGIN WRITE(PRR,' .ENT L',ENTNAME:1,';':3); þßh IF FPROCP <> NIL THEN WRITE(PRR,FPROCP^.NAME:5) ELSE WRITE(PRR,'MAIN'); WRITELN(PRR) END; WRITELN(PRR) END; IF EXTN THEN WRITELN(PRR,'?',FPROCP^.NAME,':'); þýÕ PARMSUM := 0; CSTPTRIX := 0; TOPNEW := LCAFTERMARKSTACK; TOPMAX := LCAFTERMARKSTACK; PUTLABEL(ENTNAME); GENLABEL(SEGSIZE); GENLABEL(STACKTOP); GENCUPENT(32(*ENT1*),1,SEGSIZE); GENCUPENT(32(*ENT2*),2,STACKTOP); IF FPROCP <> NIL þÈ¡THEN (*COPY MULTIPLE VALUES INTO LOACAL CELLS*) BEGIN LLC1 := LCAFTERMARKSTACK; LCP := FPROCP^.NEXT; IF EXTN THEN BEGIN GENLABEL(PARMNO); GENCUPENT(32(*ENT3*),3,PARMNO) END; WHILE LCP <> Nþ…ìIL DO WITH LCP^ DO BEGIN IF KLASS = VARS THEN IF IDTYPE <> NIL THEN IF (VKIND=ACTUAL) AND (IDTYPE^.FORM>POWER) THEN BEGIN GEN2(50(þ¡Q*LDA*),0,VADDR); GEN2T(54(*LOD*),0,LLC1,NILPTR); PARMSUM := PARMSUM + PTRSIZE; GEN1(40(*MOV*),IDTYPE^.SIZE);  LLC1 := LLC1 + PTRSIZE END þáß ELSE BEGIN IF VKIND = ACTUAL THEN BEGIN PARMSUM := PARMSUM + IDTYPE^.SIZE; LLC1 := LLC1 + IDTYPE^.SIZE END þî‹ ELSE BEGIN PARMSUM := PARMSUM + PTRSIZE; LLC1 := LLC1 + PTRSIZE END;  ALIGN(PARMPTR,LLC1); ALIGN(PARMPTR,PARMSþ©\UM) END; LCP := LCP^.NEXT; END; END ELSE BEGIN SAVEID := ID; LOCFP := FEXTFILEP; WHILE LOCFP <> NIL DO BEGIN þRœ WITH LOCFP^ DO BEGIN ID := FILENAME; SEARCHID([VARS],LLCP);  IF LLCP^.IDTYPE <> NIL THEN IF LLCP^.IDTYPEþãl^.FORM <> FILES THEN BEGIN WRITELN(OUTPUT); WRITELN(OUTPUT,' ':8,'UNDECLARED ', 'EXTERNAL ','FILE',ID:8); þV‹ WRITE (OUTPUT,' ':CHCNT+16); END END;  LOCFP := LOCFP^.NEXTFILE END; ID := SAVEID; þ™[ OPENFILES(FEXTFILEP); END; OPENFILES(FLOCFP); LCMAX := LC; REPEAT REPEAT STATEMENT(FSYS + [SEMICOLON,ENDSY]) UNTIL NOT (SY IN STATBEGSYS); TEST := SY <> SEMICOLON; IF NOT TEST THEN INþæÛSYMBOL UNTIL TEST; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13); LLP := DISPLAY[TOP].FLABEL; (*TEST FOR UNDEFINED LABELS*)  WHILE LLP <> NIL DO WITH LLP^ DO BEGIN IF NOT DEFINED THEN BEGIN ERþ<ROR(168); WRITELN(OUTPUT); WRITELN(OUTPUT,' LABEL ',LABVAL); WRITE(OUTPUT,' ':CHCNT+16) END; LLP := NEXTLAB END; CLOSEFILES(FLOCFP); IF FPROCP <> NIL THEN BEGIN þ·m IF FPROCP^.IDTYPE = NIL THEN GEN1(42(*RET*),ORD('P')) ELSE GEN0T(42(*RET*),FPROCP^.IDTYPE); END ELSE BEGIN CLOSEFILES(FEXTFILEP); GEN1(42(*RET*),ORD('P')); END; ALIGN(PARMPTR,LCMAX);þêæ IF PRCODE THEN BEGIN WRITELN(PRR,'L',' ',SEGSIZE:4,'=',LCMAX:9); WRITELN(PRR,'L',' ',STACKTOP:4,'=',TOPMAX:9); END; IF (EXTN AND PRCODE) THEN WRITELN(PRR,'L',' ',PARMNO:4,'=',PARMSUM:9); IF FþÚ6PROCP = NIL THEN BEGIN IF PRCODE THEN WRITELN (PRR,'PCODE: '); IC := 0; (*GENERATE CALL OF MAIN PROGRAM; NOTE THAT THIS CALL MUST BE LOADED AT ABSOLUTE ADDRESS ZERO*) GEN1(41(*MST*),0); GENCUPENT(46(*CUPþvT*),0,ENTNAME); GEN0(29(*STP*)); END; END (*BODY*) ; BEGIN (*BLOCK*) FLOCFP := NIL; DP := TRUE; REPEAT IF SY = LABELSY THEN IF NOTEXTDEC THEN BEGIN INSYMBOL; LABELDECLARATION END ELSE BEþþXGIN ERROR(350); SKIP(FSYS-[LABELSY]) END; IF SY = CONSTSY THEN BEGIN INSYMBOL; CONSTDECLARATION END; IF SY = TYPESY THEN BEGIN INSYMBOL; TYPEDECLARATION END; IF SY = VARSY THEN IF NOTEXTDEC THEN BEGIþ¬7N INSYMBOL; VARDECLARATION END ELSE BEGIN ERROR(351); SKIP(FSYS-[VARSY]) END; WHILE SY IN [PROCSY,FUNCSY] DO BEGIN LSY := SY; INSYMBOL; PROCDECLARATION(LSY) END; IF NOTEXTDEC THEN IF SY <> BEGINSY THEN þ|ñ BEGIN ERROR(18); SKIP(FSYS) END UNTIL ((SY IN STATBEGSYS) OR EOF(INPUT)) OR (( SY = PERIOD ) AND EXTN); IF NOTEXTDEC AND (SY <> PERIOD) THEN BEGIN DP := FALSE; IF SY = BEGINSY THEN INSYMBOL ELSE ERROR(17); þá REPEAT BODY(FSYS + [CASESY]); IF (SY <> FSY) AND NOT(EXTN AND (SY = PERIOD)) THEN BEGIN ERROR(6); SKIP(FSYS) END UNTIL (((SY = FSY) OR (SY IN BLOCKBEGSYS)) OR EOF(INPUT)) OR (EXTN AND (SY = PERIOD)) ENDþŠO ELSE BEGIN ERROR(174); NOTEXTDEC := TRUE END END (*BLOCK*) ; PROCEDURE PROGRAMME(FSYS:SETOFSYS); VAR LEXTFP,PEXTFP,EXTFP:EXTFILEP; FILECOUNT : INTEGER; LLCP : CTP; EXTN : BOOLEAN; BEGIN IF SY = PROGSY THEN BEGIN INSYMBOL; EXTN:=þŽFALSE END ELSE EXTN := TRUE; IF SY = IDENT THEN BEGIN IF PRCODE THEN BEGIN (******** NOVA CONTROL STATEMENTS ******) (*****************************************) WRITELN(PRR,' .TITL ',ID:5); þùIF NOT(EXTN) THEN WRITELN(PRR,' .ENT PCODE'); END;  INSYMBOL; FILECOUNT := 0; EXTFP := NIL; IF NOT (SY IN [LPARENT,SEMICOLON]) THEN ERROR(14); IF SY = LPARENT THEN BEGIN REPEAT INSYMBOL; þžU IF SY = IDENT THEN BEGIN NEW(EXTFP); WITH EXTFP^ DO BEGIN FILENAME := ID; IF ((FILENAME = NA[3]) OR (FILENAME = NA[4]) OR (FILENAþÊeME = NA[33]) OR (FILENAME = NA[34]))  THEN BEGIN NEW(LLCP,VARS); WITH LLCP^ DO BEGIN NAME := FILENAME; IDTYPE := TEXTPTR; þèL KLASS := VARS; VKIND := ACTUAL; NEXT := NIL; VADDR := LCAFTERMARKSTACK+FILEMAX*FILECOUNT+4; VLEV := 1; FILECOUNT := FILECOUNT + 1 END; þÎ ENTERID(LLCP);  FTYPE := LLCP END; NEXTFILE := FEXTFILEP END; FEXTFILEP := EXTFP; INSYMBOLþ«‰; IF NOT ( SY IN [COMMA,RPARENT] ) THEN ERROR(20) END ELSE ERROR(2) UNTIL SY <> COMMA; IF SY <> RPARENT THEN ERROR(4); INSYMBOL END; IF SY <> SEMICOLON THþE EN ERROR(14) ELSE INSYMBOL; PEXTFP := NIL; WHILE EXTFP <> NIL DO BEGIN LEXTFP := EXTFP; WITH LEXTFP^ DO BEGIN EXTFP := NEXTFILE; NEXTFILE := PEXTFP END; PEXTFP := LEXTFP þ5B END; FEXTFILEP := PEXTFP; (*POINTERS ARE REVERSED*) END ELSE IF PRCODE THEN WRITELN(PRR,' .TITL EXTSEG'); IF PRCODE THEN BEGIN WRITELN(PRR,' .TXTM 1'); WRITELN(PRR,' .RDX 10'); WRITELN(PRR,' .Nþ6DREL'); END; REPEAT BLOCK(FSYS,PERIOD,NIL,NOT(EXTN),EXTN); IF SY <> PERIOD THEN ERROR(21) UNTIL (SY = PERIOD) OR EOF(INPUT); WRITELN(OUTPUT); WRITELN(OUTPUT); IF PRCODE THEN WRITELN(PRR,' .END'); IF EXTN AND NOT ERRFLAG THEN þç;HALT(318); IF ERRINX <> 0 THEN INSYMBOL END (*PROGRAMME*) ; PROCEDURE STDNAMES; BEGIN NA[ 1] := 'FALSE '; NA[ 2] := 'TRUE '; NA[ 3] := 'INPUT '; NA[ 4] := 'OUTPUT '; NA[ 5] := 'GET '; NA[ 6] := 'PUT '; NA[ 7] := 'RESþ+"ET '; NA[ 8] := 'REWRITE '; NA[ 9] := 'READ '; NA[10] := 'WRITE '; NA[11] := 'PACK '; NA[12] := 'UNPACK '; NA[13] := 'NEW '; NA[14] := 'RELEASE '; NA[15] := 'READLN '; NA[16] := 'WRITELN '; NA[17] := 'ABS '; NA[18] := 'SþÒ¥QR '; NA[19] := 'TRUNC '; NA[20] := 'ODD '; NA[21] := 'ORD '; NA[22] := 'CHR '; NA[23] := 'PRED '; NA[24] := 'SUCC '; NA[25] := 'EOF '; NA[26] := 'EOLN '; NA[27] := 'SIN '; NA[28] := 'COS '; NA[29] := þR'EXP '; NA[30] := 'SQRT '; NA[31] := 'LN '; NA[32] := 'ARCTAN '; NA[33] := 'PRD '; NA[34] := 'PRR '; NA[35] := 'MARK '; NA[36] := 'PUTRANDO'; NA[37] := 'GETRANDO'; NA[38] := 'PAGE '; NA[39] := 'EOR '; NA[40] :þšW= 'ROUND '; NA[41] := 'HALT '; END (*STDNAMES*) ; PROCEDURE ENTERSTDTYPES; VAR SP: STP; BEGIN (*TYPE UNDERLIEING:*) (******************þ¶ƒ*) NEW(INTPTR,SCALAR,STANDARD); (*INTEGER*) WITH INTPTR^ DO BEGIN SIZE := INTSIZE; FORM := SCALAR; SCALKIND := STANDARD END; NEW(REALPTR,SCALAR,STANDARD); (*REAL*) WITH REALPTRþ¡+^ DO BEGIN SIZE := REALSIZE; FORM := SCALAR; SCALKIND := STANDARD END; NEW(CHARPTR,SCALAR,STANDARD); (*CHAR*) WITH CHARPTR^ DO BEGIN SIZE := CHARSIZE; FORM := SCALAR; SCALKIND := STANDARD END; NEW(BOOLPTRþ#Ž,SCALAR,DECLARED); (*BOOLEAN*) WITH BOOLPTR^ DO BEGIN SIZE := BOOLSIZE; FORM := SCALAR; SCALKIND := DECLARED END; NEW(NILPTR,POINTER); (*NIL*) WITH NILPTR^ DO BEGIN ELþPäTYPE := NIL; SIZE := PTRSIZE; FORM := POINTER END; NEW(PARMPTR,SCALAR,STANDARD); (*FOR ALIGNMENT OF PARAMETERS*) WITH PARMPTR^ DO BEGIN SIZE := PARMSIZE; FORM := SCALAR; SCALKIND := STANDARD END ; NEW(TEXTPTR,FILES); þ£M (*TEXT*) WITH TEXTPTR^ DO BEGIN FILTYPE := CHARPTR; SIZE := CHARSIZE; FORM := FILES; RANDOMFILE := FALSE END END (*ENTERSTDTYPES*) ; PROCEDURE ENTSTDNAMES; VAR CP,CP1: CTP; I: INTEGER; BEGIN þ0ô (*NAME:*) (*******) NEW(CP,TYPES); (*INTEGER*) WITH CP^ DO BEGIN NAME := 'INTEGER '; IDTYPE := þàINTPTR; KLASS := TYPES END; ENTERID(CP); NEW(CP,TYPES); (*REAL*) WITH CP^ DO BEGIN NAME := 'REAL '; IDTYPE := REALPTR; KLASS := TYPES END; ENTERID(CP); NEW(CP,TYPES); þÙö (*CHAR*) WITH CP^ DO BEGIN NAME := 'CHAR '; IDTYPE := CHARPTR; KLASS := TYPES END; ENTERID(CP); NEW(CP,TYPES);  (*BOOLEAN*) WITH CP^ DO BEGIN NAME := 'BOOLEAþgÑN '; IDTYPE := BOOLPTR; KLASS := TYPES END; ENTERID(CP); CP1 := NIL; FOR I := 1 TO 2 DO BEGIN NEW(CP,KONST); (*FALSE,TRUE*) WITH CP^ DO BEGIN NAME := NA[I]; IDTYPE := BOOLPTR; þ§[ NEXT := CP1; VALUES.IVAL := I - 1; KLASS := KONST END; ENTERID(CP); CP1 := CP END; BOOLPTR^.FCONST := CP; NEW(CP,KONST);  (*NIL*) WITH CP^ DO BEGIN NAME := 'NIL '; þ?6IDTYPE := NILPTR; NEXT := NIL; VALUES.IVAL := 0; KLASS := KONST END; ENTERID(CP); FOR I := 36 TO 37 DO (*GETRANDOM,PUTRANDOM*) BEGIN NEW(CP,PROC,STANDARD); WITH CP^ DO BEGIN NAME := þKýNA[I]; IDTYPE := NIL; NEXT := NIL; KEY := I-22; KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP) END; NEW(CP,PROC,STANDARD); (*PAGE*) WITH CP^ DO þ%K BEGIN NAME := NA[38]; IDTYPE := NIL; NEXT := NIL; KEY := 16; KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP); NEW(CP,PROC,STANDARD); (*HALT*) WITH CP^ DOþiÄ BEGIN NAME := NA[41]; IDTYPE := NIL; NEXT := NIL; KEY := 17; KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP);  NEW(CP,FUNC,STANDARD); (*EOR*) WITH CP^ DOþj BEGIN NAME := NA[39]; IDTYPE := NIL; NEXT := NIL; KEY := 9; KLASS := FUNC; PFDECKIND := STANDARD END; ENTERID(CP); NEW(CP,FUNC,STANDARD); (*ROUND*) WITH CP^ þ,pDO BEGIN NAME := NA[40]; IDTYPE := NIL; NEXT := NIL; KEY := 12; KLASS := FUNC; PFDECKIND := STANDARD END; ENTERID(CP); FOR I := 5 TO 16 DO BEGIN NEW(CP,PROC,STANDARD); (*GET,PþÍëUT,RESET*) WITH CP^ DO (*REWRITE,READ*) BEGIN NAME := NA[I]; IDTYPE := NIL; (*WRITE,PACK*) NEXT := NIL; KEY := I - 4; (*UNPACK,PACK*) þ¸ø KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP) END; NEW(CP,PROC,STANDARD); WITH CP^ DO BEGIN NAME:=NA[35]; IDTYPE:=NIL; NEXT:= NIL; KEY:=13; KLASS:=PROC; PFDECKIND:= STANDARD þúô END; ENTERID(CP); FOR I := 25 TO 26 DO BEGIN NEW(CP,FUNC,STANDARD); WITH CP^ DO BEGIN NAME := NA[I]; IDTYPE := NIL; NEXT := NIL; KEY := I - 15; KLASS := FUNC; PFDECKIND := STANDARD ENDþÈ,; ENTERID(CP) END; FOR I := 17 TO 24 DO BEGIN NEW(CP,FUNC,STANDARD); (*ABS,SQR,TRUNC*) WITH CP^ DO (*ODD,ORD,CHR*) BEGIN NAME := NA[I]; IDTYPEþì := NIL; (*PRED,SUCC*) NEXT := NIL; KEY := I - 16; KLASS := FUNC; PFDECKIND := STANDARD END; ENTERID(CP) END; NEW(CP,VARS); (*PARAMETER OF PREDECLARED FUNCTIONS*) WITþÑYH CP^ DO BEGIN NAME := ' '; IDTYPE := REALPTR; KLASS := VARS; VKIND := ACTUAL; NEXT := NIL; VLEV := 1; VADDR := 0 END; FOR I := 27 TO 32 DO BEGIN NEW(CP1,FUNC,DECLARED,ACTUAL); (*SIN,COS,EXP*) þ=! WITH CP1^ DO (*SQRT,LN,ARCTAN*) BEGIN NAME := NA[I]; EXTDEC := FALSE; IDTYPE := REALPTR; NEXT := CP; FORWDECL := FALSE; EXTERN := TRUE; PFLEV := 0; PFNAME := I - 12; KLASS := FUNC; PFþV]DECKIND := DECLARED; PFKIND := ACTUAL END; ENTERID(CP1) END END (*ENTSTDNAMES*) ; PROCEDURE ENTERUNDECL; BEGIN NEW(UTYPPTR,TYPES); WITH UTYPPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; KLASS := TYPES END; þ£î NEW(UCSTPTR,KONST); WITH UCSTPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; NEXT := NIL; VALUES.IVAL := 0; KLASS := KONST END; NEW(UVARPTR,VARS); WITH UVARPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; VKIND := AþÞîCTUAL; NEXT := NIL; VLEV := 0; VADDR := 0; KLASS := VARS END; NEW(UFLDPTR,FIELD); WITH UFLDPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; NEXT := NIL; FLDADDR := 0; KLASS := FIELD END; NEW(UPRCPTR,PROC,DECLARþopED,ACTUAL); WITH UPRCPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; FORWDECL := FALSE; EXTDEC := FALSE; NEXT := NIL; EXTERN := FALSE; PFLEV := 0; GENLABEL(PFNAME); KLASS := PROC; PFDECKIND := DECLARED; PFKIND := ACTUAL ENDþ{; NEW(UFCTPTR,FUNC,DECLARED,ACTUAL); WITH UFCTPTR^ DO BEGIN NAME := ' '; EXTDEC := FALSE; IDTYPE := NIL; NEXT := NIL; FORWDECL := FALSE; EXTERN := FALSE; PFLEV := 0; GENLABEL(PFNAME); KLASS := FUNC; PFDECKIND := DECLAREþ62D; PFKIND := ACTUAL END END (*ENTERUNDECL*) ; PROCEDURE INITSCALARS; BEGIN FWPTR := NIL; PRTABLES := FALSE; LIST := TRUE; PRCODE := TRUE; DEBUG := TRUE; ERRFLAG := FALSE; FOR IC := 1 TO MAXERRSET DO ERRORS[IC] := []; þZw DP := FALSE; PRTERR := TRUE; ERRINX := 0; INTLABEL := 0; KK := 8; FEXTFILEP := NIL; LC := LCAFTERMARKSTACK+FILEBUFFER*FILEMAX; (* NOTE IN THE ABOVE RESERVATION OF BUFFER STORE FOR 2 TEXT FILES *) IC := 3; EOL := TRUE; LINECOUNT := 0; þzÕ CH := ' '; CHCNT := 0; GLOBTESTP := NIL; MXINT10 := MAXINT DIV 10; DIGMAX := STRGLGTH - 1; END (*INITSCALARS*) ; PROCEDURE INITSETS; BEGIN CONSTBEGSYS := [ADDOP,INTCONST,REALCONST,STRINGCONST,IDENT]; SIMPTYPEBEGSYS := [LPARENT] + CþëDONSTBEGSYS; TYPEBEGSYS:=[ARROW,PACKEDSY,ARRAYSY,RECORDSY,SETSY,FILESY,RANDOMSY]+SIMPTYPEBEGSYS; TYPEDELS := [ARRAYSY,RECORDSY,SETSY,FILESY]; BLOCKBEGSYS := [LABELSY,CONSTSY,TYPESY,VARSY,PROCSY,FUNCSY, BEGINSY]; SELECTSYSþ_Q := [ARROW,PERIOD,LBRACK]; FACBEGSYS := [INTCONST,REALCONST,STRINGCONST,IDENT,LPARENT,LBRACK,NOTSY]; STATBEGSYS := [BEGINSY,GOTOSY,IFSY,WHILESY,REPEATSY,FORSY,WITHSY, CASESY]; END (*INITSETS*) ; PROCEDURE INITTABLES; PROþ[CEDURE RESWORDS; BEGIN RW[ 1] := 'IF '; RW[ 2] := 'DO '; RW[ 3] := 'OF '; RW[ 4] := 'TO '; RW[ 5] := 'IN '; RW[ 6] := 'OR '; RW[ 7] := 'END '; RW[ 8] := 'FOR '; RW[ 9] := 'VAR '; RW[10þ§…] := 'DIV '; RW[11] := 'MOD '; RW[12] := 'SET '; RW[13] := 'AND '; RW[14] := 'NOT '; RW[15] := 'THEN '; RW[16] := 'ELSE '; RW[17] := 'WITH '; RW[18] := 'GOTO '; RW[19] := 'CASE '; RW[20] := 'TYPE '; þ)5 RW[21] := 'FILE '; RW[22] := 'BEGIN '; RW[23] := 'UNTIL '; RW[24] := 'WHILE '; RW[25] := 'ARRAY '; RW[26] := 'CONST '; RW[27] := 'LABEL '; RW[28] := 'REPEAT '; RW[29] := 'RECORD '; RW[30] := 'DOWNTO '; RW[3þ�1] := 'PACKED '; RW[32] := 'RANDOM '; RW[33] := 'FORWARD '; RW[34] := 'PROGRAM '; RW[35] := 'FUNCTION'; RW[36] := 'EXTERNAL'; RW[37] := 'PROCEDUR'; FRW[1] := 1; FRW[2] := 1; FRW[3] := 7; FRW[4] := 15; FRW[5] := 22; FRW[6] := 28þåÞ; FRW[7] := 33; FRW[8] := 35; FRW[9] := 38; END (*RESWORDS*) ; PROCEDURE SYMBOLS; BEGIN RSY[1] := IFSY; RSY[2] := DOSY; RSY[3] := OFSY; RSY[4] := TOSY; RSY[5] := RELOP; RSY[6] := ADDOP; RSY[7] := ENDSY; RSY[8] := FORSY; RSY[9þr©] := VARSY; RSY[10] := MULOP; RSY[11] := MULOP; RSY[12] := SETSY; RSY[13] := MULOP; RSY[14] := NOTSY; RSY[15] := THENSY; RSY[16] := ELSESY; RSY[17] := WITHSY; RSY[18] := GOTOSY; RSY[19] := CASESY; RSY[20] := TYPESY; RSY[21] := FILESþ$¶Y; RSY[22] := BEGINSY; RSY[23] := UNTILSY; RSY[24] := WHILESY; RSY[25] := ARRAYSY; RSY[26] := CONSTSY; RSY[27] := LABELSY; RSY[28] := REPEATSY; RSY[29] := RECORDSY; RSY[30] := DOWNTOSY; RSY[31] := PACKEDSY; RSY[32] := RANDOMSY; RSY[þj33] := FORWARDSY; RSY[34] := PROGSY; RSY[35] := FUNCSY; RSY[36] := EXTRNSY; RSY[37] := PROCSY; SSY['+'] := ADDOP; SSY['-'] := ADDOP; SSY['*'] := MULOP; SSY['/'] := MULOP; SSY['('] := LPARENT; SSY[')'] := RPARENT; SSY['$'] := Oþ’ÃTHERSY; SSY['='] := RELOP; SSY[' '] := OTHERSY; SSY[','] := COMMA; SSY['.'] := PERIOD; SSY[''''] := OTHERSY; SSY['['] := LBRACK; SSY[']'] := RBRACK; SSY[':'] := COLON; SSY['^'] := ARROW; SSY['<'] := RELOP; SSY['>'] := RELOP; Sþ©¹SY[';'] := SEMICOLON; END (*SYMBOLS*) ; PROCEDURE RATORS; VAR I: INTEGER; CH: CHAR; BEGIN FOR I := 1 TO 37 (*NR OF RES WORDS*) DO ROP[I] := NOOP; ROP[5] := INOP; ROP[10] := IDIV; ROP[11] := IMOD; ROP[6] := OROP; ROP[13]þ># := ANDOP; FOR CH := CHR(ORDMINCHAR) TO CHR(ORDMAXCHAR) DO SOP[CH] := NOOP; SOP['+'] := PLUS; SOP['-'] := MINUS; SOP['*'] := MUL; SOP['/'] := RDIV; SOP['='] := EQOP; SOP['<'] := LTOP; SOP['>'] := GTOP; END (*RATORS*) ; PROCþ5¹EDURE PROCMNEMONICS; BEGIN SNA[ 1] :=' GET'; SNA[ 2] :=' PUT'; SNA[ 3] :=' RDI'; SNA[ 4] :=' RDR'; SNA[ 5] :=' RDC'; SNA[ 6] :=' WRI'; SNA[ 7] :=' WRO'; SNA[ 8] :=' WRR'; SNA[ 9] :=' WRC'; SNA[10] :=' WRS'; SNA[11] :=' OPN'; SNA[12] :þSé=' NEW'; SNA[13] :=' RST'; SNA[14] :=' ELN'; SNA[15] :=' SIN'; SNA[16] :=' COS'; SNA[17] :=' EXP'; SNA[18] :=' SQT'; SNA[19] :=' LOG'; SNA[20] :=' ATN'; SNA[21] :=' RLN'; SNA[22] :=' WLN'; SNA[23] :=' SAV'; SNA[24] :=' CLS'; SNA[25]þÜ :=' WDR'; SNA[26] :=' RRR'; SNA[27] :=' PAG'; SNA[28] :=' EOR'; SNA[29] :=' RSE'; SNA[30] :=' RWR'; SNA[31] :=' RND' END (*PROCMNEMONICS*) ; PROCEDURE INSTRMNEMONICS; BEGIN MN[0] :=' ABI'; MN[1] :=' ABR'; MN[2] :=' ADI'; MN[3] :='þ܈ ADR'; MN[4] :=' AND'; MN[5] :=' DIF'; MN[6] :=' DVI'; MN[7] :=' DVR'; MN[8] :=' EOF'; MN[9] :=' FLO'; MN[10] :=' FLT'; MN[11] :=' INN'; MN[12] :=' INT'; MN[13] :=' IOR'; MN[14] :=' MOD'; MN[15] :=' MPI'; MN[16] :=' MPR'; MN[17] :='þ< NGI'; MN[18] :=' NGR'; MN[19] :=' NOT'; MN[20] :=' ODD'; MN[21] :=' SBI'; MN[22] :=' SBR'; MN[23] :=' SGS'; MN[24] :=' SQI'; MN[25] :=' SQR'; MN[26] :=' STO'; MN[27] :=' TRC'; MN[28] :=' UNI'; MN[29] :=' STP'; MN[30] :=' CSP'; MN[31] :='þ±± DEC'; MN[32] :=' ENT'; MN[33] :=' FJP'; MN[34] :=' INC'; MN[35] :=' IND'; MN[36] :=' IXA'; MN[37] :=' LAO'; MN[38] :=' LCA'; MN[39] :=' LDO'; MN[40] :=' MOV'; MN[41] :=' MST'; MN[42] :=' RET'; MN[43] :=' SRO'; MN[44] :=' XJP'; MN[4þð55] :=' CHK'; MN[46] :=' CUP'; MN[47] :=' EQU'; MN[48] :=' GEQ'; MN[49] :=' GRT'; MN[50] :=' LDA'; MN[51] :=' LDC'; MN[52] :=' LEQ'; MN[53] :=' LES'; MN[54] :=' LOD'; MN[55] :=' NEQ';  MN[56] :=' STR'; MN[57] :=' UJP'; MN[58] :=' ORD'; MN[5þÔq9] :=' CHR'; MN[60] :=' UJC'; MN[61] := ' CXP'; MN[62] :=' HLT'; END (*INSTRMNEMONICS*) ; PROCEDURE CHARTYPES; VAR I : INTEGER; BEGIN FOR I := ORDMINCHAR TO ORDMAXCHAR DO CHARTP[CHR(I)] := ILLEGAL; CHARTP['A'] := LEþ7×TTER ; CHARTP['B'] := LETTER ; CHARTP['C'] := LETTER ; CHARTP['D'] := LETTER ; CHARTP['E'] := LETTER ; CHARTP['F'] := LETTER ; CHARTP['G'] := LETTER ; CHARTP['H'] := LETTER ; CHARTP['I'] := LETTER ; CHARTP['J'] := LETTER þ€§; CHARTP['K'] := LETTER ; CHARTP['L'] := LETTER ; CHARTP['M'] := LETTER ; CHARTP['N'] := LETTER ; CHARTP['O'] := LETTER ; CHARTP['P'] := LETTER ; CHARTP['Q'] := LETTER ; CHARTP['R'] := LETTER ; CHARTP['S'] := LETTER ; CHAþîRTP['T'] := LETTER ; CHARTP['U'] := LETTER ; CHARTP['V'] := LETTER ; CHARTP['W'] := LETTER ; CHARTP['X'] := LETTER ; CHARTP['Y'] := LETTER ; CHARTP['Z'] := LETTER ; CHARTP['0'] := NUMBER ; CHARTP['1'] := NUMBER ; CHARTP['2'] := þÞzNUMBER ; CHARTP['3'] := NUMBER ; CHARTP['4'] := NUMBER ; CHARTP['5'] := NUMBER ; CHARTP['6'] := NUMBER ; CHARTP['7'] := NUMBER ; CHARTP['8'] := NUMBER ; CHARTP['9'] := NUMBER ; CHARTP['+'] := SPECIAL; CHARTP['-'] := SPECIþê˜AL; CHARTP['*'] := SPECIAL; CHARTP['/'] := SPECIAL; CHARTP['('] := SPECIAL; CHARTP[')'] := SPECIAL; CHARTP['$'] := SPECIAL; CHARTP['='] := SPECIAL; CHARTP[' '] := SPECIAL; CHARTP[','] := SPECIAL; CHARTP['.'] := SPECIAL; CþÚòHARTP[''''] := SPECIAL; CHARTP['['] := SPECIAL; CHARTP[']'] := SPECIAL; CHARTP[':'] := SPECIAL; CHARTP['^'] := SPECIAL; CHARTP[';'] := SPECIAL; CHARTP['<'] := SPECIAL; CHARTP['>'] := SPECIAL; ORDINT['0'] := 0; ORDINT['1'] := 1; þzÍORDINT['2'] := 2; ORDINT['3'] := 3; ORDINT['4'] := 4; ORDINT['5'] := 5; ORDINT['6'] := 6; ORDINT['7'] := 7; ORDINT['8'] := 8; ORDINT['9'] := 9; END; PROCEDURE INITDX; BEGIN CDX[ 0] := 0; CDX[ 1] := 0; CDX[ 2] := -þÒ�1; CDX[ 3] := -2; CDX[ 4] := -1; CDX[ 5] := -4; CDX[ 6] := -1; CDX[ 7] := -2; CDX[ 8] := 0; CDX[ 9] := 1; CDX[10] := 1; CDX[11] := -4; CDX[12] := -4; CDX[13] := -1; CDX[14] := -1; CDX[15] := -1; CDX[16] := -2; CDX[17] := 0; CDX[þÇh18] := 0; CDX[19] := 0; CDX[20] := 0; CDX[21] := -1; CDX[22] := -2; CDX[23] := 3; CDX[24] := 0; CDX[25] := 0; CDX[26] := -2; CDX[27] := -1; CDX[28] := -4; CDX[29] := 0; CDX[30] := 0; CDX[31] := 0; CDX[32] := 0; CDX[33] := þ›-1; CDX[34] := 0; CDX[35] := 0; CDX[36] := -1; CDX[37] := +1; CDX[38] := +1; CDX[39] := +4; CDX[40] := -2; CDX[41] := 0; CDX[42] := 0; CDX[43] := -1; CDX[44] := -1; CDX[45] := 0; CDX[46] := 0; CDX[47] := -1; CDX[48] := -1; CDXþ5‹[49] := -1; CDX[50] := +1; CDX[51] := +4; CDX[52] := -1; CDX[53] := -1; CDX[54] := +4; CDX[55] := -1; CDX[56] := -1; CDX[57] := 0; CDX[58] := 0; CDX[59] := 0; CDX[60] := 0; CDX[61] := 0; CDX[62] := -1; PDX[ 1] := -1; PDX[ 2] :=þ½ -1; PDX[ 3] := -2; PDX[ 4] := -3; PDX[ 5] := -2; PDX[ 6] := -3; PDX[ 7] := -3; PDX[ 8] := -4; PDX[ 9] := -3; PDX[10] := -4; PDX[11] := -3; PDX[12] := -2; PDX[13] := -1; PDX[14] := 0; PDX[15] := 0; PDX[16] := 0; PDX[17] := 0; PDþ„X[18] := 0; PDX[19] := 0; PDX[20] := 0; PDX[21] := -1; PDX[22] := -1; PDX[23] := -1; PDX[24] := -1;  PDX[25] := -2; PDX[26] := -2; PDX[27] := -1; PDX[28] := -1; PDX[29] := -2; PDX[30] := -2; PDX[31] := 0 END; BEGIN (*INITTABLES*þ˜5) RESWORDS; SYMBOLS; RATORS; INSTRMNEMONICS; PROCMNEMONICS; CHARTYPES; INITDX; END (*INITTABLES*) ; PROCEDURE FULLINITALISATION; BEGIN (*INITIALIZE*) (************) INITSCALARS; INITSETS; INITTABLES; (*ENTER STANDARD NAMES AND STANþx-DARD TYPES:*) (******************************************) LEVEL := 0; TOP := 0; WITH DISPLAY[0] DO BEGIN FNAME := NIL; FLABEL := NIL; OCCUR := BLCK END; ENTERSTDTYPES; STDNAMES; ENTSTDNAMES; ENTERUNDECL; TOP := 1; LEVEL := 1; WITH DISþ§ÕPLAY[1] DO BEGIN FNAME := NIL; FLABEL := NIL; OCCUR := BLCK END; END; BEGIN FULLINITALISATION; (*COMPILE:*) (**********) INSYMBOL; PROGRAMME(BLOCKBEGSYS+STATBEGSYS-[CASESY]); IF ERRFLAG THEN BEGIN ERRORREPORT; HALT(31þlc9) END; END. ÿR2IREAL.SRû­ ó >þúšì .TITL R2IREAL ; A DUMMY SEGMENT TO SATISFY ALL UNDEFINED CUES ; TO REAL NUMBER OPERATIONS .ENT PADR,PSBR,PFLT,PFLO,PTRC,PNGR .ENT PSQR,PABR,PMPR,PDVR .EXTN PUNDF .NREL PADR: PSBR: PFLT: PFLO: PTRC: PNGR: PSQR: PABR: PMPR: PDVR: .PUND .END ÿR2SMYP.SRû­U,þݽ .TITL R2SMYP .ENT .MPY,.SV0 .EXTN MPY .ZREL .SV0: 0 .NREL .MPY : N. : STA 3,N.1 SUB 3,3 MOVL# 1,1,SZC ADD 2,3 MOVL# 2,2,SZC ADD 1,3 STþyS—A 3,N.2 MPY LDA 3,N.2 SUB 3,0 JMP @.+1 N.1: 0 N.2: 0 .END ÿR2SBOOLEAN.SRû­ õþvR .TITL R2SBOOLEAN ; THE P-CODE INTERPRETER'S BOOLEAN OPERATIONS .ENT PNOT,PAND,PIOR .NREL PNOT: LTOP1 1 ;"NOT" MOV 1,1,SZR ;SET AC1=1 (TRUE) IF CURRENTLY 0 SUB 1,1,SKP ; 0 IF 1 INC 1,1 STOP1 1 NEXT PAND: POP1 2 ;"AND" LTOP1 1 SUB 0,0 þ1i ANDR 2,1 ;KEEP B15 IN CARRY MOVL 0,0 ; RESULT OF "AND" IS A SINGLE BIT STOP1 0 NEXT PIOR: POP1 2 ;"INCLUSIVE OR"  LTOP1 1 SUB 0,0 COM 2,2 ;DELETE COMMON 1'S FROM AC1 AND 2,1 ADCR 2,1 ;OR MOVL 0,0 ;RESULT OF "IOR" IS A SINGLE BIT STOP1 0 þJRNEXT .END ÿMAKEDGSYMB.CMû£m þ(š·DELETE MAC.PS;^ MAC/N/S NBID FPID OSID^ ÿR2SDECODER.SRû­ ó 2þ· .TITL R2SDECODER .EXTD ITAB0,ITAB1 .ENT PUNDF ; THE INTERPRETER INSTRUCTION DECODER .LOC 40 ; SPECIAL PAGE ZERO LOCN. CONTAINING INTER ; ENTRY ADDRESS OF INTERPRETER .NREL OPMSK: 037400 ; MASK FOR OP-CODE PMSK: 000377 ; MASK FOR P-FIELD þ7INTER: LDA 0,@PC ; AC0:= NEXT INSTR. LDA 3,OPMSK ANDS 0,3 ; AC3:= OP-CODE LDA 1,PMSK AND 0,1 ; AC1(P):= P-FIELD ADDL# 0,0,SNC ; TEST Q1-BIT:- JMP @ITAB0,3 ; Q1=0: ENTER INTERP. TABLE MOVL# 0,0,SNC ; Q1=1: TEST Q2-BIT:- JMP .+4 MOV 1,2 ; Q2=þ¸_Ÿ1: AC2(Q):= P-FIELD SUB 1,1 ; AC1(P):= 0; JMP @ITAB1,3 ; ENTER INTERP. TABLE LDA 2,@PC ; Q2=0: AC2(Q):= Q-FIELD JMP @ITAB1,3 ; ENTER INTERP. TABLE PUNDF: ERR.P PEROP .END ÿR2SDBIN.SRû­ þ�; .TITL R2SDBIN .ENT .DBIN .ENT .DBNI .EXTD .PTCH .EXTD .GTCH .LOC 0 .ZREL Z. : .NREL .DBNI: N. : 54464 ; 0/ STA 3,N.9 50462 þ©g ; 1/ STA 2,N.8 20471 ; 2/ LDA 0,N.16 JSR @.PTCH ; 3/ JSR @.PTCH 102400 ; 4/ SUB 0,0 JSR @.PTCH ; 5/ JSR @.PTCH 4þ×§03 ;  6/ JMP N.1 .DBIN: 54455 ; 7/ STA 3,N.9 50453 ; 10/ STA 2,N.8 N.1: 102400 ; 11/ SUB 0,0 40462 ; 12/ STA 0,N.1þ^ 7 40452 ; 13/ STA 0,N.10 40452 ; 14/ STA 0,N.11 JSR @.GTCH ; 15/ JSR @.GTCH 24451 ; 16/ LDA 1,N.12 106405 ; þ>Ó 17/ SUB  0,1,SNR 405 ; 20/ JMP N.2 24447 ; 21/ LDA 1,N.13 106404 ; 22/ SUB 0,1,SZR 403 ; 23/ JMP N.3 10441 þB ; 24/ ISZ N.10 N.2: JSR @.GTCH ; 25/ JSR @.GTCH N.3: 24443 ; 26/ LDA 1,N.14 30443 ; 27/ LDA 2,N.15 142033 ; 30/ ADCZ# 2,0,SNC þ͉  106032 ; 31/ ADCZ# 0,1,SZC 406 ; 32/ JMP N.4 122400 ; 33/ SUB 1,0 24432 ; 34/ LDA 1,N.11 4420 ; 35/ JSþGòR N.7 44430 ; 36/ STA 1,N.11 766 ; 37/ JMP N.2 N.4: 24426 ; 40/ LDA 1,N.11 125122 ; 41/ MOVZL 1,1,SZC 10432  þ 0 ; 42/ ISZ N.17 14422 ; 43/ DSZ N.10 406 ; 44/ JMP N.5 125005 ; 45/ MOV 1,1,SNR 14426 ; 46/ DSZ N.17 124641 þíM ; 47/ NEGOR 1,1,SKP 125240 ; 50/ MOVOR 1,1 402 ; 51/ JMP N.6 N.5: 125220 ; 52/ MOVZR 1,1 N.6: 30410 ; 53/ LDA 2,N.8 þXe 2410 ; 54/ JMP @N.9 N.7: 131120 ; 55/ MOVZL 1,2 151120 ; 56/ MOVZL 2,2 147000 ; 57/ ADD 2,1 125120 ; 60/ MOVZL 1,1 þ!Ñ 107000 ; 61/ ADD 0,1 1400 ; 62/ JMP 0,3 N.8: 0 ; 63/ JMP 0 N.9: 0 ; 64/ JMP 0 N.10: 0  ; 65/ JMP 0 N.11þdx: 0 ; 66/ JMP 0 N.12: 53 ; 67/ JMP 53 N.13: 55 ; 70/ JMP 55 N.14: 60 ; 71/ JMP 60 N.15: 71 ; 72/ JMP 71 N.16: þo) 123 ; 73/ JMP 123 N.17: 0 ; 74/ JMP 0 .END ÿSETUPAZ.ûkjþ Ò (*========== SETUPAZ STARTS FROM HERE UP TO END OF THIS PROGRAM ==========*) BEGIN (* OF MAIN BODY *) WRITELN(PRR, '; SETUPA BEGINS'); WRITELN; WRITELN; WRITELN; FOR I := 0 TO TABSIZE0 DO BEGIN PCODETABLE[I].PCODEþYù := ' '; PCODETABLE[I].SEMICODE := ' '; PCODETABLE[I].ACTION := 0 END; ZERO := ORD('0'); COMPLETETASK; WRITELN('PROCEDURE COMPLE', 'TABLE;'); WRITELN; WRITELN; J := 1; K := 0; WRITEþ¬ÊLN('PROCEDURE TABLE', '0;'); WRITELN('BEGIN'); FOR I := 0 TO TABSIZE0 DO BEGIN WITH PCODETABLE[I] DO BEGIN IF SEMICODE[1] <> ' ' THEN BEGIN IF K MOD 30 = 29 THEN þ¢ BEGIN WRITELN('END;'); WRITELN; WRITELN; WRITELN('PROCEDURE TABLE', J : 1, '; '); WRITELN('BEGIN'); J := J + 1; þÓX END; WRITE(' ' : 5, 'WITH PCODETABLE[', I : 1, '] ' : 2, 'DO BEGIN PCODE:=', '''', PCODE : 4, '''; ' : 3, 'SEMICODE:=' : 10); IF SEMICODE[1] = '1' THEN PETTY := þJì-8 ELSE PETTY := 0; WRITELN( (((( PETTY + ORD(SEMICODE[2]) - ZERO) * 8 + ORD(SEMICODE[3]) - ZERO) * 8 + ORD(SEMþ5¢ICODE[4]) - ZERO) * 8 +  ORD(SEMICODE[5]) - ZERO) * 8 + ORD(SEMICODE[6]) - ZERO : 6, '; ' : 2, 'ACTION:=' : 8, ACTION : 4, ' END;'); þ�Ú K := K + 1; END END END; WRITELN('END;'); WRITELN; WRITELN; WRITELN; WRITELN('BEGIN'); FOR I := 0 TO J - 1 DO WRITELN(' ' : 5, 'TABLE' : 5, I : 1, '; '); WRITELN('END;'); þñ²iWRITELN; WRITELN; WRITELN(PRR, '; HASH TABLE SIZ', 'E = ' : 8, TABLESIZE : 1); WRITELN(PRR, '; TOTAL PCODE EN', 'TRIES = ' : 8, ENTRIES : 1); WRITELN(PRR, '; LOADING FACTOR', ' = ' : 8, ENTRIES/TABLESIZE : 1) END. ÿR2RFT.SRû­ ó =þTÓ .TITLE R2RFT .ENT XRDR,XWRR .EXTD WSA,PUTFL,LHB .EXTN FENT .EXTN WRITE,BLANK,CHINF,BFHLF,BFPTR .EXTN PURGE .NREL ;THESE ROUTINES USE THE FP INTERPRETER BRKC=2 WDISP=121 ;# OF CHARS FOR NUMBER DDISP=122 ;# OF CHARS AFTER . XRDR: SUBZL 0,0 ;SEþ MT FLAG STA 0,@.CHF ;IN CHIN FENT ;ENTER DITTO FDFC 0 ;FP NUMBER INTO FP AC0 FSTA 0,TEMPR ;COPY IT FEXT ;EXIT LDA 3,WSA LDA 3,0,3 ;PICK UP FLAG MOV 3,3,SNR ;SKIP IF NON-ZERO JMP .+3 ERR.P PERFI ;REPORT ERROR POP1 2 MOVZR 2,2 DSZ Fþ,“ST,2 ;MARK BUFFER EMPTY JMP .+1 ;EOL MAY BE SHOWING POP1 2 ;GET DESTINATION MOVZR 2,2 LDA 0,TEMPR STA 0,0,2 ;STORE FIRST HALF LDA 0,TEMPR+1 STA 0,1,2 ;STORE LAST HALF NEXT TEMPR: 0 0 .CHF: CHINF .RITE: WRITE .BLNK: BLANK .BHLF: BFHLF .BPTR: BþàöFPTR .PRGE: PURGE WIDTH: 31. CHADP: 4 BIGE: (24+64.)*256. HOLDR: 0 0 XWRR: POP1 2 ;FBA MOVZR 2,2 LDA 1,CHADP ;# CHARS AFTER . POP1 0 ;# CHARS IN TOTO STA 0,AD1 ;COMPATABILITY WITH WRI IN PURGE POP1 3 STA 3,HOLDR+1 ;FIRST HALF POP1 3 STA 3,HOLþ¨RDR ;LAST HALF LDA 3,WSA ;FP WRITE AREA STA 1,DDISP,3 ;PLACES AFTER DP LDA 1,WIDTH ;PLACES MAXIMUM STA 1,WDISP,3 SUB 1,1 ;CLEAR FLAGS STA 1,0,3 ;IN WSA LDA 1,AD1 ;FIELD WIDDTH FROM USER MOV 1,1,SNR ;SKIP IF WIDTH >0 JMP EFORM LDA 1,HOLDR ;þÖFP NUMBER PART 1 LDA 3,LHB ;MASK ANDZL 3,1 ;KEEP EXPONENT ANDD .. MOVZR 1,1 ;LOSE MANTISSA SIGN LDA 3,BIGE ;LARGEST EXPONENT FOR F FORMAT ADCZ 3,1,SZC ;SKIP IF AC1(EXP)<=AC3(BIGE) JMP EFORM FFORM: FENT ;FP ENTER FLDA 0,HOLDR ;LOAD NUMBER FFþ_�DCF 0 ;PUT IN BUFF FEXT ;FP EXIT ACS 0,2 OK JMP TESTF EFORM: FENT FLDA 0,HOLDR FFDC 0 FEXT TESTF: LDA 3,WSA LDA 3,0,3 ;PICK UP FLAG MOV 3,3,SNR ;ERROR IF NON ZERO JMP .+3 ERR.P PERFO ;REPORT ERROR JSR @.PRGE ;EMPTIES AND TIDIES BUFFER þ|Ž.END ÿR2IOUTL.SRû­ ûþb. .TITL R2IOUTL .ENT .BPUT,.BGET,.GCH,.FIND .ENT TEMP .EXTN ERR2,ERRP,PCODE .EXTD CHAN,SPACE,TEMP2,CNTAD,TABAD .EXTD LHB,RHB .TXTM 1 .ZREL ; DEFINE SOME CONSTANTS IN PAGE ZERO THAT ARE ASSUMED TO HAVE ; ADDRESSES 50 AND 51.... ERR2 ; .ERR2 = þ¯50 ERRP ; .ERRP = 51 .BPUT: BPUT .BGET: BGET .GCH: GCHAN .CTAB: CTAB .BTAB: BTAB-1 .OTAB: OTAB-1 .TTAB: TTAB-1 .FIND: FIND TEMP: 0 .NREL ; ROUTINE TO WRITE A BYTE TO A GIVEN BYTE ADDRESS ; ; CONDITIONS ... ; ; ENTRY - AC0 - BYTE TO BE WRITTEN(þù�IN LHB) ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - UNDEFINED BPUT: STA 3,BLNK ;LINK STORED LDA 1,LHB ;MASK FOR LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMINE WHþÇCICH BYTE MOVS 0,0,SKP ;RIGHT OR LEFT? MOVS 1,1 LDA 3,0,2 ;LOAD FROM WORD ADDRESS AND 1,3 ;MASK OUT OTHER BYTE ADD 0,3 ;REPLACE WITH NEW BYTE STA 3,0,2 ;AND RESTORE JMP @BLNK ; ROUTINE TO READ A BYTE FROM A GIVEN BYTE ADDRESS ; ; CONDITIONS ..þË». ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - VALUE OF BYTE READ(IN LHB) ; AC1 - UNDEFINED ; AC2 - UNDEFINED BGET: STA 3,BLNK ;STORE LINK LDA 1,LHB ;BYTE MASK FOþo÷R LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMINE WHICH BYTE MOVS 1,1 ;RIGHT OR LEFT? LDA 0,0,2 ;LOAD FROM WORD ADDRESS. AND 1,0,SZC ;EXTRACT BYTE MOVS 0,0 ;SWOP INTO LHB  JMP @BLNK ; ROUTINE TO GET THE CHANNEL NO. AND RECORD LENGTH OF SPECIFIC FILE. ;þÌ� ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - WORD ADDRESS OF FBA ; ; RETURN - AC0 - CHANNEL NUMBER ; AC1 - RECORD LENGTH ; AC2 - WORD ADDRESS OF FBA ; ; NORMAL RETURN - NONE CHAþÙRACTER INPUT/OUTPUT ; RETURN + 1 - CHARACTER INPUT/OUTPUT GCHAN: STA 3,BLNK ;STORE LINK LDA 1,LHB ;MASK FOR LEFT HAND BYTE LDA 0,FCH,2 ;CHANNEL WORD OF FBA ANDS 0,1,SNR ;ISOLATE RECORD LENGTH ISZ BLNK ;AND TEST IF CHAR I/O. MOVZL 1,1 ;MAKþ)‘E IT A BYTE COUNT LDA 3,RHB ;MASK CHANNEL NUMBER AND 3,0 STA 0,CHAN JMP @BLNK BLNK: 0 ; ROUTINE TO SEARCH TABLES FOR BUFFER DETAILS. ; ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - CHANNEL NUMBER OF þëþFILE (OR ZERO) ; ; RETURN - AC0 - BYTE ADDRESS OF BUFFER AREA(BASE) ; AC1 - ADDRESS OF BYTE COUNT (DISPLACEMENT) ; AC2 - WORD ADDRESS OF ENTRY IN CHANNEL TABLE FIND: LDA 0,TSIZE ;SIZE OF TABLE LDA 1,.CTAB ;ADDRESS OF CHANNEL TABþ¤ÁLE(TOP) STA 1,TEMP RETST: LDA 1,@TEMP ;SEARCH UNTIL A MATCH OR ERROR SUB 2,1,SNR JMP RETRN ;A MATCH IS FOUND DSZ TEMP INC 0,0,SZR ;TABLE EXHAUSTED? JMP RETST ;NO,FIND NEXT ERR.P ;YES, BLOW..... 411 RETRN: LDA 1,.OTAB SUBZ 0,1 ;ADDRESS OF BþYTE COUNT(DISPLACEMENT) STA 1,CNTAD LDA 1,@CNTAD ;LOAD ACTUAL COUNT LDA 2,C200 SUBZ# 1,2,SZC ;TEST IF LINE TOO LONG JMP .+3 JSR .NERR ;LINE LIMIT FLAGGED TO CLI 22 LDA 1,CNTAD LDA 2,.TTAB SUB 0,2 ;ENTRY IN THE TABLE TAB COUNTS STA 2,TABAD LDþ<A 2,.BTAB SUB 0,2 LDA 0,0,2 ;SET BUFFER ADDRESS(BASE) LDA 2,TEMP ;CHANNEL TABLE ADDRESS JMP 0,3 .NERR: LDA 2,0,3 ;PICK UP ERROR CODE ERR.2 C200: 200 TSIZE: -4 ;TABLE SIZE 0 0 0 CTAB: 0 ;TOP OF CHANNEL TABLE OTAB: .BLK 4 ;COUNT TABLE TTAB: .Bþ­€LK 4 ;TAB COUNTER FOR ASCII INPUT/OUTPUT BTAB: BUFF1*2 ;BUFFER TABLE BUFF2*2 BUFF3*2 BUFF4*2 BUFF1: .BLK 104 ;BUFFERS BUFF2: .BLK 104 BUFF3: .BLK 104 BUFF4: .BLK 104 .LOC .-420 ; P-CODE SYSTEM INITIALISATION PROCEDURES. .PCODE: PCODE PI: .SYSTM þ£>; X1 := NMAX; X0 := HMA; .MEM JMP . STA 0,HP ; INITIALISE HEAP POINTER TO MAX ADR SUB 1,0 ; X0 := INCREMENT FOR .MEMI CALL STA 1,DSP ; STACK STARTS AT INITIAL NMAX STA 1,MP STA 1,SP DSZ SP LDA 3,HP ; GET THE TOP OF THE HEAP STA 3,@DSP ;STOREþ?* IT IN THE STACK BASE .SYSTM ; ALLOCATE ALL AVAILABLE STORE .MEMI JMP . SUB 2,2 ;CHANNEL ZERO FOR 'COM.CM' SUB 1,1 ;NORMAL CHARACTERISTICS LDA 0,.COMF ;'COM.CM' .SYSTM .OPEN 77 ERR.2 LDA 2,.PCODE LDA 2,2,2 ;PICK UP THE LABEL OF FIRST CUP þ±¸ LDA 1,C5 ADD 1,2 ;FORM ADDRESS OF FIRST POSSIBLE FILENAME STA 2,STPC JSR COMA1 JSR COMA2 ;READS PROGRAM NAMEAND GLOBAL SWITCHES RENU: JSR COMA1 ;READS NAME OF SECOND ARGUEMENT LDA 2,.COMA STA 2,TEMP ;SET UP THE BUFFER ADDRESS LDA 2,STPC ;FIRSþ® T POSSIBLE NAME LDA 1,13,2 ;FIRST POSSIBLE OPEN COMMAND LDA 0,COPN ; CSP OPN SUB 1,0,SZR  ;IS IT A MATCH JMP NOMAT ;NO - THEN BLOW UP.... MOVZL 2,2 ;YES - THEN REPLACE FILENAME STA 2,TEMP2 LDA 0,M20 ;INITIAL COUNT STA 0,COUNT NEXTB: LDþð˜A 2,TEMP JSR @.BGET ;GET THE NEXT BYTE LDA 2,TEMP2 JSR @.BPUT ;PUT IT INTO THE FILENAME MOV 0,0,SNR ;TEST IF NULL AFTER THE PUT.... JMP ENAME ISZ TEMP ;UPDATE POINTERS ISZ TEMP2 ISZ COUNT ;ERROR IF OVER.. JMP NEXTB JSR .NERR 317 NOMAT: JSRþ~› .NERR 313 ; ROUTINE TO READ THE FILENAME COMA1: STA 3,TEMP LDA 0,.COMA ;ARGUEMENT BUFFER SUB 2,2 ;CHANNEL ZERO .SYSTM .RDL 77 ;READ THAT NAME JMP TSTEF ;SEE IF EOF? JMP @TEMP TSTEF: LDA 1,C6 ;TEST IF EOF SUB# 1,2,SZR ERR.2 ;IF NOT THEN þÃBLOW... JMP ENDAL ; ROUTINE TO READ THE SWITCHES COMA2: STA 3,TEMP LDA 0,.SWA ;SWITCH BUFFER LDA 1,C4 ;TWO WORDS SUB 2,2 ;CHANNEL ZERO .SYSTM .RDS 77 ;READ FOUR BYTES JMP TSTEF JMP @TEMP ENAME: LDA 0,SPACE ;FILL OUT WITH SPACES LDA 2,TEMP2þ F JSR @.BPUT ISZ TEMP2 ISZ COUNT JMP ENAME LDA 2,STPC ;UPDATE THE POINTER TO THE PCODE LDA 1,C15 ;BY AN APPROPRIATE AMOUNT ADD 1,2 STA 2,STPC JSR COMA2 LDA 0,SWA ;PICK UP SWITCHES MOVZL 0,0,SNC ;AND TEST IF 'A' SET ON. JMP RENU ;NO...THEN GþÜNET NEXT PARAMETER SUBZR 0,0 ;OTHERWISE SET BIT 0 OF NULLS LDA 2,STPC LDA 1,-5,2 ;COUNT ADD 0,1 STA 1,-5,2 ;RESTORE COUNT JMP RENU ENDAL: LDA 0,.PCODE ; INITIALISE PC STA 0,PC DSZ PC NEXT .COMF: COMF*2 COMF: .TXT 'COM.CM' C5: 5 C4: 4 C15: 15 Cþk„¤6: 6 .COMA: COMA*2 .SWA: SWA*2 STPC: 0 M20: -20 COUNT: 0 COPN: 161425 COMA: .BLK 10 SWA: .BLK 2 .END PI ÿR2ALLFILES.CMû£Žþ8R2SECHK,^ R2ROUTL,^ R2IFT,^ R2SMPD,^ R2SOVL,^ R2STP,^ R2SINTEGER,^ R2SBOOLEAN,^ R2SRANDOM,^ R2SOPN,^ R2IREAL,^ R2SADMIN,^ R2SRD,^ R2SIOIN,^ R2CITAB,^ R2IFNS,^ R2CRCODE,^ R2SSET,^ R2SMPY,^ R2STI,^ R2RFT,^ R2SITAB,^ R2SDIV,^ R2IFW,^ R2SMEMACC,^ R2SMISC,^ R2SþþDBIN,^ R2STESTS,^ R2SHEAP,^ R2CSPTAB,^ R2IOUTL,^ R2SDECODER,^ R2SMYP,^ R2RREAL,^ R2SREWR,^ R2RFNS,^ R2SSPTAB,^ R2SCONSTS,^ R2RFW^ ÿR2SOVL.SRû­ ó Aþ-3 .TITLE R2SOVL .TXTM 1 .NREL .ENT XOVL ; AT XOVL IT IS ASSUMED THAT THE OVERLAY NODE AND NUMBER ; ARE PASSED VIA STACK LOCATION ...... IF THE FILE IS ; FOUND NOT TO BE OPEN IT IS OPENED OVOPN: .SYSTM .GCHN ; ASK RDOS FOR A CHANNEL ERR.2 STA 2,OVCþE¸HN LDA 0,PASOL .SYSTM .OVOPN 77 ; OPEN OVERLAY FILE PASCAL.OL ERR.2 XOVL: LTOP1 0 ; PICK UP NODE AND NUMBER ADC 1,1 ; UNCONDITIONAL LOAD LDA 2,OVCHN .SYSTM .OVLOD 77 JMP ERCHK POP NEXT ERCHK: MOV 2,2,SNR JMP OVOPN ; ILLEGAL CHANNEL # LDA þ–L*1,FSHUT SUB 2,1,SNR ; FILE OPEN ? JMP OVOPN ; YES ERR.2 ; NO .. LEAVE IT TO RDOS OVCHN: -1 FSHUT: 15 PASOL: .+1*2 .TXT "P4COMPILER.OL" .END ÿR2SIOIN.SRû­ ó 9þ"Z .TITLE R2SIOIN .ENT XRDI .ENT GETC,.GTCH .ENT CHINF .EXTN .DBIN .EXTD .READ,SPACE .ZREL GETC:.GTCH:CHIN .NREL ;THE INTEGER READING ROUTINE FOLLOWS, IT MAKES USE OF ;THE ENTRY POINT .DBIN IN MATH.LB XRDI: SUBZL 0,0 ;MAKE ONE STA 0,CHINF ;SET þ ðFLAG IN CHIN JSR @DBIN ;READ INTEGER POP1 2 ;FBA MOVZR 2,2 POP1 3 ;INTEGER DESTINATION MOVZR 3,3 STA 1,0,3 ;STORE INTEGER DSZ FST,2 ;MARK BUFFER FULL NEXT ;EOL MAY BE SET NEXT ;IT MAY NOT DBIN: .DBIN CHINF: 1 CHIN: STA 3,Z1 ;KEEP RETURNþ1Ä LTOP1 2 ;USE STACK TOP MOVZR 2,2 ; .. ITS A BYTE ADDRESS DSZ CHINF JMP DIGS ; LEADR: JSR @.READ LDA 1,SPACE ;GET SPACE CHAR SUB 0,1,SZR ;SPACE ? JMP DIGS+1 ; - NO ISZ FST,2 ; - YES, SET FB EMPTY JMP LEADR DIGS: JSR @.READ MOVS 0,0 ISZ FSþ*ÚcT,2 ; SET FB EMPTY JMP @Z1 ; .END ÿR2SDIV.SRû­R*þ1ó .TITL R2SDIV .ENT .DIV .EXTN DVD .NREL .DIV : N. : STA 3,N.6 STA 2,N.5 STA 1,N.4 STA 0,N.3 MOVL 2,3,SZC NEG 2,2 SUBCL 3,3 MOVZL þ®/3,3 MOVL# 0,0,SNC JMP N.1 INC 3,3 NEG 1,1,SZR COM 0,0,SKP NEG  0,0 N.1: STA 3,N.7 SUB 0,0 DVD LDA 2,N.5 MOVL 1,1,SNC MOVR 1,1,SZC þð JMP N.2 LDA 3,N.7 MOVR 3,3,SNC COM 3,3,SKP NEG 0,0 MOVR 3,3,SNC NEG 1,1 MOVZ 3,3 JMP @N.6 N.2: LDA 0,N.3 LDA 1,N.4 JMP @N.6 N.3þ=\‘: 0 N.4: 0 N.5: 0 N.6: 0 N.7: 0 .END ÿR2SECHK.SRû­ ó 2þö4 .TITLE R2SECHK ; ERROR HANDLER AND CHECK ROUTINES .ENT HELP .ENT ERRP,ERR2,ERR .ENT PCHKC,PCHK4,PCHK2,PCHK3 .EXTD PUTFL .EXTN .BIND, BFPTR,BFBP0 .TXTM 1 .NREL ERR2: ERR: .SYSTM .ERTN JMP . ERRP: LDA 2,0,3 ;PICK UP E CODE LDA 3,INSTR ;Gþ¼ÏET LAST INSTR MARKER JMP RATS ; THIS ENTRY FOR CHECK ADDRESS PCHK4: LTOP1 0 LDA 3,@PC ; PICK UP INSTR # MOV 2,2,SZR ; POSSIBLE NULL ? JMP NONIL ; NO MOV 0,0,SNR ; YES TEST TOP OF STACK NEXT ; ITS A NULL NONIL: LDA 1,DSP ; STACK BASE LþafDA 2,@DSP ; INITIAL VALUE OF HP MOVZR 0,0 ; MAKE WORD ADDR JMP TEST KEEP: STA 3,INSTR NEXT LHB40: 40 PCHKC: LDA 0,LHB40 ADDS 0,1 ADDS 0,2 JMP PCHK2 PCHK3: MOV 2,1 ;LOWER BOUND TO AC1 LDA 2,@PC ;GET UPPER BOUND PCHK2: LDA 3,@PC ;GET INSTR þøBCOUNT LTOP1 0 ;STACK TOP TO AC0 TEST: ADDOR 0,0 ;UNSIGN THESE NUMBERS ADDOR 1,1 ;SO THAT THE FOLLOWING ADDOR 2,2 ;TESTS WORK AS INTENDED ! ADCZ# 2,0,SZC ;SKP IF AC0<=AC2 (UPPER) JMP MICE ;TROUBLE SUBZ# 1,0,SZC ;SKP IF AC0<12> BUGS" .TXT "<15><12>LAST KNOWN PCODE INSTRUCTION " ASIN: .BLK 4 .TXT "<15><12>INTERPRETER ERROþ<#R CODE " ASEC: .BLK 4 .TXT "<15><12>" MESSF: .-1*2 .END ÿSETUPAX.ûkjþ"S (* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ------------------------------ AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE I/II DATE : MARCH, 1977 *) (*******þ\ƒ********************************************************** THE MIDDLE PART ( IE THE WHOLE COMPLETETASK PROCEDURE ) OF THIS PROGRAM IS PRODUCED BY THE PROGRAM "FASTHASH". THE ORDER OF THE HASHING IS SUCH THAþê»T THE ACTIVATION OF THIS WILL EVENTUALLY PRODUCE A SET OF PROCEDURES ( IE THE WHOLE PROCEDURE COMPLETABLE IN EITHER "P4ASM" OR "P4MAC" ) THAT WILL OPTIMIZE ALL THE PCODE MNEMONICS' ACCESS MECHANISM. þ” IT OUTPUTS A SET OF PROCEDURES WHICH FORM THE MIDDLE PART OF EITHER "P4ASM" OR "P4MAC". THE OUTPUT FILE CONTAINING THIS SET OF PROCEDURES IS "P4AMY1" IN RELEASE I OR "P4AMY2" IN RELEASE II. THIS PRþ>aOGRAM IS THE AMALGAMATION OF THREE SMALLER FILES "SETUPAX", "SETUPAY" AND "SETUPAZ". THIS PROGRAM IS ACTIVATED BY THE FOLLOWING COMMAND : SETUPA P4AMY ===========þ£========== WHERE P4AMY IS A OUTPUT FILE USED TO CONTAIN  PROCEDURE COMPLETABLE IN BOTH PROGRAMS "P4ASM" AND "P4MAC". þl = AN PRR FILE USED TO CONTAIN SOME USEFUL INFORATION FOR USER REFERENCE. **************************************************************) PROGRAM SETUPA(OUTPUT, PRR); CONST þ€–TABLESIZE = 256; TABSIZE0 = 255; (** IE TABLE SIZE WITH ZERO ORIGIN **) TYPE STRING4 = ARRAY[1..4] OF CHAR; STRING6 = ARRAY[1..6] OF CHAR; TEMPLATE = RECORD PCODE : STRING4; þ”9 SEMICODE : STRING6; ACTION : INTEGER END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; I, J : 1..TABLESIZE; ZERO, ENTRIES, PETTY, K : INTEGER; PROCEDURE HASHþ?(HPCODE : STRING4; HSEMICODE : STRING6; HACTION : INTEGER); VAR TEMP, PI, RNDM : INTEGER; BEGIN TEMP := ORD(HPCODE[1]) * 4 + ORD(HPCODE[2]) * 2 + ORD(HPCODE[3]) ; IF ORD(HPCODE[þm4]) <> 0 THEN TEMP := TEMP * 2 + ORD(HPCODE[4]); TEMP := TEMP MOD TABLESIZE; RNDM := 1; PI := 0; WHILE PCODETABLE[ (TEMP + PI) MOD TABLESIZE ].PCODE <> ' ' DO BEGIN (* OF THE REHASHING ALGORITHM MENTIONED BYþ9 DAVID GRIES IN HIS 'COMPILER CONSTRUCTION' *)  RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); END; (* AN EMPTY ENTRY IN THE PCODE TABLE IS FOUND *) WITH PCODETABLE[ (TEMP + PI)þ~o MOD TABLESIZE ] DO BEGIN PCODE := HPCODE; SEMICODE := HSEMICODE; ACTION := HACTION; END; ENTRIES := ENTRIES + 1 END (* OF HASH *); (*<<<<<<<<<<<<<<<<<<<< SETUPAX ENDS HERE >>>>>>>>>>>>>>>þã»>>>>>*) ÿGRAPH.û´ #þokPROGRAM GRAPH1(OUTPUT); CONST D=0.0625; S=32 ; H=34 ; C=6.28318 ; LIM=32 ; VAR X,Y:REAL; I,N:INTEGER; BEGIN FOR I:=0 TO LIM DO BEGIN X:=D*I; Y:=EXP(-X)*SIN(C*X) ; N:=TRUNC(S*Y)+H; REPEAT WRITE(' '); N:=N-1 þ-“± UNTIL N=0; WRITELN('*') END END. ÿR2RREAL.SRû­ ó ;þz| .TITL R2RREAL ; THE P-CODE INTERPRETER'S REAL NUMBER OPERATIONS .ENT PADR,PSBR,PFLT,PFLO,PTRC,PNGR,PSQR,PABR,PMPR,PDVR .EXTD WSA .EXTN PFPIN,PFPES,PFPEX,PFPEF .NREL .PFPN: PFPIN ;ENTRY USED BY UNARY OPERATORS .PFPS: PFPES ;STORE FP0 ON STACK þAND LEAVE RFPI .PFPX: PFPEX ;LEAVE RFPI WITHOUT STORING FP0 .PFPF: PFPEF ;SIMPLY CHECK RFPI FLAGS PFPBN: STA 3,AC3 ;USED BY FP BINARY OPERATORS JSR @.PFPN FDSZ SP ;GET SECOND FDSZ SP ;FP OPERAND FLDA 0,@SP ;FROM STACK FJMP @AC3 AC3: 0 PADR:þ#| JSR PFPBN FADD 1,0 FJMP @.PFPS PSBR: JSR PFPBN FSUB 1,0 FJMP @.PFPS SAC3: 0 FLSUB: STA 3,SAC3 ;USED ONLY BY THE FLOATS SUB 2,2 ;SL TO DL INTEGER LTOP1 3 ;GET TOP OF STACK MOVL# 3,3,SZC ;-VE ? ADC 2,2 ;YES STOP1 2 PUSH1 3 ;LS HALF OF DL IþÕ¬NT JMP @SAC3 PFLT: JSR FLSUB JSR @.PFPN ;LOAD INTO FAC1 REDUNDANT FFLO @SP FJMP @.PFPX PFLO: POP1 0 ;FLOATS ITEM BELOW TOP POP1 1 ;OF STACK.....ASSUMES JSR FLSUB ;REAL ON TOP OF STACK JSR @.PFPN FFLO @SP FEXT ISZ SP ;RESTORE SP PUSH1 1 þêËPUSH1 0 JMP @.PFPF PTRC: JSR @.PFPN ;FIXES TOP OF STACK FFIX @SP ;THIS FIXES TO DL FEXT ISZ SP ;RESTORE SP POP1 1 ;GET LS HALF OF DL INT LTOP1 0 ;MS HALF OF DL INT MOVZL 1,2  ;FOLLOWING TESTS THAT INC 0,0,SNC ;SIGN OF BOTH HALVES = MOVZR 0þõ,0,SZR ;AND MS HALF HAS NO VALUE JMP PTRCE ;CONDITIONS NOT MET STOP1 1 JMP @.PFPF PTRCE: ERR.P PERTR ;TRUNCATE ERROR PNGR: JSR @.PFPN ;NEGATE FP NUMBER FNEG 1,0 FJMP @.PFPS PSQR: JSR @.PFPN ;SQUARE FP NUMBER FMOV 1,0 FMPY 1,0 FJMP @.PFPSþºH> PABR: JSR @.PFPN ;ABS OF FP NUMBER FPOS 1,0 FJMP @.PFPS PMPR: JSR PFPBN ;MULTIPLY FP FMPY 1,0 FJMP @.PFPS PDVR: JSR PFPBN ;DIVIDE FP NUMBER FDIV 1,0 FJMP @.PFPS .END ÿFASTHASH.ûŽŽþi!(* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ------------------------------ AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE II DATE : MARCH, 1977 *) (***********þj‹****************************************************** THIS PROGRAM IS TO READ IN THE HASH TABLE FROM THE INPUT FILE "SETUP.TB" PRODUCED BY THE PROGRAM "SETUP". IT THEN PROCESSES A  BIG PCODE PROGRAM (PREFERABLY "þßÊP4ASM.PC" OR "P4MAC.PC") TO OBTAIN THE FREQUENCIES OF THE PCODE INSTRUCTIONS. FINALLY IT PRODUCES A PROCEDURE (IE THE PROCEDURE COMPLETETASK IN THE PROGRAM "SETUPA"). THE ORDERING OF THE HASHING SEQUENCE IN THE OUTPUTþº­ PROCEDURE IS SUCH THAT ACCESSING THE PCODE INSTRUCTIONS IN THE TABLE WILL BE MUCH MORE IMPROVED. TO ACTIVATE THIS PROGRAM, DO THE FOLLOWING COMMAND :  FASTHASH PCODEPROGRAM SETUPAY SETUP.Tþ×”B DEVICE ============================================= WHERE SETUP.TB = INPUT FILE CONTANING THE HASH TABLE PRODUCED BY THE PROGRAM "SETUP". = PRD þk$FILE CONTAINING ANY BIG PCODE PROGRAM ( IE "P4ASM.PC" OR "P4MAC.PC"). SETUPAY = OUTPUT FILE CONTAINING THE PROCEDURE WHICH  IS "PROCEDURE COMPLETETASK " IN THþÓ«E PROGRAM "SETUPA". = PRR FILE CONTAINNG FREQUENCIES OF PCODE INSTRUCTIONS IN PCODEPROGRAM FOR USER REFERENCE. ***************************þ!Ë*****************************************) PROGRAM FASTHASH(PRD, PRR, INPUT, OUTPUT); LABEL 0; CONST TABLESIZE = 256; TABSIZE0 = 255; (*** IE TABLE SIZE WITH ZERO ORIGIN ***) TYPE INSTRTYPE = (COMMENT, LLABEL, NONPCODE, PCOþ£ìDES, PCODENTRY); STRING3 = ARRAY[1..3] OF CHAR; STRING4 = ARRAY[1..4] OF CHAR; TEMPLATE = RECORD PCODE : STRING4; SEMICODE, ACTION, FREQUENCY : INTEGER þÂÎ END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; SORT : RECORD SPCODE :STRING4;  SSEMICODE, SACTION, SFREQUENCY : INTEGER END; þ · CH : CHAR; DOTNAME : STRING3; I, J, ICOUNT, SMIN, SMAX : INTEGER; ENT : BOOLEAN; PCTYPE : INSTRTYPE; PROCEDURE OCTALIZER(SMCODE : INTEGER); VAR I, TEMP : INTEGER; þ­© COMPLEMENT : BOOLEAN; OCTALDIGIT : ARRAY[1..6] OF INTEGER; BEGIN COMPLEMENT := SMCODE < 0; SMCODE := ABS(SMCODE); FOR I := 1 TO 6 DO BEGIN TEMP := SMCODE DIV 8;þÊ OCTALDIGIT[I]:= ABS(SMCODE - TEMP * 8); SMCODE := TEMP END; IF COMPLEMENT THEN BEGIN I := 1; WHILE OCTALDIGIT[I] = 0 DO I := I + 1; OCTþ©ALDIGIT[I] := 8 - OCTALDIGIT[I]; I := I + 1; WHILE I < 6 DO BEGIN OCTALDIGIT[I] := 7 - OCTALDIGIT[I]; I := I + 1 END; OCTALDIGIT[6] :=þ–É 1 END; FOR I := 6 DOWNTO 1 DO WRITE(PRR, OCTALDIGIT[I] : 1) END (* OF OCTALIZER *); PROCEDURE CHECK; VAR TEMP, RNDM, PI : INTEGER; MORETRY : BOOLEAN; OP þ²¹ : STRING4; PROCEDURE ERRORP; BEGIN MORETRY := FALSE; WRITE(OUTPUT, 'INSTR. NO. = ' : 13, ICOUNT : 1, ' ', OP); REPEAT READ(PRD, CH); WRITE(OUTPUTþƒÚ, CH) UNTIL EOLN(PRD); READ(PRD, CH); (* RID EOLN *) WRITE(OUTPUT, '** ', OP, ' ** ILLEGAL CODE'); WRITELN(OUTPUT) END (*** ERRORP ***); BEGIN (* OF CHECK *) OP[1] :=þXC CH; READ(PRD, OP[2], OP[3]); IF EOLN(PRD) THEN OP[4] := ' ' ELSE READ(PRD, OP[4]); READLN(PRD); TEMP := ORD(OP[1]) * 4 + ORD(OP[2]) * 2 + ORD(OP[3]); IF ORD(OP[4]) <> 0 THEþ}žN TEMP := TEMP * 2 + ORD(OP[4]); TEMP := TEMP MOD TABLESIZE; MORETRY := TRUE; SMIN := SMIN + 1; SMAX := SMAX + 1; RNDM := 1; PI := 0; IF OP = ' ' THEN ERRORP þFÎ ELSE WHILE MORETRY DO WITH PCODETABLE[ (TEMP + PI) MOD TABLESIZE] DO BEGIN IF OP = PCODE THEN BEGIN FREQUENCY := FREQUENCY + 1; MORETRY := FALSE; ENþCD ELSE IF PCODE = ' ' THEN ERRORP; IF MORETRY THEN BEGIN RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); SMAX := SMAX + 1 ENDþ{! END END (*** OF CHECK ***); BEGIN (* OF MAIN *) WRITELN(OUTPUT, '; FASTHASH START', 'S NOW'); ICOUNT := 3; REPEAT READ(INPUT, CH) UNTIL CH = '*'; (*READ OFF HASH TABLE HEADER *) FOR I := 0 TO TAþ‰UBSIZE0 DO WITH PCODETABLE[I] DO BEGIN FOR J := 1 TO 4 DO READ(INPUT, PCODE[J]); READLN(INPUT, SEMICODE, ACTION) END; FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO IF PCODE[1] = ' ' THþÔ0EN FREQUENCY := -1; (************ START READING IN THE PCODE PROGRAM FROM PRD ************) (* HASH TABLE HAS JUST BEEN READ IN FROM SETUP.TB *) READ(PRD, CH, CH, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF (CH <> '.') AND (DOTNAMþ»©E <> 'TIT') THEN BEGIN WRITELN(OUTPUT, '**********', ' NO TITLE FOUND ', '**********'); WRITELN(OUTPUT); GOTO 0 END; READLN(PRD); REPEAT READ(PRD, CH); IF CH = 'I' THEN PCTYPE := COMMþÓENT ELSE IF CH = 'L' THEN PCTYPE := LLABEL ELSE IF CH = 'P' THEN PCTYPE := PCODENTRY ELSE BEGIN READ(PRD, CH); IF CH = '.' THEN PCTYPE := NONPCODE ELSE PCTYPE := PCODES þ>JEND; CASE PCTYPE OF COMMENT : (* INSTRUCTION CHECK COUNT *) BEGIN READ(PRD, J); IF (ICOUNT <> J) AND (J <> 0) THEN WRITELN(Oþ¬3UTPUT, 'I', J : 5, ' ' : 14, '; ??? PCODE'  , ' COUNT OUT OF ST', 'EP ???'); ICOUNT := J; READ(PRD, CH) (* READ OFF EOLN *) END; þ½ö LLABEL : (* LABELS *) READLN(PRD); NONPCODE : (* NON STANDARD PCODE INSTRUCTIONS *) READLN(PRD); PCODES : (* STANDARD PCODE INSTRUCTIONS *) BEGIN þÇ| CHECK;  ICOUNT := ICOUNT + 1 END; PCODENTRY : (* PACKED PCODE ENTRY POINT *) READLN(PRD) END (* OF CASE PCTYPE *); WHILE EOLN(PRD)þ÷ DO READLN(PRD) UNTIL EOF(PRD); WRITELN(OUTPUT); WRITELN(OUTPUT, '; IDEAL SEARCHES', ' = ', SMIN); WRITELN(OUTPUT, '; ACTUAL SEARCHE', 'S = ', SMAX); J := 1; REPEAT ENT := FALSE; FOR I := 0 TO TABSþs IZE0 - J DO BEGIN  IF PCODETABLE[I].FREQUENCY < PCODETABLE[I + 1].FREQUENCY THEN BEGIN ENT := TRUE; WITH PCODETABLE[I], SORT DO BEGIN þ®� SPCODE := PCODE; SSEMICODE := SEMICODE; SACTION := ACTION; SFREQUENCY := FREQUENCY END; PCODETABLE[I].PCOþëtDE := PCODETABLE[I + 1].PCODE; PCODETABLE[I].SEMICODE := PCODETABLE[I + 1].SEMICODE; PCODETABLE[I].ACTION := PCODETABE[I + 1].ACTION; PCODETABLE[I].FREQUENCY := PCODETABLE[I + 1].FREQUEþßNCY; WITH PCODETABLE[I + 1], SORT DO BEGIN PCODE := SPCODE; SEMICODE := SSEMICODE; ACTION := SACTION; þûÅ FREQUENCY := SFREQUENCY END END END; J := J + 1; UNTIL NOT ENT; WRITELN(OUTPUT); FOR I := 1 TO 4 DO WRITE(OUTPUT, ' PCODE' : 10, ' SMCODE' : 7, ' ACT' : 4, ' FREQ'þ µ : 5); WRITELN(OUTPUT); FOR I := 1 TO 4 DO WRITE(OUTPUT, '----------' : 10, '=======' : 7, '----' : 4, '*****' : 5); WRITELN(OUTPUT); I := 0; REPEAT WITH PCODETABLE[I] DO BEGIN WRITE(þÊOUTPUT, PCODE : 10, SEMICODE : 7, ACTION : 4, FREQUENCY + 1 : 5); IF I MOD 4 = 3 THEN WRITELN(OUTPUT) END; I := I + 1 UNTIL PCODETABLE[I].FREQUENCY = -1; WRITELN(OUTPUT); WRITELN(PRR); WRITELN(PRRþÁ, 'PROCEDURE COMPLE', 'TETASK;'); WRITELN(PRR); WRITELN(PRR); I := 0; J := 1; WRITELN(PRR, 'PROCEDURE TASK0;'); WRITELN(PRR, 'BEGIN'); REPEAT WITH PCODETABLE[I] DO BEGIN IF I MOD 30 = 29 THEþ¾BN BEGIN WRITELN(PRR, 'END;'); WRITELN(PRR); WRITELN(PRR); WRITELN(PRR, 'PROCEDURE TASK' : 14, J : 1, '; '); WRITELN(PRR, 'BEGIN'); J := J +þ02 1 END; WRITE(PRR, ' ' : 5, 'HASH(''' : 6, PCODE : 4, ''', ''' : 4); OCTALIZER(SEMICODE); WRITELN(PRR, ''', ' : 3, ACTION : 4, ');') END; I := I + 1;  UNTIL PCODETABLE[Iþ‹S].PCODE = ' '; WRITELN(PRR, 'END;'); WRITELN(PRR); WRITELN(PRR, 'BEGIN'); FOR I := 0 TO J - 1 DO WRITELN(PRR, ' ' : 5, 'TASK' : 4, I : 1, '; '); WRITELN(PRR, 'END;'); WRITELN(PRR); WRITELN(PRR); WRITELN(PRR)þ&`; 0 : WRITELN END. þÔÔÿPRIMES.û´& Eþ-PROGRAM PRIMES(OUTPUT); (* EXAMPLE P54 PASCAL USER MANUAL AND REPORT *) CONST WDLENGTH=16; MAXBIT=15; W=2; VAR SIEVE,PRIMES : ARRAY[0..W] OF SET OF 0..MAXBIT; NEXT : RECORD WORD,BIT : INTEGER END; J,K,T,C : INTEGER; EMPTY : BOOLþœCEAN; BEGIN FOR T:=0 TO W DO BEGIN SIEVE[T]:=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; PRIMES[T]:=[] END; SIEVE[0]:=SIEVE[0]-[0]; NEXT.WORD:=0; NEXT.BIT:=1; EMPTY:=FALSE; WITH NEXT DO REPEAT WHILE NOT(BIT IN SIEVE[WORD]) DO BIT:=SUþ:PCC(BIT); PRIMES[WORD]:=PRIMES[WORD]+[BIT]; C:=2*BIT+1; J:=BIT; K:=WORD; WHILE K<=W DO BEGIN SIEVE[K]:=SIEVE[K]-[J]; K:=K+WORD*2; J:=J+C; WHILE J>MAXBIT DO BEGIN K:=K+1; J:=J-WDLENGTH  END END; IF SIEVE[WORD]þ�?=[] THEN BEGIN EMPTY:=TRUE; BIT:=0 END; WHILE EMPTY AND (WORDC 0,0,SZR JMP .-2 JMP 0,3 .RITE: WRITE BIND: .BIND XWRI: POP1 2 ;FBA MOVZR 2,2 POP1 0 ;$ OF CHARS STA 0,AD1 ;KEEP A COPY POP1 1 ;INTEGER JSR @BIND PURGE: LDA 2,FCH,2 ;CHANNEL # LDA 1,RHB AND 1,2 LDA 3,BFHLF ;BUFFER HALFWAY LDA 1,BFPTR ;Pþ‘ÐTR UPDATED BY PUT SUBZ 3,1,SEZ ;CHARS IN BUFF JMP OK ERR.P ;REPORT NOTHING PERIW ; TO PRINT OK: SUBZ 1,0,SBN ;LEADING SPACES ? JMP NOLDR ;NO SUB 0,3 ;YES LDA 1,AD1 ;GET # OF CHARS NOLDR: MOV 3,0 ;BYTE PTR JSR @.RITE ; ;NOW RESET BUFFEþ§ÞR TO ALL SPACES ; LDA 2,BFHLF STA 2,BFPTR ;RESET PTR SUB 0,0 STA 0,PUTFL NEXT PUTCH: STA 3,Z1 LDA 1,PUTFL ;GET FLAGS MOVL# 1,1,SZC ;SIGN FLAG SET ? JMP SSET ;YES MOVZR 0,0,SNC ;NO - B15 0 FOR SPACE JMP @Z1 ;IGNORE SPACES MOVR 1,1 ;CARRYþ>ñ IS #0 - USE IT STA 1,PUTFL ;SIGN ENCOUNTERED MOVZR# 0,0,SZC ;+ OR - ? JMP @Z1 ;+ MOVOL 0,0 ;REFORM - JMP SAND ;LETIT GO SSET: MOVR# 1,1,SZC ;DIGIT FLAG SET ? JMP SAND ;YES LDA 2,ZERO ;NO - LEADING ZERO ? SUB# 0,2,SNR JMP @Z1 ;IGNORE LEADþÿ&ING ZEROES MOV 0,0,SZR ;NULL TERMINATING INTEGER ? JMP SETD MOV 2,0 ;PASS ZERO FOR NULL JMP SAND SETD: INC 1,1 ;SET DFLAG STA 1,PUTFL ;SET D FLAG SAND: MOVS 0,0,SNR ;LAST NULL ? JSR @Z1 ;YES - IGNORE IT LDA 2,BFPTR ;CURRENT POSN. JSR @.BPUT þé±å ISZ BFPTR JMP @Z1 ZERO: 60 SPWD: 1B2+1B10 ;SPACE IN EACH BYTE BFSIZ: 66. ;WORDS BFBP0: BUFFA*2 ;FIRST CHAR BFHLF: BUFFA*2+66. ;HALFWAY CHAR BFPTR: BUFFA*2+66. ;CURRENT PTR BUFFA: .DO 66. ;LINE BUFFER 1B2+1B10 .ENDC .END ÿR2STESTS.SRû­ ó 6þÆ� .TITL R2STESTS ; THE P-CODE INTERPRETER'S COMPARISON OPERATIONS ; THESE ARE RATHER TRICKY: "DOCUMENTATION" AVAILABLE FROM LW .ENT PEQU,PNEQ,PGEQ,PGRT,PLEQ,PLES .EXTN PFPIN .EXTD MIN4,WSA,LHB .NREL ASP=Z1 ;SEE PSSET ABOUT ASP & SASP .MACRþm"O SASP LDA ^1,SP LDA 0,MIN4 ADD 0,^1 STA ^1,ASP % ; BRANCH TABLE FOR SUBROUTINE COMP COMTAB: CM ;MULTIPLE CI ;INTEGER CR ;REAL CI ;BOOLEAN CS ;SET CI ;ADDRESS ; HELPFUL HINT: SUBROUTINE COMP LEAVES ZERO IN AC0. THEREFORE, IN ; THE FþEOLLOWING PEQU ET AL:- ; "INC 0,0" MEANS "AC0:= TRUE" ; "SUBCL 0,0" " "AC0:= VALUE OF CARRY" ; "SUBL 0,0" " "AC0:= VALUE OF NOT CARRY" ; NONE OF ABOVE " "AC0 REMAINS FALSE" PEQU: JSR COMP MOV# 1,1,SNR ;IFF AC1=0 & CARRY=0 SUBL 0þ£ö,0 JMP COM2 PNEQ: JSR COMP MOV# 1,1,SNR ;IFF AC1 NON-ZERO OR (AC1=0 & CARRY=1) SUBCL 0,0,SKP INC 0,0 JMP COM2 PGEQ: JSR COMP SUBL 0,0 ;IFF CARRY=0 JMP COM2 PGRT: JSR COMP MOVC 1,1,SEZ ;IFF AC1 NON-ZERO & CARRY=0 INC 0,0 JMP COM2 PLEQ: JSR þ}¼COMP MOV# 1,1,SNR ;IFF (AC1=0 & CARRY=0)OR CARRY=1 SUBL 0,0,SKP SUBCL 0,0 JMP COM2 PLES: JSR COMP MOV# 1,1,SEZ ;IFF AC1 NON-ZERO & CARRY=1 INC 0,0 JMP COM2 COM2: STOP1 0 NEXT .COMT: COMTAB ; COMP IS A UNIVERSAL (IE CAN BE USED FOR ALL STANDAþ•’RD TYPES) ; SUBROUTINE WHICH COMPARES THE TOP 2 ELEMENTS OF THE STACK. IT ; RETURNS CARRY & AC1 SET AS FOLLOWS:- ; CARRY=1 <=> LESS THAN ; AC1=0 <=> EQUAL ; PLUS THE SPECIAL CASE (FOR SETS ONLY) ; (CARRY=1 & AC1=0) <=> "NO RELATION" ; THISþv IS SUFFICIENT INFO FOR ANY OF THE 6 COMPARISON OPS ; IF YOU REALLY INSIST ON STUDYING THIS CODE, HAVE 2 ASPRINS READY - ; & BLAME JJS, NOT ME ; OTHER POINTS TO NOTE ARE THAT S/R COMP CLEARS ALL RUBBISH OFF THE ; STACK & SETS AC0="FALSE" SO THAT (AFTER POSþ�‚SIBLE RESETTING ; BY PEQU ET AL) IT IS ALL READY FOR A QUICK "STOP1" COMP: MOV 2,0 ;FIRST WE BRANCH ACCORDING TO TYPE LDA 2,.COMT ADD 1,2 JMP @0,2 .PFPN: PFPIN ; *** REAL - COMPARISON IS ARITH SUBTRACTION CR: MOV 3,0 ;TO PRESERVE LINK JSR @.PFPNþ& ;INIT'ISE FP & LOAD FAC1 FDSZ SP FDSZ SP FLDA 0,@SP FSUB 1,0 FSTA 0,@SP FEXT ;EXIT FLOAT.PT LDA 2,WSA ;CHECK REPLY WD OK LDA 1,0,2 MOV 1,1,SNR JMP CR1 ;IF NO PROBS ERR.P PERFP CR1: MOV 0,3 ;RESTORE LINK SUB 1,1 ;CRAFTY USE OF INTEGER PþÎHATH! PUSH1 1 JMP CI ; *** MULTIPLE - ARITH SUBTR OF "N-WORDS-LENGTH" INTEGERS (UNSIGNED) CM: NEG 0,2 ;START AT MOST SIGNIFICANT END. WHILE POP1 0 ;WORD-PAIRS ARE EQUAL, CARRY ON. FIRST MOVZR 0,0 LTOP1 1 ;UNEQUAL PAIR GIVES REQD RELATION MOVZR 1,þ«í1 STA 0,AI1 DSZ AI1 STA 1,AI2 DSZ AI2 CM1: LDA 0,@AI1 LDA 1,@AI2 INC 2,2,SZR ; TO DEAL WITH ODD BYTE JMP CM2 ; - NO LDA 2,LHB ; YES AND 2,0 ; AND 2,1 SUB 2,2 COM 2,2 CM2: SUBO 0,1,SNR INCC 2,2,SNR JMP COM1 JMP CM1 ; *** INTEG,BOOLE,ADDRþ#} - ARITH SUBTR (UNSIGNED) CI: POP1 0 LTOP1 1 ADDOR 0,0 ;CONVERTS SIGNED INTEGERS TO UNSIGNED ADDOR 1,1 SUBO 0,1 JMP COM1 ; *** SET - LOOK AT CORRESPONDING WORD-PAIRS. WHENEVER "NO RELN", ; EXIT "NO RELN". WHILE "EQUAL", KEEP OPEN MIND. BUT AS SOON þ¤ØAS GEQ ; OR LEQ FOUND, ALL THE REST MUST BE GEQ OR LEQ RESPECTIVELY, ELSE ; "NO RELN" CS: SASP 2 CS1: POP1 0 LDA 1,@ASP DSZ ASP SUBZ# 0,1,SZR JMP CS2 ;IF NOT EQU LDA 0,SP SUBZ# 0,2,SNC JMP CS1 SUBO 1,1 JMP CS6 ;IF EQU (DONE) CS2: AND 0,1 SUB#þV 0,1,SNR JMP CS4A ;IF GEQ SO FAR ISZ ASP LDA 0,@ASP DSZ ASP SUB# 0,1,SNR JMP CS5A ;IF LEQ SO FAR CS3: STA 2,SP SUBZ 1,1 JMP CS6 ;ELSE NEQ (DONE) CS4: POP1 0 LDA 1,@ASP DSZ ASP AND 0,1 SUBZ# 0,1,SNC JMP CS3 ;IF NEQ (DONE) CS4A: LDA 0,SP þ»SUBZ# 0,2,SNC JMP CS4 MOVZ 0,1 ;SETS C=0 & AC1 NON-ZERO STA 2,SP JMP CS6 ;IF GEQ (DONE) CS5: POP1 0 LDA 1,@ASP DSZ ASP AND 1,0 SUBZ# 1,0,SNC JMP CS3 ;IF NEQ (DONE) CS5A: LDA 0,SP SUBZ# 0,2,SNC JMP CS5 MOVO 0,1 ;SETS C & AC1 NON-ZERO STA 2þaLk,SP ;IF LEQ (DONE) CS6: POP ;GET RUBBISH OFF STACK POP POP COM1: SUBC 0,0 JMP 0,3 .END ÿMAKER2SYMB.CMû£m þ5ß¼DELETE MAC.PS;^ MAC/N/S NBID FPID OSID R2SSYMBOLS^ ÿR2ROUTL.SRû­ ûþ£R .TITL R2ROUTL .ENT .BPUT,.BGET,.GCH,.FIND .ENT TEMP .EXTN ERR2,FINT,ERRP,PCODE .EXTD CHAN,SPACE,TEMP2,CNTAD,TABAD .EXTD LHB,RHB .TXTM 1 .ZREL ; DEFINE SOME CONSTANTS IN PAGE ZERO THAT ARE ASSUMED TO HAVE ; ADDRESSES 50 AND 51.... ERR2 ; .ERþ�ËR2 = 50 ERRP ; .ERRP = 51 .BPUT: BPUT .BGET: BGET .GCH: GCHAN .CTAB: CTAB .BTAB: BTAB-1 .OTAB: OTAB-1 .TTAB: TTAB-1 .FIND: FIND TEMP: 0 .NREL ; ROUTINE TO WRITE A BYTE TO A GIVEN BYTE ADDRESS ; ; CONDITIONS ... ; ; ENTRY - AC0 - BYTE TO BE WRIþ³ãTTEN(IN LHB) ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - UNDEFINED BPUT: STA 3,BLNK ;LINK STORED LDA 1,LHB ;MASK FOR LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMIþ{ÄNE WHICH BYTE MOVS 0,0,SKP ;RIGHT OR LEFT? MOVS 1,1 LDA 3,0,2 ;LOAD FROM WORD ADDRESS AND 1,3 ;MASK OUT OTHER BYTE ADD 0,3 ;REPLACE WITH NEW BYTE STA 3,0,2 ;AND RESTORE JMP @BLNK ; ROUTINE TO READ A BYTE FROM A GIVEN BYTE ADDRESS ; ; CONDITIOþ° NS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - VALUE OF BYTE READ(IN LHB) ; AC1 - UNDEFINED ; AC2 - UNDEFINED BGET: STA 3,BLNK ;STORE LINK LDA 1,LHB ;BYTE MAþ#�SK FOR LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMINE WHICH BYTE MOVS 1,1 ;RIGHT OR LEFT? LDA 0,0,2 ;LOAD FROM WORD ADDRESS. AND 1,0,SZC ;EXTRACT BYTE MOVS 0,0 ;SWOP INTO LHB JMP @BLNK ; ROUTINE TO GET THE CHANNEL NO. AND RECORD LENGTH OF SPECIFIC FIþ¤šLE. ; ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - WORD ADDRESS OF FBA ; ; RETURN - AC0 - CHANNEL NUMBER ; AC1 - RECORD LENGTH ; AC2 - WORD ADDRESS OF FBA ; ; NORMAL RETURN - NONþY¦E CHARACTER INPUT/OUTPUT ; RETURN + 1 - CHARACTER INPUT/OUTPUT GCHAN: STA 3,BLNK ;STORE LINK LDA 1,LHB ;MASK FOR LEFT HAND BYTE LDA 0,FCH,2 ;CHANNEL WORD OF FBA ANDS 0,1,SNR ;ISOLATE RECORD LENGTH ISZ BLNK ;AND TEST IF CHAR I/O. MOVZL 1,1 þŽ" ;MAKE IT A BYTE COUNT LDA 3,RHB ;MASK CHANNEL NUMBER AND 3,0 STA 0,CHAN JMP @BLNK BLNK: 0 ; ROUTINE TO SEARCH TABLES FOR BUFFER DETAILS. ; ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - CHANNEL NUMBEþúÒR OF FILE (OR ZERO) ; ; RETURN - AC0 - BYTE ADDRESS OF BUFFER AREA(BASE) ; AC1 - ADDRESS OF BYTE COUNT (DISPLACEMENT) ; AC2 - WORD ADDRESS OF ENTRY IN CHANNEL TABLE FIND: LDA 0,TSIZE ;SIZE OF TABLE LDA 1,.CTAB ;ADDRESS OF CHANNEþxL TABLE(TOP) STA 1,TEMP RETST: LDA 1,@TEMP ;SEARCH UNTIL A MATCH OR ERROR SUB 2,1,SNR JMP RETRN ;A MATCH IS FOUND DSZ TEMP INC 0,0,SZR ;TABLE EXHAUSTED? JMP RETST ;NO,FIND NEXT ERR.P ;YES, BLOW..... 411 RETRN: LDA 1,.OTAB SUBZ 0,1 ;ADDRESSþT OF BYTE COUNT(DISPLACEMENT) STA 1,CNTAD LDA 1,@CNTAD ;LOAD ACTUAL COUNT LDA 2,C200 SUBZ# 1,2,SZC ;TEST IF LINE TOO LONG JMP .+3 JSR .NERR ;LINE LIMIT FLAGGED TO CLI 22 LDA 1,CNTAD LDA 2,.TTAB SUB 0,2 ;ENTRY IN THE TABLE TAB COUNTS STA 2,TABAþ)D LDA 2,.BTAB SUB 0,2 LDA 0,0,2 ;SET BUFFER ADDRESS(BASE) LDA 2,TEMP ;CHANNEL TABLE ADDRESS JMP 0,3 .NERR: LDA 2,0,3 ;PICK UP ERROR CODE ERR.2 C200: 200 TSIZE: -4 ;TABLE SIZE 0 0 0 CTAB: 0 ;TOP OF CHANNEL TABLE OTAB: .BLK 4 ;COUNT TABLE TTAþÅ¢B: .BLK 4 ;TAB COUNTER FOR ASCII INPUT/OUTPUT BTAB: BUFF1*2 ;BUFFER TABLE BUFF2*2 BUFF3*2 BUFF4*2 BUFF1: .BLK 104 ;BUFFERS BUFF2: .BLK 104 BUFF3: .BLK 104 BUFF4: .BLK 104 .LOC .-420 ; P-CODE SYSTEM INITIALISATION PROCEDURES. .PCODE: PCODE PI: .SYSþÚ5TM ; X1 := NMAX; X0 := HMA; .MEM JMP . STA 0,HP ; INITIALISE HEAP POINTER TO MAX ADR SUB 1,0 ; X0 := INCREMENT FOR .MEMI CALL STA 1,DSP ; STACK STARTS AT INITIAL NMAX STA 1,MP STA 1,SP DSZ SP LDA 3,HP ; GET THE TOP OF THE HEAP STA 3,@DSP ;þ¬4STORE IT IN THE STACK BASE .SYSTM ; ALLOCATE ALL AVAILABLE STORE .MEMI JMP . SUB 2,2 ;CHANNEL ZERO FOR 'COM.CM' SUB 1,1 ;NORMAL CHARACTERISTICS LDA 0,.COMF ;'COM.CM' .SYSTM .OPEN 77 ERR.2 LDA 2,.PCODE LDA 2,2,2 ;PICK UP THE LABEL OF FIRSTþ‚Ž CUP LDA 1,C5 ADD 1,2 ;FORM ADDRESS OF FIRST POSSIBLE FILENAME STA 2,STPC JSR COMA1 JSR COMA2 ;READS PROGRAM NAMEAND GLOBAL SWITCHES RENU: JSR COMA1 ;READS NAME OF SECOND ARGUEMENT LDA 2,.COMA STA 2,TEMP ;SET UP THE BUFFER ADDRESS LDA 2,STPC þn¢;FIRST POSSIBLE NAME LDA 1,13,2 ;FIRST POSSIBLE OPEN COMMAND LDA 0,COPN ; CSP OPN SUB 1,0,SZR ;IS IT A MATCH JMP NOMAT ;NO - THEN BLOW UP.... MOVZL 2,2 ;YES - THEN REPLACE FILENAME STA 2,TEMP2 LDA 0,M20 ;INITIAL COUNT STA 0,COUNT NEXTþoüB: LDA 2,TEMP JSR @.BGET ;GET THE NEXT BYTE LDA 2,TEMP2 JSR @.BPUT ;PUT IT INTO THE FILENAME MOV 0,0,SNR ;TEST IF NULL AFTER THE PUT.... JMP ENAME ISZ TEMP ;UPDATE POINTERS ISZ TEMP2 ISZ COUNT ;ERROR IF OVER.. JMP NEXTB JSR .NERR 317 NOMATþÕ': JSR .NERR 313 ; ROUTINE TO READ THE FILENAME COMA1: STA 3,TEMP LDA 0,.COMA ;ARGUEMENT BUFFER SUB 2,2 ;CHANNEL ZERO .SYSTM .RDL 77 ;READ THAT NAME JMP TSTEF ;SEE IF EOF? JMP @TEMP TSTEF: LDA 1,C6 ;TEST IF EOF SUB# 1,2,SZR ERR.2 ;IF NOT þ¥THEN BLOW... JMP ENDAL ; ROUTINE TO READ THE SWITCHES COMA2: STA 3,TEMP LDA 0,.SWA ;SWITCH BUFFER LDA 1,C4 ;TWO WORDS SUB 2,2 ;CHANNEL ZERO .SYSTM .RDS 77 ;READ FOUR BYTES JMP TSTEF JMP @TEMP ENAME: LDA 0,SPACE ;FILL OUT WITH SPACES LDA 2,þZTEMP2 JSR @.BPUT ISZ TEMP2 ISZ COUNT JMP ENAME LDA 2,STPC ;UPDATE THE POINTER TO THE PCODE LDA 1,C15 ;BY AN APPROPRIATE AMOUNT ADD 1,2 STA 2,STPC JSR COMA2 LDA 0,SWA ;PICK UP SWITCHES MOVZL 0,0,SNC ;AND TEST IF 'A' SET ON. JMP RENU ;NO...Tþ¾ÊHEN GET NEXT PARAMETER SUBZR 0,0 ;OTHERWISE SET BIT 0 OF NULLS LDA 2,STPC LDA 1,-5,2 ;COUNT ADD 0,1 STA 1,-5,2 ;RESTORE COUNT JMP RENU ENDAL: FINT ;START RFPI LDA 0,.PCODE ; INITIALISE PC STA 0,PC DSZ PC NEXT .COMF: COMF*2 COMF: .TXT 'COM.þ„ ¢CM' C5: 5 C4: 4 C15: 15 C6: 6 .COMA: COMA*2 .SWA: SWA*2 STPC: 0 M20: -20 COUNT: 0 COPN: 161425 COMA: .BLK 10 SWA: .BLK 2 .END PI ÿR2SMPD.SRû­U+þ2\ .TITL R2SMPD .ENT MPY,MPY0,DVD .EXTD .SV0 .ZREL MPYA: .MPYA MPYU: .MPYU DIVU: .DIVU .NREL MPY0 = JSR @MPYU MPY = JSR @MPYA DVD = JSR @DIVU ; SINGLE PRECISION FAST MULTIPLICATION ; ; ENTRY CONDITIONS - AC0 - ZERO OR VALUE TO BþFâE ADDEDTO RESULT ; AC1 - MULTIPICAND ; AC2 - MULTIPLIER ; AC3 - LINK ; ; EXIT CONDITIONS - AC0 - RESULT ; AC1-AC3 - UNDEFINED .MPYU: SUBC 0,0 ;CLEAR AC0, DON'T DISTURB CARRY .MPYA: STA 3,SAV3 ;SAVE AC3 ADCZ# 1,2,SZC ;SKIPS IF AC2þ/‹<=AC1 MOV 2,3,SKP ;LARGEST IN AC3 MOV 1,3,SKP MOV 1,2 ;SMALLEST (COUNT) AC2 SPFM: MOVZR 2,2,SZC ;BIT SET? ADD 3,0 ;YES MOV 2,2,SNR ;LAST BIT? JMP .+3 ;YES ADDZ 3,3 ;NO.. JMP .-5 ;..SO REPEAT MOV 0,1 SUB 0,0 JMP @SAV3 ; SINGLE PRECISION þä\UNSIGNED DIVIDE ; ; ENTRY CONDITIONS AC0 - DIVIDEND (HIGH ORDER) MOST SIG.BITS ; AC1 - DIVIDEND (LOW ORDER) LEAST SIG.BITS ;  AC2 - DIVISOR ; AC3 - UNUSED ; ; EXIT CONDITIONS AC0 - REMAINDER ; þ¾] AC1 - QUOTIENT ; AC2 - UNCHANGED ; AC3 - DESTROYED ; .DIVI: SUB 0,0 ; INTEGER DIVIDE,CLEAR AC0 .DIVU: STA 3,SAV3 ; SAVE AC3 SUBZ# 2,0,SZC ; TEST FOR OVERFLOW JMP DIVE ;SET CARRY AND RETURN LDA þ'$3,M20 ; 16 ITERATIONS MOVZL 1,1 ; SHIFT LOW DIVIDEND DIVN: MOVL 0,0 ; SHIFT HIGH DIVIDEND SUB# 2,0,SZC ; DOES DIVISOR GO IN? SUB 2,0 ; YES MOVL 1,1 ; SHIFT LOW DIVIDEND INC 3,3,SZR ; CHECK COUNT JMP DIVN ; NOT DONE SUBO 3,3,SKP ; DONE ,CLEAþ�¨£R CARRY DIVE: SUBZ 3,3 ; SET CARRY JMP @SAV3 ; RETURN M20: -20 SAV3: 0 ;RETURN ADDRESS .END ;END OF UNSIGNED MULTIPLY ÿR2SRANDOM.SRû­ ó ;þþ­ .TITL R2SRANDOM .ENT XRRR,XWDR,XEOR .EXTD TEMP2,.GCH,CHAN .NREL ; INPUT / OUTPUT ROUTINES FOR RANDOM FILES ; ; XRRR: SUBZL 2,2,SKP XWDR: SUBZ 2,2 STA 2,TEMP2 ;FLAG INDICATES WHETHER READING OR WRITING POP1 2 MOVZR 2,2 ;FBA ADDRESS JSR @.GCH ;þ³vPICK UP CHANNEL NUMBER JMP .+1 MOV 2,0 LDA 2,CHAN LDA 3,C64 ;TEST IF LESS THAN 64 POP1 1 ;GET RECORD NUMBER ADCZ# 1,3,SNC ;RECORD LENGTH. JMP WRBLK ;IT'S A BLOCK TRANSFER DSZ TEMP2 JMP WRRI ;IT'S WRITE A RANDOM RECORD JMP RRRI ;IT'S READ Aþ ç RANDOM RECORD WRBLK: DSZ TEMP2 JMP WRBI ;IT'S WRITE A RANDOM BLOCK JMP RRBI ;IT'S READ A RANDOM BLOCK C64: 100 ;CONSTANT 64 DECIMAL WRRI: MOV 0,3 STA 3,77,3 ;SET THE FLAG .SYSTM .WRR 77 ;WRITE A RECORD OUT IMMEDIATELY ERR.2 NEXT WRBI: MOVþA  0,3 LDA 1,C255 ADD 1,3 ;FORM FLAG ADDRESS STA 1,0,3 ;SET FLAG .SYSTM .WRB 77 ;WRITE A RANDOM BLOCK IMMEDIATELY ERR.2 NEXT RRRI: .SYSTM .RDR 77 ;READ A RECORD IMMEDIATELY ERR.2 MOV 0,2 SUB 0,0 ;TEST IF EMPTY LDA 3,77,2 MOV 3,3,SNR SUBZLþì4 0,0 STA 0,FST,2 ;SET FLAG IN BUFFER NEXT RRBI: .SYSTM .RDB 77 ;READ A RANDOM BLOCK IMMEDIATELY ERR.2 MOV 0,2 SUB 0,0 LDA 3,C255 ;TEST IF EMPTY ADD 3,2 LDA 3,0,3 MOV 3,3,SNR ;IF EMPTY SET FLAG SUBZL 0,0 STA 0,FST,2 ;LOAD FLAG WORD NEXT þ££‘; PREDICATE FOR RANDOM FILES XEOR: POP1 2 ;FBA MOVZR 2,2 LDA 0,FST,2 ;LOAD FLAGS MOVZR 0,0 SUBL 0,0 PUSH1 0 ;RETURN BOOLEAN VALUE NEXT C255: 377 .END ÿRGCD.û´%þ_ PROGRAM RGCD(OUTPUT); (* EXAMPLE P82 PASCAL USER MANUAL AND REPORT *) VAR X, Y, N: INTEGER; FUNCTION GCD(M,N: INTEGER): INTEGER; BEGIN IF N=0 THEN GCD:=M ELSE GCD:=GCD(N,M MOD N) END; PROCEDURE TRY(A,B: INTEGER); BEGIN WRITELN(A,B,GCD(A,B)) ENDþJpá; BEGIN TRY(18,27); TRY(312,2142); TRY(61,53); TRY(98,868); END. ÿHEADA2.û£j þv(* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ============================== AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE II DATE : MARCH, 1977 *) (*$D-********þ"µ******************************************************* !!!! ONLY GOOD FOR PASCAL RELEASE II !!!! PROGRAM "P4ASM.SV" WILL READ IN A NOVA-PCODE PROGRAM AND TRANSLATE IT INTO THE CORRESPONDING PACKED PCODE PROGRAM WHICH WILL Lþ�/ATER BE PROCESSED BY THE NOVA ASSEMBLER TO PRODUCEAN INTERNAL CODE. SOURCE PROGRAM "P4ASM" IS THE AMALGAMATION OF FOUR SMALLER FILES : "HEADA2", "P4AMX2", "P4AMY2" AND "P4ASMZ2". TO ACTIVATE THIS PROGRAM, DO THþž$E FOLLOWING COMMAND : P4ASM ANYPCODE.QC DEVICE ANYPCODE.PC ==================================== WHERE ANYPCODE.PC = INPUT FILE CONTAINING A PCODE PROGRAM ANYPCODE.QC = OþuOUTPUT FILE CONTAINING THE CORRESPONDING PACKED PCODE PROGRAM. DEVICE = PRR FILE OR DEVICE FOR ERROR OR USEFUL MESSAGES. ******þ\²******************************************************) PROGRAM P4ASM(OUTPUT, PRR, INPUT); ÿROMAN.û´ ß þ¾ÄPROGRAM ROMAN(OUTPUT); VAR X,Y : INTEGER; BEGIN Y:=1; REPEAT X:=Y; WRITE(X,' '); WHILE X>=1000 DO BEGIN WRITE('M'); X:=X-1000 END; IF X>=500 THEN BEGIN WRITE('D'); X:þýµ=X-500 END; WHILE X>=100 DO BEGIN WRITE('C'); X:=X-100 END; IF X>=50 THEN BEGIN WRITE('L'); X:=X-50 END; WHILE X>=10 DO BEGIN WRITE(þýCë'X'); X:=X-10 END;  IF X>=5 THEN BEGIN WRITE('V'); X:=X-5 END; WHILE X>=1 DO BEGIN WRITE('I'); X:=X-1 END; WRITELN; Y:=2*Y UNTIL Y>5000 END. ÿHEADM2.û£jþNå(* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ============================== AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE II DATE : MARCH, 1977 *) (*$D-*þ–a*************************************************************** !!!! ONLY GOOD FOR RELEASE II !!!! PROGRAM "P4MAC.SV" WILL READ IN A NOVA-PCODE PROGRAM AND TRANSLATE IT INTO THE CORRESPONDING PACKED PCODE PROGRAM WHICH WILL þ®LATER BE PROCESSED BY THE NOVA MACRO-ASSEMBLER TO PRODUCE AN INTERNAL CODE. SOURCE PROGRAM "P4MAC" IS THE AMALGAMATION OF FOUR SMALLER FILES : "HEADM2", "P4AMX2", "P4AMY2" AND "P4MACZ2". TO ACTIVATE THIS PROGRAþwM, DO THE FOLLOWING COMMAND : P4MAC ANYPCODE.QC DEVICE ANYPCODE.PC ==================================== WHERE ANYPCODE.PC = INPUT FILE USED TO CONTAIN A PCODE PROGRAM ANþzYPCODE.QC = OUTPUT FILE USED TO CONTAIN THE CORRESPONDING INTERNAL CODE. DEVICE = PRR FILE OR DEVICE FOR ERROR OR USEFUL MESSAGES. ******************************þD ¤******************************) PROGRAM P4MAC(OUTPUT, PRR, INPUT); ÿP4ASMFILES.CMûrr þx„åP4ASMFILES.CM,NEW2P4ASMB,SETUP,FASTHASH,SETUPAX,SETUPAZ,^ HEADA2,HEADM2,P4AMX2,P4ASMZ2,P4MACZ2,NEW2P4ASME,MAKE2P4AM.CM^ ÿR2SADMIN.SRû­ ó 4þF¶ .TITL R2SADMIN ; THE P-CODE INTERPRETER'S "CONTROL" OPERATIONS, I.E.:- ; BLOCK, PROCEDURE, AND FUNCTION ENTRY/EXIT ; JUMPS .ENT PMST,PCUP,PCXP,PENT,PRET,PCSP .ENT PTJP,PFJP,PUJP,PXJP,PUJC .EXTN .BASE .EXTN SPTAB .NREL ;REMEMBER... ; SP=STACK POþ%‹INTER ; MP=MARK POINTER ; SL=STATIC LINK ; DL=DYNAMIC LINK ; RA=RETURN ADDRESS ; PC=PCODE INSTRUCTION ADDRESS ; HP=HEAP POINTER ;REMEMBER...THAT THE CONTROL INSRUCTIONS WILL BE ENCOUNTERED ;IN THE ORDER MST CUP ENT . PMST: SUB 2,2 ;CREATE NEW STACKþÈ_ FRAME .BASE ;LEAVES SL IN AC2 LDA 3,SP ;SL:= BASE(P) STA 2,1+SL,3 LDA 0,MP ; DL:= MP STA 0,1+DL,3 LDA 0,EP ; GET STACK MAX STA 0,1+MTS,3 ; MTS:=SP LDA 0,.MSL ; SP:= SP+MSL ADD 0,3 STA 3,SP NEXT .MSL: MSL ;MSL IS 5 ; CUP PASSES IN THE Pþ€\ FIELD THE NUMBER OF PARAMETERS ; ASSOCIATED WITH THE PROCEDURE. ONE WORD IS SAVED ; FOR EACH (ADDRESS OF MULTI-WORD OBJECTS PASSED) PCUP: LDA 3,SP ; MP:= SP-MSL-P+1 SUB 1,3 ;THIS STRANGE VALUE USED LDA 1,.MSD ;..BY ENT SUBSEQUENTLY SUB 1,3 STA 3,þ3ÊMP LDA 0,PC ; RA:=PC STA 0,RA,3 STA 2,PC ; PC:=Q-1 DSZ PC NEXT .MSD: MSL-1 ;CXP CALL EXTERNAL PROCEDURE - BY A.F. ON 11/02/77 ;ADDED CHECKS FOR PARAMETER LENGTHS PCXP: LDA 2,0,2 ;ACTUAL ADDRESS OF PROCEDURE LDA 0,4,2 ;LOAD THE COUNT OF PARAMEþ²œTERS LDA 3,ENT3 ;TEST IF AN ENT3 IS HERE? SUB 0,3,SZR JMP XPER ;ERROR NO ENT3 LDA 0,5,2 ;O.K. NOW TEST NO. OF PARAMETERS MOVZR 0,0 ;DIVIDE BY 2 SUB 1,0,SNR ;BLOW OUT... IF NOT EQUAL JMP PCUP XPER: ERR.P 412 ENT3: 61003 ; ENT GIVES IN Q FIEþg)LD STACK SPACE REQD BY PROC ; (ENT1 STATIC, ENT2 DYMAMIC) ; USING STRANGE MP WE SUBTRACT # OF PARAMETERS ; FROM THIS VALUE AND UPDATE SP PENT: MOVZR 2,2 ; HALVE Q FIELD MOVZR 1,1,SNR ; FIRST ENT OF PAIR ? JMP .+4 MOV 1,1,SZC ; NO, TEST IF OTHER þQ‚NEXT ; ENT3 JMP ENT2 ; NO LDA 0,MP ; SP:=MP+Q SUB 1,1 ; MAKE ZER0 NEG 2,2,SNR ; LOCAL SPACE COUNT JMP TEST CLR: PUSH1 1 ; SET TO ZERO INC 2,2,SZR ; ALL LOCAL SPACE JMP CLR JMP TEST ; CHECK STACK ENT2: LDA 0,SP ; SP+SEGMENT ADD 2,0 ; .þ±}. WORKSPACE STA 0,EP ; .. = MAX STACK TEST: LDA 1,HP SUBO 0,1,SNC NEXT ERR.P PERSO ; REPORT NOT ENOUGH SPACE ;IN RETURNING LEAVE ONE OR TWO WORD FUNCTION ;VALUE (IF APPROPRIATE) ON TOP OF STACK PRET: LDA 2,MP ADD 2,1 ; SP:= MP-1+P STA 1,SP þef DSZ SP LDA 0,RA,2 ; PC:= RA STA 0,PC LDA 0,MTS,2 ; EP:= MTS STA 0,EP LDA 0,DL,2 ; MP:= DL STA 0,MP NEXT PCSP: LDA 0,.SPTAB ; JUMP INDIRECT SPTAB[Q] ADD 0,2 JMP @0,2 .SPTAB: SPTAB PFJP: POP1 1 ; IF Y=FALSE THEN:- MOV# 1,1,SZR NEXT PUJP: SþÝö/TA 2,PC ; PC:= Q-1 DSZ PC NEXT PTJP: POP1 1 ; IF Y=TRUE THEN:- MOV# 1,1,SNR NEXT JMP PUJP ; PC:=Q-1 PXJP: POP1 1 ; PC:= Y+Q-1 MOVZL 1,1 ;INDEX OVER 2WDS AT A TIME ADD 1,2 JMP PUJP PUJC: ERR.P PERCJ .END ÿR2SSPTAB.SRû­Žþ-Ð .TITL R2SSPTAB .EXTN XWLN,XWRC,XWRI,XWDR,XWRS .EXTN XRDC,XRDI,XRDR,XRLN .EXTN XGET,XPUT .EXTN XELN .EXTN XATN,XCOS,XEXP,XLOG,XSIN,XSQT .EXTN XNEW,XSAV,XRST .EXTN XRND,XOPN .EXTN XCLS,XRRR,XWRR .EXTN XPAG .EXTN XEOR,XRWR,XRSE .EXTN PUNDF .ENTþ^ SPTAB .NREL SPTAB : XGET ;0 XPUT ;1 XRST ;2 XRLN ;3 XNEW ;4 XWLN ;5 XWRS ;6 XELN ;7 XWRI ;8 XWRR ;9 XWRC ;10 XRDI ;11 XRDR ;12 XRDC ;13 XSIN ;14  XCOS ;15 XEXP ;16 XLOG ;17 XSQT ;18 XATN ;19 XSAV ;20 XOPN ;21..þóOPEN ANY FILE (CREATE IMPLIED) XRND ;22 PUNDF ;23 XCLS ;24 XRRR ;25 XWDR ;26 XPAG ;27 XEOR ;28 XRWR ;29 XRSE ;30 PUNDF ;31 .END þüüÿP4SOURCES.CMû£Žþ£_P4SOURCES.CM,^ R2RFW.SR,R2SECHK.SR,R2ROUTL.SR,R2IFT.SR,R2RFILES.CM,R2SMPD.SR,^ R2SOVL.SR,R2STP.SR,R2SINTEGER.SR,R2SBOOLEAN.SR,R2SRANDOM.SR,^ R2SOPN.SR,R2IREAL.SR,R2SADMIN.SR,R2SRD.SR,R2SIOIN.SR,R2CITAB.SR,^ R2IFNS.SR,R2CRCODE.SR,R2SSET.SR,Rþ»�2STI.SR,R2RFT.SR,R2SITAB.SR,^ R2SDIV.SR,P4ERRSUM,R2IFW.SR,R2SMEMACC.SR,R2SMISC.SR,R2SDBIN.SR,^ R2STESTS.SR,R2SHEAP.SR,R2ALLFILES.CM,R2CSPTAB.SR,R2IOUTL.SR,^ R2SDECODER.SR,R2RREAL.SR,R2SMYP.SR,R2IFILES.CM,R2SSYMBOLS.SR,^ R2SREWR.SR,R2RFNS.SRþË{,R2SSPTAB.SR,R2SCONSTS.SR,P4ENTERERR,^ EXAMPLES.CM,ROMAN,LIFE,GRAPH,PRIMES,RGCD,^ P4COMPILE1,P4COMPILE2,P4COMPILE3,P4COMPILE4,^ MAKER2SYMBOLS.CM,MAKEDGSYMBOLS.CM,^ P4ASMFILES.CM,NEW2P4ASMB,SETUP,FASTHASH,SETUPAX,SETUPAZ,^ HEADA2,HEADM2,þüSP4AMX2,P4ASMZ2,P4MACZ2,NEW2P4ASME,MAKE2P4AM.CM^ ÿP4ASMZ2.ûmm þ„. PROCEDURE DOTFILE; (* REDUNDANT IN RELEASE II *) BEGIN WRITELN(OUTPUT, 11008 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* READ OFF EOLN *) WRITELN(OUTPUT, '.TXT ''INPUT'''); WRITELN(OUTPUþ=æT, -8954); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8954); WRITELN(OUTPUT,  24064); WRITELN(OUTPUT, 8192); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8952); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT,þÞ 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''OUTPUT'''); WRITELN(OUTPUT, -8951); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8949); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITþò&ELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRD'''); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, 8192); þ´, WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8946); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRR'''); WRITELN(OUTPUT, -8945); WRITELN(OUTPUT, -7403); þVÐ WRITELN(OUTPUT, -8943); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITELN(OUTPUT, 2048 ); WRITELN END (*** OF DOTFILE ***); PROCEDURE PACKCODE; VAR SMCODE, I, P, Q : INTEGER; LITERALS þc¦: STRING3; OP, TEMPOP : STRING4; ERROR : BOOLEAN; PROCEDURE DUMMYLABELS; BEGIN ECOUNT := ECOUNT + 1; WRITELN(PRR, '**********', ' INSTR. NO. ' : 12, ICOUNT : 5, ' ''' : 2, OP, þ/ ''' HAS NOT YET BE', 'EN CATERED FOR ');  WRITELN END (*** OF DUMMYLABELS ***); FUNCTION PKACTION : INTEGER; VAR TEMP, RNDM, PI : INTEGER; MORETRY : BOOLEAN; PROCEDURE ERRORP; þ¦è BEGIN ERROR := TRUE; ECOUNT := ECOUNT + 1; MORETRY := FALSE; WRITE(PRR, 'INSTR. NO. = ' : 13, ICOUNT : 1, ' ', OP); REPEAT READ(INPUT, CH); þ1á WRITE(PRR, CH) UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WRITELN(PRR); WRITE(PRR, '** ', OP, ' ** ILLEGAL CODE'); WRITELN(PRR) END (*** ERRORP ***); BEGIþ;N (* OF PKACTION *) PKACTION := 0; TEMP := ORD(OP[1]) * 4 + ORD(OP[2]) * 2 + ORD(OP[3]); IF ORD(OP[4]) <> 0 THEN TEMP := TEMP * 2 + ORD(OP[4]); TEMP := TEMP MOD TABLESþ>IZE; MORETRY := TRUE;  SMIN := SMIN + 1; SMAX := SMAX + 1; RNDM := 1; PI := 0; IF OP = ' ' THEN ERRORP ELSE WHILE MORETRY DO WITH PCODETABLE[ (TEMP + PI) MOD TABLESþ¢–IZE ] DO BEGIN IF OP = PCODE THEN BEGIN MORETRY := FALSE; SMCODE := SEMICODE; PKACTION:= ACTION; END ELSE IF PCODE = ' ' THEN ERRORP; þ¶ž IF MORETRY THEN  BEGIN RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); SMAX := SMAX + 1 END END END (*** OF PKACTION ***); PROCEDURE NILP(P1, P2 : INþäaTEGER); (* PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1= 0)) THEN BEGIN WRITELN(OUTPUT, P2); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 ); þ,¹ READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILP ***); PROCEDURE NILPS(P1, P2, P3 : INTEGER); (* SPECIAL PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1 < HALFWORD) AND (P1 >= 0)) THEN BEGIN WRITELN(OUþDÏTPUT, P2 + P3 ); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 + P3 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILPS ***); PROCEDURE QTOP(P1, P2, P3 : INTEGER); (* PCODE WIþTH P- AND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND (P2 < HALFWORD) AND (P2 >= 0)) THEN BEGIN WRITELN(OUTPUT, P3 + P1 ); WRITELN(OUTPUT, P2 : 7) END ELSE WRITELN(OUTPUT, BIT16 + P3 + P2 );þ¢d READ(INPUT, CH) (* READ OFF EOLN *) END (*** QTOP ***); PROCEDURE QTOPS(P1, P2, P3, P4 : INTEGER); (* SPECIAL PCODE WITH P- AND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND ( P2 < HALFWORD) AND (P2 >= 0)) THEN  þÆBEGIN WRITELN(OUTPUT, P3 + P4 + P1 ); WRITELN(OUTPUT, P2) END ELSE WRITELN(OUTPUT, BIT16 + P2 + P3 + P4 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF QTOPS ***); PROCEDURE BOUNDS(SþõÙEMICODE, LOWERBOUND, UPPERBOUND : INTEGER); (* GENERATE POSSIBLE OFFENDING PCODE LOCATION IN CASE OF INVALID CHECK RANGE *) BEGIN IF SEMICODE > 0 THEN BEGIN IF (LOWERBOUND = 0) AND (UPPERBOUND < HALFWORD) THEN þÿ WRITELN(OUTPUT, SEMICODE + BIT16 + UPPERBOUND) ELSE BEGIN IF (LOWERBOUND >= 0) AND (LOWERBOUND < HALFWORD) THEN WRITELN(OUTPUT, SEMICODE + LOWERBOUND) þªR ELSE BEGIN WRITELN(OUTPUT, SEMICODE + HALFWORD); WRITELN(OUTPUT, LOWERBOUND) END; WRITELN(OUTPUT, UPPERBOUND) END þÿŠ END ELSE IF LOWERBOUND > 0 THEN WRITELN(OUTPUT, SEMICODE + 1) ELSE WRITELN(OUTPUT, SEMICODE); WRITELN(OUTPUT, ICOUNT + 1) END (* OF BOUNDS *); PROCEDURE LOWCODE; (* TO PROVIDE FACILITIES FOR THOSE POOR SOULS Wþm¥HO MUST LIVE WITH MACHINE CODES *) VAR I, J, K, L, ACC, LEVEL, DISPL : INTEGER; CODEND : BOOLEAN; DIRECTIVE : STRING4; LINE : ARRAY[1..80] OF CHAR; GOODCHAR : SET OF CHAR; GOODIGIT þ€» : SET OF '0'..'9'; FUNCTION GETNUM : INTEGER; VAR NUMBER : INTEGER; BEGIN WHILE ((LINE[J] = ' ') OR (LINE[J] = ',')) AND (J < I) DO J := J + 1; IF NOT (LINE[J] IN GOODþsZIGIT) THEN BEGIN WRITELN(PRR, '** ASSEMBLER COD', 'E ERROR :'); FOR J := 1 TO I DO WRITE(PRR, LINE[J]); WRITELN(PRR);  WRITELN(PRR, '** LAST RECORDED', ' PCOþ=DE COUNTER =', ICOUNT); ECOUNT := ECOUNT + 1 END; NUMBER := ORD(LINE[J]) - ZERO; J := J + 1; WHILE (J <= I) AND (LINE[J] IN GOODIGIT) DO BEGIN þÛ¨ NUMBER := NUMBER * 10 + ORD(LINE[J]) - ZERO; J := J + 1 END; GETNUM := NUMBER END (* OF GETNUM *); PROCEDURE GETLABEL;  VAR N : INTEGER; BEGIN IF J þB> 1 THEN BEGIN FOR N := 1 TO J DO WRITE(OUTPUT, LINE[N]); END END (* OF GET LABEL *); BEGIN (* OF LOWCODE *); WRITELN(OUTPUT, '.RDX 8'); WRITELþz[N(OUTPUT, '.EXTD .CST .CLD ', 'PCRTN'); CODEND := FALSE; FOR CH := '0' TO '9' DO GOODIGIT := GOODIGIT + [CH]; FOR CH := 'A' TO 'Z' DO GOODCHAR := GOODCHAR + [CH]; GOODCHAR := GOODCHAR + ['.', '$'] + GOODIGIT; þ+Ñ REPEAT IF EOF(INPUT) THEN BEGIN WRITELN(PRR, '** ASSEMBLY CODE', ' SECTION NOT PRO', 'PERLY ENDED.'); WRITELN(PRR, '** LAST RECORDED', ' PCODE COUNTER =', ICOUNT); þ2Ÿ HALT(311); END; REPEAT WHILE EOLN(INPUT) DO READLN(INPUT); READ(INPUT, CH);  IF CH = ';' THEN READLN(INPUT) UNTIL CH IN GOODCHAR; LIþ@¨NE[1] := CH; FOR I := 2 TO 80 DO LINE[I] := ' '; I := 1; J := 1; WHILE NOT( EOLN(INPUT) OR ( I = 80) OR (CH = ';')) DO BEGIN READ(INPUT, CH); IF CH <> ';'þH_ THEN BEGIN I := I + 1; LINE[I] := CH; IF CH = ':' THEN J := I END END; READLN(INPUT); IF J > 1 Tþ_HEN REPEAT J := J + 1; UNTIL LINE[J] <> ' '; L := 1; FOR K := J TO J + 3 DO BEGIN DIRECTIVE[L] := LINE[K]; þ5‚ L := L + 1 END; IF DIRECTIVE = 'JPC ' THEN BEGIN GETLABEL;  CODEND := TRUE; WRITELN(OUTPUT, 'JSR @PCRTN') END ELSE IF DþÛ IRECTIVE = 'POP ' THEN BEGIN GETLABEL; J := J + 4; WRITELN(OUTPUT, 'DSZ 41'); WRITE(OUTPUT, 'LDA ' : 5, GETNUM : 1, ' @41'); WRITELN(Oþ)jUTPUT) END ELSE IF DIRECTIVE = 'PUSH' THEN BEGIN GETLABEL;  J := J + 4; WRITELN(OUTPUT, 'ISZ 41'); WRITE(OUTPUT, 'STA ': 5, GETNUMþÑë : 1, ' @41'); WRITELN(OUTPUT) END ELSE IF DIRECTIVE = 'LOAD' THEN BEGIN GETLABEL; J := J + 4; ACC := GETNUM; LEVEL := GETNUþ¶wM; DISPL := GETNUM; WRITELN(OUTPUT, 'JSR @.CLD'); WRITELN(OUTPUT, LEVEL);  WRITELN(OUTPUT, DISPL); WRITE(OUTPUT, 'LDA ' : 5, ACC : 1, ' @47'); WRITEþYZLN(OUTPUT); END ELSE IF (DIRECTIVE = 'STOR') AND (LINE[J + 4] = 'E') THEN BEGIN GETLABEL; J := J + 5; WRITE(OUTPUT, 'STA ' : 5, GETNUM : 1, ' 47'); þÍÌ WRITELN(OUTPUT); WRITELN(OUTPUT, 'JSR @.CST');  WRITELN(OUTPUT, GETNUM); WRITELN(OUTPUT, GETNUM); END ELSE BEGIN þ"J FOR J := 1 TO I DO WRITE(OUTPUT, LINE[J]); WRITELN(OUTPUT) END; UNTIL CODEND; WRITELN(OUTPUT, '.RDX 10') END (* OF LOWCODE *); BEGIN (* OF PACKCODE *) OP[1] := CHþŒê; READ(INPUT, OP[2], OP[3]); IF EOLN(INPUT) THEN OP[4] := ' ' ELSE READ(INPUT, OP[4]); CASE PKACTION OF 0 : (* STOA STOA STOC STOI STOR STOS EOF ADI ADR SBI SBR SGS þs FLT FLO TRC NGI NGR SQI SQR ABI ABR NOT AND IOR DIF INT UNI INN MOD ODD LCA MPI MPR DVI DVR STP CHR ORDA ORDC ORDI EQUA EQUB EQUþÊÊB EQUC EQUI EQUR EQUS NEQA NEQB NEQC NEQI NEQR NEQS GEQA GEQB GEQC GEQI GEQR GEQS GRTA GRTB GRTC GRTI GRTR GRTR GRTS LEQA LEQB LEQC þÕLEQI LEQR LEQS LESA LESB LESC LESI LESR LESS RETA RETB RETC RETI RETP RETR ATN COS ELN EXP GET LOG NEW PUT RDC RDI RDR RLN RST þÌSAV SIN SQT WLN WRC WRI WRR WRS OPS  OPN OVL CMS RSN *) BEGIN IF ERROR THEN ERROR := FALSE ELSE BEGIN þ WRITELN(OUTPUT, SMCODE ); READLN(INPUT) (* RID EOLN *) END END; 1, 2, 3, 4, 5, 6, 7, 8, 9 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) þ­ô 10 : (* EQUM NEQM GEQ GRTM LEQM LESM  *) BEGIN READ(INPUT, Q); NILP(Q, SMCODE + BIT15) END; 11, 12, 13, 14, 15, 16, 17, 18, 19 : DUMMYLABELS; þλ (***** FOR FUTURE INSERTIONS *****) 20 : (* LODA LODB LODC LODI STRA STRB STRC STRI LDA *) BEGIN READ(INPUT, P, Q); QTOP(P, Q DIV 2, SMCODE) þíA END; 21, 22, 23, 24, 25, 26, 27, 28, 29 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 30 : (* LODR STRR *) BEGIN READ(INPUT, P, Q); QTOPS(P, Q DIV 2, SMCþiODE, HALFWORD) END; 31, 32, 33, 34, 35, 36, 37, 38, 39 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 40 : (* LODS STRS *) BEGIN READ(INPUT, P, Q); þú€ QTOPS(P, Q DIV 2, SMCODE, 3 * HALFWORD) END; 41, 42, 43, 44, 45, 46, 47, 48, 49 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 50 : (* CUP CXP *) BEGIN READ(INPUT, Pþt¿); READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P DIV 2 ); WRITELN(OUTPUT, CH, Q : 1); READ(þ)–INPUT, CH) (* READ OFF EOLN *) END; 51, 52, 53, 54, 55, 56, 57, 58, 59 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 60 : (* MST *) BEGIN READ(INPUT, Q); þqB WRITELN(OUTPUT, SMCODE + Q ); READ(INPUT, CH) (* READ OF EOLN *) END; 61, 62, 63, 64, 65, 66, 67, 68, 69 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 70 : (* LDOA LDOB LDOþÞKC LDOI SROA SROB SROC SROI INDA INDB INDI LAO *) BEGIN READ(INPUT, Q); NILP(Q DIV 2, SMCODE) END; 71, 72, 73, 74þö3, 75, 76, 77, 78, 79 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 80 : (* INDC *) BEGIN READ(INPUT, Q); NILPS(Q, SMCODE, 2 * HALFWORD) END; 81, 82, 83, þ“&84, 85, 86, 87, 88, 89 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 90 : (* LDOR SROR INDR *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD) END; þ¡ 91, 92, 93, 94, 95, 96, 97, 98, 99 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 100 : (*LDOS SROS INDS *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD * 3) þžÐ END; 101, 102, 103, 104, 105, 106, 107, 108, 109 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 110 : (* INCA INCI INCC IXA DECA DECI DECC *) BEGIN þ«V READ(INPUT, Q); NILP(Q, SMCODE) END; 111, 112, 113, 114, 115, 116, 117, 118, 119 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 120 : (*MOV *)  BEGIN þ#ì READ(INPUT, Q); NILP((Q + 1) DIV 2, SMCODE) END; 121, 122, 123, 124, 125, 126, 127, 128, 129 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 130 : (* ENT *) þ;´ BEGIN READ(INPUT, P); READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P );  WRITELN(OUTPUT, Cþ“H, Q : 1); READ(INPUT, CH) (* READ OFF EOLN *) END; 131, 132, 133, 134, 135, 136, 137, 138, 139 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 140 : (* UJC *) BEGIN þ ³ WRITELN(OUTPUT, SMCODE ); WRITELN(OUTPUT, 0 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 141, 142, 143, 144, 145, 146, 147, 148, 149 : DUMMYLABELS; (***** FOR þÉmFUTURE INSERTIONS *****) 150 : (* UJP FJP XJP TJP JPF JPT SJP *) BEGIN READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(Oþ‘2UTPUT, SMCODE ); WRITELN(OUTPUT, CH, Q : 1); READ(INPUT, CH) (* READ OFF EOLN *) END; 151, 152, 153, 154, 155, 156, 157, 158, 159 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS þ9¯*****) 160 : (* CSP *) BEGIN READ(INPUT, CH); WHILE CH = ' ' DO READ(INPUT, CH); I := SMCODE; TEMPOP := OP; OP[1] := CH; þäô READ(INPUT, OP[2], OP[3]); OP[4] := ' '; P := PKACTION; (* P IS DUMMY, CALLING PKACTION IS JUST TO  OBTAIN SEMI-CODE VALUE IN SMCODE *) WRITELNþŸ(OUTPUT, SMCODE + I + BIT16 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 161, 162, 163, 164, 165, 166, 167, 168, 169 :DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 170 : (* CHKA CHKB CHþÞKC CHKI *) BEGIN READLN(INPUT, P, Q); BOUNDS(SMCODE, P, Q) END; 171, 172, 173, 174, 175, 176, 177, 178, 179 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) þ.ï 180 : (* LDC *) BEGIN WRITELN(OUTPUT, SMCODE + 3 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) þ²Ò FOR I := 1 TO 4 DO WRITELN(OUTPUT, SWITCHES[I]); END; 181, 182, 183, 184, 185, 186, 187, 188, 189 : DUMMYLABELS;  (***** FOR FUTURE INSERTIONS *****) 190 : (* LDCB LDCI *) BEGIN þîZ READ(INPUT, Q); QTOP(0, Q, SMCODE) END; 191, 192, 193, 194, 195, 196, 197, 198, 199 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 200 : (* LDCC *) (* SORRY FOR þ]‰THIS MESS, BUT BLAME NOVA ASSEMBLER PLEASE *) BEGIN READ(INPUT, CH); (* THE ORDINAL OF (') = 7 *) WHILE ORD(CH) <> 7 DO READ(INPUT, CH); LITERALS[1] := CH; þ'ã READ(INPUT, LITERALS[2], LITERALS[3]); WRITELN(OUTPUT, SMCODE ); IF LITERALS[2] = CHR(7) (* IF LITERALS[2] = ''' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), þ‹v 39 (*NOVA CODE FOR (')*) : 1, CHR(30), CHR(7)) ELSE IF LITERALS[2] =CHR(12) (* IF CH = ',' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 44 : 1, (*NOVA þ„CODE FOR (,) *) CHR(30), CHR(7)) ELSE IF LITERALS[2] = CHR(28) (* IF LITERALS[2] = '<' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 60 (* NOVA CODE FOR (<) *) : 1, CHR(30þ�-), CHR(7)) ELSE WRITELN(OUTPUT, '.TXT ', LITERALS); READ(INPUT, CH) (* READ OFF EOLN *) END; 201, 202, 203, 204, 205, 206, 207, 208, 209 : DUMMYLABELS; (***** FOR FUTURE INSERTþohIONS *****) 210 : (* LDCN *) QTOP(0, 0, SMCODE); 211, 212, 213, 214, 215, 216, 217, 218, 219 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 220 : (* LDCR *) (* NOTICE THE NON-FLOATING-POþ'IINT OUTPUT FORMAT OF 'R' *) BEGIN WRITELN(OUTPUT, SMCODE + 1, '.');  READLN(INPUT, R); WRITELN(OUTPUT, '0', R : 0); END; 230 : (* JNC *) (* PARADISE FORþ� MACHINE CODE ADDICTS ONLY *) BEGIN WRITELN(OUTPUT, SMCODE); READLN(INPUT); LOWCODE; END; (* REDUNDANT 'CCP ' 240 : BEGIN þÆî WRITELN(OUTPUT, SMCODE); READLN(INPUT, Q); WRITELN(OUTPUT, Q) END; *) END (* OF CASE PKACTION *) END (*** OF PACKCODE ***); BEGIN (* OF MAIN *) WRITELN; WRITELN; þ¦ WRITELN; WRITELN(PRR, '; ==== P4ASM BEG', 'INS NOW'); ENT := TRUE; ZERO := ORD('0'); ICOUNT := 3; FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO PCODE := ' '; COMPLETABLE; (* START READINGþk® IN THE PCODE PROGRAM FROM PRD FILE *) READ(INPUT, CH, CH, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF (CH <> '.') AND (DOTNAME <> 'TIT') THEN BEGIN WRITELN(PRR, '**********', ' NO TITLE FOUND ', '**********'); WRITELN(PRR)þ�<; HALT(311) END; WRITE(OUTPUT, CH: 16, DOTNAME); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); WRITELN; READ(INPUT, CH); (* RID EOLN *) REPEAT READ(INPUT, CH); þ0s IF CH = 'I' THEN PCTYPE := COMMENT ELSE IF CH = 'L' THEN PCTYPE := LLABEL ELSE IF (CH = 'P') OR (CH = '?') THEN PCTYPE := PCODENTRY ELSE BEGIN READ(INPUT, CH); IF CH = '.' THEN PCTYPEþ; := NONPCODE ELSE PCTYPE := PCODES END; CASE PCTYPE OF COMMENT : (* INSTRUCTION CHECK COUNT *) BEGIN READ(INPUT, J); IF (ICOUNT <> J)þÙ AND (J <> 0) THEN BEGIN  WCOUNT := WCOUNT + 1; WRITELN(PRR, 'I', J : 5, ' ' : 14, '; ??? PCODE' , ' COUNT OUT OF ST', 'EP þà˜???'); END; ICOUNT := J; READ(INPUT, CH) (* READ OFF EOLN *) END; LLABEL : (* LABELS *) BEGIN þ M WRITE(OUTPUT, CH);  READ(INPUT, I); WRITE(OUTPUT, I : 1); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) þ`7 UNTIL EOLN(INPUT); READLN(INPUT); WRITELN(OUTPUT) END; NONPCODE : (* NON STANDARD PCODE INSTRUCTIONS *) BEGIN þ9: READ(INPUT, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF DOTNAME = 'FIL' THEN DOTFILE ELSE BEGIN IF ((DOTNAME = 'SW1') OR (DOTNþ.¢AME = 'SW2') OR (DOTNAME = 'SW3') OR (DOTNAME = 'SW4')) THEN BEGIN REPEAT READ(INPUT, CH) þœû UNTIL (CH = '0') OR (CH = '1'); (* READ UNTIL BINARY IS FOUND *) BINARYSTR[1] := CH; IF CH = '1' THEN J := -1 ELSþ ãE J := 0; FOR I := 2 TO 16 DO BEGIN READ(INPUT, CH); BINARYSTR[I] := CH; þA  J := J * 2 + ORD(CH) - ZERO END; I := ORD(DOTNAME[3]) - ZERO; SWITCHES[I] := J; þ_é READ(INPUT, CH) (* READ OFF EOLN *) END ELSE IF (DOTNAME = 'TXT') AND (INPUT^ <> 'M') THEN BEGIN WRIþ¬ŠTE(OUTPUT, '.', DOTNAME : 3); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL CH <> ' ';þÇ' FOR I := 1 TO 16 DO BEGIN READ(INPUT, CH); IF CH = CHR(2) (* CH = '"'*) THEN  þÖê WRITE(OUTPUT, CHR(28), 34 : 1 (*NOVA CODE FOR '"'*), CHR(30)) ELSE IF CH = CHR(28 (*IF CH = '<'*)) THEN þ`t WRITE(OUTPUT, CHR(28), 60 : 1, (*NOVACODE FOR '<'*)CHR(30)) ELSE IF CH = CHR(30) (*IF CH = '>'*) THEN  þ“ª WRITE(OUTPUT, CHR(28), 62 : 1, (*NOVA CODE FOR '>'*) CHR(30)) ELSE WRITE(OUTPUT, CH) þ˜ END; READLN(INPUT, CH); (* RID EOLN *) WRITELN(OUTPUT, CH) END ELSE BEGIN  þI÷ IF DOTNAME = 'ENT' THEN BEGIN IF ENT THEN BEGIN ENT := FALSE; þ) WRITE(OUTPUT, '.', DOTNAME) END ELSE WRITE(OUTPUT, '; .', DOTNAME) END ELSE  IF NOTþ+> (DOTNAME = 'END') THEN WRITE(OUTPUT, '.', DOTNAME); IF NOT EOLN(INPUT) THEN REPEAT Rþ24EAD(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WþïíRITELN END END END; PCODES : (* STANDARD PCODE INSTRUCTIONS *) BEGIN PACKCODE; Iþ$ÌCOUNT := ICOUNT + 1 END; PCODENTRY : (* PACKED PCODE ENTRY POINT *) BEGIN WRITE(OUTPUT, CH);  REPEAT READ(INPUT, þ,œCH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); WRITELN; READ(INPUT, CH) (* READ OFF EOLN *) END; END (* OF CASE PþŒÀCTYPE *); WHILE EOLN(INPUT) DO BEGIN WRITELN; READ(INPUT, CH) (* READ OF EOLN *) END UNTIL EOF(INPUT); (* THE PCODE PROGRAM HAS BEEN PACKED FOR INTERPRETER *) (* WRITELNþž“(PRR); WRITELN(PRR, '; IDEAL SEARCHES', ' = ', SMIN); WRITELN(PRR, '; ACTUAL SEARCHE', 'S = ', SMAX); *) IF WCOUNT > 0 THEN WRITELN(PRR, ';---- NO. OF WAR', 'NINGS = ', WCOUNT : 6); IF ECOUNT > 0 THEN WRIþ¶0ôTELN(PRR, ';**** NO. OF FAT', 'AL ERRORS = ', ECOUNT : 6); WRITELN(OUTPUT, '.END' : 16); IF ECOUNT > 0 THEN HALT(311); WRITELN; WRITELN; WRITELN END. ÿR2CRCODE.SRû­ ó BþWc .TITL R2CRCODE .TXTM 1 .ENT .CST,.CLD,PCRTN,PJNC .EXTN .BASE .ZREL .CST: CST .CLD: CLD PCRTN: .PCRT .NREL ;ENTRY POINT USED BY THE INTERPRETER TO INITIATE CODE PJNC: JMP @PC ;RETURN FROM CODE TO THE INTERPRETER .PCRT: STA 3,PC DSZ PC JMP @IP þ{e ;LOAD AND STORE FROM THE STACK ;STORE.... CST: STA 3,Z2 ;SAVE LINK JSR SAVER ;AND REGISTERS LDA 0,Z1 LDA 3,Z2 ;RESTORE LINK LDA 1,0,3 ;LEVEL DIFFERENCE LDA 2,1,3 ;OFFSET .BASE ;FORM ADDRESS  STA 0,0,2 ;STORE @ THE ADDRESS JMP HOME þ7è ;RETURN ;LOAD...... CLD: STA 3,Z2 ;SAVE LINK JSR SAVER ;AND REGISTERS LDA 3,Z2 ;RESTORE LINK LDA 1,0,3 ;LEVEL DIFFERENCE LDA 2,1,3 ;OFFSET .BASE ;FORM ADDDRESS STA 2,Z1 HOME: ISZ Z2 ISZ Z2 JSR RESET JMP @Z2 ;RETURN SAVER: STA 0,þƒjTEMP0 STA 1,TEMP1 STA 2,TEMP2 JMP 0,3 RESET: LDA 0,TEMP0 LDA 1,TEMP1 LDA 2,TEMP2 JMP 0,3 TEMP0: 0 TEMP1: 0 TEMP2: 0 .END ÿR2SITAB.SRû­U GþK� .TITL R2SITAB ; THE INTERPRETER JUMP TABLE .ENT ITAB0,ITAB1 .EXTN PLOD,PLDO,PSTR,PSRO,PLDA,PLAO,PSTO,PLDC,PLCI,PIND .EXTN PINDC,PSTOC .EXTN PINC,PINCC .EXTN PMST,PCUP,PCXP,PENT,PRET,PCSP þ¨• .EXTN PIXA .EXTN PEQU,PNEQ,PGEQ,PGRT,PLEQ,PLES .EXTN PUJP,PFJP,PXJP,PTJP,PUJC .EXTN PCHKC,PCHK2,PCHK3,PCHK4,PEOF .EXTN PADI,PADR,PSBI,PSBR .EXTN PSGS .EXTN PFLT,PFLO,PTRC .EXTN PNGIþ´Ä,PNGR,PSQI,PSQR,PABI,PABR  .EXTN PNOT,PAND,PIOR .EXTN PDIF,PINT,PUNI,PINN .EXTN PMOD,PODD .EXTN PMPI,PMPR,PDVI,PDVR .EXTN PMOV,PLCA,PDEC,PDECC,PSTP,PHLT .EXTN PCHR,PORDI,PORDA,PORDC,PORDB .þ½pEXTN PJNC .EXTN PNON .ZREL ITAB0: PNON ; 0 NOT USED PHLT ; 1 PEQU ; 2 PNEQ ; 3 PGEQ ; 4 PGRþ¹âT ; 5  PLEQ ; 6 PLES ; 7 PSTO ; 8 PSTO ; 9 PSTOC ; 10 PSTO ; 11 PMST þÕë ; 12 PRET ; 13 PADI ; 14 PSBI ; 15 PNGI ; 16 PSQI ; 17 PABI ; 18 PMþôÓOD  ; 19 PODD ; 20 PMPI ; 21 PDVI ; 22 PADR ; 23 PSBR ; 24 PFLT ; 25 þ41 PFLO ; 26 PTRC ; 27 PNGR ; 28 PSQR ; 29 PABR ; 30 PMPR ; 31 PDVR ; 32  þ?! PNOT ; 33 PAND ; 34 PIOR ; 35 PSGS ; 36 PDIF ; 37 PINT ; 38 PUNI ; 39 þ×S PINN ; 40 PEOF ; 41 PSTP ; 42 PLCA ; 43 PORDI ; 44 SET ASIDE PORDA ; 45 4 LOCATIONS  PORþYãDC ; 46 FOR THE PORDB ; 47 ORD FAMILY PCHR ; 48 ; THE GAPS IN THE REMAINDER OF TABLE 0 ARE FOR CORAL PNON ; 49 PNON ; 50 þE3 PNON ; 51 PJNC ; 52 PNON ; 53 PNON ; 54 PNON ; 55 PNON ; 56  PNON ; 57 þÔ PNON ; 58 PNON ; 59 PNON ; 60 PNON ; 61 PNON ; 62 PNON ; 63 ITAB1: PNON ; 64þÔ˜ NOT USED PUJC ; 65 PEQU ; 66 PNEQ ; 67 PGEQ ; 68 PGRT ; 69 PLEQ  ; 70 PLES þz# ; 71 N.B MULTIPLE COMPARES PLOD ; 72 PLOD ; 73 PLOD ; 74 PLOD ; 75 PLDO ; 76 PLDO ;þj@ 77 PLDO ; 78 PLDO ; 79 PSTR ; 80 PSTR ; 81 PSTR ; 82 PSTR ; 83 PSRO þy. ; 84 PSRO ; 85 PSRO ; 86 PSRO ; 87 PIND ; 88 PIND ; 89 PINDC ; 90 PIND þ!9 ; 91 PLDA ; 92 PLAO ; 93 PLDC ; 94 PIXA ; 95 PMOV ; 96 PCUP ; 97 PENT þqG ; 98 PCSP ; 99 PUJP ;100 PFJP ;101 PTJP ;102 PXJP ;103 PINC ;104 PNONþü2 ;105 ALSO INC PINCC ;106 PNON ;107 ALSO INC PDEC ;108 ALSO NEEDS NEXT 3 PNON ;109 PDECC ;110 PNþWON ;111 PCHKC ;112 NEEDS 3 MORE PCHK2 ;113 PCHK3 ;114 PCHK4 ;115 ; THE GAPS IN THE REMAINDER OF TABLE 1 ARE FOR CORAL þ˜g PNON ; 116 PCXP ; 117 PNON ; 118 PNON ; 119 PNON  ; 120 PNON ; 121 PNON ; 122þÇs} PNON ; 123 PNON ; 124 PNON ; 125 PNON ; 126 PNON ; 127 .END ÿR2IFNS.SRû! ó ?þûÖ– .TITL R2IFNS ; A DUMMY SEGMENT TO SATISFY ALL UNDEFINED CUES ; TO REAL STANDARD PROCEDURES .ENT XATN,XCOS,XEXP,XLOG,XSIN,XSQT,XRND .EXTN PUNDF .NREL XATN: .PUND XCOS: .PUND XEXP: .PUND XLOG: .PUND XSIN: .PUND XSQT: .PUND XRND: .PUND .END ÿR2SHEAP.SRûÍ ó 8þú² .TITL R2SHEAP ; THE STANDARD PROCEDURES FOR OPERATING ON THE HEAP .ENT XNEW, XRST, XSAV .NREL XNEW: POP1 0 ;UNSTACK N (ELEMENT SIZE) MOVZR 0,0 SUB 3,3 ;AC3 AS SOURCE FOR ZEROES NEG 0,0 ;# OF WORDS TO CLEAR CLEAR: DSZ HP STA 3,@HP ;CLEAR EACHþò¤ WORD OF NEW SPACE INC 0,0,SZR JMP CLEAR LDA 1,HP POP1 2 ;UNSTACK AD (POINTER VARIABLE ADDRESS) MOVZR 2,2 MOVZL 1,1 STA 1,0,2 ;[AD]:= HP MOVZR 1,1 ; BACK TO WD ADDR TO TEST EP LDA 0,EP ; ENOUGH ROOM ? ADCZ# 0,1,SZC ; SKP IF AC1<=AC0 .. HP<=þý‡EP NEXT ; YES ERR.P ; NO - ERROR RETURN PERHO ; WITH HEAP OVERFLOW XRST: POP1 1 ;RESET HEAP POINTER MOVZR 1,1 STA 1,HP NEXT XSAV: LDA 1,HP ;SAVE HEAP POINTER POP1 2 ;UNSTACK AD MOVZL 1,1 MOVZR 2,2 STA 1,0,2 ;[AD]:= HP NEXT .END ÿR2IFW.SRû! ó ?þ¯! .TITL R2IFW ; A DUMMY SEGMENT TO RESOLVE 2 CUES WHICH ARE ; REDUNDANT TO THE INTERPRETER WITHOUT FP .ENT WSA,PFPIN .EXTN PUNDF .ZREL WSA :0 .NREL PFPIN: .PUND .END ÿR2IFILES.CMû£Žþ�R2SECHK,^ R2IFT,^ R2SMPD,^ R2STP,^ R2SINTEGER,^ R2SBOOLEAN,^ R2SRANDOM,^ R2SOPN,^ R2IREAL,^ R2SADMIN,^ R2SRD,^ R2SIOIN,^ R2IFNS,^ R2CRCODE,^ R2SSET,^ R2SMPY,^ R2STI,^ R2SITAB,^ R2SDIV,^ R2IFW,^ R2SMEMACC,^ R2SMISC,^ R2SDBIN,^ R2STESTS,^ R2SHEAP,^ R2IOUTL,^þþ-` R2SDECODER,^ R2SMYP,^ R2SREWR,^ R2SSPTAB,^ R2SCONSTS^ ÿR2SMEMACC.SRû! ó 4þ½Ì .TITL R2SMEMACC ; THE P-CODE INTERPRETER'S "MEMORY ACCESS" OPERATIONS .ENT .BASE .ENT PIND,PLDO,PLOD .ENT PSRO,PSTR,PSTO .ENT PLAO,PLDA .ENT PLDC,PLCI,PLCA .ENT PMOV .EXTD RHB,LHB .EXTN PUNDF ; "BASE" BACKS DOWN THE NUMBER OF STACK FRAMES SPþ,ÒECIFIED BY ; AC1, AND ADDS THE BASE ADDRESS OF THIS STACK FRAME TO THE ; OFFSET IN AC2 .ZREL .BASE= JSR @. ;SET UP THE MNEMONIC .BASE AS BASE ; A JUMP TO ROUTINE "BASE" .NREL BASE: NEG 1,1,SZR ;CURRENT LEVEL ? JMP .+4 LDA 1,MP ;YES - GET MARK Pþ܃OINTER ADD 1,2 ;ADD TO OFFSET JMP 0,3 ; AND RETURN STA 3,Z1 ;NO - SAVE RETURN ADDRESS LDA 3,MP ;PICK UP MARK POINTER LDA 3,SL,3 ;BACKTRACK ONE STACK LEVEL AT INC 1,1,SZR ; A TIME UNTIL AC1=0 JMP .-2 ADD 3,2 ;ADD STACK FRAME BASE TO OFFSET þ¹p JMP @Z1 ; AND RETURN ; "MOVE" MOVES THE NUMBER OF WORDS SPECIFIED BY AC1 FROM ; THE ADDRESS IN AC2 TO THE ADDRESS IN AC3 MOVE: LDA 0,0,2  STA 0,0,3 INC 1,1,SNR NEXT INC 2,2 INC 3,3 JMP MOVE TMSK: 001400 ;MASK FOR WORD COUNT ; LOAD INSTRUCTIONþTS ; AC0 CONTAINS (NO. OF WORDS TO BE LOADED - 1) IN HIGH ; ORDER BYTE. VARIABLE ADDRESS GIVEN BY : ; IND - INDEX ON TOP OF STACK + OFFSET IN AC2 ; LDO - STACK BASE (DSP) + OFFSET IN AC2 (I.E. GLOBAL) ; LOD - OFFSET IN AC2 FROM STACK FRAME BASE N LEVELS ; þ¸ˆ FURTHER DOWN, N IN AC1 PIND: POP1 1 ;INDEXED FETCH MOVZR 1,1 ; MAKE WD ADDRESS JMP .+2 PLDO: LDA 1,DSP ;LOAD CONTENTS OF BASE ADDRESS ADD 1,2,SKP PLOD: JSR BASE ;LOAD CONTENTS OF ADDRESS LDA 1,0,2 ;PICK UP VARIABLE PUSH1 1 ;PUT IT ON THE þ5ŠSTACK LDA 1,TMSK ANDS 1,0,SNR ;ANY MORE WORDS ? NEXT ;NO NEG 0,1 ;YES - LOAD THEM ONE AT A TIME PLOD1: INC 2,2 LDA 0,0,2 PUSH1 0 INC 1,1,SZR JMP PLOD1 NEXT ; STORE INSTRUCTIONS ; AC0 CONTAINS (NO. OF WORDS TO BE STORED - 1) IN HIGH ; ORDER BYþtçTE. VARIABLE ADDRESS GIVEN BY : ; SRO - STACK BASE (DSP) + OFFSET IN AC2 (I.E. GLOBAL) ; STR - OFFSET IN AC2 FROM STACK FRAME BASE N LEVELS ; FURTHER DOWN, N IN AC1 ; STO - TOP OF STACK PSRO: LDA 1,DSP ;STORE ADD 1,2,SKP PSTR: JSR BASE ;STORE ATþ]d ADDRESS LDA 1,TMSK ANDS 1,0,SZR ;ONE WORD ONLY ? JMP PSTR1 POP1 1 ;YES - STORE IT STA 1,0,2 NEXT PSTR1: MOV 2,3 ;NO - USE "MOVE" LDA 2,SP ;DECREMENT STACK POINTER ADC 0,2 STA 2,SP PSTR2: INC 2,2 ;SET UP PARAMETERS FOR "MOVE" COM 0,1 JMP MOþ�—VE PSTO: LDA 1,TMSK ;STORE AT BASE LEVEL ADDRESS ANDS 1,0,SZR ;ONE WORD ONLY ? JMP PSTO1 POP1 1 ;YES - STORE IT POP1 3 MOVZR 3,3 ; MAKE WD ADDRESS STA 1,0,3 NEXT PSTO1: LDA 2,SP ;NO - DECREMENT STACK POINTER ADC 0,2 STA 2,SP POP1 3 ;USE "MþNÜOVE" AGAIN MOVZR 3,3 ; MAKE WD ADDRESS JMP PSTR2 ; MORE LOAD INSTRUCTIONS (LOAD CONSTANT & LOAD ADDRESS) PLAO: LDA 1,DSP ;LOAD BASE LEVEL ADDRESS ADD 1,2,SKP PLDA: JSR BASE ;LOAD ADDRESS MOVZL 2,2 ; MAKE WD ADDRESS PUSH1 2 NEXT PLDC: PUSH1 2 þf° ;LOAD CONSTANT NEG 1,1,SNR ;MORE THAN ONE WORD ? NEXT ;NO PLDC1: LDA 2,@PC ;YES - PICK UP THE NEXT PUSH1 2 ; AND LOAD IT INC 1,1,SZR ;ANY MORE ? JMP PLDC1 ;YES NEXT ;NO PLCI: .PUND ;LOAD CONSTANT INDIRECT PLCA: LDA 2,PC ;LOAD ADDRESS þXeOF CONSTANT INCZL 2,2 PUSH1 2 LDA 0,RHB ;RIGHT HAND BYTE MASK LDA 1,@PC ;SEARCH FOR END OF STRING (NULL) AND 0,1,SZR ; AND UPDATE PC JMP .-2 NEXT PMOV: NEG 2,1 ;STORE STRING AWAY POP1 2 MOVZR 2,2 ; MAKE WD ADDRESS POP1 3 MOVZR 3,3 ; DITTþÚ O JMP MOVE .END ÿR2SRD.SRûK û*þ< .TITLE R2SRD .ENT PEOF,XELN,XRDC,XRLN,XGET .ENT .READ,READ .EXTD TEMP .ENT CR,TEMP1,TABAD .ENT CHAN,CNTAD,TEMP2 .EXTD .GCH,.FIND,.BPUT,.BGET .EXTD LHBNP,RHBNP,SPACE .ZREL .READ: READ CHAN: 0 CNTAD: 0 TABAD: 0 TEMP1: 0 TEMP2: 0 CR: 6400 .NREL þâê; READ - THIS ROUTINE LEAVES CHARACTER IN THE FILE BUFFER ; AND IN AC0. ; AC1 - UNDEFINED ; AC2 - FBA A BYTE ADDRESS ; ; FCH - FILE CHANNEL WORD (CONTAINS CHANNEL NO. + RECORD LENGTH). ; FST - FILE STATUS WORD (CURRENT STATE OF THE FILE). TAþ�©B: 4400 FF: 6000 CNTLZ: 15000 EOLFL: 1B1 EREOF: 6 C7: 7 READ: STA 3,USP ;USP RESTORED TO AC3 AFTER .SYSTM LDA 0,FST,2 ;GET FST MOVL# 0,0,SNC ;EOF SET ? JMP RD1 ; - NO ERR.P ; - YES PERRE ; REPORT READ ERROR RD1: MOVR 0,0,SZC ; FB EMPTY JMP þlDRD2 ; - YES LDA 0,0,2 ; - NO, GET CHAR JMP 0,3 ; AND RETURN RD2: JSR @.GCH ;PICK UP CHANNEL AN' ALL JMP RNASC ;NONE CHARACTER INPUT ; ASCII TRANSFER FROM A SPECIFIED FILE RDASC: STA 2,TEMP2 ;STORE FOR A BIT LDA 2,CHAN JSR @.FIND ;ALL FILE DEþ¨ÍTAILS. LDA 2,@CNTAD ADD 0,2 ;FORM ADDDRESS OF NEXT CHARACTER. JSR @.BGET ;AS IN BIBLE BUT FOR CHARACTER LDA 2,TEMP2 ;THE RETURN OF FBA.... LDA 3,FST,2 ;TEST IF EOLN SET FROM LAST ADDZL# 3,3,SZC ;TIME THROUGH JMP RELN ;YES... MOV 0,0,SNR ;IS þÅ­IT NULL JMP RDNULL ;FORGET NULLS IF POSS. LDA 1,CR ;HOW ABOUT A CARRIAGE RETURN,THEN SUB# 1,0,SNR JMP RDEOL LDA 1,CNTLZ ;OR THE END OF THE FILE SUB# 1,0,SNR JMP RDERR+1 ;YES IT IS EOF SO END IT LDA 1,FF ;NO! THEN IT MUST BE A SUB# 1,0,SNR ;Aþbó FORM FEED OR I'LL GIVE UP. JMP RDEOL LDA 1,TAB ;PERHAPS EVEN A TERRIBLE TAB SUB# 1,0,SNR ;WHICH MAKES THE SYSTEM AWKWARD. JMP RDTAB STA 0,0,2 ;STORE THE CHARACTER IN THE BUFFER ISZ @CNTAD ;O.K. I GIVE UP IT WAS LDA 3,EREOF ;SOMETHING ELSE. RDEþ˜ýOF: STA 3,FST,2 ;YOU THINK YOU'RE NORMAL THEN... ISZ @TABAD ;KICK THE TAB COUNTER AND JMP @USP ;I'M OFF HOME ; NONE ASCII TRANSFER FROM A SPECIFIED FILE RNASC: MOVZL 2,0 ;BYTE POINTER TO FNA LDA 2,CHAN .SYSTM .RDS 77 ;READ A RECORD JMP .+2 JMþãôP @USP JSR RDER1 ;TEST IF REAL ERROR MOVZR 0,2 ;RESET FBA SUBZR 3,3 STA 3,FST,2 ;SET EOF JMP @USP ;DEAL WITH THE END OF LINE RELN: SUB 3,3 ;RESET THE EOLN FLAG STA 3,FST,2 JSR RDRL ;GET A NEW LINE JMP RDASC ;AND RESTART ;DEAL WITH THE SPECIþS„AL CASES... RDEOL: LDA 0,EOLFL ;FOUND END OF LINE OR STA 0,FST,2 ;EQUIVALENT, SO INDICATE LDA 0,SPACE ;IN THE STATUS AND BUFFER. STA 0,0,2 JMP @USP RDNUL: JSR RDRL ;READ THE NEXT LINE JMP RDASC ;AND RETURN FOR THE NEXT CHARACTER RDTAB: LDA 1,@þ„TABAD ;TEST IF MULTIPLE OF 7 LDA 0,C7 COM 1,1 AND 1,0,SNR JMP NOTAB ;IT ISN'T NECESSARY LDA 0,SPACE STA 0,0,2 ;REPLACE WITH SPACES. JMP RDEOF-1 NOTAB: ISZ @CNTAD JMP RDASC ;GET NEXT CHARACTER. RDRL: STA 3,TEMP1 ;IF NO MORE IN BUFFER GET NEXT þ> SUB 1,1 STA 1,@CNTAD ;RESET THE BYTE COUNT. STA 1,@TABAD ;RESET THE TAB COUNTER. STA 2,TEMP2 ;STORE FBA TEMPORARILY LDA 2,CHAN ;GET THE CHANNEL AND ALL JSR @.FIND LDA 2,CHAN .SYSTM .RDL 77 JMP RDER2 LDA 2,TEMP2 LDA 0,SPACE ;LOAD A SPACE IN CþõÜASE ITS REQUIRED JMP @TEMP1 RDER2: ADD 1,0 JSR RDER1 ;TEST IF NOT EOF MOV 0,2 LDA 0,CNTLZ JSR @.BPUT ;MARK IT AS EOF LDA 2,TEMP2 JMP @TEMP1 RDERR: JSR RDER1 ;TEST IF NOT EOF LDA 0,EREOF SUBZR 3,3 ADD 0,3 LDA 2,TEMP2 ;RESTORE THE FBA JMP RþÒíDEOF ;MARK IT AS EOF RDER1: LDA 1,EREOF ;FINALLY THE ERROR CASE SUB# 1,2,SZR ERR.2 JMP 0,3 ;THE FOLLOWING ARE ENTRY POINTS USED BY PCODE PEOF: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;GET BUFFER STATUS MOVL 0,0 ;SET APPROPRIATE SUBCL 0,0 ;TRUþ|ïTH VALUE PUSH1 0 ;ON THE STACK NEXT XELN: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;GET BUFFER STATUS ADDL 0,0 ;EOL FLAG INTO CARRY SUBCL 0,0 ;SET TRUTH VALUE PUSH1 0 ;ON THE STACK NEXT XRDC: POP1 2 ;GET FBA MOVZR 2,2 JSR READ STA 2,TEMP þ˜ì; STORE FBA TEMPORARILY POP1 2 ; ADDRESS OF DESTINATION BYTE JSR @.BPUT ; MOVE IT ... LDA 2,TEMP ; AND ON WE GO AS BEFORE. LDA 0,FST,2 ; GET STATUS MOVL# 0,0,SNC ; EOF ? JMP VALID ; - NO NEXT XRLN: POP1 2 ;ET FBA MOVZR 2,2 JSR @.GCH JMP .þÐb+1 STA 2,TEMP2 LDA 2,CHAN JSR @.FIND LDA 2,TEMP2 JSR RDRL SUBZL 0,0 STA 0,FST,2 JSR @.READ NEXT XGET: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;CHECK BUFFER STATUS MOVL# 0,0,SNC ;FOR EOF JMP VALID ;OK - NO EOF ERR.P PERGE ;REPORT GET ERþP]ûROR VALID: MOVR 0,0,SNC ISZ FST,2 ; SET BUFFER EMPTY JSR @.READ NEXT .END ÿP4AMX2.ûŽŽþ¬‡ (********************* P4AMX2 BEGINS ********************) CONST TABLESIZE = 256; TABSIZE0 = 255; (*** IE TABLE SIZE WITH ZERO ORIGIN ***) BIT16 = -32768; BIT15 = 16384; HALFWORD = 256; TYPE þ = INSTRTYPE = (COMMENT, LLABEL, NONPCODE, PCODES, PCODENTRY); STRING3 = ARRAY[1..3] OF CHAR; STRING4 = ARRAY[1..4] OF CHAR; STRING16 = ARRAY[1..16] OF CHAR; TEMPLATE = RECORD þ½÷ PCODE : STRING4; SEMICODE, ACTION : INTEGER  END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; SWITCHES : ARRAY[1..4] OF INTEGER; CH : CHAR; DOTNAME þë\: STRING3; BINARYSTR : STRING16; R : REAL; I, J, ZERO, WCOUNT, ECOUNT, ICOUNT,SMIN, SMAX : INTEGER; ENT : BOOLEAN; PCTYPE : INSTRTYPE; (********************* P4AMX ENDS ***************þŒ}*****) þúúÿR2SOPN.SRûK û þ…‹ .TITLE R2SOPN .NREL .ENT XOPN,XCLS  .EXTN WRLIN .EXTD LHB,RHB,CHAN,TEMP,TEMP1 .EXTD .GCH,.FIND,SPACE,TEMP2 ; ; OPEN A FILE ; ; XOPN - STANDARD COMPILER PRODUCED ENTRY POINT. ; ; AT THE MOMENT ALL FILES ARE TREATED EQUALLY..... ; BUT SOME ARE MORþù�E EQUAL THAN OTHERS. ; ; TWO FORMS - ASCII WHICH BUFFERS INPUT ; RECORD INPUT - INPUTS DIRECTLY INTO USER AREA. XOPN: .SYSTM ;ASK RDOS .GCHN ; FOR CHANNEL ERR.2 STA 2,TEMP2 ;CHANNEL NUMBER MOVS 2,1 ;CHAN # TO AC1 POP1 3 ;þçÀGET FBA MOVZR 3,3 ; MAKE WD ADDRESS STA 3,TEMP ;WORD ADDR OF FBA POP1 0 ;RECORD LENGTH INC 0,0 MOVZR 0,0 ;WORD COUNT OF BYTES ADDS 0,1 ;FORM FCH CONTENTS STA 1,FCH,3 ;STORE CHAN # ISZ FST,3 ;SET BUFFER EMPTY POP1 0 ;GET FNA LDA 3,PC ;PIþøëCK UP CURRENT ADDRESS LDA 1,-3,3 ;FIND THE END OF FILENAME MOV 1,1,SZR ;TEST IF APPEND MODE? ISZ APIND ;YES THEN SET FLAG SUB 1,1 STA 1,-3,3 ;RESET THE FILENAME. REOP: SUB 1,1 ;NORMAL CHARACTERISTICS LDA 3,APIND ;APPEND MODE? MOV 3,3,SZR JMP þ³APP ;YES THEN OPEN APPEND .SYSTM .OPEN 77 JMP TEST REOP1: STA 1,APIND ;RESET APPEND MODE INDICATOR LDA 2,TEMP ;RESTORE WD ADDR OF FBA JSR @.GCH ;TEST IF ASCII FILE NEXT ;NO,CONTINUE LDA 0,SPACE ;SET SPACE IN BUFFER STA 0,0,2 SUB 2,2 ;YESþ|ë,THEN FIND A FREE BUFFER JSR @.FIND MOVZR 0,3 SUB 0,0 ;ENSURE THAT A NULL IS STA 0,0,3 ;PRESENT AT THE START OF BUFFER LDA 0,TEMP2 STA 0,0,2 ;STORE CHANNEL NUMBER IN TABLE NEXT APIND: 0 APP: .SYSTM .APPEND 77 JMP TEST JMP REOP1 ; IF THE FILEþµÞ DOES NOT EXIST, CREATE IT! TEST: LDA 1,C12 SUB# 1,2,SZR ;IS IT REAL PROBLEM? ERR.2 .SYSTM .CRAND ERR.2 LDA 3,TEMP ;ASSUME THEN THAT IT IS SUBZR 2,2 ;AN OUTPUT FILE AND STA 2,FST,3 ;SET EOF IN FILE STATUS. LDA 2,TEMP2 JMP REOP C12: 12 ; CLþ>ZOSE A FILE ; ; TAKES ONE PARAMETER FROM THE STACK - FBA ; XCLS: POP1 2 ;FBA MOVZR 2,2 ;WORD ADDRESS OF FBA SUB 3,3 ;END WITH A NULL STA 3,TEMP1 JSR @.GCH ;GET CHANNEL NUMBER ET AL. JMP CLST ;NONE CHARACTER I/O LDA 0,FST,2 ;TEST IF A WRITE FILþÓucE MOVZR 0,0,SNR JSR @.WRLN ;WRITE THE LAST LINE LDA 2,CHAN JSR @.FIND SUB 1,1 STA 1,@TEMP ;RELEASE THE BUFFER CLST: LDA 2,CHAN .SYSTM ;CLOSE THIS CHANNEL .CLOSE 77 ERR.2 NEXT .WRLN: WRLIN .END üÿR2STP.SRû­ ôþ9Û .TITL R2STP .ENT XPUT,XWLN,XWRC,XWRS,XPAG .ENT WRITE,WRLIN .EXTD CNTAD,TABAD,TEMP,TEMP1,TEMP2,CR,RHB .EXTD .FIND,.BGET,.BPUT,.GCH,CHAN .EXTN BFBP0 .NREL ; ROUTINE TO WRITE OUT A STRING TO THE BUFFER ; ; ENTRY - AC0 - BYTE POINTER TO FIRST BYTE ;þ<æ AC1 - NUMBER OF BYTES ; AC2 - CHANNEL NUMBER ; ; RETURN - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - UNDEFINED WRITE: STA 3,USP STA 0,TEMP1 STA 1,TEMP2 JSR @.FIND ;PICK UP BUFFER INFO. LDA 1,@CNTAD ;NEXT þ+`BYTE ADD 0,1 STA 1,TEMP ;STORE ADDRESS TEMPORARILY NXTCH: LDA 2,TEMP1 ;CHARACTER ADDRESS JSR @.BGET ;GET NEXT BYTE LDA 2,TEMP JSR @.BPUT ;PUT THAT BYTE ISZ @CNTAD ISZ TEMP ;INCREMENT BUFFER ADDRESS ISZ TEMP1 ;INCREMENT CHARACTER ADDRESS DSZ Tþ¤”EMP2 ;DECREMENT AND TEST BYTE COUNT JMP NXTCH JMP @USP XPUT: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;GET STATUS MOVL# 0,0,SZC ;EOF? JMP PUTOK MOVL# 0,0,SNR ;JUST AWAY? JMP .+4 SUBZR 0,0 STA 0,FST,2 ;FIRST TIME THROUGH JMP PUTOK ERR.P ;þbÌNO PERPE ;REPORT PUT ERROR PUTOK: JSR @.GCH ;PICK UP CHANNEL NO. ET AL JMP NCH MOVZL 2,0 ;BYTE POINTER TO FBA SUBZL 1,1 ;SET BIT 15 LDA 2,CHAN ;CHANNEL JSR WRITE NEXT NCH: MOVZL 2,0 LDA 2,CHAN ;WRITE IT STRAIGHT OUT .SYSTM .WRS 77 ERR.2 þ‚š NEXT XPAG: LDA 0,FF JMP .+2 XWLN: LDA 0,CR ;CR IN BUFFER STA 0,TEMP1 POP1 2 MOVZR 2,2 ;B.PTR TO FBA,NOW WORD ADDRESS JSR WRLIN NEXT FF: 6000 .BFBP: BFBP0 XWRC: POP1 2 ;FBA MOVZR 2,2 JSR @.GCH JMP .+1 POP1 1 ;# OF CHARS SUBZL 0,0 ; SUBþåô 0,1,SNR ;LEADING SPACES ? JMP CHAR ;NO LDA 0,@.BFBP ;B.PTR TO SPACES LDA 2,CHAN JSR WRITE CHAR: LDA 0,SP MOVZL 0,0 ;B.PTR TO STACK TOP SUBZL 1,1 ;ONE BYTE LDA 2,CHAN JSR WRITE POP1 1 ;REMOVE CHAR NEXT XWRS: POP1 2 ;FBA MOVZR 2,2 JSR @þ~ö.GCH ;GET CHANNEL JMP .+1 POP1 0 ;SL - STRIN LENGTH POP1 1 ;PL - PRINT LENGTH SUBZ# 1,0,SZC ;IF SL>=PL JMP NOSP ;NO LEADER LEEDR: STA 0,Z1 SUB 0,1 ;LDR LENGTH LDA 0,@.BFBP LDA 2,CHAN JSR WRITE LDA 1,Z1 NOSP: POP1 0 LDA 2,CHAN JSR WRITE Nþ7èEXT ; ROUTINE TO OUTPUT THE LINE STORED IN THE BUFFER. ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - WORD ADDRESS OF FBA ; ; RETURN - AC0 - UNDEFINED ; AC1 - COUNT OF BYTES WRITTEN(INCLUSIVE OF TERMINATOR). ; þãO AC2 - WORD ADDRESS OF FBA WRLIN: STA 3,USP ;RETURN ADDDRESS JSR @.GCH ;GET CHANNEL HALT ;IMPOSSIBLE LDA 2,CHAN ;CHANNEL JSR @.FIND LDA 2,@CNTAD ADD 0,2 ;FORM BYTE ADDRESS OF NEXT CHARACTER LDA 0,TEMP1 JSR @.BPUT ;STORE THE TERMINþÖ?ATOR LDA 2,CHAN JSR @.FIND ;FIND THE BUFFER IN USE SUB 1,1 STA 1,@CNTAD ;RESET THE CHANNEL BUFFER STA 1,@TABAD LDA 2,CHAN ;RETREIVE CHANNEL NUMBER .SYSTM .WRL 77 ;WRITE THE LINE ERR.2 JMP @USP .END ÿLIFE.û´Ž þYÏPROGRAM LIFE(INPUT,OUTPUT); (* GAME OF LIFE BY H.L.CONWAY - P7-70 *) CONST MAXBOARDSIZE = 50; TYPE STATE = (DEAD,STABLE,GROWING); NEIGHBOR = SET OF 0..8; BOARDS = PACKED ARRAY [1..MAXBOARDSIZE,1..MAXBOARDSIZE] OF CHAR; VAR SURVIVEPOPULATION : NEIGHBOR;þÝŸ BOARDSTATE : STATE; NEWBOARD,OLDBOARD : BOARDS; I,J : 0..MAXBOARDSIZE; NUMBEROFNEIGHBORS : 0..8; GENERATION,MAXGENERATION,BOARDSIZE : INTEGER; ALIVECOUNT,CHANGECOUNT : INTEGER; LEFT,RIGHT,UP,DOWN,HORIZOFFSET,VERTOFFSET : -1..+1; BEGIN SURVIVEPOPULþQFATION:=[2,3]; WHILE NOT EOF DO BEGIN (* INITIALISE PARAMETERS AND CREATE BOARD *) GENERATION:=0; READLN(MAXGENERATION); READLN(BOARDSIZE); IF BOARDSIZE>MAXBOARDSIZE THEN BEGIN WRITE('!! ',' BOARDSIZE TOO ','BIG - WILL BE RE','SET TO Mþ|›AX'); WRITELN('BOARDSIZE'); BOARDSIZE:=MAXBOARDSIZE END; FOR I:=1 TO BOARDSIZE DO FOR J:=1 TO BOARDSIZE DO OLDBOARD[I,J]:=' '; READLN(I,J); (*READ LOCATION OF INITIAL ORGANISM *) WHILE I<>0 DO BEGIN IF (I<0) OR (I>BOARDSIZE) Oþ@{R (J<0) OR (J>BOARDSIZE) THEN WRITELN('!! ','NON-EXISTENT ','CELL .. ELEMENT',' IGNORED ',I,J) ELSE OLDBOARD[I,J]:='*'; READLN(I,J) END; (*BOARD PROCESSING BEGINS NOW *) REPEAT ALIVECOUNT:=0; CHANGECOUNT:=0; FOR I:=1 TO BOARDSIZE DO þY FOR J:=1 TO BOARDSIZE DO BEGIN IF I>1 THEN LEFT:=-1 ELSE LEFT:=0; IF I1 THEN UP:=-1 ELSE UP:=0; IF J0) OR (VERTOFFSþafET<>0)) THEN NUMBEROFNEIGHBORS:=NUMBEROFNEIGHBORS+1; (* NOW,SEE WHICH CELLS SHOULD BE ALIVE NEXT GENERATION *) NEWBOARD[I,J]:=' '; IF ((OLDBOARD[I,J]=' ') AND (NUMBEROFNEIGHBORS=3)) OR ((OLDBOARD[I,J]='*') AND (NUMBEROFNEIGHBORS IN SURVIVEþ�gPOPULATION)) THEN BEGIN NEWBOARD[I,J]:='*'; ALIVECOUNT:=ALIVECOUNT+1 END END; (* NEW GENERATION COMPLETE. COPY IT TO OLDBOARD FOR NEXT CYCLE *) GENERATION:=GENERATION+1; WRITELN;WRITELN;WRITELN; WRITELN('GENERATION # ',GENERATION:3, þÀå ' POPULATION = ',ALIVECOUNT:3); FOR I:=1 TO BOARDSIZE DO BEGIN WRITE(' ':14); FOR J:=1 TO BOARDSIZE DO BEGIN WRITE(NEWBOARD[I,J]:2); IF NEWBOARD[I,J]<>OLDBOARD[I,J] THEN BEGIN CHANGECOUNT:=CHANGECOUNT+1; OLDBOARD[I,J]:=NEWBOARD[þ/¸I,J] END END; WRITELN END; (* EVALUATE STATE OF BOARD AT END OF THIS GENERATION *) IF ALIVECOUNT=0 THEN BOARDSTATE:=DEAD ELSE IF CHANGECOUNT = 0 THEN BOARDSTATE:=STABLE ELSE BOARDSTATE:=GROWING UNTIL (BOARDSTATE=DEAD) OR (BOARDSþô$,TATE=STABLE) OR (GENERATION>=MAXGENERATION); CASE BOARDSTATE OF DEAD: WRITELN(' COLONY DIED'); STABLE: WRITELN(' COLONY IS ','STABLE'); GROWING:WRITELN(' MAX GENERATION ','# EXCEEDED') END END (*OF A SINGLE DATA SET *) END. ÿNEW2P4ASMB.ûrX þÁPROGRAM NEW2P4ASMB(OUTPUT, INPUT); BEGIN WRITELN(OUTPUT, 'TO START WITH, W', 'E ASSUME THAT TH', 'E FOLLOWING FILE', ' NAMES ARE NOT O', 'N YOUR DISK :'); WRITþúEELN(OUTPUT, ' ' : 20, '** SETUPA'); WRITELN(OUTPUT, ' ' : 20, ' P4ASM'); WRITELN(OUTPUT, ' ' : 20, '** P4MAC'); WRITELN(OUTPUT); WRITELN(OUTPUT, 'PLEASE ENSURE TH', 'AT THE FOLLOWING', ' FILES OFþ- RELEAS', 'E 2 EXIST ON YOU', 'R DISK :'); WRITELN(OUTPUT, ' ' : 20, '< FASTHASH.SV'); WRITELN(OUTPUT, ' ' : 20, ' SETUP'); WRITELN(OUTPUT, ' ' : 20, ' SETUPAX'); WRITELN(OUTPUT, ' ' : 20, ' þ± SETUPAZ'); WRITELN(OUTPUT, ' ' : 20, ' HEADA2'); WRITELN(OUTPUT, ' ' : 20, ' HEADM2'); WRITELN(OUTPUT, ' ' : 20, ' P4ASM.SV'); WRITELN(OUTPUT, ' ' : 20, ' P4ASM.PC'); WRITELN(OUTPUT, ' ' : 20, ' P4AMX2'); WRITELN(OUTPUTþç, ' ' : 20, ' P4ASMZ2'); WRITELN(OUTPUT, ' ' : 20, '> P4MACZ2'); WRITELN(OUTPUT); WRITELN(OUTPUT, 'IF YOU DON''T HAV', 'E THE ABOVE FILE', 'S, YOU SHOULD ST', 'OP BY PRESSING T', þ‘ú 'HE ''CNTRL A'' KEY'); WRITELN(OUTPUT, ', OTHERWISE TYPE', ' IN ''RETURN'' KEY', ' TWICE.'); READLN(INPUT); WRITELN(OUTPUT, '****************', ' GENERATION OFþ†c_ N', 'EW PCODE ASSEMBL', 'ER BEGINS NOW ! ', '****************') END. ÿP4ENTERERR.ûŽŽþ¬„ PROGRAM P4ENTEREROR(P4MESSAGE,INPUT,OUTPUT); CONST STRINGLENGTH = 60; TYPE STRING = PACKED ARRAY [1..STRINGLENGTH] OF CHAR; ERRORRECORD = RECORD FIRSTMESSAGE : STRING; FILLER1 : INTEGER; Fþ�NILLER2 : INTEGER; SECONDMESSAGE : STRING; FILLER3 : INTEGER END; VAR P4MESSAGE : RANDOM FILE OF ERRORRECORD; COUNT,ERRORNUMBER : INTEGER; TEST : BOOLEAN; PROCEDURE LOADMESSAGE(VAR MESSAGE : Sþ«TRING); VAR COUNT : 1..STRINGLENGTH; BEGIN READLN(INPUT); FOR COUNT := 1 TO STRINGLENGTH DO IF NOT (EOLN(INPUT) OR EOF(INPUT)) THEN READ(MESSAGE[COUNT]) ELSE MESSAGE[COUNT] := ' ' END (*OF LOADMESSAGE*); BEGIN TEST := TRUE;þ-k WRITELN(OUTPUT,'ANSWER THE QUEST','IONS TO INSERT N','EW ENTRIES IN TH', 'E INTERPRETER ER','ROR TABLE'); WRITELN(OUTPUT,'VALID RESPONSES ','TO THE FOLLOWING',' QUESTIONS ARE ', 'TERMINATED BY ','A CARRIAGE RETUR','N'þžg); REPEAT WRITELN(OUTPUT,'TYPE THE ENTRY N','UMBER (0-1026)'); IF NOT TEST THEN READLN(INPUT); READ(INPUT,ERRORNUMBER); IF (ERRORNUMBER >= 0) AND (ERRORNUMBER <= 1026) THEN BEGIN WRITELN(OUTPUT,'NOW TYPE THE TAB','LE ENTRY (UP TO ','60 CHþtŒARS)'); BEGIN GETRANDOM(P4MESSAGE,ERRORNUMBER DIV 2); IF NOT EOR(P4MESSAGE) THEN WITH P4MESSAGE^ DO BEGIN FOR COUNT := 1 TO STRINGLENGTH DO BEGIN þèÖFIRSTMESSAGE[COUNT] := ' '; SECONDMESSAGE[COUNT] := ' ' END; FILLER1 := 3338; FILLER3 := 3338 END; IF ODD(ERRORNUMBER) THEN LOADMESSAGE(P4MESSAGE^.SECONDMESSAGE) þP„ ELSE LOADMESSAGE(P4MESSAGE^.FIRSTMESSAGE); PUTRANDOM(P4MESSAGE,ERRORNUMBER DIV 2); WRITELN(OUTPUT,'MESSAGE O.K.'); END END ELSE WRITELN(OUTPUT,'ILLEGAL ERROR NU','MBER ',ERRORNUMBER); WRITELN(OUTPUþêT,'DO YOU WISH TO ','INSERT MORE ENTR','IES(YES/NO)'); READLN(INPUT); WHILE INPUT^ = ' ' DO GET(INPUT); TEST := INPUT^ <> 'Y' UNTIL TEST END. þööÿR2CSPTAB.SRû­U-þ•‰ .TITL R2CSPTAB ;SPECIAL VERSION OF THE TABLE FOR THE COMPILER ;INCORPORATING THE CALL TO THE OVERLAY ROUTINES. .EXTN XWLN,XWRC,XWRI,XWRR,XWRS .EXTN XRDC,XRDI,XRDR,XRLN .EXTN XGET,XPUT .EXTN XELN .EXTN XATN,XCOS,XEXP,XLOG,XSIN,XSQT .EXTN XNEW,XSAþ»­V,XRST .EXTN XRND,XOPN .EXTN XCLS .EXTN XPAG,XOVL .EXTN PUNDF .ENT SPTAB .NREL SPTAB : XGET ;0 XPUT ;1 XRST ;2 XRLN ;3 XNEW ;4 XWLN ;5 XWRS ;6 XELN ;7 XWRI ;8 XWRR ;9 XWRC ;10 XRDI ;11 XRDR ;12 XRDC ;13 XSIN ;14 XCOS þãõ ;15 XEXP ;16 XLOG ;17 XSQT ;18 XATN ;19 XSAV ;20 XOPN ;21..OPEN ANY FILE (CREATE IMPLIED) XRND ;22 XOVL ;23 XCLS ;24 PUNDF ;25 PUNDF ;26 XPAG ;27 PUNDF ;28 PUNDF ;29 PUNDF ;30 PUNDF ;31 .END ÿR2SINTEGER.SRû­ ó 5þ¬w .TITL R2SINTEGER ; THE P-CODE INTERPRETER'S INTEGER OPERATIONS .ENT PINC,PADI,PSBI,PNGI,PSQI,PABI,PMOD,PODD,PMPI,PDVI,PDEC .ENT PINCC,PDECC .EXTN .MPY,.DIV .NREL PINCC: MOVS 2,2 ;NB CHAR IN LHB JMP PINC PADI: POP1 2 ;ADD INTEGER PINC: LTOP1 1 þ}Å ;INCREMENT (Q FIELD IN AC2) ADD 2,1 STOP1 1 NEXT PDECC: MOVS 2,2 ;NB CHAR IN LHB JMP PDEC PSBI: POP1 2 ;SUBTRACT INTEGER PDEC: LTOP1 1 ;DECREMENT (Q FIELD IN AC2) SUB 2,1 STOP1 1 NEXT PNGI: LTOP1 1 ;NEGATE INTEGER NEG 1,1 STOP1 1 NEXT PSQþÅI: LTOP1 2 ;SQUARE INTEGER JMP MPI1 PABI: LTOP1 1 ;ABSOLUTE VALUE OF INTEGER MOVZL# 1,1,SZC ;NEGATE IF NECESSARY NEG 1,1 STOP1 1 NEXT PMOD: POP1 2 ;MODULUS LTOP1 1 MOVL# 1,1,SZC ;SET AC0 FOR HIGH-ORDER ADC 0,0,SKP ; WORD OF DOUBLE PRECISþ—VION SUB 0,0 ; DIVIDEND FOR .DIV JSR @..DIV ;SIGNED DIVIDE STOP1 0 ;REMAINDER IN AC0 NEXT PODD: LTOP1 1 ;TEST ON ODD MOVR 1,1 ;SET AC1=TRUE IF B15=1 SUBCL 1,1 ; FALSE IF B15=0 STOP1 1 NEXT PMPI: POP1 2 ;MULTIPLY INTEGER MPI1: LTOPþ6²1 1 ;ENTRY FROM PSQI SUBO 0,0 ;CLEAR AC0 JSR @..MPY ;SIGNED MULTIPLY STOP1 1 ;LOW ORDER WORD OF DOUBLE NEXT ; PRECISION RESULT IN AC1 ..MPY: .MPY ;(MATH.LB) PDVI: POP1 2 ;DIVIDE INTEGER LTOP1 1 MOVL# 1,1,SZC ;SET AC0 FOR HIGH-ORDER ADC 0þ¡ó5,0,SKP ; WORD OF DOUBLE PRECISION SUB 0,0 ; DIVIDEND FOR .DIV JSR @..DIV ;SIGNED DIVIDE STOP1 1 ;QUOTIENT IN AC1 NEXT ..DIV: .DIV ;(MATH.LB) .END ÿR2CITAB.SRû­Y þ_C .TITL R2CITAB .REV 2,1 ; THE INTERPRETER JUMP TABLE .ENT ITAB0,ITAB1 .EXTN PLOD,PLDO,PSTR,PSRO,PLDA,PLAO,PSTO,PLDC,PLCI,PIND .EXTN PINDC,PSTOC .EXTN PINC,PINCC .EXTN PMST,PCUP,PCXP,PENT,PRET,þ;]PCSP .EXTN PIXA .EXTN PEQU,PNEQ,PGEQ,PGRT,PLEQ,PLES .EXTN PUJP,PFJP,PXJP,PTJP,PUJC .EXTN PCHKC,PCHK2,PCHK3,PCHK4,PEOF .EXTN PADI,PADR,PSBI,PSBR .EXTN PSGS .EXTN PFLT,PFLO,PTRC .Eþ…AXTN PNGI,PNGR,PSQI,PSQR,PABI,PABR .EXTN PNOT,PAND,PIOR .EXTN PDIF,PINT,PUNI,PINN  .EXTN PMOD,PODD .EXTN PMPI,PMPR,PDVI,PDVR .EXTN PMOV,PLCA,PDEC,PDECC,PSTP,PHLT .EXTN PCHR,PORDI,PORDA,PORDC,PORDBþÁ5 .EXTN PNON .ZREL ITAB0: PNON ; 0 NOT USED PHLT ; 1 PEQU ; 2 PNEQ ; 3 PGEQ ; 4 PGRT þõq ; 5 PLEQ ; 6 PLES ; 7 PSTO ; 8 PSTO ; 9 PSTOC ; 10 PSTO ; 11 PMST þ"ñ; 12 PRET ; 13 PADI ; 14 PSBI ; 15 PNGI ; 16 PSQI ; 17 PABI ; 18 PMOD þ ; 19 PODD ; 20 PMPI ; 21  PDVI ; 22 PADR ; 23 PSBR ; 24 PFLT ; 25 PFLO þK* ; 26 PTRC ; 27 PNGR ; 28 PSQR ; 29 PABR ; 30 PMPR ; 31 PDVR ; 32 PNOT þ1# ; 33 PAND ; 34 PIOR  ; 35 PSGS ; 36 PDIF ; 37 PINT ; 38 PUNI ; 39 PINNþ,Ž ; 40 PEOF ; 41 PSTP ; 42 PLCA ; 43 PORDI ; 44 SET ASIDE PORDA ; 45 4 LOCATIONS PORDC þ×N ; 46 FOR THE PORDB ; 47 ORD FAMILY PCHR ; 48 ; THE GAPS IN THE REMAINDER OF TABLE 0 ARE FOR CORAL PNON ; 49 PNON ; 50 PþHNON ; 51 PNON ; 52 PNON ; 53 PNON ; 54 PNON ; 55 PNON ; 56 PNON ; 57 þR5 PNON ; 58 PNON  ; 59 PNON ; 60 PNON ; 61 PNON ; 62 PNON ; 63 ITAB1: PNON ; 64 NOT USED þ: PUJC ; 65 PEQU ; 66 PNEQ ; 67 PGEQ ; 68 PGRT ; 69 PLEQ ; 70 PLES ; þ!|71 N.B MULTIPLE COMPARES  PLOD ; 72 PLOD ; 73 PLOD ; 74 PLOD ; 75 PLDO ; 76 PLDO ; 77 þd_ PLDO ; 78 PLDO ; 79 PSTR ; 80 PSTR ; 81 PSTR ; 82 PSTR ; 83 PSRO ; 84 þOV PSRO  ; 85 PSRO ; 86 PSRO ; 87 PIND ; 88 PIND ; 89 PINDC ; 90 PIND ; 91 þFü PLDA ; 92 PLAO ; 93 PLDC ; 94 PIXA ; 95 PMOV ; 96 PCUP ; 97 PENT ; þ@]98  PCSP ; 99 PUJP ;100 PFJP ;101 PTJP ;102 PXJP ;103 PINC ;104 PNON þv ;105 ALSO INC PINCC ;106 PNON ;107 ALSO INC PDEC ;108 ALSO NEEDS NEXT 3 PNON ;109 PDECC ;110 PNON þŸ5 ;111 PCHKC ;112 NEEDS 3 MORE PCHK2 ;113 PCHK3 ;114 PCHK4 ;115 ; THE GAPS IN THE REMAINDER OF TABLE 1 ARE FOR CORAL PNONþ ; 116 PCXP ; 117 PNON ; 118 PNON ; 119 PNON ; 120 PNON ; 121 PNON ; 122  þ¼$ PNON ; 123 PNON ; 124 PNON ; 125 PNON ; 126 PNON ; 127 .END ÿP4ERRSUM.û! ò$þ8 PROGRAM ERRSUM(OUTPUT); CONST MAXBIT = 59; MAXSETMOD = 60; (*MAXBIT+1*) MAXSET = 10; VAR I : 0..MAXSET; N : 0..MAXBIT; M : INTEGER; ERROR : ARRAY [0..MAXSET] OF SET OF 0..MAXBIT; P4ERRORS : FILE OF SET OF 0..MAXBIT; PROCEDURE MESSAGE1; VAR PþMß : 0..59; BEGIN P := M; CASE P OF 1: WRITELN(OUTPUT,'ERROR IN SIMPLE ','TYPE'); 2: WRITELN(OUTPUT,'IDENTIFIER EXPEC','TED'); 3: WRITELN(OUTPUT,'''PROGRAM'' EXPE','CTED'); 4: WRITELN(OUTPUT,''')'' EXPECTED'); 5: WRITELNþО(OUTPUT,''':'' EXPECTED'); 6: WRITELN(OUTPUT,'ILLEGAL SYMBOL'); 7: WRITELN(OUTPUT,'ERROR IN PARAMET','ER LIST'); 8: WRITELN(OUTPUT,'''OF'' EXPECTED'); 9: WRITELN(OUTPUT,'''('' EXPECTED'); 10: WRITELN(OUTPUT,'ERROR IN TYPE'); 1þ+1: WRITELN(OUTPUT,'''['' EXPECTED'); 12: WRITELN(OUTPUT,''']'' EXPECTED'); 13: WRITELN(OUTPUT,'''END'' EXPECTED'); 14: WRITELN(OUTPUT,''';'' EXPECTED'); 15: WRITELN(OUTPUT,'INTEGER EXPECTED'); 16: WRITELN(OUTPUT,'''='' EXPECTED'); þÖ 17: WRITELN(OUTPUT,'''BEGIN'' EXPECT','ED'); 18: WRITELN(OUTPUT,'ERROR IN DECLARA','TION PART'); 19: WRITELN(OUTPUT,'ERROR IN FIELD L','IST'); 20: WRITELN(OUTPUT,''','' EXPECTED'); 21: WRITELN(OUTPUT,'''.'' EXPECTED'); 50: Wþ=!RITELN(OUTPUT,'ERROR IN CONSTAN','T'); 51: WRITELN(OUTPUT,''':='' EXPECTED'); 52: WRITELN(OUTPUT,'''THEN'' EXPECTE','D'); 53: WRITELN(OUTPUT,'''UNTIL'' EXPECT','ED'); 54: WRITELN(OUTPUT,'''DO'' EXPECTED'); 55: WRITELN(OUTPUT,'''TO'þ½ '/''DOWNTO''',' EXPECTED'); 56: WRITELN(OUTPUT,'''IF'' EXPECTED'); 57: WRITELN(OUTPUT,'''FILE'' EXPECTE','D'); 58: WRITELN(OUTPUT,'ERROR IN FACTOR'); 59: WRITELN(OUTPUT,'ERROR IN VARIABL','E'); END (* OF CASE *) END (*MESSAGE1*); þ3Õ PROCEDURE MESSAGE2; VAR P : 60..119; BEGIN P := M; CASE P OF 101: WRITELN(OUTPUT,'IDENTIFIER DECLA','RED TWICE'); 102: WRITELN(OUTPUT,'LOW BOUND EXCEED','S HIGHBOUND'); 103: WRITELN(OUTPUT,'IDENTIFIER IS NO','T OF APPROþ2PRIATE',' CLASS'); 104: WRITELN(OUTPUT,'IDENTIFIER NOT D','ECLARED'); 105: WRITELN(OUTPUT,'SIGN NOT ALLOWED'); 106: WRITELN(OUTPUT,'NUMBER EXPECTED'); 107: WRITELN(OUTPUT,'INCOMPATABLE SUB','RANGE TYPES'); 108: WRITELN(OUTPUT,'FILEþD NOT ALLOWED',' HERE'); 109: WRITELN(OUTPUT,'TYPE MUST NOTBE ','REAL'); 110: WRITELN(OUTPUT,'TAGFIELD TYPE MU','ST BE SCALAR OR ','SUBRANGE'); 111: WRITELN(OUTPUT,'INCOMPATIBLE WIT','H TAGFIELD TYPE'); 112: WRITELN(OUTPUT,'INDEX TYPE MUþ?EST ','NOT BE REAL'); 113: WRITELN(OUTPUT,'INDEX TYPE MUST ','BE SCALAR OR SUB','RANGE'); 114: WRITELN(OUTPUT,'BASE TYPE MUST N','OT BE REAL'); 115: WRITELN(OUTPUT,'BASE TYPE MUST B','E SCALAR OR SUBR','ANGE');  116: WRITELN(OUTPUT,'ERRORþC— IN TYPE OF',' STANDARD PROCED','URE PARAMETER'); 117: WRITELN(OUTPUT,'UNSATISFIED FORW','ARD REFERENCE'); 118: WRITELN(OUTPUT,'FORWARD REFERENC','E TYPE IDENTIFIE', 'R IN VARIABLE DE','CLARATION'); 119: WRITELN(OUTPþ?UT,'FORWARD DECLARED','; REPETITION OF ', 'PARAMETER LIST N','OT ALLOWED'); END (* OF CASE *) END (*MESSAGE2*); PROCEDURE MESS3A; VAR P : 120..145; BEGIN P := M; CASE P OF 120: WRITELN(OUTPUT,'FUNCTIONþ$í RESULT ','TYPE MUST BE SCA', 'LAR, SUBRANGE OR',' POINTER'); 121: WRITELN(OUTPUT,'FILE VALUE PARAM','ETER NOT ALLOWED'); 122: WRITELN(OUTPUT,'FORWARD DECLARED',' FUNCTION; REPET', 'ITION OF RESULþ7)T ','TYPE NOT ALLOWED'); 123: WRITELN(OUTPUT,'MISSING RESULT T','YPE IN FUNCTION ','DECLARATION'); 124: WRITELN(OUTPUT,'F-FORMAT FOR REA','L ONLY'); 125: WRITELN(OUTPUT,'ERROR IN TYPE OF',' STANDARD FUNCTI','ON PARAMETER'); 126: WRITELNþ”ó(OUTPUT,'NUMBER OF PARAME','TERS DOES NOT AG', 'REE WITH DECLARA','TION'); 127: WRITELN(OUTPUT,'ILLEGAL PARAMETE','R SUBSTITUTION'); 128: WRITELN(OUTPUT,'RESULT TYPE OF P','ARAMETER FUNCTIO', 'N Dþ¯OES NOT AGREE',' WITH DECLARATIO','N'); 129: WRITELN(OUTPUT,'TYPE CONFLICT OF',' OPERANDS'); 130: WRITELN(OUTPUT,'EXPRESSION IS NO','T OF SET TYPE'); 131: WRITELN(OUTPUT,'TESTS ON EQUALIT','Y ALLOWED ONLY'); 132: WRITELN(OUTPUT,'STRICT þ|INCLUSION',' NOT ALLOWED'); 133: WRITELN(OUTPUT,'FILE COMPARISION',' NOT ALLOWED'); 134: WRITELN(OUTPUT,'ILLEGL TYPE OF O','PERAND(S)'); 135: WRITELN(OUTPUT,'TYPE OF OPERAND ','MUST BE BOOLEAN'); 136: WRITELN(OUTPUT,'SET ELEMENT TYPE','þ* MUST BE SCALAR ','OR SUBRANGE'); 137: WRITELN(OUTPUT,'SET ELEMENT TYPE','S NOT COMPATIBLE'); 138: WRITELN(OUTPUT,'TYPE OF VARIABLE',' IS NOT ARRAY'); 139: WRITELN(OUTPUT,'INDEX TYPE IS NO','T COMPATIBLE WIT','H DECLARATION'); 140: WRITþî¤ELN(OUTPUT,'TYPE OF VARIABLE',' IS NOT RECORD'); 141: WRITELN(OUTPUT,'TYPE OF VARIABLE',' MUST BE FILE OR',' PIONTER'); 142: WRITELN(OUTPUT,'ILLEGAL PARAMETE','R SUBSTITUTION'); 143: WRITELN(OUTPUT,'ILLEGAL TYPE OF ','LOOP CONTROL VAR','IABLþ¾E'); 144: WRITELN(OUTPUT,'ILLEGAL TYPE OF ','EXPRESSION'); 145: WRITELN(OUTPUT,'TYPE CONFLICT'); END (* OF CASE *) END (* OF MESS3A *); PROCEDURE MESS3B; VAR P : 146..159; BEGIN P := M; CASE P OF 146: WRITELN(OUTPUTþ:ì,'ASSIGMENT OF FIL','ES NOT ALLOWED'); 147: WRITELN(OUTPUT,'LABEL TYPE INCOM','PATIBLE WITH SEL', 'ECTING EXPRESSIO','N'); 148: WRITELN(OUTPUT,'SUBRANGE BOUNDS ','MUST BE SCALAR'); 149: WRITELN(OUTPUT,'INDEX TYPE MUSþ«T ','NOT BE INTEGER'); 150: WRITELN(OUTPUT,'ASSIGNMENT TO ST','ANDARD FUNCTION ','IS NOT ALLOWED'); 151: WRITELN(OUTPUT,'ASSIGNMENT TO FO','RMAL FUNCTION IS',' NOT ALLOWED'); 152: WRITELN(OUTPUT,'NO SUCH FIELD IN',' THIS RECORD'); 153: þ(GWRITELN(OUTPUT,'TYPE ERROR IN RE','AD'); 154: WRITELN(OUTPUT,'ACTUAL PARAMETER',' MUST BE A VARIA','BLE'); 155: WRITELN(OUTPUT,'CONTROL VARIABLE',' MUST NEITHER BE', ' FORMAL NOR NON ','LOCAL'); 156: WRITELN(OUTPUT,'þ;MULTIDEFINED CAS','E LABEL'); 157: WRITELN(OUTPUT,'TOO MANY CASES I','N CASE STATEMENT'); 158: WRITELN(OUTPUT,'MISSING CORRESPO','NDING VARIANT DE','CLARATION'); 159: WRITELN(OUTPUT,'REAL OR STRING T','AGFIELDS NOT ALL','OWED'); END (* Oþ-5F CASE *) END (* MESS3B *); PROCEDURE MESS3C; VAR P : 160..179; BEGIN P := M; CASE P OF 160: WRITELN(OUTPUT,'PREVIOUS DECLARA','TION WAS NOT FOR','WARD'); 161: WRITELN(OUTPUT,'AGAIN FORWARD DE','CLARED'); 162: WRITELN(Oþ2àUTPUT,'PARAMETER SIZE M','UST BE CONSTANT'); 163: WRITELN(OUTPUT,'MISSING VARIANT ','IN DECLARATION'); 164: WRITELN(OUTPUT,'SUBSTITUTION OF ','STANDARD PROC/FU','NC NOT ALLOWED'); 165: WRITELN(OUTPUT,'MULTIDEFINED LAB','EL'); 166: WRITEþýçLN(OUTPUT,'MULTIDECLARED LA','BEL'); 167: WRITELN(OUTPUT,'UNDECLARED LABEL'); 168: WRITELN(OUTPUT,'UNDEFINED LABEL'); 169: WRITELN(OUTPUT,'ERROR IN BASE SE','T'); 170: WRITELN(OUTPUT,'VALUE PARAMETER ','EXPECTED'); 171: WRITELN(OUTþÛtPUT,'STANDARD FILE WA','S REDECLARED'); 172: WRITELN(OUTPUT,'UNDECLARED EXTER','NAL FILE'); 173: WRITELN(OUTPUT,'FORTRAN PROCEDUR','E OR FUNCTION EX','PECTED'); 174: WRITELN(OUTPUT,'PASCAL PROCEDURE',' OR FUNCTION EXP','ECTED'); 175: WRþÑáITELN(OUTPUT,'MISSING FILE ''I','NPUT'' IN PROGRA','M HEADING'); 176: WRITELN(OUTPUT,'MISSING FILE ''O','UTPUT'' IN PROGR','AM HEADING'); 178: WRITELN(OUTPUT,'ILLEGAL TAGFIELD',' IN VARIANT'); END (*OF CASE*) END (*MESS3C*); PROCEDURE MþûçESSAGE3; BEGIN IF M > 145 THEN BEGIN IF M > 159 THEN MESS3C ELSE MESS3B END ELSE MESS3A END (*MESAGE3*); PROCEDURE MESSAGE4; VAR P : 180..239; BEGIN P := M; CASE P OF þW5 201: WRITELN(OUTPUT,'ERROR IN REAL CO','NSTANT: DIGIT EX','PECTED'); 202: WRITELN(OUTPUT,'STRING CONSTANT ','MUST NOT EXCEED ','SOURCE LINE'); 203: WRITELN(OUTPUT,'INTEGER CONSTANT',' EXCEEDS RANGE'); 204: WRITELN(OUTPUT,'8 OR 9 IN OCTAþ,L ','NUMBER'); END (* OF CASE *) END (*MESSAGE4*); PROCEDURE MESSAGE5; VAR P : 240..299; BEGIN P := M; CASE P OF 250: WRITELN(OUTPUT,'TOO MANY NESTED ','SCOPES OF IDENTI','FIERS'); 251: WRITELN(OUTPUT,'TOO MANY NESTED ','þ‚PROCEDURES AND/O','R FUNCTIONS'); 252: WRITELN(OUTPUT,'TOO MANY FORWARD',' REFERENCES OF P','ROCEDURE ENTRIES'); 253: WRITELN(OUTPUT,'PROCEDURE TOO LO','NG'); 254: WRITELN(OUTPUT,'TOO MANY LONG CO','NSTANTS IN THIS ','PROCEDURE'); 255: þWRITELN(OUTPUT,'TOO MANY ERRORS ','ON THIS SOURCE L','INE'); 256: WRITELN(OUTPUT,'TOO MANY EXTERNA','L REFERENCES'); 257: WRITELN(OUTPUT,'TOO MANY EXTERNA','LS'); 258: WRITELN(OUTPUT,'TOO MANY LOCAL F','ILES'); 259: WRITELN(OUTPUT,'EXPRþfžESSION TOO C','OMPLICATED'); END (* OF CASE *) END (*MESSAGE5*); PROCEDURE MESSAGE6; VAR P : 300..359; BEGIN P := M; CASE P OF 300: WRITELN(OUTPUT,'DIVISION BY ZERO'); 301: WRITELN(OUTPUT,'NO CASE PROVIDED',' FOR THIS VALþOxUE'); 302: WRITELN(OUTPUT,'INDEX EXPRESSION',' OUT OF BOUNDS');  303: WRITELN(OUTPUT,'VALUE TO BE ASSI','GNED IS OUT OF B','OUNDS'); 304: WRITELN(OUTPUT,'ELEMENT EXPRESSI','ON OUT OF RANGE'); 350: WRITELN(OUTPUT,'GLOBAL LABEL ','NOT ALþ¤3LOWED WHEN',' DECLARING ', 'EXTERNAL PROC/','FUNC'); 351: WRITELN(OUTPUT,'GLOBAL VAR ','NOT ALLOWED ','WHEN DECLARING', ' EXTERNAL ','PROC/FUNC'); END (* OF CASE *) END (* MESSAGE6 *); PROCEDþΔURE MESSAGE7; VAR P : 360..419; BEGIN P := M; CASE P OF 399: WRITELN(OUTPUT,'IMPLEMENTATION R','ESTRICTION'); 398: WRITELN(OUTPUT,'VARIABLE DIMENSI','ON ARRAYS NOT IM','PLEMENTED'); 400: WRITELN(OUTPUT,'ATTEMPT TO ACCES','S AþÖ¾N INDEXED VAR','IABLE DIRECTLY'); END (* OF CASE *) END(* MESSAGE7*); PROCEDURE MESSAGE9; VAR P : 480..539; BEGIN P := M; CASE P OF 500: WRITELN(OUTPUT,'LOAD ERROR'); 501: WRITELN(OUTPUT,'LOAD ERROR'); END (* OF CASE þëÄ*) END (*MESSAGE9*); BEGIN (* MAIN*) FOR I := 0 TO MAXSET DO BEGIN GET(P4ERRORS); ERROR[I] := P4ERRORS^ END; WRITELN(OUTPUT,' ':10,'ERROR SUMMARY'); WRITELN(OUTPUT,' ':10,'*************'); WRITELN(OUTPUT); FOR I := 0 TO MAXSET DO FOR N := 0 Tþ®wO MAXBIT DO IF N IN ERROR[I] THEN BEGIN M := I * MAXSETMOD + N; WRITE(OUTPUT,' ':3,M:6,':',' ':4); CASE I OF 0 : MESSAGE1; 1 : MESSAGE2; 2 : MESSAGE3; 3 : MESSAGE4; 4 : MESSAGE5; 5 : MESSAGE6; 6 : MESSAGE7; þSý… 8 : MESSAGE9; 7,9,10 : ;  END (*OF CASE*); END END (*OF PROGRAM*). ÿR2IFT.SRû­ ó ?þœs .TITL R2IFT ; A DUMMY SEGMENT TO SATISFY ALL UNDEFINED CUES ; TO READ REAL AND WRITE REAL .ENT XRDR,XWRR .EXTN PUNDF .NREL XRDR: XWRR: .PUND .END ÿNEW2P4ASME.ûkk þÇLPROGRAM NEW2P4ASME(OUTPUT); BEGIN WRITELN(OUTPUT, '****************', ' GENERATION OF N', 'EW PCODE ASSEMBL', 'ER COMPLETED. **', '***************'); WRITELN(OUTþB8PUT, 'YOU MAY DELETE A', 'LL OTHER FILES O', 'F RELEASE II MEN', 'TIONED AT THE '); WRITELN(OUTPUT, ' BEGINNING PLUS ', 'SETUP.SV, SETU' : 14, 'þzïxPA.SV, P4AMY2 AN', 'D P4MAC.SV EXCEP', 'T P4ASM.SV'); WRITELN(OUTPUT) END. ÿMAKE2P4AM.CMûrX þ9NEW2P4ASMB $TTO $TTI;^ PASCAL/Z SETUP $LPT/L;^ DELETE/V SETUP.RB;^ SETUP SETUP.TB $TTO;^ FASTHASH P4ASM.PC SETUPAY SETUP.TB $LPT;^ APPEND SETUPA SETUPAX SETUPAY SETUPAZ;^ PASCAL/Z SETUPA $LPT/L;^ DELETE/V SETUPA SETUPA.RB;^ SETUPA P4AMY2 $TTO;^ APPEND P4MAþ±+C HEADM2 P4AMX2 P4AMY2 P4MACZ2;^ PASCAL/Z P4MAC $LPT/L;^ DELETE/V P4MAC;^ APPEND P4ASM HEADA2 P4AMX2 P4AMY2 P4ASMZ2;^ PASCAL/Z/P P4ASM $LPT/L;^ DELETE/V P4ASM;^ NEW2P4ASME $TTO ÿR2RFNS.SRû­ ó <þ™Ö .TITL R2RFNS .ENT PFPIN,PFPES,PFPEX,PFPEF .ENT XATN,XCOS,XEXP,XLOG,XSIN,XSQT .ENT XRND .EXTD WSA .EXTN FENT, PTRC .NREL PFPFN: PFPIN: STA 3,TAC3 ;ENTRY USED BY UNARY OPERATORS SUB 3,3 ;AND EVERYTHING ELSE LDA 2,WSA ;RFPI WRITE AREA STA 3,0,2 þ§ ;OVFL UNFL FLAGS DSZ SP FENT FLDA 1,@SP FJMP @TAC3 TAC3: 0 PFPES: FSTA 0,@SP ;EXIT ROUTINE 3 ENTRIES PFPEX: FEXT ISZ SP PFPEF: LDA 2,WSA LDA 3,0,2 MOV 3,3,SNR ;ANY FP FLAGS SET ? NEXT ;NO ERR.P PERFP ;YES ERROR406 ;THE FOLLOWING STANDAþç&RD FUNCTION CALLS ;HAVE A COMMON FORMAT. THE JSR TO PFPFN ;LOADS THE FP OPERANDS INTO FP ACCUMULATOR ;1. THE FJMP TO PFPES ENSURES THAT THE ;RESULT IS STORED. IN THE EVENT OF OVFL OR ;UNDFL ERROR 406 IS REPORTED TO RDOS XATN: JSR PFPFN FATN 1,0 FJMP PFPþ^[ES XCOS: JSR PFPFN FCOS 1,0 FJMP PFPES XEXP: JSR PFPFN FEXP 1,0 FJMP PFPES XLOG: JSR PFPFN FALG 1,0 FJMP PFPES XSIN: JSR PFPFN FSIN 1,0 FJMP PFPES XSQT: JSR PFPFN FSQR 1,0 FJMP PFPES XRND: JSR PFPFN FRND 1,0 FSTA 0,@SP FLD3 .PTRC FJMP 1þ)t,3 .PTRC: PTRC .END ÿCOM.CMûÍÍ þ3ìTYPER2SHEAP.SRÿÿR2RFW.SRû­ ó =þ,5 .TITLE R2RFW .ENT WSA ;RELOCATABLE FLOATING POINT INTERPRETER (RFPI) ;NEEDS A WRITE AREA OF 100 DECIMAL LOCATIONS, THE ;ADDRESS OF THIS AREA TO BE GIVEN AT LOCATION ;WSA IN PAGE ZERO. THE AREA IS INITIALISED ONCE ;ONLY BY SEGMENT PR. .ZREL WSA: FPPAD þQ .NREL FPPAD: .BLK 100. .END ÿSETUP.ûmm þP(* UNIVERSITY OF LANCASTER DEPARTMENT OF CCOPUTER STUDIES ============================== AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE I/II DATE : MARCH, 1977 *) (*******þK'*************************************************** THIS PROGRAM IS TO PRODUCE A HASH TABLE FOR ALL THE PCODE MNEMONICS. NO OPTIMAL STRATEGY IS INCORPORATED TO SPEED UP THE ACCESSING MECHANISM. þù# TO ACTIVATE THIS PROGRAM, DO THE FOLLOWING COMMAND : SETUP SETUP.TB ======================= WHERE 'SETUP.TB' IS THE OUTPUT FILE USED TO CONTAIN THE HASH TABLE þä‡ AND WILL BE USED AS INPUT FILE TO THE PROGRAM "FASTHASH" IS THE PRR FILE USED TO CONTAIN SOME USEFUL INFORMATION FOR USER REFERENCE. ***********þôJ**********************************************) PROGRAM SETUP(OUTPUT, PRR); CONST TABLESIZE = 256; TABSIZE0 = 255; (*** IE TABLE SIZE WITH ZERO ORIGIN ***) TYPE STRING4 = ARRAY[1..4] OF CHAR; STRING6 = ARRAY[1..6] OF CHARþx; TEMPLATE = RECORD PCODE : STRING4; SEMICODE : STRING6; ACTION : INTEGER END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; þ; I, J, K : 1..TABLESIZE; ZERO, ENTRIES, PETTY : INTEGER; PROCEDURE HASH(HPCODE : STRING4; HSEMICODE : STRING6; HACTION : INTEGER); VAR TEMP, RNDM, PI : INTEGER; BEGIN TEMP := ORD(HPCODE[1]) þòã* 4 + ORD(HPCODE[2]) * 2 + ORD(HPCODE[3]) ; IF ORD(HPCODE[4]) <> 0 THEN TEMP := TEMP * 2 + ORD(HPCODE[4]); TEMP := TEMP MOD TABLESIZE; RNDM := 1; PI := 0; WHILE PCODETABLE[ (TEMP + PI) MþàýOD TABLESIZE].PCODE <> ' ' DO BEGIN (* OF THE REHASHING ALGORITHM MENTIONED BY DAVID GRIES IN HIS 'COMPILER CONSTRUCTION' *) RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); END; þ (* AN EMPTY ENTRY IN THE PCODE TABLE IS FOUND *) WITH PCODETABLE[ (TEMP + PI) MOD TABLESIZE ] DO BEGIN PCODE := HPCODE; SEMICODE := HSEMICODE; ACTION := HACTION; END; ENTRIES := ENTRIES + 1 þG0 END (* OF HASH *); PROCEDURE COMPLETETASK; PROCEDURE TASK1; BEGIN (********** GROUP 1 WITH NO OPERANDS **********) (* TYPES OF THE FOLLOWING FORMAT IN A 16-BIT WORD ................... þ†< : : : :00XXXXTT:XX000000: : : : :........:........: WHERE TT = 00 IF INTEGER, ADDRESS OR BOOLEAN = 01 IF REAL þa6 = 10 IF CHAR = 11 IF SET OR RECORD. X = 0 OR 1. NB THE ABOVE FORMAT APPLIES TO INSTRUCTIONS HAVING A 'C' FIELD *) þú¢ HASH('STOA', '004000', 0); HASH('STOB', '004000', 0); HASH('STOC', '005000', 0); HASH('STOI', '004000', 0); HASH('STOR', '004400', 0); HASH('STOS', '005400', 0); HASH('EOF ', '024400'þë, 0); HASH('ADI ', '007000', 0); HASH('ADR ', '013400', 0); HASH('SBI ', '007400', 0); HASH('SBR ', '014000', 0); HASH('SGS ', '022000', 0); HASH('FLT ', '014400', 0); HASH('FLO 'þò‚, '015000', 0); HASH('TRC ', '015400', 0); HASH('NGI ', '010000', 0); HASH('NGR ', '016000', 0); HASH('SQI ', '010400', 0); HASH('SQR ', '016400', 0); HASH('ABI ', '011000', 0); Hþ{×ASH('ABR ', '017000', 0); HASH('NOT ', '020400', 0); HASH('AND ', '021000', 0); HASH('IOR ', '021400', 0); HASH('DIF ', '022400', 0); HASH('INT ', '023000', 0); HASH('UNI ', '023400', 0); þ• HASH('INN ', '024000', 0); HASH('MOD ', '011400', 0); HASH('ODD ', '012000', 0); HASH('LCA ', '025400', 0); END (* TO BE CONTINUED IN TASK2 *); PROCEDURE TASK2; BEGIN (* CONTINUED FROMþu• TASK1 *) HASH('MPI ', '012400', 0); HASH('MPR ', '017400', 0); HASH('DVI ', '013000', 0); HASH('DVR ', '020000', 0); HASH('STP ', '025000', 0); HASH('CHR ', '030000', 0); HASH('þðQORDA', '026400', 0); HASH('ORDB', '027400', 0); HASH('ORDC', '027000', 0); HASH('ORDI', '026000', 0); (* COMPARISON TYPES WITH THE FOLLOWING FORMAT ................... : : þG : :00XXXXXX:XXXXXTTT: : : : :........:........: WHERE TTT = 001 IF INTEGER OR CHAR = 010 IF REAL = 011 IF BOOLEAN þ§ = 100 IF SET OR RECORD = 101 IF ADDRESS. X = 0 OR 1. *) HASH('EQUA', '001005', 0); HASH('EQUB', '001003', 0); HASH('EQUC', '001001', 0); HASH('EQUI',þG '001001', 0); HASH('EQUR', '001002', 0); HASH('EQUS', '001004', 0); HASH('NEQA', '001405', 0); HASH('NEQB', '001403', 0); HASH('NEQC', '001401', 0); HASH('NEQI', '001401', 0); Hþ¼ŒASH('NEQR', '001402', 0); HASH('NEQS', '001404', 0); HASH('GEQA', '002005', 0); HASH('GEQB', '002003', 0); HASH('GEQC', '002001', 0); HASH('GEQI', '002001', 0); HASH('GEQR', '002002', 0); þtR HASH('GEQS', '002004', 0); END (* TO BE CONTINUED IN TASK3 *); PROCEDURE TASK3; BEGIN (* CONTINUED FROM TASK3 *) HASH('GRTA', '002405', 0); HASH('GRTB', '002403', 0); HASH('GRTC', '00þº2401', 0); HASH('GRTI', '002401', 0); HASH('GRTR', '002402', 0); HASH('GRTS', '002404', 0); HASH('LEQA', '003005', 0); HASH('LEQB', '003003', 0); HASH('LEQC', '003001', 0); HASH(þIŸ'LEQI', '003001', 0); HASH('LEQR', '003002', 0);  HASH('LEQS', '003004', 0); HASH('LESA', '003405', 0); HASH('LESB', '003403', 0); HASH('LESC', '003401', 0); HASH('LESI', '003401', 0); þØÔ HASH('LESR', '003402', 0); HASH('LESS', '003404', 0); HASH('RETA', '006401', 0); HASH('RETB', '006401', 0); HASH('RETC', '006401', 0); HASH('RETI', '006401', 0); HASH('RETP', '006400'þkø, 0); HASH('RETR', '006402', 0); END (* OF TASK1 *); PROCEDURE TASK4; BEGIN (********** GROUP 2 WITH OPERANDS **********) (* TYPES WITH THE FOLLOWING FORMAT ................... þ£ß : : : :W1XXXXXX:XX000000: : : : :........:........: WHERE W = 0 IF ONE-WORD INSTRUCTION = 1 IF TWO-WORD INSTRUCTION X = 0 OR þdù1. *) (* COMPARISON TYPES *) (********************) HASH('EQUM', '001000', 10); HASH('NEQM', '001400', 10); HASH('GEQM', '002000', 10); HASH('GRTM', '002400', 10); HASH('LEQþf#M', '003000', 10); HASH('LESM', '003400', 10); (* OTHER TYPES *) (***************) HASH('LODA', '044000', 20); HASH('LODB', '044000', 20); HASH('LODC', '044000', 20); HASH('LODI', '044þŽÎ000', 20); HASH('LODR', '044000', 30); HASH('LODS', '044000', 40); HASH('STRA', '050000', 20); HASH('STRB', '050000', 20); HASH('STRC', '050000', 20); HASH('STRI', '050000', 20); HASH('þMSTRR', '050000', 30); HASH('STRS', '050000', 40); HASH('LDA ', '056000', 20); HASH('CXP ', '072400', 50); HASH('HLT ', '000400', 0); HASH('CUP ', '060400', 50); HASH('MST ', '006000', 60); þ>² HASH('LDOA', '046000', 70); HASH('LDOB', '046000', 70); HASH('LDOC', '046000', 70); HASH('LDOI', '046000', 70); HASH('LDOR', '046000', 90); HASH('LDOS', '046000', 100); END (* TO BE CONTINUED Iþ8.N TASK5 *); PROCEDURE TASK5; BEGIN (*CONTINUED FROM TASK4 *) HASH('SROA', '052000', 70); HASH('SROB', '052000', 70); HASH('SROC', '052000', 70); HASH('SROI', '052000', 70); HASH('SRORþ³ß', '052000', 90); HASH('SROS', '052000', 100); HASH('LAO ', '056400', 70); HASH('INDA', '054000', 70); HASH('INDB', '054000', 70); HASH('INDC', '054000', 80); HASH('INDI', '054000', 70); þ¨ï HASH('INDR', '054000', 90); HASH('INDS', '054000', 100); HASH('INCA', '064000', 110); HASH('INCI', '064000', 110); HASH('INCC', '065000', 110); HASH('IXA ', '057400', 110); HASH('MOV ', '0600þ%­00', 120); END (* TO BE CONTINUED IN TASK6 *); PROCEDURE TASK6; BEGIN (* CONTINUED FROM TASK5 *) HASH('DECA', '066000', 110); HASH('DECI', '066000', 110); HASH('DECC', '067000', 110); Hþ"ASH('ENT ', '061000', 130); HASH('UJC ', '040400', 140); HASH('UJP ', '062000', 150); HASH('FJP ', '062400', 150); HASH('XJP ', '063400', 150); HASH('TJP ', '063000', 150); HASH('CSP ', '061400'þ´, 160); HASH('CHKA', '171400', 170); HASH('CHKB', '070400', 170); HASH('CHKC', '070000', 170); HASH('CHKI', '070400', 170); HASH('CHKR', '070000', 170); HASH('CHKS', '070000', 170); HAþj+SH('LDC ', '057000', 180); HASH('LDCB', '057000', 190); HASH('LDCC', '057000', 200); HASH('LDCI', '057000', 190); HASH('LDCN', '057000', 210); HASH('LDCR', '057000', 220);  HASH('JNC ', '032000', 2þJd30); END (* OF TASK 4 *); PROCEDURE TASK7; BEGIN (* STANDARD PROCEDURES *) HASH('ATN ', '000023', 0); HASH('COS ', '000017', 0); HASH('ELN ', '000007', 0); HASH('EXP ', '000020', 0);þá HASH('GET ', '000000', 0); HASH('LOG ', '000021', 0); HASH('NEW ', '000004', 0); HASH('PUT ', '000001', 0); HASH('RDC ', '000015', 0); HASH('RDI ', '000013', 0); HASH('RDR ', '000þ)014', 0); HASH('RLN ', '000003', 0); HASH('RST ', '000002', 0); HASH('SAV ', '000024', 0); HASH('SIN ', '000016', 0); HASH('SQT ', '000022', 0); HASH('WLN ', '000005', 0); HASH('WþRžRC ', '000012', 0); HASH('WRI ', '000010', 0); HASH('WRR ', '000011', 0); HASH('WRS ', '000006', 0); HASH('OPN ', '000025', 0); HASH('RND ', '000026', 0); HASH('OVL ', '000027', 0); þ‡ HASH('CLS ', '000030', 0); HASH('RRR ', '000031', 0); HASH('WDR ', '000032', 0); HASH('PAG ', '000033', 0); HASH('EOR ', '000034', 0); HASH('RWR ', '000035', 0); HASH('RSE ', '000036', 0þñ9); END (* OF TASK7 *); BEGIN (* OF COMPLETETASK *) TASK1; TASK2; TASK3; TASK4; TASK5; TASK6; TASK7; END (* OF COMPLETE TASK *); BEGIN (* OF MAIN PROGRAM *) WRITELN(PRR, 'SETUP STARTS'); WRITþÍéELN; WRITELN; WRITELN; FOR I := 0 TO TABSIZE0 DO BEGIN PCODETABLE[I].PCODE := ' '; PCODETABLE[I].SEMICODE := ' '; PCODETABLE[I].ACTION := 0 END; ZERO := ORD('0'); COMPLETETASK; þ;à WRITE('*'); (* WRITE '*' AS THE HEADER TO INDICATE THAT HASH TABLE IS TO FOLLOW *) FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO BEGIN WRITE(PCODE); IF SEMICODE[1] = ' ' THEN þ¬ WRITE(0 : 6, 0 : 4) ELSE BEGIN PETTY := 0; IF SEMICODE[1] = '1' THEN PETTY := -8; WRITE( ((((PETTY + ORD(SEMICODE[2]) - ZERO ) * 8 + þ¸¢ ORD(SEMICODE[3]) - ZERO ) * 8 + ORD(SEMICODE[4]) - ZERO ) * 8 + ORD(SEMICODE[5]) - ZERO ) * 8 +  ORD(SEMICODE[6]) -ZERO : 6, ACTION : 4); END; þôv WRITELN END; WRITELN(PRR, '; HASH TABLE SIZ', 'E = ' : 8, TABLESIZE : 1); WRITELN(PRR, '; TOTAL PCODE EN', 'TRIES = ' : 8, ENTRIES : 1); WRITELN(PRR, '; LOADING FACTOR', ' = ' : 8, ENTRIES/TABLESIZE : 1) END. ÿR2RFILES.CMû‚‚þ•DR2SECHK,^ R2ROUTL,^ R2SMPD,^ R2STP,^ R2SINTEGER,^ R2SBOOLEAN,^ R2SRANDOM,^ R2SOPN,^ R2SADMIN,^ R2SRD,^ R2SIOIN,^ R2CRCODE,^ R2SSET,^ R2SMPY,^ R2STI,^ R2RFT,^ R2SITAB,^ R2SDIV,^ R2SMEMACC,^ R2SMISC,^ R2SDBIN,^ R2STESTS,^ R2SHEAP,^ R2SDECODER,^ R2SMYP,^ R2RRþ7&ƒEAL,^ R2SREWR,^ R2RFNS,^ R2SSPTAB,^ R2SCONSTS,^ R2RFW^ ÿR2SSET.SRû­ ó 6þŒš .TITL R2SSET ; THE P-CODE INTERPRETER'S SET OPERATIONS .ENT PSGS,PDIF,PINT,PUNI,PINN,MIN4 .ZREL N16: 20 ;USEFUL CONSTANTS MIN4: -4 ASP=Z1 ;AUXILLIARY SET PTR .MACRO SASP ;MACRO TO SET UP ASP IN ACCUMULATOR LDA ^1,SP ;SPECIFIED BY ^1. ASPþ{ IS DEFINED AS LDA 0,MIN4 ;SIMPLY "STACK PTR - 4". IT IS ADD 0,^1 ;USEFUL WHEN DEALING WITH 2 SETS ON T'STACK STA ^1,ASP % .NREL PSGS: LDA 2,MIN4 ;FORM SINGLETON SET FROM INTEGER POP1 1 ;GET INTO MORE CONVENIENT FORM INC 1,1 NEG 1,1 SUBZ 0,0 þÿ=; ; NOW SHIFT CIRCULAR (CARRY-WITH-AC0) WHILST COUNTING UP THRU ZERO ; EVERY 16 SHIFTS, WE PUSH "ALL ZEROES", BUT ALSO, WHEN COUNT=ZERO ; WE PUSH A WORD WITH JUST THE RIGHT BIT SET. STOP WHEN 4 WORDS PUSHED. ; SGS1: MOVR 0,0,SZR JMP SGS2 PUSH1 0 ;PUSH AþÃí ZERO WORD MOVR 0,0 INC 2,2,SNR ;ASSUMES NEXT EXPANDS TO EXACTLY NEXT ;ONE WORD SGS2: INC 1,1,SZR JMP SGS1 PUSH1 0 ;PUSH THE WORD HOLDING THE BIT INCC 2,2,SZR JMP SGS1 NEXT PDIF: SASP 3 ;FIND SET DIFFERENCE DIF1: POP1 2 ;SIMPLY DO "A & NOT þ¡ØB" FOR EACH LDA 1,@ASP ;OF THE 4 CORRESPONDING PAIRS OF WORDS COM 2,2 AND 2,1 STA 1,@ASP DSZ ASP INC 0,0,SZR JMP DIF1 NEXT PINT: SASP 3 ;FIND SET INTERSECTION INT1: POP1 2 ;SIMPLY "A & B" FOR EACH OF 4 PAIRS AGAIN LDA 1,@ASP AND 2,1 STA 1,@þÞÑASP DSZ ASP INC 0,0,SZR JMP INT1 NEXT PUNI: SASP 3 ;FIND SET UNION UNI1: POP1 2 ;"A OR B" THIS TIME LDA 1,@ASP COM 2,2 ;ON THIS SILLY M/C "OR" HAS TO BE AND 2,1 ;"COM - AND - ADC" ADC 2,1 STA 1,@ASP DSZ ASP INC 0,0,SZR JMP UNI1 NEXT þÖ†PINN: LDA 3,SP ;FORM BOOLEAN = "TRUE IFF NTH ELEMENT LDA 0,MIN4 ;OF SET PRESENT". SORRY, BUT SASP ADD 0,3 ;NOT QUITE SUITABLE HERE STA 3,SP LDA 0,0,3 LDA 1,N16 INN1: INC 3,3 ;THIS LOOP FINDS WHICH WORD SUBZ 1,0,SZC ;OF SET WE WANT JMP INN1 Sþ©µ¥UBZ 1,1 INN3: MOVL 1,1 ;THIS LOOP FINDS WHICH BIT OF THE WORD INC 0,0,SZR JMP INN3 LDA 0,0,3 AND 0,1,SZR SUBZL 1,1 ;TRUE IFF BIT IS THERE STOP1 1 NEXT .END ÿP4MACZ2.ûmm þ„. PROCEDURE DOTFILE; (* REDUNDANT IN RELEASE II *) BEGIN WRITELN(OUTPUT, 11008 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* READ OFF EOLN *) WRITELN(OUTPUT, '.TXT ''INPUT'''); WRITELN(OUTPUþ=æT, -8954); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8954);  WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, 8192); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8952); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT,þÞ 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''OUTPUT'''); WRITELN(OUTPUT, -8951); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8949); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITþò&ELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRD'''); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, 8192); þ´, WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8946); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRR'''); WRITELN(OUTPUT, -8945); WRITELN(OUTPUT, -7403); þVÐ WRITELN(OUTPUT, -8943); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITELN(OUTPUT, 2048 ); WRITELN END (*** OF DOTFILE ***); PROCEDURE PACKCODE; VAR SMCODE, I, P, Q : INTEGER; LITERALS þc¦: STRING3; OP, TEMPOP : STRING4; ERROR : BOOLEAN; PROCEDURE DUMMYLABELS; BEGIN ECOUNT := ECOUNT + 1; WRITELN(PRR, '**********', ' INSTR. NO. ' : 12, ICOUNT : 5, ' ''' : 2, OP, þ/ ''' HAS NOT YET BE', 'EN CATERED FOR '); WRITELN END (*** OF DUMMYLABELS ***); FUNCTION PKACTION : INTEGER; VAR TEMP, RNDM, PI : INTEGER; MORETRY : BOOLEAN; PROCEDURE ERRORP; þ¦è BEGIN ERROR := TRUE; ECOUNT := ECOUNT + 1; MORETRY := FALSE; WRITE(PRR, 'INSTR. NO. = ' : 13, ICOUNT : 1, ' ', OP); REPEAT READ(INPUT, CH); þ1á WRITE(PRR, CH)  UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WRITELN(PRR); WRITE(PRR, '** ', OP, ' ** ILLEGAL CODE'); WRITELN(PRR) END (*** ERRORP ***); BEGIþ;N (* OF PKACTION *) PKACTION := 0; TEMP := ORD(OP[1]) * 4 + ORD(OP[2]) * 2 + ORD(OP[3]); IF ORD(OP[4]) <> 0 THEN TEMP := TEMP * 2 + ORD(OP[4]); TEMP := TEMP MOD TABLESþ>IZE; MORETRY := TRUE; SMIN := SMIN + 1; SMAX := SMAX + 1; RNDM := 1; PI := 0; IF OP = ' ' THEN ERRORP ELSE WHILE MORETRY DO WITH PCODETABLE[ (TEMP + PI) MOD TABLESþ¢–IZE ] DO BEGIN IF OP = PCODE THEN BEGIN MORETRY := FALSE; SMCODE := SEMICODE; PKACTION:= ACTION; END ELSE IF PCODE = ' ' THEN ERRORP; þ‰Œ  IF MORETRY THEN BEGIN RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4 ); SMAX := SMAX + 1 END END END (*** OF PKACTION ***); PROCEDURE NILP(P1, P2 : INTEGERþca); (* PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1= 0)) THEN BEGIN WRITELN(OUTPUT, P2); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 ); REþ`AD(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILP ***); PROCEDURE NILPS(P1, P2, P3 : INTEGER); (* SPECIAL PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1 < HALFWORD) AND (P1 >= 0)) THEN BEGIN WRITELN(OUTPUT,þÝè P2 + P3 ); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 + P3 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILPS ***); PROCEDURE QTOP(P1, P2, P3 : INTEGER); (* PCODE WITH P þ½ÅAND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND (P2 < HALFWORD) AND (P2 >= 0)) THEN BEGIN WRITELN(OUTPUT, P3 + P1 ); WRITELN(OUTPUT, P2 : 7) END ELSE WRITELN(OUTPUT, BIT16 + P3 + P2 ); þŽ0 READ(INPUT, CH) (* READ OFF EOLN *) END (*** QTOP ***); PROCEDURE QTOPS(P1, P2, P3, P4 : INTEGER); (* SPECIAL PCODE WITH P AND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND ( P2 < HALFWORD) AND (P2 >= 0)) THEN BEGIN þ2 WRITELN(OUTPUT, P3 + P4 + P1 ); WRITELN(OUTPUT, P2) END ELSE WRITELN(OUTPUT, BIT16 + P2 + P3 + P4 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF QTOPS ***); PROCEDURE BOUNDS(SEMICODE,þQi LOWERBOUND, UPPERBOUND : INTEGER); (* GENERATE OFFENDING PCODE LOCATION IN CASE CHECK RANGE BEING INVALID *) BEGIN IF SEMICODE > 0 THEN BEGIN IF (LOWERBOUND = 0) AND (UPPERBOUND < HALFWORD) THEN þDS WRITELN(OUTPUT, SEMICODE + BIT16 + UPPERBOUND) ELSE BEGIN IF (LOWERBOUND >= 0) AND (LOWERBOUND < HALFWORD) THEN WRITELN(OUTPUT, SEMICODE + LOWERBOUND) ELSE þ,© BEGIN WRITELN(OUTPUT, SEMICODE + HALFWORD); WRITELN(OUTPUT, LOWERBOUND) END; WRITELN(OUTPUT, UPPERBOUND) END END ELSE IF þ+öLOWERBOUND > 0 THEN WRITELN(OUTPUT, SEMICODE + 1) ELSE WRITELN(OUTPUT, SEMICODE); WRITELN(OUTPUT, ICOUNT + 1) END (* OF BOUNDS *); PROCEDURE LOWCODE; (* TO PROVIDE FACILITIES FOR THOSE POOR SOULS WHO MUST LIVE Wþ9êITH MACHINE CODES *) VAR I, J, K, L, ACC, LEVEL, DISPL : INTEGER; CODEND : BOOLEAN; DIRECTIVE : STRING4; LINE : ARRAY[1..80] OF CHAR; GOODCHAR : SET OF CHAR; GOODIGIT : SET OF '0'þb..'9'; FUNCTION GETNUM : INTEGER; VAR NUMBER : INTEGER; BEGIN WHILE ((LINE[J] = ' ') OR (LINE[J] = ',')) AND (J < I) DO J := J + 1; IF NOT (LINE[J] IN GOODIGIT) THEN þµ BEGIN WRITELN(PRR, '** ASSEMBLER COD', 'E ERROR :'); FOR J := 1 TO I DO WRITE(PRR, LINE[J]); WRITELN(PRR); WRITELN(PRR, '** LAST RECORDED', ' PCODE COUNTER =',þüü ICOUNT); ECOUNT := ECOUNT + 1 END; NUMBER := ORD(LINE[J]) - ZERO; J := J + 1; WHILE (J <= I) AND (LINE[J] IN GOODIGIT) DO BEGIN NUMBER := Nþ­3UMBER * 10 + ORD(LINE[J]) - ZERO; J := J + 1 END; GETNUM := NUMBER END (* OF GETNUM *); PROCEDURE GETLABEL; VAR N : INTEGER; BEGIN IF J > 1 THEN þ§Ó BEGIN FOR N := 1 TO J DO WRITE(OUTPUT, LINE[N]); END END (* OF GET LABEL *); BEGIN (* OF LOWCODE *); WRITELN(OUTPUT, '.RDX 8'); WRITELN(OUTPUT, '.EXþùäTD .CST .CLD ', 'PCRTN'); CODEND := FALSE; FOR CH := '0' TO '9' DO GOODIGIT := GOODIGIT + [CH]; FOR CH := 'A' TO 'Z' DO GOODCHAR := GOODCHAR + [CH]; GOODCHAR := GOODCHAR + ['.', '$'] + GOODIGIT; REPEAT þAÄ IF EOF(INPUT) THEN BEGIN WRITELN(PRR, '** ASSEMBLY CODE', ' SECTION NOT PRO', 'PERLY ENDED.'); WRITELN(PRR, '** LAST RECORDED', ' PCODE COUNTER =', ICOUNT); HALT(311); þsÍ END; REPEAT WHILE EOLN(INPUT) DO READLN(INPUT); READ(INPUT, CH);  IF CH = ';' THEN READLN(INPUT) UNTIL CH IN GOODCHAR; LINE[1] := CH; þÁ] FOR I := 2 TO 80 DO LINE[I] := ' '; I := 1; J := 1; WHILE NOT( EOLN(INPUT) OR ( I = 80) OR (CH = ';')) DO BEGIN READ(INPUT, CH); IF CH <> ';' THEN þH+ BEGIN I := I + 1; LINE[I] := CH; IF CH = ':' THEN J := I END END; READLN(INPUT); IF J > 1 THEN þn< REPEAT J := J + 1; UNTIL LINE[J] <> ' '; L := 1; FOR K := J TO J + 3 DO BEGIN DIRECTIVE[L] := LINE[K]; L := L + 1 þ¹E END; IF DIRECTIVE = 'JPC ' THEN BEGIN GETLABEL;  CODEND := TRUE; WRITELN(OUTPUT, 'JSR @PCRTN') END ELSE IF DIRECTIVE = 'POþx†P ' THEN BEGIN GETLABEL; J := J + 4; WRITELN(OUTPUT, 'DSZ 41'); WRITE(OUTPUT, 'LDA ' : 5, GETNUM : 1, ' @41'); WRITELN(OUTPUT) þðY END ELSE IF DIRECTIVE = 'PUSH' THEN BEGIN GETLABEL;  J := J + 4; WRITELN(OUTPUT, 'ISZ 41'); WRITE(OUTPUT, 'STA ': 5, GETNUM : 1, ' @41');þ(B WRITELN(OUTPUT) END ELSE IF DIRECTIVE = 'LOAD' THEN BEGIN GETLABEL; J := J + 4; ACC := GETNUM; LEVEL := GETNUM; DISPL := þû{GETNUM; WRITELN(OUTPUT, 'JSR @.CLD'); WRITELN(OUTPUT, LEVEL); WRITELN(OUTPUT, DISPL); WRITE(OUTPUT, 'LDA ' : 5, ACC : 1, ' @47'); WRITELN(OUTPUT); þpž END ELSE IF (DIRECTIVE = 'STOR') AND (LINE[J + 4] = 'E') THEN BEGIN GETLABEL; J := J + 5; WRITE(OUTPUT, 'STA ' : 5, GETNUM : 1, ' 47'); þj) WRITELN(OUTPUT); WRITELN(OUTPUT, 'JSR @.CST');  WRITELN(OUTPUT, GETNUM); WRITELN(OUTPUT, GETNUM); END ELSE BEGIN FOR J := 1þÆ- TO I DO WRITE(OUTPUT, LINE[J]); WRITELN(OUTPUT) END; UNTIL CODEND; WRITELN(OUTPUT, '.RDX 10') END (* OF LOWCODE *); BEGIN (* OF PACKCODE *) OP[1] := CH; REAþ¥YD(INPUT, OP[2], OP[3]); IF EOLN(INPUT) THEN OP[4] := ' ' ELSE READ(INPUT, OP[4]); CASE PKACTION OF 0 : (* STOA STOA STOC STOI STOR STOS EOF ADI ADR SBI SBR SGS FLT FLOþÙª TRC NGI NGR SQI SQR ABI ABR NOT AND IOR DIF INT UNI INN MOD ODD LCA MPI MPR DVI DVR STP CHR ORDA ORDB ORDC ORDI EQUA EQUB þ�§ EQUC EQUI EQUR EQUS NEQA NEQB NEQC NEQI NEQR NEQS GEQA GEQB GEQC GEQI GEQR GEQS GRTA GRTB GRTC GRTI GRTR GRTR GRTS LEQA LEQB LEQC LEQI LEQR LEþëÇQS LESA LESB LESC LESI LESR LESS RETA RETB RETC RETI RETP RETR ATN COS ELN EXP GET LOG NEW PUT RDC RDI RDR RLN RST SAV SIN SQþwÛT WLN WRC WRI WRR WRS  OPS OPN OVL CMS RSN *) BEGIN IF ERROR THEN ERROR := FALSE ELSE BEGIN þ;‘ WRITELN(OUTPUT, SMCODE ); READLN(INPUT) (* RID EOLN *) END END; 1, 2, 3, 4, 5, 6, 7, 8, 9 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 10 :þ° (* EQUM NEQM GEQ GRTM LEQM LESM  *) BEGIN READ(INPUT, Q); NILP(Q, SMCODE + BIT15) END; 11, 12, 13, 14, 15, 16, 17, 18, 19 : DUMMYLABELS; (***** Fþ»OR FUTURE INSERTIONS *****) 20 : (* LODA LODB LODC LODI STRA STRB STRC STRI LDA *) BEGIN READ(INPUT, P, Q); QTOP(P, Q DIV 2, SMCODE) END;þþz 21, 22, 23, 24, 25, 26, 27, 28, 29 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 30 : (* LODR STRR *) BEGIN READ(INPUT, P, Q); QTOPS(P, Q DIV 2, SMCODE, HALFWORDþVÙ) END; 31, 32, 33, 34, 35, 36, 37, 38, 39 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 40 : (* LODS STRS *) BEGIN READ(INPUT, P, Q); QTOPS(P, Q Dþð IV 2, SMCODE, 3 * HALFWORD) END; 41, 42, 43, 44, 45, 46, 47, 48, 49 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 50 : (* CUP CXP *) BEGIN READ(INPUT, P); þY READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P DIV 2 ); WRITELN(OUTPUT, CH, Q : 1); READ(INPUT, CH) þ—î(* READ OFF EOLN *) END; 51, 52, 53, 54, 55, 56, 57, 58, 59 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 60 : (* MST *) BEGIN READ(INPUT, Q); WRITELþ“ˆN(OUTPUT, SMCODE + Q ); READ(INPUT, CH) (* READ OF EOLN *) END; 61, 62, 63, 64, 65, 66, 67, 68, 69 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 70 : (* LDOA LDOB LDOC LDOI  SROAþæy SROB SROC SROI INDA INDB INDI LAO *) BEGIN READ(INPUT, Q); NILP(Q DIV 2, SMCODE) END; 71, 72, 73, 74, 75, 76, 77,þHí 78, 79 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 80 : (* INDC *) BEGIN READ(INPUT, Q); NILPS(Q, SMCODE, 2 * HALFWORD) END; 81, 82, 83, 84, 85, 86, 8þ>7, 88, 89 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 90 : (* LDOR SROR INDR *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD) END; 91, 92þ|C, 93, 94, 95, 96, 97, 98, 99 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 100 : (*LDOS SROS INDS *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD * 3) þç‡ END; 101, 102, 103, 104, 105, 106, 107, 108, 109 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 110 : (* INCA INCI INCC IXA DECA DECI DECC *) BEGIN þm“ READ(INPUT, Q); NILP(Q, SMCODE) END; 111, 112, 113, 114, 115, 116, 117, 118, 119 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 120 : (*MOV *) BEGIN þ?ƒ READ(INPUT, Q); NILP((Q + 1) DIV 2, SMCODE) END; 121, 122, 123, 124, 125, 126, 127, 128, 129 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 130 : (* ENT *) BEGIN þÉ READ(INPUT, P); READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P ); WRITELN(OUTPUT, CH, Q : 1); þ¨] READ(INPUT, CH) (* READ OFF EOLN *) END; 131, 132, 133, 134, 135, 136, 137, 138, 139 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 140 : (* UJC *) BEGIN þê WRITELN(OUTPUT, SMCODE ); WRITELN(OUTPUT, 0 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 141, 142, 143, 144, 145, 146, 147, 148, 149 : DUMMYLABELS; (***** FOR FUTURE INSERTþX·IONS *****) 150 : (* UJP FJP XJP TJP JPF JPT SJP *) BEGIN READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODEþfi ); WRITELN(OUTPUT, CH, Q : 1); READ(INPUT, CH) (* READ OFF EOLN *) END; 151, 152, 153, 154, 155, 156, 157, 158, 159 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) þ¼ 160 : (* CSP *) BEGIN READ(INPUT, CH); WHILE CH = ' ' DO READ(INPUT, CH); I := SMCODE; TEMPOP := OP; OP[1] := CH; þÈREAD(INPUT, OP[2], OP[3]); OP[4] := ' '; P := PKACTION; (* P IS DUMMY, CALLING PKACTION IS JUST TO  OBTAIN SEMI-CODE VALUE IN SMCODE *) WRITELN(OUTPUT, SMCOþ8^DE + I + BIT16 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 161, 162, 163, 164, 165, 166, 167, 168, 169 :DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 170 : (* CHKA CHKB CHKC CHKI *) þ 5 BEGIN READLN(INPUT, P, Q); BOUNDS(SMCODE, P, Q) END; 171, 172, 173, 174, 175, 176, 177, 178, 179 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 180 : (*þÃõ LDC *) BEGIN WRITELN(OUTPUT, SMCODE + 3 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) þë™ FOR I := 1 TO 4 DO WRITELN(OUTPUT, SWITCHES[I]); END; 181, 182, 183, 184, 185, 186, 187, 188, 189 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 190 : (* LDCB LDCI *) BEGIN þ:‹ READ(INPUT, Q); QTOP(0, Q, SMCODE) END; 191, 192, 193, 194, 195, 196, 197, 198, 199 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 200 : (* LDCC *) (* SORRY FOR THIS MESS, þï BUT BLAME THE NOVA ASSEMBLER PLEASE. *) BEGIN READ(INPUT, CH); (* THE ORDINAL OF (') = 7 *) WHILE ORD(CH) <> 7 DO READ(INPUT, CH); LITERALS[1] := CH; þ®V READ(INPUT, LITERALS[2], LITERALS[3]); WRITELN(OUTPUT, SMCODE ); IF LITERALS[2] = CHR(7) (* IF LITERALS[2] = '''' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 39 (* NOVA þz CODE FOR (') *) : 1, CHR(30), CHR(7)) ELSE IF LITERALS[2] = CHR(12) (* IF LITERALS[2] = ',' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 44 (* NOVA Cþ‹ùODE FOR (,) *) : 1, CHR(30), CHR(7)) ELSE IF LITERALS[2] = CHR(28) (* IF LITERALS[2] = '<' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 60 (* NOVA CODE FOR (<) *) : 1, CHRþH(30), CHR(7)) ELSE WRITELN(OUTPUT, '.TXT ', LITERALS); READ(INPUT, CH) (* READ OFF EOLN *) END; 201, 202, 203, 204, 205, 206, 207, 208, 209 : DUMMYLABELS; (***** FOR FUTURE INSþžXERTIONS *****) 210 : (* LDCN *) QTOP(0, 0, SMCODE); 211, 212, 213, 214, 215, 216, 217, 218, 219 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 220 : (* LDCR *) (* NOTICE THE NON-FLOATINGþ“ì POINT OUTPUT FORMAT OF 'R' *) BEGIN WRITELN(OUTPUT, SMCODE + 1, '.'); READLN(INPUT, R); WRITELN(OUTPUT,'0', R : 0) END; 230 : (* JNC *) (* FOR MACHINE þTšCODE ADDICTS ONLY *) BEGIN WRITELN(OUTPUT, SMCODE); READLN(INPUT); LOWCODE; END; (* REDUNDANT 'CCP ' 240 : BEGIN WRIþä”TELN(OUTPUT, SMCODE); READLN(INPUT, Q); WRITELN(OUTPUT, Q); END; *) END (* OF CASE PKACTION *) END (*** OF PACKCODE ***); BEGIN (* OF MAIN *) WRITELN; WRITELN; WRITELN; þ¼E WRITELN(PRR, '; ==== P4MAC BEG', 'INS NOW'); ENT := TRUE; ZERO := ORD('0'); ICOUNT := 3; FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO PCODE := ' '; COMPLETABLE; (* START READING IN THE PCODEþ‡ PROGRAM FROM PRD FILE *) READ(INPUT, CH, CH, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF (CH <> '.') AND (DOTNAME <> 'TIT') THEN BEGIN WRITELN(PRR, '**********', ' NO TITLE FOUND ', '**********'); WRITELN(PRR); Hþ“xALT(311) END; WRITE(OUTPUT, CH: 16, DOTNAME); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); WRITELN; READ(INPUT, CH); (* RID EOLN *) REPEAT READ(INPUT, CH); IF Cþ2yH = 'I' THEN PCTYPE := COMMENT ELSE IF CH = 'L' THEN PCTYPE := LLABEL ELSE IF (CH = 'P') OR (CH = '?') THEN PCTYPE := PCODENTRY ELSE BEGIN READ(INPUT, CH); IF CH = '.' THEN PCTYPE := NONPCODE þÈò ELSE PCTYPE := PCODES END; CASE PCTYPE OF COMMENT : (* INSTRUCTION CHECK COUNT *) BEGIN READ(INPUT, J); IF (ICOUNT <> J) AND (J <> 0)þæz THEN BEGIN  WCOUNT := WCOUNT + 1; WRITELN(PRR, 'I', J : 5, ' ' : 14, '; ??? PCODE' , ' COUNT OUT OF ST', 'EP ???'); þÌý END; ICOUNT := J; READ(INPUT, CH) (* READ OFF EOLN *) END; LLABEL : (* LABELS *) BEGIN WRITþ£E(OUTPUT, CH);  READ(INPUT, I); WRITE(OUTPUT, I : 1); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) þOH UNTIL EOLN(INPUT); READLN(INPUT); WRITELN(OUTPUT) END; NONPCODE : (* NON STANDARD PCODE INSTRUCTIONS *) BEGIN þζ READ(INPUT, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF DOTNAME = 'FIL' THEN DOTFILE ELSE BEGIN IF ((DOTNAME = 'SW1') OR (DOTNAME = 'SW2') þ<„ OR (DOTNAME = 'SW3') OR (DOTNAME = 'SW4')) THEN BEGIN REPEAT READ(INPUT, CH) þ,  UNTIL (CH = '0') OR (CH = '1'); (* READ UNTIL BINARY IS FOUND *) BINARYSTR[1] := CH; IF CH = '1' THEN J := -1 ELSE J := 0; þÝq FOR I := 2 TO 16 DO BEGIN READ(INPUT, CH); BINARYSTR[I] := CH; þŸÅ J := J * 2 + ORD(CH) - ZERO END; I := ORD(DOTNAME[3]) - ZERO; SWITCHES[I] := J; READ(þüIINPUT, CH) (* READ OFF EOLN *) END ELSE IF (DOTNAME = 'TXT') AND (INPUT^ <> 'M') THEN BEGIN WRITE(OUTPUT, '.þçv', DOTNAME : 3); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL CH <> ' '; þ÷l FOR I := 1 TO 16 DO BEGIN READ(INPUT, CH); IF CH = CHR(2) (* IF CH = '"' *) THEN  þÓð WRITE(OUTPUT, CHR(28), 34 (*NOVA CODE FOR(") *) : 1, CHR(30)) ELSE IF CH = CHR(28) (* IF CH = '<' *) THEN þÄ WRITE(OUTPUT, CHR(28), 60 (* NOVA CODE FOR (<) *) : 1, CHR(30)) ELSE IF CH = CHR(30) (* IF CH = '>' *) THEN  þÓÙ WRITE(OUTPUT, CHR(28), 62 (* NOVA CODE FOR (>) *) : 1, CHR(30)) ELSE WRITE(OUTPUT, CH) END; þ ¯ READLN(INPUT, CH); WRITELN(OUTPUT, CH) END ELSE BEGIN  IF DOTNAME = 'ENT' THEN þ÷Ù WRITE(OUTPUT, '.', DOTNAME) ELSE IF NOT (DOTNAME = 'END') THEN WRITE(OUTPUT, '.', þÆDOTNAME); IF NOT EOLN(INPUT) THEN REPEAT READ(INPUT, CH);  WRITE(OUTPUT, CH) þôø UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WRITELN END END þF END; PCODES : (* STANDARD PCODE INSTRUCTIONS *) BEGIN PACKCODE; ICOUNT := ICOUNT + 1  END; PCODENTRY : (* PACKED PCODE þÞ¾ENTRY POINT *) BEGIN WRITE(OUTPUT, CH); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EþUJOLN(INPUT); WRITELN; READ(INPUT, CH) (* READ OFF EOLN *) END; END (* OF CASE PCTYPE *); WHILE EOLN(INPUT) DO BEGIN WRITELN; þó£ READ(INPUT, CH) (* READ OF EOLN *) END UNTIL EOF(INPUT); (* THE PCODE PROGRAM HAS BEEN PACKED FOR INTERPRETER *) (* WRITELN; WRITELN; WRITELN; WRITELN(PRR, '; IDEAL SEARCHES', ' = ', SMIN); WRITELþÚ N(PRR, '; ACTUAL SEARCHE', 'S = ', SMAX); *) IF WCOUNT > 0 THEN WRITELN(PRR, ';---- NO. OF WAR', 'NINGS = ', WCOUNT : 6); IF ECOUNT > 0 THEN WRITELN(PRR, ';**** NO. OF FAT', 'AL ERRORS = ', ECOUNT : 6); WRITELNþkn(OUTPUT, '.END' : 16); IF ECOUNT > 0 THEN HALT(311); WRITELN; WRITELN; WRITELN END. ÿP4COMPILE1.û¡Nþm˜(*$T-,D-*) (********************************************** * * * * * PORTABLE PASCAL COMPILER * * ************************ * þZ_ *  * * PASCAL P4 * * * * * * AUTHORS: * * þ�M URS AMMANN * * KESAV NORI * * CHRISTIAN JACOBI * * * * ADDRESS: * * þ×  * * INSTITUT FUER INFORMATIK * * EIDG. TECHNISCHE HOCHSCHULE * * CH-8096 ZUERICH * * * * þìI * * LAST CHANGES COMPLETED IN MAY 76 * * * * LANCASTER AMENDMENTS BY * * * * A. FOSTER  þÔW * * * * DEPARTMENT OF COMPUTER STUDIES * * UNIVERSITY OF LANCASTER * * BAILRIGG * * LANCASTER LA1 4YX * * þm“ * * * * LAST LANCASTER CHANGES JUNE 77 * * * **********************************************) PROGRAM PASCALþKpCOMPILER(INPUT,OUTPUT,PRR); CONST DISPLIMIT = 20; MAXLEVEL = 10; INTSIZE = 2; INTAL = 2; REALSIZE = 4; REALAL = 2; CHARSIZE = 1; CHARAL = 2; FILEMAX = 6; CHARMAX = 1; BOOLSIZE = 2; BOOLAþPL = 2; PTRSIZE = 2; ADRAL = 2; SETSIZE = 8; SETAL = 2; STACKAL = 2; STACKELSIZE = 2; STRGLGTH = 16; SETHIGH = 63; SETLOW = 0; ORDMAXCHAR = 63; ORDMINCHAR = 0; MAXINT  = 32767; LCAFTERMþ2�ARKSTACK = 12; FILEAL = CHARAL; (* STACKELSIZE = MINIMUM SIZE FOR 1 STACKELEMENT = K*STACKAL STACKAL = SCM(ALL OTHER AL-CONSTANTS) CHARMAX = SCM(CHARSIZE,CHARAL) SCM = SMALLEST COMMON MULTIþ—ÌPLE LCAFTERMARKSTACK >= 4*PTRSIZE+MAX(X-SIZE) = K1*STACKELSIZE *) MAXSTACK = 2; PARMAL = STACKAL; PARMSIZE = STACKELSIZE; RECAL = STACKAL; FILEBUFFER = 4; MAXADDR = MAXINT; (*EþQRROR REPORTING CONSTANTS*) MAXERRBIT = 59; MAXERRMOD = 60; MAXERRSET = 10; TYPE (*DESCRIBING:*) (*************) þÏî (*BASIC SYMBOLS*) (***************) SYMBOL = (IDENT,INTCONST,REALCONST,STRINGCONST,NOTSY,MULOP,ADDOP,RELOP, LPARENT,RPAREþßJNT,LBRACK,RBRACK,COMMA,SEMICOLON,PERIOD,ARROW, COLON,BECOMES,LABELSY,CONSTSY,TYPESY,VARSY,FUNCSY,PROGSY, PROCSY,SETSY,PACKEDSY,ARRAYSY,RECORDSY,FILESY,FORWARDSY, BEGINSY,IFSY,CASESY,REPEATSY,WHILESY,FORSY,WITHSYþÑ;, GOTOSY,ENDSY,ELSESY,UNTILSY,OFSY,DOSY,TOSY,DOWNTOSY, THENSY,OTHERSY,RANDOMSY,EXTRNSY); OPERATOR = (MUL,RDIV,ANDOP,IDIV,IMOD,PLUS,MINUS,OROP,LTOP,LEOP,GEOP,GTOP, NEOP,EQOP,INOP,NOOP); SETOFSYS = SETþ6« OF SYMBOL; CHTP = (LETTER,NUMBER,SPECIAL,ILLEGAL); (*CONSTANTS*) (***********) CSTCLASS = (REEL,PSET,STRG); CSP = ^ COþÑ0NSTANT; CONSTANT = RECORD CASE CCLASS: CSTCLASS OF REEL: (RVAL: PACKED ARRAY [1..STRGLGTH] OF CHAR); PSET: (PVAL: SET OF 0..58); STRG: (SLGTH: 0..STRGLGTH; þ‡ SVAL: PACKED ARRAY [1..STRGLGTH] OF CHAR) END; VALU = RECORD CASE INTVAL: BOOLEAN OF (*INTVAL NEVER SET NORE TESTED*) TRUE: (IVAL: INTEGER); FALSE: (VALP: CSP) þ„ END; (*DATA STRUCTURES*) (*****************) LEVRANGE = 0..MAXLEVEL; ADDRRANGE = 0..MAXADDR; STRUCTFORM = (SCALAR,SUBRAþUNGE,POINTER,POWER,ARRAYS,RECORDS,FILES, TAGFLD,VARIANT); DECLKIND = (STANDARD,DECLARED); STP = ^ STRUCTURE; CTP = ^ IDENTIFIER; STRUCTURE = PACKED RECORD MARKED: BOOLEAN; (*FOR TEST PHASE ONLY*) þG SIZE: ADDRRANGE; CASE FORM: STRUCTFORM OF SCALAR: (CASE SCALKIND: DECLKIND OF  DECLARED: (FCONST: CTP)); SUBRANGE: (RANGETYPE: STP; MIN,MAX: VALU)þwo; POINTER: (ELTYPE: STP); POWER: (ELSET: STP); ARRAYS: (AELTYPE,INXTYPE: STP); RECORDS: (FSTFLD: CTP; RECVAR: STP); FILES: (FILTYPE: STP; RANþ¡…DOMFILE :BOOLEAN); TAGFLD: (TAGFIELDP: CTP; FSTVAR: STP); VARIANT: (NXTVAR,SUBVAR: STP; VARVAL: VALU)  END; (*NAMES*) þ4 (*******) IDCLASS = (TYPES,KONST,VARS,FIELD,PROC,FUNC); SETOFIDS = SET OF IDCLASS; IDKIND = (ACTUAL,FORMAL); ALPHA = PACKED ARRAY [1..8] OF CHAR; IDENTIFIER = PACKED RECORD þhŠ NAME: ALPHA; LLINK, RLINK: CTP; IDTYPE: STP; NEXT: CTP; CASE KLASS: IDCLASS OF  KONST: (VALUES: VALU); VARS: (VKIND: IDKIND; VLEV: LEVRANGE; VADDR: ADDRRANGE); þMî FIELD: (FLDADDR: ADDRRANGE); PROC, FUNC: (CASE PFDECKIND: DECLKIND OF STANDARD: (KEY: 1..17); DECLARED: (PFLEV: LEVRANGE; PFNAME: INTEGER; þ­ CASE PFKIND: IDKIND OF ACTUAL: (FORWDECL,EXTDEC, EXTERN: BOOLEAN))) END; DISPRANGE = 0..DISPLþ½IMIT; WHERE = (BLCK,CREC,VREC,REC); (*EXPRESSIONS*) (*************) ATTRKIND = (CST,VARBL,EXPR); VACCESS = (DRCT,INDRCT,þÒ¥INXD); ATTR = RECORD TYPTR: STP; CASE KIND: ATTRKIND OF CST: (CVAL: VALU); VARBL: (CASE ACCESS: VACCESS OF DRCT: (VLEVEL: LEVRANGE; DPLMT: ADDRRANGE); þN' INDRCT: (IDPLMT: ADDRRANGE)) END; TESTP = ^ TESTPOINTER; TESTPOINTER = PACKED RECORD ELT1,ELT2 : STP; LASTTESTP : TESTP END; þß (*LABELS*) (********) LBP = ^ LABL; LABL = RECORD NEXTLAB: LBP; DEFINED: BOOLEAN; LABVAL, LABNAME: INTEGER END; EXTFILEP =þ<ç ^FILEREC; FILEREC = RECORD FILENAME:ALPHA; NEXTFILE:EXTFILEP; FTYPE : CTP END; (*-------------------------------------------------------------------------*) VAR (*RETURNED BY SOURCE PROGRAM SCANNER þÖA INSYMBOL: **********)  SY: SYMBOL; (*LAST SYMBOL*) OP: OPERATOR; (*CLASSIFICATION OF LAST SYMBOL*) VAL: VALU; (*VALUE OF LASþà~T CONSTANT*) LGTH: INTEGER; (*LENGTH OF LAST STRING CONSTANT*) ID: ALPHA; (*LAST IDENTIFIER (POSSIBLY TRUNCATED)*) KK: 1..8; (*NR OF CHARS IN LAST IDENTIFIER*) CH: CHAR; þŒÒ (*LAST CHARACTER*) EOL: BOOLEAN; (*END OF LINE FLAG*) (*COUNTERS:*) (***********) CHCNT: INTEGER; (*CHARACTER COUNTER*) LC,þzÚIC: ADDRRANGE; (*DATA LOCATION AND INSTRUCTION COUNTER*) LINECOUNT: INTEGER; (*SWITCHES:*) (***********) DP, (*DECLARATION PART*) þeˆ PRTERR, (*TO ALLOW FORWARD REFERENCES IN POINTER TYPE DECLARATION BY SUPPRESSING ERROR MESSAGE*) LIST,PRCODE,PRTABLES: BOOLEAN; (*OUTPUT OPTIONS FOR -- SOþ¾·URCE PROGRAM LISTING -- PRINTING SYMBOLIC CODE -- DISPLAYING IDENT AND STRUCT TABLES --> PROCEDURE OPTION*) DEBUG: BOOLEAN; þ…Ž (*POINTERS:*)  (***********) PARMPTR, INTPTR,REALPTR,CHARPTR, BOOLPTR,NILPTR,TEXTPTR: STP; (*POINTERS TO ENTRIES OF STANDARD IDS*) UTYPPTR,UCSTPTR,UVARPTR, UFLDPTR,UPRCþ?PTR,UFCTPTR, (*POINTERS TO ENTRIES FOR UNDECLARED IDS*) FWPTR: CTP; (*HEAD OF CHAIN OF FORW DECL TYPE IDS*) FEXTFILEP: EXTFILEP; (*HEAD OF CHAIN OF EXTERNAL FILES*) GLOBTESTP: TESTP; (*LAST Tþ+aESTPOINTER*)  (*BOOKKEEPING OF DECLARATION LEVELS:*) (************************************) LEVEL: LEVRANGE; (*CURRENT STATIC LEVEL*) DISX, þú (*LEVEL OF LAST ID SEARCHED BY SEARCHID*) TOP: DISPRANGE; (*TOP OF DISPLAY*) DISPLAY: (*WHERE: MEANS:*) ARRAY [DISPRANGE] OF PACKED RECORD (*=BLCK: ID IS VARIABLE ID*) þ³… FNAME: CTP; FLABEL: LBP; (*=CREC: ID IS FIELD ID IN RECORD WITH*) CASE OCCUR: WHERE OF (* CONSTANT ADDRESS*) CREC: (CLEV: LEVRANGE; (*=VREC: ID IS FIELD ID IN RECORD WITH*) CDSPL: ADDRRANGþ„!E);(* VARIABLE ADDRESS*) VREC: (VDSPL: ADDRRANGE) END; (* --> PROCEDURE WITHSTATEMENT*) (*ERROR MESSAGES:*) (*****************) þ˜* ERRINX: 0..10; (*NR OF ERRORS IN CURRENT SOURCE LINE*) ERRLIST: ARRAY [1..10] OF (*BIT MAP OF COMPILE-TIME ERRORS*) PACKED RECORD POS: INTEGER; NMR: 1..400 END; þsc (*FILE USE TO PASS BIT MAP TO THE ERROR*) (*SUMMARY GENERATOR PROGRAM*) ERRORS : ARRAY [0..MAXERRSET] OF SET OF 0..MAXERRBIT; ERRFLAG : BOOLEAN; þ¿ (*EXPRESSION COMPILATION:*) (*************************) GATTR: ATTR; (*DESCRIBES THE EXPR CURRENTLY COMPILED*) (*STRUCTURED CONSTANTS:*) þ)~ (***********************) CONSTBEGSYS,SIMPTYPEBEGSYS,TYPEBEGSYS,BLOCKBEGSYS,SELECTSYS,FACBEGSYS, STATBEGSYS,TYPEDELS: SETOFSYS; CHARTP : ARRAY[CHAR] OF CHTP; RW: ARRAY [1..37(*NR. OF RES. WORDS*)] OF ALPHA; FRW: ARRAY þ"”[1..9] OF 1..38(*NR. OF RES. WORDS + 1*); RSY: ARRAY [1..37(*NR. OF RES. WORDS*)] OF SYMBOL; SSY: ARRAY [CHAR] OF SYMBOL; ROP: ARRAY [1..37(*NR. OF RES. WORDS*)] OF OPERATOR; SOP: ARRAY [CHAR] OF OPERATOR; NA: ARRAY [1..41] OF ALPHA; þ'› MN: ARRAY[0..62] OF PACKED ARRAY[1..4] OF CHAR; SNA: ARRAY [1..31] OF PACKED ARRAY [1..4] OF CHAR; CDX: ARRAY[0..62] OF -4..+4; PDX: ARRAY[1..31] OF -7..+7; ORDINT: ARRAY[CHAR] OF INTEGER; INTLABEL,MXINT10,DIGMAX: INTEGER; (*-----þa¨--------------------------------------------------------------------*) PROCEDURE ENDOFLINE; VAR LASTPOS,FREEPOS,CURRPOS,CURRNMR,F,K: INTEGER; BEGIN IF ERRINX > 0 THEN (*OUTPUT ERROR MESSAGES*) BEGIN WRITE(OUTPUT,' **** ':15); LþlµASTPOS := 0; FREEPOS := 1; FOR K := 1 TO ERRINX DO BEGIN WITH ERRLIST[K] DO BEGIN CURRPOS := POS; CURRNMR := NMR END; IF CURRPOS = LASTPOS THEN WRITE(OUTPUT,',')  ELSE BEGIN þVÐ WHILE FREEPOS < CURRPOS DO BEGIN WRITE(OUTPUT,' '); FREEPOS := FREEPOS + 1 END; WRITE(OUTPUT,'^'); LASTPOS := CURRPOS END; IF CURRNMR < 10 THEN F := 1 ELþ@-SE IF CURRNMR < 100 THEN F := 2 ELSE F := 3; WRITE(OUTPUT,CURRNMR:F); FREEPOS := FREEPOS + F + 1 END; WRITELN(OUTPUT); ERRINX := 0 END; IF LIST AND (NOT EOF(INPUT)) THEN BEGIN LINECOUNþöPT := LINECOUNT + 1; WRITE(OUTPUT,LINECOUNT:6,' ':2); IF DP THEN WRITE(OUTPUT,LC:7) ELSE WRITE(OUTPUT,IC:7); WRITE(OUTPUT,' ') END; CHCNT := 0 END (*ENDOFLINE*) ; PROCEDURE ERROR(FERRNR: INTEGER); VAR I : 0..MAXERRSET; þ’� BEGIN I := FERRNR DIV MAXERRMOD; ERRORS[I] := [FERRNR MOD MAXERRMOD] + ERRORS[I]; ERRFLAG := TRUE; IF ERRINX >= 9 THEN BEGIN ERRLIST[10].NMR := 255; ERRINX := 10; ERRORS[4] := ERRORS[4] + [15] END ELSE BEGIþ@ËN ERRINX := ERRINX + 1; ERRLIST[ERRINX].NMR := FERRNR END; ERRLIST[ERRINX].POS := CHCNT END (*ERROR*) ; PROCEDURE ERRORREPORT; VAR P4ERRORS : FILE OF SET OF 0..MAXERRBIT; I : 0..MAXERRSET; BEGIN FOR I := 0 TO MAXERþáRSET DO BEGIN P4ERRORS^ := ERRORS[I]; PUT(P4ERRORS) END END (*ERROR REPORT*); PROCEDURE INSYMBOL; (*READ NEXT BASIC SYMBOL OF SOURCE PROGRAM AND RETURN ITS DESCRIPTION IN THE GLOBAL VARIABLES SY, OP, ID, VAL AND LGþÑŠTH*) LABEL 1,2,3; VAR I,K: INTEGER; DIGIT: PACKED ARRAY [1..STRGLGTH] OF CHAR; STRING: PACKED ARRAY [1..STRGLGTH] OF CHAR; LVP: CSP;TEST: BOOLEAN; PROCEDURE NEXTCH; BEGIN IF EOL THEN BEGIN IF LIST THEN WRITELNþhG(OUTPUT); ENDOFLINE END; IF NOT EOF(INPUT) THEN BEGIN EOL := EOLN(INPUT); READ(INPUT,CH); IF LIST THEN WRITE(OUTPUT,CH); CHCNT := CHCNT + 1  END ELSE BEGIN WRITELN(OUTPUT,' *** EOF ','ENCOUNTERED'); þ) TEST := FALSE END END; PROCEDURE OPTIONS; BEGIN REPEAT NEXTCH; IF CH <> '*' THEN BEGIN IF CH = 'T' THEN BEGIN NEXTCH; PRTABLES := CH = '+' END ELSE Iþõ�F CH = 'L' THEN BEGIN NEXTCH; LIST := CH = '+'; IF NOT LIST THEN WRITELN(OUTPUT) END ELSE IF CH = 'D' THEN BEGIN NEXTCH; DEBUG := CH = '+' END ELSE þ& IF CH = 'C' THEN BEGIN NEXTCH; PRCODE := CH = '+' END; NEXTCH END UNTIL CH <> ',' END (*OPTIONS*) ; BEGIN (*INSYMBOL*) 1: REPEAT WHILE (CH = ' ') AND NOT EOL DO NEXTCH; TEST := Eþ½ OL; IF TEST THEN NEXTCH UNTIL NOT TEST; IF CHARTP[CH] = ILLEGAL THEN BEGIN SY := OTHERSY; OP := NOOP; ERROR(399); NEXTCH END ELSE CASE CH OF 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O',þ†¡'P','Q','R', 'S','T','U','V','W','X','Y','Z': BEGIN K := 0; REPEAT IF K < 8 THEN BEGIN K := K + 1; ID[K] := CH END ; NEXTCH UNTIL CHARTP[CH] IN [SPECIAL,ILLEGAL]; IF K >= KK þFýTHEN KK := K ELSE REPEAT ID[KK] := ' '; KK := KK - 1 UNTIL KK = K; FOR I := FRW[K] TO FRW[K+1] - 1 DO IF RW[I] = ID THEN BEGIN SY := RSY[I]; OP := ROP[I]; GOTO 2 END; SY := IþáˆDENT; OP := NOOP; 2: END; '0','1','2','3','4','5','6','7','8','9': BEGIN OP := NOOP; I := 0; REPEAT I := I+1; IF I<= DIGMAX THEN DIGIT[I] := CH; NEXTCH UNTIL CHARTP[CH] <> NUMBER; IF (CH = '.') OR (CH = 'E')þ•[ THEN BEGIN K := I; IF CH = '.' THEN BEGIN K := K+1; IF K <= DIGMAX THEN DIGIT[K] := CH; NEXTCH; IF CH = '.' THEN BEGIN CH := ':'; GOTO 3 END; Iþú#F CHARTP[CH] <> NUMBER THEN ERROR(201) ELSE REPEAT K := K + 1; IF K <= DIGMAX THEN DIGIT[K] := CH; NEXTCH UNTIL CHARTP[CH] <> NUMBER END; þï IF CH = 'E' THEN BEGIN K := K+1; IF K <= DIGMAX THEN DIGIT[K] := CH;  NEXTCH; IF (CH = '+') OR (CH ='-') THEN BEGIN K := K+1; IF K <= DIGMAX THEN DIGIT[þÏéK] := CH; NEXTCH END; IF CHARTP[CH] <> NUMBER THEN ERROR(201) ELSE REPEAT K := K+1; IF K <= DIGMAX THEN DIGIT[K]þ9Ü := CH; NEXTCH UNTIL CHARTP[CH] <> NUMBER END;  NEW(LVP,REEL); SY:= REALCONST; LVP^.CCLASS := REEL; WITH LVP^ DO BEGIN FOR I := 1 TO STRGLGTH DO RVAL[I] þ.:= ' '; IF K <= DIGMAX THEN FOR I := 2 TO K + 1 DO RVAL[I] := DIGIT[I-1] ELSE BEGIN ERROR(203); RVAL[2] := '0'; RVAL[3] := '.'; RVAL[4] := '0' þ END END; VAL.VALP := LVP END ELSE 3: BEGIN IF I > DIGMAX THEN BEGIN ERROR(203); VAL.IVAL := 0 END ELSE WITH VAL DO þä§ BEGIN IVAL := 0; FOR K := 1 TO I DO BEGIN IF IVAL <= MXINT10 THEN IVAL := IVAL*10+ORDINT[DIGIT[K]] ELSE BEGIN ERROR(203); IVAL := 0 þu«END END; SY := INTCONST END END END; '''': BEGIN LGTH := 0; SY := STRINGCONST; OP := NOOP; REPEAT REPEAT NEXTCH; LGTH := LGTH + 1; þ¯ IF LGTH <= STRGLGTH THEN STRING[LGTH] := CH UNTIL (EOL) OR (CH = ''''); IF EOL THEN ERROR(202) ELSE NEXTCH UNTIL CH <> ''''; LGTH := LGTH - 1; (*NOW LGTH = NR OF CHARS IN STRING*) IF LGTH = þv�1 THEN VAL.IVAL := ORD(STRING[1]) ELSE BEGIN NEW(LVP,STRG); LVP^.CCLASS:=STRG; IF LGTH > STRGLGTH THEN BEGIN ERROR(399); LGTH := STRGLGTH END; WITH LVP^ DO BEGIN SLGTH := LGTþFŒH; FOR I := 1 TO LGTH DO SVAL[I] := STRING[I] END; VAL.VALP := LVP END END; ':': BEGIN OP := NOOP; NEXTCH; IF CH = '=' THEN BEGIN SY := BECOMES; NEXTCH þ,END ELSE SY := COLON END; '.':  BEGIN OP := NOOP; NEXTCH; IF CH = '.' THEN BEGIN SY := COLON; NEXTCH END ELSE SY := PERIOD END; '<': BEGIN NEXTCH; SY := RELOP; IþdÀF CH = '=' THEN BEGIN OP := LEOP; NEXTCH END ELSE IF CH = '>' THEN BEGIN OP := NEOP; NEXTCH END ELSE OP := LTOP END; '>': BEGIN NEXTCH; SY := RELOP; IF CH = '=' THEþZ4N BEGIN OP := GEOP; NEXTCH END  ELSE OP := GTOP END; '(': BEGIN NEXTCH; IF CH = '*' THEN BEGIN NEXTCH; IF CH = '$' THEN OPTIONS; REPEAT WHILE CH <> '*' þpDDO NEXTCH; NEXTCH UNTIL CH = ')'; NEXTCH; GOTO 1 END; SY := LPARENT; OP := NOOP END; '*','+','-', '=','/',')', '[',']',',',';','^','$': BEGIN SY := SSY[CH]; OP :=þ(Õ SOP[CH]; NEXTCH END; ' ': SY := OTHERSY END (*CASE*) END (*INSYMBOL*) ; PROCEDURE ENTERID(FCP: CTP); (*ENTER ID POINTED AT BY FCP INTO THE NAME-TABLE, WHICH ON EACH DECLARATION LEVEL IS ORGANISED AS AN UNBALAþˆ»NCED BINARY TREE*) VAR NAM: ALPHA; LCP, LCP1: CTP; LLEFT: BOOLEAN; BEGIN NAM := FCP^.NAME; LCP := DISPLAY[TOP].FNAME; IF LCP = NIL THEN DISPLAY[TOP].FNAME := FCP ELSE BEGIN REPEAT LCP1 := LCP; IF LCP^.NAME = þU»NAM THEN (*NAME CONFLICT, FOLLOW RIGHT LINK*) BEGIN ERROR(101); LCP := LCP^.RLINK; LLEFT := FALSE END ELSE IF LCP^.NAME < NAM THEN BEGIN LCP := LCP^.RLINK; LLEFT := FALSE END ELSE BEGIN LCP := LþÒCP^.LLINK; LLEFT := TRUE END UNTIL LCP = NIL; IF LLEFT THEN LCP1^.LLINK := FCP ELSE LCP1^.RLINK := FCP END; FCP^.LLINK := NIL; FCP^.RLINK := NIL END (*ENTERID*) ; PROCEDURE SEARCHSECTION(FCP: CTP; VAR FCP1: CTP); (*TO FINþˆ¿D RECORD FIELDS AND FORWARD DECLARED PROCEDURE ID'S --> PROCEDURE PROCEDUREDECLARATION --> PROCEDURE SELECTOR*) LABEL 1; BEGIN WHILE FCP <> NIL DO IF FCP^.NAME = ID THEN GOTO 1 ELSE IF FCP^.NAME < ID THEN FCP := FCP^.RLINK þ‘C ELSE FCP := FCP^.LLINK; 1: FCP1 := FCP END (*SEARCHSECTION*) ; PROCEDURE SEARCHID(FIDCLS: SETOFIDS; VAR FCP: CTP); LABEL 1; VAR LCP: CTP; BEGIN FOR DISX := TOP DOWNTO 0 DO BEGIN LCP := DISPLAY[DISX].FNAME; WHILE LCþP <> NIL DO IF LCP^.NAME = ID THEN IF LCP^.KLASS IN FIDCLS THEN GOTO 1 ELSE BEGIN IF PRTERR THEN ERROR(103); LCP := LCP^.RLINK END ELSE IF LCP^.NAME < ID THþ.¼EN LCP := LCP^.RLINK ELSE LCP := LCP^.LLINK END; (*SEARCH NOT SUCCSESSFUL; SUPPRESS ERROR MESSAGE IN CASE OF FORWARD REFERENCED TYPE ID IN POINTER TYPE DEFINITION --> PROCEDURE SIMPLETYPE*) IF PRTERR THEN þ06 BEGIN ERROR(104); (*TO AVOID RETURNING NIL, REFERENCE AN ENTRY FOR AN UNDECLARED ID OF APPROPRIATE CLASS --> PROCEDURE ENTERUNDECL*) IF TYPES IN FIDCLS THEN LCP := UTYPPTR ELSE IF VARS IN FIDCLS THENþ�6 LCP := UVARPTR ELSE IF FIELD IN FIDCLS THEN LCP := UFLDPTR ELSE IF KONST IN FIDCLS THEN LCP := UCSTPTR ELSE IF PROC IN FIDCLS THEN LCP := UPRCPTR  ELSE LCP := UFCþ6TPTR; END; 1: FCP := LCP END (*SEARCHID*) ; PROCEDURE GETBOUNDS(FSP: STP; VAR FMIN,FMAX: INTEGER); (*GET INTERNAL BOUNDS OF SUBRANGE OR SCALAR TYPE*) (*ASSUME FSP<>INTPTR AND FSP<>REALPTR*) BEGIN FMIN := 0; FMAX := 0; IF FSP <>þRÉ NIL THEN WITH FSP^ DO IF FORM = SUBRANGE THEN BEGIN FMIN := MIN.IVAL; FMAX := MAX.IVAL END ELSE IF FSP = CHARPTR THEN BEGIN FMIN := ORDMINCHAR; FMAX := ORDMAXCHAR END ELSE IF þ¦”FCONST <> NIL THEN FMAX := FCONST^.VALUES.IVAL END (*GETBOUNDS*) ; FUNCTION ALIGNQUOT(FSP: STP): INTEGER; BEGIN ALIGNQUOT := 1; IF FSP <> NIL THEN WITH FSP^ DO CASE FORM OF SCALAR: IF FSP=INTPTR THEN Aþ;,LIGNQUOT := INTAL ELSE IF FSP=BOOLPTR THEN ALIGNQUOT := BOOLAL ELSE IF SCALKIND=DECLARED THEN ALIGNQUOT := INTAL ELSE IF FSP=CHARPTR THEN ALIGNQUOT := CHARAL ELSE IF FSP=REALPTþ‚YR THEN ALIGNQUOT := REALAL ELSE (*PARMPTR*) ALIGNQUOT := PARMAL; SUBRANGE: ALIGNQUOT := ALIGNQUOT(RANGETYPE); POINTER: ALIGNQUOT := ADRAL; POWER: ALIGNQUOT := SETAL; FILES: ALIGNQUOT := FILþ|FEAL; ARRAYS: ALIGNQUOT := ALIGNQUOT(AELTYPE); RECORDS: ALIGNQUOT := RECAL; VARIANT,TAGFLD: ERROR(501) END END (*ALIGNQUOT*); PROCEDURE ALIGN(FSP: STP; VAR FLC: INTEGER); VAR K,L: INTEGER; BEGIN K := Aþ�ìLIGNQUOT(FSP); L := FLC-1; FLC := L + K - (K + L) MOD K (*CORRECTION TO ALIGN (K + L) AS MOD ONLY TRUE FOR +VE INTS*) END (*ALIGN*); PROCEDURE GENLABEL(VAR NXTLAB: INTEGER); BEGIN INTLABEL := INTLABEL + 1; NXTLAB := INTLABEL ENDþVû (*GENLABEL*); PROCEDURE BLOCK(FSYS: SETOFSYS; FSY: SYMBOL; FPROCP: CTP; NOTEXTDEC,EXTN : BOOLEAN); VAR LSY: SYMBOL; TEST: BOOLEAN; PLOCFP,FLOCFP,LOCFP : EXTFILEP; RANDOMFLAG : BOOLEAN; PARMSUM,PARMNO : INTEGER; PROCEDURE SKIP(FSYS: SþFlETOFSYS); (*SKIP INPUT STRING UNTIL RELEVANT SYMBOL FOUND*) BEGIN IF NOT EOF(INPUT) THEN BEGIN WHILE NOT(SY IN FSYS) AND (NOT EOF(INPUT)) DO INSYMBOL; IF NOT (SY IN FSYS) THEN INSYMBOL END END (*SKIP*) ; PþÜBROCEDURE CONSTANT(FSYS: SETOFSYS; VAR FSP: STP; VAR FVALU: VALU); VAR LSP: STP; LCP: CTP; SIGN: (NONE,POS,NEG); LVP: CSP; I: 2..STRGLGTH; BEGIN LSP := NIL; FVALU.IVAL := 0; IF NOT(SY IN CONSTBEGSYS) THEN BEGIN ERROR(50); SþÜUKIP(FSYS+CONSTBEGSYS) END; IF SY IN CONSTBEGSYS THEN BEGIN IF SY = STRINGCONSTSY THEN BEGIN IF LGTH = 1 THEN LSP := CHARPTR ELSE BEGIN NEW(LSP,ARRAYS); þŒE WITH LSP^ DO BEGIN AELTYPE := CHARPTR; INXTYPE := NIL; SIZE := LGTH*CHARSIZE; FORM := ARRAYS  END END; FVALU := VAL; INSYMBOL END þâðELSE BEGIN SIGN := NONE; IF (SY = ADDOP) AND (OP IN [PLUS,MINUS]) THEN BEGIN IF OP = PLUS THEN SIGN := POS ELSE SIGN := NEG; INSYMBOL END; IF SY = IDENTþ7) THEN BEGIN SEARCHID([KONST],LCP); WITH LCP^ DO BEGIN LSP := IDTYPE; FVALU := VALUES END;  IF SIGN <> NONE THEN IF LSP = INTPTR THEN BEGIN IF SþgGIGN = NEG THEN FVALU.IVAL := -FVALU.IVAL END ELSE IF LSP = REALPTR THEN BEGIN IF SIGN = NEG THEN BEGIN NEW(LVP,REEL); þm» IF FVALU.VALP^.RVAL[1] = ' ' THEN LVP^.RVAL[1] := '+' ELSE LVP^.RVAL[1] := '-'; FOR I := 2 TO STRGLGTH DO LVP^.RVAL[I] :þšk= FVALU.VALP^.RVAL[I]; FVALU.VALP := LVP; END END ELSE ERROR(105); INSYMBOL; END ELSE þ¶¹ IF SY = INTCONST THEN BEGIN IF SIGN = NEG THEN VAL.IVAL := -VAL.IVAL; LSP := INTPTR; FVALU := VAL; INSYMBOL END ELSE IF SY = REALCONST THEN BEGIþ?ÈN IF SIGN = NEG THEN VAL.VALP^.RVAL[1] := '-'; LSP := REALPTR; FVALU := VAL; INSYMBOL END ELSE BEGIN ERROR(106); SKIP(FSYS) END END; IF NOT (SY IN FSYS) TþB¤HEN BEGIN ERROR(6); SKIP(FSYS) END END; FSP := LSP END (*CONSTANT*) ; FUNCTION EQUALBOUNDS(FSP1,FSP2: STP): BOOLEAN; VAR LMIN1,LMIN2,LMAX1,LMAX2: INTEGER; BEGIN IF (FSP1=NIL) OR (FSP2=NIL) THEN EQUALBOUNþ2ÔDS := TRUE ELSE BEGIN GETBOUNDS(FSP1,LMIN1,LMAX1); GETBOUNDS(FSP1,LMIN2,LMAX2); EQUALBOUNDS := (LMIN1=LMIN2) AND (LMAX1=LMAX2) END END (*EQUALBOUNDS*) ; FUNCTION COMPTYPES(FSP1,FSP2: STP) : BOOLEþr°AN; (*DECIDE WHETHER STRUCTURES POINTED AT BY FSP1 AND FSP2 ARE COMPATIBLE*) VAR NXT1,NXT2: CTP; COMP: BOOLEAN; LTESTP1,LTESTP2 : TESTP; BEGIN IF FSP1 = FSP2 THEN COMPTYPES := TRUE ELSE IF (FSP1 <> NIL) AND (FSP2þK <> NIL) THEN IF FSP1^.FORM = FSP2^.FORM THEN CASE FSP1^.FORM OF SCALAR: COMPTYPES := FALSE; (* IDENTICAL SCALARS DECLARED ON DIFFERENT LEVELS ARE NOT RECOGNIZED TO BE COMþ^’PATIBLE*) SUBRANGE: COMPTYPES := COMPTYPES(FSP1^.RANGETYPE,FSP2^.RANGETYPE); POINTER: BEGIN COMP := FALSE; LTESTP1 := GLOBTESTP; LTESTP2 := GLOBTESTP; þ­ WHILE LTESTP1 <> NIL DO WITH LTESTP1^ DO BEGIN IF (ELT1 = FSP1^.ELTYPE) AND (ELT2 = FSP2^.ELTYPE) THEN COMP := TRUE; þìZ LTESTP1 := LASTTESTP END; IF NOT COMP THEN BEGIN NEW(LTESTP1); WITH LTESTP1^ DO BEGIN ELT1 := FSP1^.ELTYPE; þüÍELT2 := FSP2^.ELTYPE; LASTTESTP := GLOBTESTP END; GLOBTESTP := LTESTP1; COMP := COMPTYPES(FSP1^.ELTYPE,FSP2^.ELTYPE) END; þ�Á COMPTYPES := COMP; GLOBTESTP := LTESTP2 END; POWER: COMPTYPES := COMPTYPES(FSP1^.ELSET,FSP2^.ELSET); ARRAYS: BEGIN COMP := COMPTYPES(FSP1^.AELTYPE,FSPþë`2^.AELTYPE) AND COMPTYPES(FSP1^.INXTYPE,FSP2^.INXTYPE); COMPTYPES := COMP AND EQUALBOUNDS(FSP1^.INXTYPE,FSP2^.INXTYPE) END; RECORDS: BEGIN NXT1 := FSþ|=P1^.FSTFLD; NXT2 := FSP2^.FSTFLD; COMP:=TRUE;  WHILE (NXT1 <> NIL) AND (NXT2 <> NIL) DO BEGIN COMP:=COMP AND COMPTYPES(NXT1^.IDTYPE,NXT2^.IDTYPE); NXT1 := NXT1^.NEXT; NXT2 := NXT2^.NEXT þ¤œ END; COMPTYPES := COMP AND (NXT1 = NIL) AND (NXT2 = NIL) AND(FSP1^.RECVAR = NIL)AND(FSP2^.RECVAR = NIL) END; (*IDENTICAL RECORDS ARE RECOGNIZED TO BE COMPATIBLE þ c IFF NO VARIANTS OCCUR*)  FILES: COMPTYPES := COMPTYPES(FSP1^.FILTYPE,FSP2^.FILTYPE) END (*CASE*) ELSE (*FSP1^.FORM <> FSP2^.FORM*) IF FSP1^.FORM = SUBRANGE THEN COMPTYPþ»zES := COMPTYPES(FSP1^.RANGETYPE,FSP2) ELSE IF FSP2^.FORM = SUBRANGE THEN COMPTYPES := COMPTYPES(FSP1,FSP2^.RANGETYPE) ELSE COMPTYPES := FALSE ELSE COMPTYPES := TRUE END (*COMPTYPES*) ; þF FUNCTION STRING(FSP: STP) : BOOLEAN; BEGIN STRING := FALSE; IF FSP <> NIL THEN IF FSP^.FORM = ARRAYS THEN IF COMPTYPES(FSP^.AELTYPE,CHARPTR) THEN STRING := TRUE END (*STRING*) ; PROCEDURE TYP(FSYS: SETOFSYS; VAR FSP: þgSTP; VAR FSIZE: ADDRRANGE); VAR LSP,LSP1,LSP2: STP; OLDTOP: DISPRANGE; LCP: CTP; LSIZE,DISPL: ADDRRANGE; LMIN,LMAX: INTEGER; PROCEDURE SIMPLETYPE(FSYS:SETOFSYS; VAR FSP:STP; VAR FSIZE:ADDRRANGE); VAR LSP,LSP1: STP; LCP,LCP1: þšíCTP; TTOP: DISPRANGE; LCNT: INTEGER; LVALU: VALU; BEGIN FSIZE := 1; IF NOT (SY IN SIMPTYPEBEGSYS) THEN BEGIN ERROR(1); SKIP(FSYS + SIMPTYPEBEGSYS) END; IF SY IN SIMPTYPEBEGSYS THEN BEGIN IF þÎSY = LPARENT THEN BEGIN TTOP := TOP; (*DECL. CONSTS LOCAL TO INNERMOST BLOCK*) WHILE DISPLAY[TOP].OCCUR <> BLCK DO TOP := TOP - 1; NEW(LSP,SCALAR,DECLARED); WITH LSP^ DO BEGIþ”N SIZE := INTSIZE; FORM := SCALAR; SCALKIND := DECLARED END; LCP1 := NIL; LCNT := 0; REPEAT INSYMBOL; IF SY = IDENT THEN BEGIN NEW(LCP,KONST); þ×H WITH LCP^ DO BEGIN NAME := ID; IDTYPE := LSP; NEXT := LCP1; VALUES.IVAL := LCNT; KLASS := KONST END; ENTERID(LCP); LCNT :þï = LCNT + 1; LCP1 := LCP; INSYMBOL END ELSE ERROR(2); IF NOT (SY IN FSYS + [COMMA,RPARENT]) THEN BEGIN ERROR(6); SKIP(FSYS + [COMMA,RPARENT]) END þ0È UNTIL SY <> COMMA; LSP^.FCONST := LCP1; TOP := TTOP; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END ELSE BEGIN IF SY = IDENT THEN BEGIN SEARCHID([þâTYPES,KONST],LCP); INSYMBOL; IF LCP^.KLASS = KONST THEN BEGIN NEW(LSP,SUBRANGE); WITH LSP^, LCP^ DO BEGIN RANGETYPE := IDTYPE; FORM := SUBRANGE;þ!% IF STRING(RANGETYPE) THEN BEGIN ERROR(148); RANGETYPE := NIL END; MIN := VALUES; SIZE := INTSIZE END;  IF SY = COLON THEþœœN INSYMBOL ELSE ERROR(5); CONSTANT(FSYS,LSP1,LVALU); LSP^.MAX := LVALU; IF LSP^.RANGETYPE <> LSP1 THEN ERROR(107) END ELSE þ–H BEGIN LSP := LCP^.IDTYPE; IF LSP <> NIL THEN FSIZE := LSP^.SIZE END END (*SY = IDENT*) ELSE BEGIN NEW(LSP,SUBRANGE); LSP^.FORM := SUBRANGE; þm CONSTANT(FSYS + [COLON],LSP1,LVALU); IF STRING(LSP1) THEN BEGIN ERROR(148); LSP1 := NIL END; WITH LSP^ DO BEGIN RANGETYPE:=LSP1; MIN:=LVALU; SIZE:=INTSIZE END; þì¢ IF SY = COLON THEN INSYMBOL ELSE ERROR(5); CONSTANT(FSYS,LSP1,LVALU); LSP^.MAX := LVALU; IF LSP^.RANGETYPE <> LSP1 THEN ERROR(107)  END; IF LSP <> NILþ· THEN WITH LSP^ DO IF FORM = SUBRANGE THEN IF RANGETYPE <> NIL THEN IF RANGETYPE = REALPTR THEN ERROR(399) ELSE IF MIN.IVAþâãL > MAX.IVAL THEN ERROR(102) END; FSP := LSP; IF NOT (SY IN FSYS) THEN BEGIN ERROR(6); SKIP(FSYS) END END ELSE FSP := NIL  END (*SIMPLETYPE*) ; PROCEDURE FIELDLIST(FSYS: þŸSETOFSYS; VAR FRECVAR: STP); VAR LCP,LCP1,NXT,NXT1: CTP; LSP,LSP1,LSP2,LSP3,LSP4: STP; MINSIZE,MAXSIZE,LSIZE: ADDRRANGE; LVALU: VALU; BEGIN NXT1 := NIL; LSP := NIL; IF NOT (SY IN (FSYS+[IDENT,CASESY])) THEN BEGINþþÕ ERROR(19); SKIP(FSYS + [IDENT,CASESY]) END; WHILE SY = IDENT DO BEGIN NXT := NXT1; REPEAT IF SY = IDENT THEN BEGIN NEW(LCP,FIELD); WITH LCP^ DO BEGIN NAME :=þ�d ID; IDTYPE := NIL; NEXT := NXT; KLASS := FIELD END; NXT := LCP; ENTERID(LCP); INSYMBOL END ELSE ERROR(2); IF NOT (SþÿiY IN [COMMA,COLON]) THEN BEGIN ERROR(6); SKIP(FSYS + [COMMA,COLON,SEMICOLON,CASESY]) END; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN INSYMþ­GBOL ELSE ERROR(5); TYP(FSYS + [CASESY,SEMICOLON],LSP,LSIZE); WHILE NXT <> NXT1 DO WITH NXT^ DO BEGIN ALIGN(LSP,DISPL); ÿP4COMPILE2.ûNNþmž IDTYPE := LSP; FLDADDR := DISPL; NXT := NEXT; DISPL := DISPL + LSIZE END; NXT1 := LCP; IF SY = SEMICOLON THEN BEGIN INSYMBOL;  IF NOT (SY IN [IDENT,CASþ²#ESY]) THEN BEGIN ERROR(19); SKIP(FSYS + [IDENT,CASESY]) END END END (*WHILE*); NXT := NIL; WHILE NXT1 <> NIL DO WITH NXT1^ DO BEGIN LCP := NEXT; NEXT := NXT; NXT := NXT1; NXT1 þп:= LCP END; IF SY = CASESY THEN BEGIN NEW(LSP,TAGFLD); WITH LSP^ DO BEGIN TAGFIELDP := NIL; FSTVAR := NIL; FORM:=TAGFLD END; FRECVAR := LSP; INSYMBOL; IF SY = IDENT THEN þÙÖ BEGIN NEW(LCP,FIELD); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; KLASS:=FIELD; NEXT := NIL; FLDADDR := DISPL END; ENTERID(LCP); INSYMBOL; þA± IF SY = COLON THEN INSYMBOL ELSE ERROR(5); IF SY = IDENT THEN BEGIN SEARCHID([TYPES],LCP1); LSP1 := LCP1^.IDTYPE;  IF LSP1 <> NIL THEN BEGIN ALIGN(LþPCP^.IDTYPE,DISPL); LCP^.FLDADDR := DISPL; DISPL := DISPL+LSP1^.SIZE; IF (LSP1^.FORM <= SUBRANGE) OR STRING(LSP1) THEN BEGIN IF COMPTYPES(REALPTR,LSP1) THEN ERþ ROR(109) ELSE IF STRING(LSP1) THEN ERROR(399); LCP^.IDTYPE := LSP1; LSP^.TAGFIELDP := LCP; END  ELSE ERROR(110); END; þÛ INSYMBOL; END ELSE BEGIN ERROR(2); SKIP(FSYS + [OFSY,LPARENT]) END END ELSE BEGIN ERROR(2); SKIP(FSYS + [OFSY,LPARENT]) END; LSP^.SIZE := DISPL; IF SY = OFSY THEN INþD–SYMBOL ELSE ERROR(8); LSP1 := NIL; MINSIZE := DISPL; MAXSIZE := DISPL; REPEAT LSP2 := NIL; IF NOT (SY IN [SEMICOLON,ENDSY]) THEN  BEGIN REPEAT CONSTANT(FSYS + [COMMA,COLON,LPARENT],LSP3,LVALUþqË); IF LSP^.TAGFIELDP <> NIL THEN IF NOT COMPTYPES(LSP^.TAGFIELDP^.IDTYPE,LSP3)THEN ERROR(111); NEW(LSP3,VARIANT); WITH LSP3^ DO BEGIN NXTVAR := LSP1; SUBVAR := LSP2; VARVAL þ›9:= LVALU; FORM := VARIANT END; LSP4 := LSP1; WHILE LSP4 <> NIL DO WITH LSP4^ DO BEGIN IF VARVAL.IVAL = LVALU.IVAL THEN ERROR(1þ†Ä78); LSP4 := NXTVAR END; LSP1 := LSP3; LSP2 := LSP3; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN INSYMBOþåKL ELSE ERROR(5); IF SY = LPARENT THEN INSYMBOL ELSE ERROR(9); FIELDLIST(FSYS + [RPARENT,SEMICOLON],LSP2); IF DISPL > MAXSIZE THEN MAXSIZE := DISPL; WHILE LSP3 <> NIL DO BEGIN LSP4 := LþÁáSP3^.SUBVAR; LSP3^.SUBVAR := LSP2; LSP3^.SIZE := DISPL; LSP3 := LSP4 END; IF SY = RPARENT THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [SEMICOLON]) THEN þ˜› BEGIN ERROR(6); SKIP(FSYS + [SEMICOLON]) END END ELSE ERROR(4); END;  TEST := SY <> SEMICOLON; IF NOT TEST THEN BEGIN DISPL := MINSIZE; þ¶ INSYMBOL END UNTIL TEST; DISPL := MAXSIZE; LSP^.FSTVAR := LSP1; END ELSE FRECVAR := NIL END (*FIELDLIST*) ; BEGIN (*TYP*) IF NOT (SY IN TYPEBEGSYS) THEN BEGIþÕ#N ERROR(10); SKIP(FSYS + TYPEBEGSYS) END; IF SY IN TYPEBEGSYS THEN BEGIN IF SY IN SIMPTYPEBEGSYS THEN SIMPLETYPE(FSYS,FSP,FSIZE) ELSE (*^*) IF SY = ARROW THEN BEGIN NEW(LSP,POINTER); FSP := LSP; þãd WITH LSP^ DO BEGIN ELTYPE := NIL; SIZE := PTRSIZE; FORM:=POINTER END; INSYMBOL; IF SY = IDENT THEN BEGIN PRTERR := FALSE; (*NO ERROR IF SEARCH NOT SUCCESSFUL*) þ  SEARCHID([TYPES],LCP); PRTERR := TRUE; IF LCP = NIL THEN (*FORWARD REFERENCED TYPE ID*)  BEGIN NEW(LCP,TYPES); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := LSP; þ¦® NEXT := FWPTR; KLASS := TYPES END; FWPTR := LCP END ELSE BEGIN IF LCP^.IDTYPE <> NIL THEN þ¯a IF LCP^.IDTYPE^.FORM = FILES THEN ERROR(108) ELSE LSP^.ELTYPE := LCP^.IDTYPE END; INSYMBOL; END ELSE ERROR(2); END þE¯ ELSE BEGIN IF SY = PACKEDSY THEN BEGIN INSYMBOL; IF NOT (SY IN TYPEDELS) THEN BEGIN ERROR(10); SKIP(FSYS + TYPEDELS) þ׆ END END; (*ARRAY*) IF SY = ARRAYSY THEN BEGIN INSYMBOL; IF SY = LBRACK THEN INSYMBOL ELSE ERROR(11); LSP1 := NIL; REPEAT NEW(LSP,ARRAYS); þ2{ WITH LSP^ DO BEGIN AELTYPE := LSP1; INXTYPE := NIL; FORM:=ARRAYS END; LSP1 := LSP; SIMPLETYPE(FSYS + [COMMA,RBRACK,OFSY],LSP2,LSIZE); LSP1^.SIZE := LSIþbêZE; IF LSP2 <> NIL THEN IF LSP2^.FORM <= SUBRANGE THEN BEGIN IF LSP2 = REALPTR THEN BEGIN ERROR(109); LSP2 := NIL END þp� ELSE IF LSP2 = INTPTR THEN BEGIN ERROR(149); LSP2 := NIL END; LSP^.INXTYPE := LSP2 END ELSE BEGIþ4N ERROR(113); LSP2 := NIL END; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = RBRACK THEN INSYMBOL ELSE ERROR(12); IF SY = OFSY THENþfœ INSYMBOL ELSE ERROR(8); TYP(FSYS,LSP,LSIZE); REPEAT WITH LSP1^ DO BEGIN LSP2 := AELTYPE; AELTYPE := LSP; IF INXTYPE <> NIL THEN þ<» BEGIN GETBOUNDS(INXTYPE,LMIN,LMAX);  IF AELTYPE = CHARPTR THEN LSIZE := CHARSIZE ELSE ALIGN(LSP,LSIZE); LSIZE := LSIZE*(LMAX - LMIN + 1); þßA SIZE := LSIZE END END; LSP := LSP1; LSP1 := LSP2 UNTIL LSP1 = NIL END ELSE (*RECORD*) IF SY = RECORDSYþÝ THEN BEGIN INSYMBOL;  OLDTOP := TOP; IF TOP < DISPLIMIT THEN BEGIN TOP := TOP + 1; WITH DISPLAY[TOP] DO BEGIN FNAMþñE := NIL; FLABEL := NIL; OCCUR := REC END END ELSE ERROR(250); DISPL := 0; þòå FIELDLIST(FSYS-[SEMICOLON]+[ENDSY],LSP1); NEW(LSP,RECORDS); WITH LSP^ DO BEGIN FSTFLD := DISPLAY[TOP].FNAME; RECVAR := LSP1; SIZE := DISPL; FORM := RECORDS þ0( END; TOP := OLDTOP; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13) END ELSE (*SET*) IF SY = SETSY THEN BEGIN INSYMBOL; þMž  IF SY = OFSY THEN INSYMBOL ELSE ERROR(8); SIMPLETYPE(FSYS,LSP1,LSIZE); IF LSP1 <> NIL THEN IF LSP1^.FORM > SUBRANGE THEN BEGIN ERROR(1þ”á15); LSP1 := NIL END ELSE IF LSP1 = REALPTR THEN ERROR(114); NEW(LSP,POWER); WITH LSP^ DO BEGIN ELSET:=LSP1; SIZE:=SETSIZE; FORMþëì:=POWER END; END ELSE BEGIN IF SY = RANDOMSY THEN BEGIN INSYMBOL; RANDOMFLAG := TRUE END ELSE RANDþßâOMFLAG := FALSE; (*FILE*) IF SY = FILESY THEN BEGIN INSYMBOL; IF SY = OFSY THEN INSYMBOL ELSE ERROR(8); IF SY<> FILESY THEN TYP(FSYS,LSP1,LSIZE) þ(t ELSE BEGIN ERROR(121); SKIP(FSYS+TYPEBEGSYS) END; NEW(LSP,FILES); WITH LSP^ DO BEGIN FILTYPE:=LSP1; FORM:=FILES; SIZE := LSþ‰IZE; RANDOMFILE := RANDOMFLAG END END; END; FSP := LSP END; IF NOT (SY IN FSYS) THEN BEGIN ERROR(6); SKIP(FSYS) END END ELSE FSP := NIL; þÞ; IF FSP = NIL THEN FSIZE := 1 ELSE FSIZE := FSP^.SIZE END (*TYP*) ; PROCEDURE LABELDECLARATION; VAR LLP: LBP; REDEF: BOOLEAN; LBNAME: INTEGER; BEGIN REPEAT IF SY = INTCONST THEN WITH DISPLAY[TOP] DO BEþôçGIN LLP := FLABEL; REDEF := FALSE; WHILE (LLP <> NIL) AND NOT REDEF DO IF LLP^.LABVAL <> VAL.IVAL THEN LLP := LLP^.NEXTLAB ELSE BEGIN REDEF := TRUE; ERROR(166) END;  IF NOT REDEF þÒæTHEN BEGIN NEW(LLP); WITH LLP^ DO BEGIN LABVAL := VAL.IVAL; GENLABEL(LBNAME); DEFINED := FALSE; NEXTLAB := FLABEL; LABNAME := LBNAME END; FLABþžEL := LLP END; INSYMBOL END ELSE ERROR(15); IF NOT ( SY IN FSYS + [COMMA, SEMICOLON] ) THEN BEGIN ERROR(6); SKIP(FSYS+[COMMA,SEMICOLON]) END; TEST := SY <> COMMA; IF NOT TEþ€,ST THEN INSYMBOL UNTIL TEST; IF SY = SEMICOLON THEN INSYMBOL ELSE ERROR(14) END (* LABELDECLARATION *) ; PROCEDURE CONSTDECLARATION; VAR LCP: CTP; LSP: STP; LVALU: VALU; BEGIN IF SY <> IDENT THEN BEGIN ERROR(2);þN) SKIP(FSYS + [IDENT]) END; WHILE SY = IDENT DO BEGIN NEW(LCP,KONST); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; NEXT := NIL; KLASS:=KONST END; INSYMBOL;  IF (SY = RELOP) AND (OP = EQOP) THEN INSYMBOþœ}L ELSE ERROR(16); CONSTANT(FSYS + [SEMICOLON],LSP,LVALU); ENTERID(LCP); LCP^.IDTYPE := LSP; LCP^.VALUES := LVALU; IF SY = SEMICOLON THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT]) THEN þ7° BEGIN ERROR(6); SKIP(FSYS + [IDENT]) END END ELSE ERROR(14) END END (*CONSTDECLARATION*) ; PROCEDURE TYPEDECLARATION; VAR LCP,LCP1,LCP2: CTP; LSP: STP; LSIZE: ADDRRANGE; BEGIN IF SY <> IDþŸ”ENT THEN BEGIN ERROR(2); SKIP(FSYS + [IDENT]) END; WHILE SY = IDENT DO BEGIN NEW(LCP,TYPES); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; KLASS := TYPES END; INSYMBOL; IF (SY = RELOP) AND (OPþÍ« = EQOP) THEN INSYMBOL ELSE ERROR(16); TYP(FSYS + [SEMICOLON],LSP,LSIZE); ENTERID(LCP); LCP^.IDTYPE := LSP; (*HAS ANY FORWARD REFERENCE BEEN SATISFIED:*) LCP1 := FWPTR; WHILE LCP1 <> NIL DO þâ} BEGIN IF LCP1^.NAME = LCP^.NAME THEN BEGIN LCP1^.IDTYPE^.ELTYPE := LCP^.IDTYPE; IF LCP1 <> FWPTR THEN LCP2^.NEXT := LCP1^.NEXT ELSE FWPTR := LCP1^.NEXT; þ/ý END; LCP2 := LCP1; LCP1 := LCP1^.NEXT END; IF SY = SEMICOLON THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT]) THEN BEGIN ERROR(6); SKIP(FSYS + [IDENT]) END ENDþŒ„ ELSE ERROR(14) END; IF FWPTR <> NIL THEN BEGIN ERROR(117); WRITELN(OUTPUT); REPEAT WRITELN(OUTPUT,' TYPE-ID ',FWPTR^.NAME); FWPTR := FWPTR^.NEXT UNTIL FWPTR = NIL; IF NOT EOL THEN WþÈRITE(OUTPUT,' ': CHCNT+16) END END (*TYPEDECLARATION*) ; PROCEDURE VARDECLARATION; VAR LCP,NXT: CTP; LSP: STP; LSIZE: ADDRRANGE; BEGIN NXT := NIL; REPEAT REPEAT IF SY = IDENT THEN BEGIN NEW(LCPþ”A,VARS); WITH LCP^ DO BEGIN NAME := ID; NEXT := NXT; KLASS := VARS; IDTYPE := NIL; VKIND := ACTUAL; VLEV := LEVEL END; ENTERID(LCP); NXT := LCP; INSYMBOþLAL; END ELSE ERROR(2); IF NOT (SY IN FSYS + [COMMA,COLON] + TYPEDELS) THEN BEGIN ERROR(6); SKIP(FSYS+[COMMA,COLON,SEMICOLON]+TYPEDELS) END; TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL þNÜ UNTIL TEST; IF SY = COLON THEN INSYMBOL ELSE ERROR(5); TYP(FSYS + [SEMICOLON] + TYPEDELS,LSP,LSIZE); IF LSP^.FORM = FILES THEN (*MACHINE DEPENDENT*) IF LSIZE > 510 THEN ERROR(399) ELSE Iþ”úF LSP^.RANDOMFILE THEN BEGIN IF LSIZE > 126 THEN LSIZE := 512 ELSE LSIZE := 128  END; WHILE NXT <> NIL DO WITH NXT^ DO BEGIN ALIGN(LSP,LC); IF LSþñ?P^.FORM = FILES THEN BEGIN LC := LC+4; (*SPACE FOR FLAGS*) LOCFP := FEXTFILEP; TEST := TRUE; WHILE ((LOCFP <> NIL) AND TEST) DO IF LOCFP^.FILENAME = NXT^.NAME THEN TEST :=þªz FALSE ELSE LOCFP := LOCFP^.NEXTFILE; IF LOCFP <> NIL THEN (*DEAL WITH EXTERNAL FILES*) LOCFP^.FTYPE := NXT ELSE (* IT WAS AN INTERNAL þþFILE*) BEGIN NEW(PLOCFP); WITH PLOCFP^ DO BEGIN FILENAME := NXT^.NAME; NEXTFILE := FLOCFP; FTYPE := Nþ ­XT; END; FLOCFP := PLOCFP END;  END; IDTYPE := LSP; VADDR := LC; LC := LC + LSIZE; NXT := NEXT END; IF SY = SEMICOLONþÚ4 THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT]) THEN BEGIN ERROR(6); SKIP(FSYS + [IDENT]) END END ELSE ERROR(14) UNTIL (SY <> IDENT) AND NOT (SY IN TYPEDELS); IF FWPTR <> NIL THEN þ ¦ BEGIN ERROR(117); WRITELN(OUTPUT); REPEAT WRITELN(OUTPUT,' TYPE-ID ',FWPTR^.NAME);  FWPTR := FWPTR^.NEXT UNTIL FWPTR = NIL; IF NOT EOL THEN WRITE(OUTPUT,' ': CHCNT+16) END END (*VARDECLARATION*) ; þ ç PROCEDURE PROCDECLARATION(FSY: SYMBOL); VAR OLDLEV: 0..MAXLEVEL; LSY: SYMBOL; LCP,LCP1: CTP; LSP: STP; FORW: BOOLEAN; OLDTOP: DISPRANGE; PARCNT: INTEGER; LLC,LCM: ADDRRANGE; LBNAME: INTEGER; MARKP: ^INTEGER; PROCEDURE PARAþÈlMETERLIST(FSY: SETOFSYS; VAR FPAR: CTP); VAR LCP,LCP1,LCP2,LCP3: CTP; LSP: STP; LKIND: IDKIND; LLC: ADDRRANGE; COUNT,LSIZE: INTEGER; BEGIN LCP1 := NIL; IF NOT (SY IN FSY + [LPARENT]) THEN BEGIN ERROR(7); SKIP(FSYS þ€–+ FSY + [LPARENT]) END; IF SY = LPARENT THEN BEGIN IF FORW THEN ERROR(119); INSYMBOL; IF NOT (SY IN [IDENT,VARSY,PROCSY,FUNCSY]) THEN BEGIN ERROR(7); SKIP(FSYS + [IDENT,RPARENT]) END; WHILþ*TE SY IN [IDENT,VARSY,PROCSY,FUNCSY] DO BEGIN IF SY = PROCSY THEN BEGIN ERROR(399); REPEAT INSYMBOL; IF SY = IDENT THEN BEGIN NEW(LCP,PROC,DECLARþÚrED,FORMAL); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; NEXT := LCP1; PFLEV := LEVEL (*BEWARE OF PARAMETER PROCEDURES*); KLASS:=PROC;PFDECKIþö�ND:=DECLARED;PFKIND:=FORMAL END;  ENTERID(LCP); LCP1 := LCP; ALIGN(PARMPTR,LC); (*LC := LC + SOME SIZE *) þÅX INSYMBOL END ELSE ERROR(2); IF NOT (SY IN FSYS + [COMMA,SEMICOLON,RPARENT]) THEN BEGIN ERROR(7);SKIP(FSYS+[COMMA,SEMICOLON,RPARENT])END UþpWNTIL SY <> COMMA END  ELSE BEGIN IF SY = FUNCSY THEN BEGIN ERROR(399); LCP2 := NIL; REPEAT INSYMBOL; IF SY = IDENþ'wT THEN BEGIN NEW(LCP,FUNC,DECLARED,FORMAL); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; NEXT := LCP2; PFLEV := LEVEL (*BEWARE PARAþ“M FUNCS*);  KLASS:=FUNC;PFDECKIND:=DECLARED; PFKIND:=FORMAL END; ENTERID(LCP); LCP2 := LCP; þ. ALIGN(PARMPTR,LC); (*LC := LC + SOME SIZE*) INSYMBOL; END; IF NOT (SY IN [COMMA,COLON] + FSYS) THEN þ�† BEGIN ERROR(7);SKIP(FSYS+[COMMA,SEMICOLON,RPARENT]) END UNTIL SY <> COMMA; IF SY = COLON THEN BEGIN INSYMBOL; IF SY = IþjÐDENT THEN BEGIN SEARCHID([TYPES],LCP); LSP := LCP^.IDTYPE; IF LSP <> NIL THEN IF NOT(LSP^.FORM IN[SCALAR,SUBRANGE,POINTER]) þþH  THEN BEGIN ERROR(120); LSP := NIL END; LCP3 := LCP2; WHILE LCP2 <> NIL DO BEGIN LCP2^.IDTYPE := LSP; LCP := LCP2; þ·¹ LCP2 := LCP2^.NEXT END; LCP^.NEXT := LCP1; LCP1 := LCP3; INSYMBOL END ELSE ERþ‰\ROR(2); IF NOT (SY IN FSYS + [SEMICOLON,RPARENT]) THEN BEGIN ERROR(7);SKIP(FSYS+[SEMICOLON,RPARENT])END END ELSE ERROR(5) END þIA ELSE BEGIN IF SY = VARSY THEN BEGIN LKIND := FORMAL; INSYMBOL END ELSE LKIND := ACTUAL; LCP2 := NIL;  þ�N COUNT := 0; REPEAT IF SY = IDENT THEN BEGIN NEW(LCP,VARS); WITH LCP^ DO BEGIN NAME:=ID; IDTYPE:=NIL; KLASS:þvÉ=VARS; VKIND := LKIND; NEXT := LCP2; VLEV := LEVEL; END; ENTERID(LCP); LCP2 := LCP; COUNT := COUNT+1;  þ > INSYMBOL; END; IF NOT (SY IN [COMMA,COLON] + FSYS) THEN BEGIN ERROR(7);SKIP(FSYS+[COMMA,SEMICOLON,RPARENT]) END; TEST :þÕ= SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN BEGIN INSYMBOL; IF SY = IDENT THEN þ©± BEGIN SEARCHID([TYPES],LCP); LSP := LCP^.IDTYPE; LSIZE := PTRSIZE; IF LSP <> NIL THEN IF LKIND=ACTUAL THEN þ¬� IF LSP^.FORM<=POWER THEN LSIZE := LSP^.SIZE ELSE IF LSP^.FORM=FILES THEN ERROR(121); ALIGN(PARMPTR,LSIZE);  LCP3 := LCP2; þ1° ALIGN(PARMPTR,LC); LC := LC+COUNT*LSIZE; LLC := LC; WHILE LCP2 <> NIL DO BEGIN LCP := LCP2; þ– WITH LCP2^ DO BEGIN IDTYPE := LSP; LLC := LLC-LSIZE; VADDR := LLC; END; þA/ LCP2 := LCP2^.NEXT END; LCP^.NEXT := LCP1; LCP1 := LCP3; INSYMBOL END þ£ù ELSE ERROR(2); IF NOT (SY IN FSYS + [SEMICOLON,RPARENT]) THEN BEGIN ERROR(7);SKIP(FSYS+[SEMICOLON,RPARENT])END  END ELSE ERROR(5); þÄË END; END; IF SY = SEMICOLON THEN BEGIN INSYMBOL; IF NOT (SY IN FSYS + [IDENT,VARSY,PROCSY,FUNCSY]) THEN BEGIN ERROR(7); SKIP(FSYS + [IDENT,RPARENT])END þQ× END END (*WHILE*) ; IF SY = RPARENT THEN BEGIN INSYMBOL; IF NOT (SY IN FSY + FSYS) THEN BEGIN ERROR(6); SKIP(FSY + FSYS) END END ELSE ERROR(4þ¥Y); LCP3 := NIL; (*REVERSE POINTERS AND RESERVE LOCAL CELLS FOR COPIES OF MULTIPLE VALUES*) WHILE LCP1 <> NIL DO WITH LCP1^ DO BEGIN LCP2 := NEXT; NEXT := LCP3; þ ~ IF KLASS = VARS THEN IF IDTYPE <> NIL THEN IF (VKIND=ACTUAL)AND(IDTYPE^.FORM>POWER) THEN BEGIN ALIGN(IDTYPE,LC); VADDR := LC; LC := LC+IDþEÙTYPE^.SIZE; END; LCP3 := LCP1; LCP1 := LCP2 END; FPAR := LCP3 END ELSE FPAR := NIL END (*PARAMETERLIST*) ; BEGIN (*PROCDECLARATION*) LLC := LC; LC :=þV˜ LCAFTERMARKSTACK; FORW := FALSE; IF SY = IDENT THEN BEGIN SEARCHSECTION(DISPLAY[TOP].FNAME,LCP); (*DECIDE WHETHER FORW.*) IF LCP <> NIL THEN BEGIN IF LCP^.KLASS = PROC THEN FORW := LCP^.FORWDECL þ–¨AND(FSY = PROCSY)AND(LCP^.PFKIND = ACTUAL) ELSE IF LCP^.KLASS = FUNC THEN FORW:=LCP^.FORWDECL AND(FSY=FUNCSY)AND(LCP^.PFKIND=ACTUAL) ELSE FORW := FALSE; IF NOT FORW THEN ERROR(160) þ3 END; IF NOT FORW THEN BEGIN IF FSY = PROCSY THEN NEW(LCP,PROC,DECLARED,ACTUAL) ELSE NEW(LCP,FUNC,DECLARED,ACTUAL); WITH LCP^ DO BEGIN NAME := ID; IDTYPE := NIL; EXTDEC := FAþ¢¶LSE; EXTERN := FALSE; PFLEV := LEVEL; GENLABEL(LBNAME); PFDECKIND := DECLARED; PFKIND := ACTUAL; PFNAME := LBNAME; IF FSY = PROCSY THEN KLASS := PROC ELSE KLASS := FUNC þî< END; ENTERID(LCP) END ELSE BEGIN LCP1 := LCP^.NEXT; WHILE LCP1 <> NIL DO BEGIN WITH LCP1^ DO IF KLASS = VARS THEN IF þ¨+IDTYPE <> NIL THEN BEGIN LCM := VADDR + IDTYPE^.SIZE; IF LCM > LC THEN LC := LCM END; LCP1 := LCP1^.NEXT END END; INSYMBOL þŠA END ELSE BEGIN ERROR(2); LCP := UFCTPTR END; OLDLEV := LEVEL; OLDTOP := TOP; IF LEVEL < MAXLEVEL THEN LEVEL := LEVEL + 1 ELSE ERROR(251); IF TOP < DISPLIMIT THEN BEGIN TOP := TOP + 1; WITH DISPLAY[TOþ·6P] DO BEGIN IF FORW THEN FNAME := LCP^.NEXT ELSE FNAME := NIL; FLABEL := NIL; OCCUR := BLCK END END ELSE ERROR(250); IF FSY = PROCSY THEN BEGIN PARAþòÍMETERLIST([SEMICOLON],LCP1); IF NOT FORW THEN LCP^.NEXT := LCP1 END ELSE BEGIN PARAMETERLIST([SEMICOLON,COLON],LCP1); IF NOT FORW THEN LCP^.NEXT := LCP1; IF SY = COLON THEN BEGIN INSYMBOL; þÛ‹ IF SY = IDENT THEN BEGIN IF FORW THEN ERROR(122); SEARCHID([TYPES],LCP1); LSP := LCP1^.IDTYPE; LCP^.IDTYPE := LSP; IF LSP <> NIL THEN IF þhaNOT (LSP^.FORM IN [SCALAR,SUBRANGE,POINTER]) THEN BEGIN ERROR(120); LCP^.IDTYPE := NIL END; INSYMBOL END ELSE BEGIN ERROR(2); SKIP(FSYS + [SEMICOLON]) END END ELSE þÝ[ IF NOT FORW THEN ERROR(123) END; IF SY = SEMICOLON THEN INSYMBOL ELSE ERROR(14); IF SY = EXTRNSY THEN BEGIN WITH LCP^ DO BEGIN EXTDEC := TRUE; IF PRCODE THEN þ¸7 BEGIN WRITELN(PRR); WRITELN(PRR,' .EXTN ?',NAME); WRITELN(PRR);  WRITELN(PRR,'L',' ',PFNAME:4,':','?':3,NAME); END; INSYMBOL; IF SY =SEMICOLON THEN INSYMBOL ELSE ERROR(14); ENþ»ÂD END ELSE IF SY = FORWARDSY THEN BEGIN IF FORW THEN ERROR(161) ELSE LCP^.FORWDECL := TRUE; INSYMBOL; IF SY = SEMICOLON THEN INSYMBOL ELSE ERROR(14); IF NOT (SY IN FSYS) THEN þÖö BEGIN ERROR(6); SKIP(FSYS) END END ELSE BEGIN LCP^.FORWDECL := FALSE; MARK(MARKP); REPEAT BLOCK(FSYS,SEMICOLON,LCP,TRUE,NOT(NOTEXTDEC)); IF SY = SEMICOLON THEN BEGIN INSYMBOL; Iþ‰4F NOT (SY IN [BEGINSY,PROCSY,FUNCSY]) THEN BEGIN ERROR(6); SKIP(FSYS) END END ELSE IF NOT ((SY =PERIOD) AND EXTN) THEN ERROR(14) UNTIL ((SY IN [BEGINSY,PROCSY,FUNCSY]) OR EOF(INPUT)) OR ((SY=PERþ1úIOD) AND EXTN); RELEASE(MARKP); (* RETURN LOCAL ENTRIES ON RUNTIME HEAP *) END; LEVEL := OLDLEV; TOP := OLDTOP; LC := LLC; END (*PROCDECLARATION*) ; PROCEDURE BODY(FSYS: SETOFSYS); CONST CSTOCCMAX=65; CIXMAX=1000; þ™Õ TYPE OPRANGE = 0..63; VAR LLCP:CTP; SAVEID:ALPHA; CSTPTR: ARRAY [1..CSTOCCMAX] OF CSP; CSTPTRIX: 0..CSTOCCMAX; (*ALLOWS REFERENCING OF NONINTEGER CONSTANTS BY AN INDEX (INSTEAD OF A POINTER), WHICþU}H CAN BE STORED IN THE P2-FIELD OF THE INSTRUCTION RECORD UNTIL WRITEOUT. --> PROCEDURE LOAD, PROCEDURE WRITEOUT*) I, ENTNAME, SEGSIZE: INTEGER; STACKTOP, TOPNEW, TOPMAX: INTEGER; LCMAX,LLC1: ADDRRANGE; LþåCP: CTP; LLP: LBP; PROCEDURE MES(I: INTEGER); BEGIN TOPNEW := TOPNEW + CDX[I]*MAXSTACK; IF TOPNEW > TOPMAX THEN TOPMAX := TOPNEW END; PROCEDURE PUTIC; BEGIN IF IC MOD 10 = 0 THEN WRITELN(PRR,'I',' ',IC:5) EþxñND; PROCEDURE GEN0(FOP: OPRANGE); BEGIN IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[FOP]:4) END; IC := IC + 1; MES(FOP) END (*GEN0*) ; PROCEDURE GEN1(FOP: OPRANGE; FP2: INTEGER); VAR K: INTEGER; BEGINþ;¹ IF PRCODE THEN BEGIN PUTIC; WRITE(PRR,MN[FOP]:4); IF FOP = 30 THEN BEGIN WRITELN(PRR,SNA[FP2]:12); TOPNEW := TOPNEW + PDX[FP2]*MAXSTACK; IF TOPNEW > TOPMAX THEN TOPMAX := TOPNEW þì END  ELSE BEGIN IF FOP = 38 THEN BEGIN WRITELN(PRR); WRITE(PRR,' .TXT ','"'); WITH CSTPTR[FP2]^ DO BEGIN FOR K := 1 TOþC SLGTH DO WRITE(PRR,SVAL[K]:1); FOR K := SLGTH+1 TO STRGLGTH DO WRITE(PRR,' '); END; WRITELN(PRR,'"') END ELSE IF FOP = 42 THEN WRITELN(PRR,CHR(FP2)) þ=®  ELSE WRITELN(PRR,FP2:12); MES(FOP) END END; IC := IC + 1 END (*GEN1*) ; PROCEDURE GEN2(FOP: OPRANGE; FP1,FP2: INTEGER); VAR K,H,M : INTEGER; BEGIN IF PRCODE þÁ†THEN BEGIN PUTIC; IF ((FOP=51) AND (FP1=5)) THEN BEGIN FOR K := 1 TO 4 DO BEGIN WRITE(PRR,' .SW',K:1,'=':2,' '); FOR H := 0 TO 15 DO þô»  BEGIN M := (K-1)*16+H; WITH CSTPTR[FP2]^ DO IF M IN PVAL THEN WRITE(PRR,'1':1) ELSE WRITE(PRR,'0':1) þ/ END; WRITELN(PRR) END END; WRITE(PRR,MN[FOP]:4); CASE FOP OF 45,50,54,56: WRITELN(PRR,' ',FP1:3,FP2:8);  47,4þ°8,49,52,53,55: BEGIN WRITE(PRR,CHR(FP1)); IF CHR(FP1) = 'M' THEN WRITE(PRR,FP2:11); WRITELN(PRR) END; 51: CASE FP1 OF 1: WRITELN(PRR,'I',' 'þí>,FP2); 2: BEGIN WRITE(PRR,'R',' '); WITH CSTPTR[FP2]^ DO FOR K := 1 TO STRGLGTH DO WRITE(PRR,RVAL[K]); WRITELN(PRR) END;  3: WRITþ‘´ELN(PRR,'B',' ',FP2); 4: WRITELN(PRR,'N'); 6: WRITELN(PRR,'C','''':2,CHR(FP2),''''); 5: BEGIN WRITE(PRR,'(':2,' '); WRITE(PRR,'W1 W2 W3 W4'); WRITELN(PRR,')':2) þŸ END END END; END; IC := IC + 1; MES(FOP) END (*GEN2*) ; PROCEDURE GENTYPINDICATOR(FSP: STP); BEGIN IF FSP<>NIL THEN WITH FSP^ DO CASE FORM OF þ-t SCALAR: IF FSP=INTPTR THEN WRITE(PRR,'I') ELSE IF FSP=BOOLPTR THEN WRITE(PRR,'B') ELSE IF FSP=CHARPTR THEN WRITE(PRR,'C') ELSE þ¸ IF SCALKIND = DECLARED THEN WRITE(PRR,'I') ELSE WRITE(PRR,'R'); SUBRANGE: GENTYPINDICATOR(RANGETYPE); POINTER: WRITE(PRR,'A');  POWER: WRITE(PRR,'S'); þV] RECORDS,ARRAYS: WRITE(PRR,'M'); FILES,TAGFLD,VARIANT: ERROR(500) END END (*TYPINDICATOR*); PROCEDURE GEN0T(FOP: OPRANGE; FSP: STP); BEGIN IF PRCODE THEN BEGIN PUTIC; WRITE(PRR,MN[þ~;FOP]:4); GENTYPINDICATOR(FSP); WRITELN(PRR); END; IC := IC + 1; MES(FOP) END (*GEN0T*); PROCEDURE GEN1T(FOP: OPRANGE; FP2: INTEGER; FSP: STP);  BEGIN IF PRCODE THEN BEGIN PUTIC; þ[E WRITE(PRR,MN[FOP]:4); GENTYPINDICATOR(FSP); WRITELN(PRR,FP2:11) END; IC := IC + 1; MES(FOP) END (*GEN1T*); PROCEDURE GEN2T(FOP: OPRANGE; FP1,FP2: INTEGER; FSP: STP); BEGIN IF þù�PRCODE THEN BEGIN PUTIC; WRITE(PRR,MN[FOP]: 4); GENTYPINDICATOR(FSP); WRITELN(PRR,FP1:3,FP2:8); END; IC := IC + 1; MES(FOP)  END (*GEN2T*); PROCEDURE LOAD; BEGIN WITHþžd GATTR DO IF TYPTR <> NIL THEN BEGIN CASE KIND OF CST: IF (TYPTR^.FORM = SCALAR) AND (TYPTR <> REALPTR) THEN IF TYPTR = BOOLPTR THEN GEN2(51(*LDC*),3,CVAL.IVAL) þU´ ELSE IF TYPTR=CHARPTR THEN GEN2(51(*LDC*),6,CVAL.IVAL) ELSE GEN2(51(*LDC*),1,CVAL.IVAL) ELSE IF TYPTR = NILPTR THEN þ�SGEN2(51(*LDC*),4,0) ELSE IF CSTPTRIX >= CSTOCCMAX THEN ERROR(254) ELSE BEGIN CSTPTRIX := CSTPTRIX + 1; CSTPTR[CSTPTRIþ±EX] := CVAL.VALP; IF TYPTR = REALPTR THEN GEN2(51(*LDC*),2,CSTPTRIX) ELSE GEN2(51(*LDC*),5,CSTPTRIX) þÔb END; VARBL: CASE ACCESS OF DRCT: IF VLEVEL<=1 THEN GEN1T(39(*LDO*),DPLMT,TYPTR) ELSE GEN2T(54(*LOD*),LEVEL-VLEVEL,DPLMT,TYPTR); þG INDRCT: GEN1T(35(*IND*),IDPLMT,TYPTR); INXD: ERROR(400) END; EXPR:  END; KIND := EXPR END END (*LOAD*) ; PROCEDURE STORE(VAR FATþR NIL THEN CASE ACCESS OF DRCT: IF VLEVEL <= 1 THEN GEN1T(43(*SRO*),DPLMT,TYPTR) ELSE GEN2T(56(*STR*),LEVEL-VLEVEL,DPLMT,TYPTR); þ; INDRCT: IF IDPLMT <> 0 THEN ERROR(400) ELSE GEN0T(26(*STO*),TYPTR); INXD: ERROR(400) END  END (*STORE*) ; PROCEDURE LOADADDRESS; BEGIN WITH GATTR DO IF TYPTR <> NIL THEþtÉN BEGIN CASE KIND OF CST: IF STRING(TYPTR) THEN IF CSTPTRIX >= CSTOCCMAX THEN ERROR(254) ELSE BEGIN CSTPTRIX := CSTPTRIX + 1; þ¯' CSTPTR[CSTPTRIX] := CVAL.VALP; GEN1(38(*LCA*),CSTPTRIX)  END ELSE ERROR(400); VARBL: CASE ACCESS OF DRCT: IF VLEVELþçJ <= 1 THEN GEN1(37(*LAO*),DPLMT) ELSE GEN2(50(*LDA*),LEVEL-VLEVEL,DPLMT); INDRCT: IF IDPLMT <> 0 THEN GEN1T(34(*INC*),IDPLMT,NILPTR); INXDþ¯w: ERROR(400) END; EXPR: ERROR(400) END; KIND := VARBL; ACCESS := INDRCT; IDPLMT := 0 END END (*LOADADDRESS*) ; PROCEDURE GENFJP(FADDR: INTEGER); BEGIN LOAþ÷ƒD; IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> BOOLPTR THEN ERROR(144); IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[33]:4,'L':7,' ',FADDR:4) END; IC := IC + 1; MES(33) END (*GENFJP*) ; PROCEDURE GENUJPXJP(FOP:þv> OPRANGE; FP2: INTEGER); BEGIN IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR, MN[FOP]:4, 'L':7,' ',FP2:4) END; IC := IC + 1; MES(FOP) END (*GENUJPENT*); PROCEDURE GENCUPENT(FOP: OPRANGE; FP1,FP2: INTEGER); BEGIN þrD IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[FOP]:4,FP1:4,'L':3,' ',FP2:4) END; IC := IC + 1; MES(FOP) END; PROCEDURE CHECKBNDS(FSP: STP); VAR LMIN,LMAX: INTEGER; BEGIN IF FSþ ?P <> NIL THEN IF FSP <> INTPTR THEN IF FSP <> REALPTR THEN  IF FSP^.FORM <= SUBRANGE THEN BEGIN GETBOUNDS(FSP,LMIN,LMAX); GEN2T(45(*CHK*),LMIN,LMAX,FSP) þÀ(END END (*CHECKBNDS*); PROCEDURE PUTLABEL(LABNAME: INTEGER); BEGIN IF PRCODE THEN WRITELN(PRR, 'L',' ', LABNAME:4,':') END (*PUTLABEL*); PROCEDURE OPENFILES(LOCFP : EXTFILEP); BEGIN WHILE LOCFP <> NIL DO þù]0 WITH LOCFP^ DO BEGIN IF PRCODE THEN BEGIN PUTIC; WRITELN(PRR,MN[38]:4); WRITELN(PRR,' .TXT ','"',FILENAME,' ':8,'"'); IC := IC+1; MES(38) END; ÿR2SMISC.SRû­U,þP .TITL R2SMISC ; VARIOUS OTHER OPERATIONS FOR THE P-CODE INTERPRETER .ENT PIXA,PSTP,PHLT,PNON .ENT PORD,PORDA,PORDC,PCHR,PORDB,PORDI .ENT PSTOC,PINDC .EXTN MPY .EXTN PUNDF .EXTD LHBNP,RHBNP .NREL PINDC: POP1 1 ; B.AD FROM STACK ADDZR 1,2 ; þUADD Q FIELD..SET CARRY LDA 1,0,2 ; GET HOLD OF BYTE PAIR LDA 0,RHBNP ; GET MASK MOV 0,0,SNC ; WHICH BYTE REQD ? MOVS 1,1 ; LEFT ANDS 1,0 ; MASK PUSH1 0 ; BYTE TO STACK NEXT PSTOC: POP1 1 ;CHAR FROM STACK LHB POP1 2 ; BYTE DESTINATION LDA þØÊ0,LHBNP ; GET MASK AND 0,1 MOVZR 2,2,SNC ; MAKE WD ADDRESS - WHICH HALF ? MOVS 0,0,SKP ; LH MOVS 1,1 ; RH LDA 3,0,2 ; GET EXISTING CONTENTS AND 0,3 ; REMOVE UNWANTED BYTE ADD 1,3 ; ADD IN NEW BYTE STA 3,0,2 NEXT PIXA: POP1 1 ;INDEXED ADDRþ"|ESS LTOP1 0 MPY STOP1 1 NEXT PSTP: .SYSTM ;SOFT HALT .RESET ; (RETURN TO CALLING PROGRAM) ERR.2 .SYSTM .RTN JMP . PHLT: POP1 2 ;HARD HALT .SYSTM .ERTN JMP . NEXT PCHR: POP1 0 LDA 1,RHB40 ADD 1,0 LDA 1,RHBNP ROT: ANDS 1,0 PUSH1 0 þ½NEXT RHB40: 40 LHB40: 40B7 PORD: NEXT PORDA: LTOP1 0 MOVZR 0,0 STOP1 0 NEXT PORDB: LTOP1 0 SUB 1,1 ;CLEAR AC1 MOVR 0,0 ;B15 INTO CARRY MOVL 1,1 ;CARRY INTO AC1 STOP1 1 NEXT PORDI: NEXT PORDC: POP1 0 LDA 1,LHB40 SUB 1,0 LDA 1,LHBNP JMþ4-P ROT PNON: .PUND ;UNDEFINED INSTRUCTION .END ÿR2SSYMBOLS.SRû­ ó Dþ~B .TITL R2SSYMBOLS .DUSR PC = 20 ;ADDRESS OF PCODE INSTRUCTION .DUSR IP = 40 .DUSR SP = 41 ;CURRENT TOP OF STACK .DUSR MP = 42 ;MARK POINTER .DUSR DSP = 43 ;DATA SEGMENT POINTER (STACK BASE) .DUSR HP = 44 ;HEAP POINTER .DUSR EP = 45 ;STþuACK MAX .DUSR AI1 = 27 ;AUTO INC 1 .DUSR AI2 = 26 ;AUTO INC 2 .DUSR AD1 = 37 ;AUTO DEC 1 .DUSR AD2 = 36 ;AUTO DEC 2 .DUSR Z1 = 47 .DUSR Z2 = 46 .DUSR .ERR2 = 50 ;RETURN WITH RDOS ERROR  .DUSR .ERRP = 51 ;RETURN WITH PCODE ERROR .DUSR NEXTþ@³ = JMP @IP ;OBEY NEXT PCODE INSTRUCTION .DUSR PUSH = ISZ SP .DUSR POP = DSZ SP .MACRO LTOP1 LDA ^1,@SP % .MACRO STOP1 STA ^1,@SP % .MACRO PUSH1 PUSH STOP1 ^1 % .MACRO POP1 LTOP1 ^1 POP % .MACRO .PUND JMP @.+1 PUNDF % .DUSR ERR.2 = JþLSR @.ERR2 .DUSR ERR.P = JSR @.ERRP .DUSR ANS = 0 ;OFFSET FOR FUNCTION VALUE .DUSR SL = 2 ; STATIC LINK .DUSR DL = 3 ; DYNAMIC LINK .DUSR MTS = 4 ;MAX TOP OF STACK .DUSR RA = 5 ; RETURN ADDRESS .DUSR MSL = 6 ;MARK STACK LENGTHþû .DUSR FCH = -1 ;FILE CHANNEL OFFSET .DUSR FST = -2 ;FILE STATUS OFFSET ;INTERPRETER ERROR CODES .DUSR PEROP = 400 ; UNDEFINED OP. CODE OR S.P. CODE .DUSR PERSO = 401 ; STORE OVERFLOW .DUSR PERGE = 402 ; EOF SET FOR GET .DUSR PERRE = 403 ; REþf AD ERROR .DUSR PERPE = 404 ; PUT ERROR .DUSR PERIW = 405 ;INTEGER FIELD WIDTH .DUSR PERFP = 406 ; OV UN FLAGS RFPI .DUSR PERTR = 407 ; TRUNCATE OV ERROR .DUSR PERCJ = 410 ;CASE ERROR .. UJC .DUSR PERRB = 411 ; ASCII BUFFERRING ERROR .DUSR PERXþß9hP = 412 ;ILLEGAL EXTERNAL PROCEDURE CALL .DUSR PERCK = 413 ; CHK ERROR .DUSR PERHO = 414 ; HEAP OVERFLOW .DUSR PERFW = 415 ; FIELD WIDTH ERROR .DUSR PERFI = 416 ;FPI ERROR .DUSR PERFO = 417 ;FPI I/O ERROR .END ÿEXAMPLES.CMû´rþaÚROMAN,LIFE,GRAPH,PRIMES,RGCD^ ÿP4COMPILE3.ûNNþ~s IF FTYPE <> NIL THEN WITH FTYPE^ DO BEGIN GEN2(51(*LDC*),1,IDTYPE^.SIZE-1); GEN2(50(*LDA*),LEVEL-VLEV,VADDR); GEN1(30(*CSP*),11(*OPN*)); ENDþUT; LOCFP := NEXTFILE END; END; (* OF OPENFILES*) PROCEDURE CLOSEFILES(LOCFP: EXTFILEP); BEGIN WHILE LOCFP <> NIL DO WITH LOCFP^ DO BEGIN IF FTYPE <> NIL THEN þ­ WITH FTYPE^ DO GEN2(50(*LDA*),LEVEL-VLEV,VADDR); GEN1(30(*CSP*),24(*CLS*));  LOCFP := NEXTFILE END END; (* OF CLOSEFILES*) PROCEDURE STATEMENT(FSYS: SETOFSYS); LABEL 1; VAR þûéLCP: CTP; LLP: LBP; PROCEDURE EXPRESSION(FSYS: SETOFSYS); FORWARD; PROCEDURE SELECTOR(FSYS: SETOFSYS; FCP: CTP); VAR LATTR: ATTR; LCP: CTP; LSIZE,LMIN,LMAX: INTEGER; BEGIN WITH FCP^, GATTR DO BEGIN TYþPTR := IDTYPE; KIND := VARBL; CASE KLASS OF VARS:  IF VKIND = ACTUAL THEN BEGIN ACCESS := DRCT; VLEVEL := VLEV; DPLMT := VADDR END þ‡ö ELSE BEGIN GEN2T(54(*LOD*),LEVEL-VLEV,VADDR,NILPTR); ACCESS := INDRCT; IDPLMT := 0 END; FIELD: WITH DISPLAY[DISX] DO IF OCCUR = CREC THEN þmJ BEGIN ACCESS := DRCT; VLEVEL := CLEV;  DPLMT := CDSPL + FLDADDR END ELSE BEGIN IF LEVEL = 1 THEN GEN1T(39(*LOD*),VDSPL,NILPþVúTR) ELSE GEN2T(54(*LOD*),0,VDSPL,NILPTR); ACCESS := INDRCT; IDPLMT := FLDADDR END; FUNC: IF PFDECKIND = STANDARD THEN BEGIN ERROR(15þD0); TYPTR := NIL END ELSE BEGIN  IF PFKIND = FORMAL THEN ERROR(151) ELSE IF (PFLEV+1<>LEVEL)OR(FPROCP<>FCP) THEN ERROR(177); BEþìGIN ACCESS := DRCT; VLEVEL := PFLEV + 1; DPLMT := 0 (*IMPL. RELAT. ADDR. OF FCT. RESULT*) END END END (*CASE*) END (*WITH*); IF NOT (SY IN SELECTSYSþ‚m + FSYS) THEN BEGIN ERROR(59); SKIP(SELECTSYS + FSYS) END; WHILE SY IN SELECTSYS DO BEGIN (*[*) IF SY = LBRACK THEN BEGIN REPEAT LATTR := GATTR; WITH LATTR DOþˆ IF TYPTR <> NIL THEN IF TYPTR^.FORM <> ARRAYS THEN BEGIN ERROR(138); TYPTR := NIL END; LOADADDRESS; INSYMBOL; EXPRESSION(FSYS + [COMMA,RBRACK])þMø; LOAD;  IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM<>SCALAR THEN ERROR(113) ELSE IF NOT COMPTYPES(GATTR.TYPTR,INTPTR) THEN GEN0T(58(*ORD*),þ0GATTR.TYPTR); IF LATTR.TYPTR <> NIL THEN WITH LATTR.TYPTR^ DO BEGIN IF COMPTYPES(INXTYPE,GATTR.TYPTR) THEN BEGIN þU IF INXTYPE <> NIL THEN  BEGIN GETBOUNDS(INXTYPE,LMIN,LMAX); IF DEBUG THEN GEN2T(45(*CHK*),LMIN,LMAX,INTPTR); IF LMIN>0þý™ THEN GEN1T(31(*DEC*),LMIN,INTPTR) ELSE IF LMIN<0 THEN GEN1T(34(*INC*),-LMIN,INTPTR); (*OR SIMPLY GEN1(31,LMIN)*) END þ3Ÿ  END ELSE ERROR(139); WITH GATTR DO BEGIN TYPTR := AELTYPE; KIND := VARBL; ACCESS := INDRCT; IDPLMT := 0 þÀ� END; IF GATTR.TYPTR <> NIL THEN BEGIN LSIZE := GATTR.TYPTR^.SIZE; IF COMPTYPES(GATTR.TYPTR,CHARPTR) THEN LSIZE :=CHARSIZE þø÷  ELSE ALIGN(GATTR.TYPTR,LSIZE); GEN1(36(*IXA*),LSIZE) END END UNTIL SY <> COMMA; IF SY = RBRACK THEN INSYMBOL ELSE ERþãdROR(12) END (*IF SY = LBRACK*) ELSE (*.*) IF SY = PERIOD THEN BEGIN WITH GATTR DO BEGIN IF TYPTR <> NIL THEN þ¹ IF TYPTR^.FORM <> RECORDS THEN BEGIN ERROR(140); TYPTR := NIL END; INSYMBOL; IF SY = IDENT THEN BEGIN IF TYPTR <> NIL THEþÆ&N BEGIN SEARCHSECTION(TYPTR^.FSTFLD,LCP); IF LCP = NIL THEN BEGIN ERROR(152); TYPTR := NIL END ELSE  þ WITH LCP^ DO BEGIN TYPTR := IDTYPE; CASE ACCESS OF DRCT: DPLMT := DPLMT + FLDADDR; INDRCT: IDPþû•LMT := IDPLMT + FLDADDR; INXD: ERROR(400) END END END; INSYMBOL þo END (*SY = IDENT*) ELSE ERROR(2) END (*WITH GATTR*) END (*IF SY = PERIOD*) ELSE (*^*) BEGIN IF GATTR.TYPTR <> NIL THEN þF WITH GATTR,TYPTR^ DO IF FORM = POINTER THEN BEGIN LOAD; TYPTR := ELTYPE; IF DEBUG THEN GEN2T(45(*CHK*),1,MAXADDR,NILPTR);  WITH GATTR DO þ¤Ù BEGIN KIND := VARBL; ACCESS := INDRCT; IDPLMT := 0 END END ELSE IF FORM = FILES THEN TYPTR := FþÈïILTYPE ELSE ERROR(141); INSYMBOL END; IF NOT (SY IN FSYS + SELECTSYS) THEN BEGIN ERROR(6); SKIP(FSYS + SELECTSYS) END END (*WHILE*) END (*SELEþ'CTOR*) ; PROCEDURE CALL(FSYS: SETOFSYS; FCP: CTP); VAR LKEY: 1..15; PROCEDURE VARIABLE(FSYS: SETOFSYS); VAR LCP: CTP; BEGIN IF SY = IDENT THEN BEGIN SEARCHID([VARS,FIELD],LCP); IþBNSYMBOL END ELSE BEGIN ERROR(2); LCP := UVARPTR END; SELECTOR(FSYS,LCP) END (*VARIABLE*) ; PROCEDURE GETPUTRESETREWRITE; BEGIN VARIABLE(FSYS + [RPARENT]); LOADADDRESS; IF GATTR.TYPTR <> NILþ;~ THEN IF GATTR.TYPTR^.FORM <> FILES THEN ERROR(116); IF LKEY <= 2 THEN GEN1(30(*CSP*),LKEY(*GET,PUT*)) ELSE GEN1(30(*CSP*),LKEY+26(*RESET,REWRITE*)) END (*GETPUTRESETREWRITE*) ; PROCEDURE FILEDEFAULTþmò(FNAME : ALPHA; ERRNO:INTEGER; VAR LLEV,LADDR:INTEGER); BEGIN SAVEID := ID; ID := FNAME; SEARCHID([VARS],LLCP); IF LLCP^.IDTYPE <> NIL THEN LADDR := LLCP^.VADDR ELSE BEGIN þÒPERROR(ERRNO); LADDR := 0 END; LLEV := 1; ID := SAVEID END; PROCEDURE READ; VAR LCP:CTP; LLEV:LEVRANGE; LADDR:ADDRRANGE; LSP : STP; BEGIN IF SY = LPARENT THEN BEGþÇ„IN INSYMBOL; VARIABLE(FSYS + [COMMA,RPARENT]); LSP := GATTR.TYPTR; TEST := FALSE; IF LSP <> NIL THEN IF LSP^.FORM = FILES THEN WITH GATTR, LSP^ DO BEGIN þc¼ IF FILTYPE = CHARPTR THEN BEGIN LLEV := VLEVEL; LADDR := DPLMT; IF ACCESS = INDRCT THEN ERROR(399) END ELSE ERROR(399); IF þD°SY = RPARENT THEN BEGIN IF LKEY = 8 THEN ERROR(116); TEST := TRUE END ELSE  IF SY <> COMMA THEN BEGIN ERROR(116); SKIP(FSYSþjü + [COMMA,RPARENT]) END; IF SY = COMMA THEN BEGIN INSYMBOL; VARIABLE(FSYS + [COMMA,RPARENT]) END ELSE TEST := TRUE END ELSE FILEDEFAULT(NA[3],175,LLEV,LADþEDR); IF NOT TEST THEN REPEAT LOADADDRESS; GEN2(50(*LDA*),LEVEL-LLEV,LADDR); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= SUBRANGE THEN IF COMPTYPES(INTPTR,GATTR.TYPTþ0.R) THEN GEN1(30(*CSP*),3(*RDI*)) ELSE IF COMPTYPES(REALPTR,GATTR.TYPTR) THEN GEN1(30(*CSP*),4(*RDR*)) ELSE IF COMPTYPES(CHARPTR,GATTR.þêWTYPTR) THEN GEN1(30(*CSP*),5(*RDC*)) ELSE ERROR(399) ELSE ERROR(116);  TEST := SY <> COMMA; IF NOT TEST THEN BEGIN INSYMBOL; VARIABLE(FSYS + [COMMA,RPAþ™ÉRENT]) END UNTIL TEST; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END ELSE IF LKEY = 5 THEN ERROR(116) ELSE FILEDEFAULT(NA[3],175,LLEV,LADDR); IF LKEY = þ�Ú11 THEN BEGIN GEN2(50(*LDA*),LEVEL - LLEV, LADDR); GEN1(30(*CSP*),21(*RLN*)) END  END (*READ*) ; PROCEDURE WRITE; VAR LSP: STP; DEFAULT : BOOLEAN; LLKEY: 1..15; LCP:CTþjÎP; LLEV:LEVRANGE; LADDR,LEN:ADDRRANGE; BEGIN LLKEY := LKEY; IF SY = LPARENT THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,COLON,RPARENT]); LSP := GATTR.TYPTR; TEST := FALSE; IF LSP <> NIþðèL THEN IF LSP^.FORM = FILES THEN WITH GATTR, LSP^ DO BEGIN  IF FILTYPE = CHARPTR THEN BEGIN LLEV := VLEVEL; LADDR := DPLMT; þ IF ACCESS = INDRCT THEN ERROR(399) END ELSE ERROR(399); IF SY = RPARENT THEN BEGIN IF LLKEY = 10 THEN ERROR(116); TEST := TRUE þhæ END ELSE IF SY <> COMMA THEN BEGIN ERROR(116); SKIP(FSYS+[COMMA,RPARENT]) END; IF SY = COMMA THEN BEGIN INSYMBOL; EXPRESSION(FSYS+[COMMA,COLONþÿ,RPARENT]) END ELSE TEST := TRUE END ELSE FILEDEFAULT(NA[4],176,LLEV,LADDR); IF NOT TEST THEN REPEAT LSP := GATTR.TYPTR; IF LSP <> NIL THEN þ&b IF LSP^.FORM <= SUBRANGE THEN LOAD ELSE LOADADDRESS; IF SY = COLON THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,COLON,RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> INþåHTPTR THEN ERROR(116); LOAD; DEFAULT := FALSE END ELSE DEFAULT := TRUE; IF SY = COLON THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> þ&ÏNIL THEN IF GATTR.TYPTR <> INTPTR THEN ERROR(116);  IF LSP <> REALPTR THEN ERROR(124); LOAD; ERROR(399); END ELSE IF LSP = INTPTR THEN BEþÔçGIN IF DEFAULT THEN GEN2(51(*LDC*),1,10); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),6(*WRI*)) END ELSE IF LSP = REALPTR THEN BEGIN IF DEFþAULT THEN GEN2(51(*LDC*),1,20); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),8(*WRR*)) END ELSE IF LSP = CHARPTR THEN BEGIN IF Dþ#vEFAULT THEN GEN2(51(*LDC*),1,1); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),9(*WRC*)) END ELSE IF LSP <> NIL THEN þK„BEGIN IF LSP^.FORM = SCALAR THEN ERROR(399) ELSE IF STRING(LSP) THEN BEGIN LEN := LSP^.SIZE DIV CHARMAX; IF DEFAULþ‘‡T THEN GEN2(51(*LDC*),1,LEN); GEN2(51(*LDC*),1,LEN); GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),10(*WRS*)) þvÒ END  ELSE ERROR(116) END; TEST := SY <> COMMA; IF NOT TEST THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [COMMA,COLON,RPARENT]) ENDþ8 UNTIL TEST; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END ELSE IF LKEY = 6 THEN ERROR(116) ELSE FILEDEFAULT(NA[4],176,LLEV,LADDR); IF LLKEY = 12 THEN (*WRITELN*) þº¢ BEGIN GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),22(*WLN*)) END END (*WRITE*) ; PROCEDURE PACK; VAR LSP,LSP1: STP; BEGIN ERROR(399); VARIABLE(FSYS + [COMMA,RPARENT]); þ*R LSP := NIL; LSP1 := NIL; IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = ARRAYS THEN BEGIN LSP := INXTYPE; LSP1 := AELTYPE END ELSE ERROR(116); IF SY þ›e= COMMA THEN INSYMBOL ELSE ERROR(20); EXPRESSION(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN ERROR(116) ELSE IF NOT COMPTYPES(LSP,GATTR.TYPTR) TþË¿HEN ERROR(116); IF SY = COMMA THEN INSYMBOL ELSE ERROR(20); VARIABLE(FSYS + [RPARENT]); IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = ARRAYS THEN BEGIN þVí  IF NOT COMPTYPES(AELTYPE,LSP1) OR NOT COMPTYPES(INXTYPE,LSP) THEN ERROR(116) END ELSE ERROR(116) END (*PACK*) ; PROCEDURE UNPACK; VARþ¡ LSP,LSP1: STP; BEGIN ERROR(399); VARIABLE(FSYS + [COMMA,RPARENT]); LSP := NIL; LSP1 := NIL; IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = ARRAYS THEN BEGIN LSP :þø= INXTYPE; LSP1 := AELTYPE END ELSE ERROR(116); IF SY = COMMA THEN INSYMBOL ELSE ERROR(20); VARIABLE(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO þàIF FORM = ARRAYS THEN BEGIN IF NOT COMPTYPES(AELTYPE,LSP1) OR NOT COMPTYPES(INXTYPE,LSP) THEN ERROR(116) END ELSE ERROR(116);  IFþ”L SY = COMMA THEN INSYMBOL ELSE ERROR(20); EXPRESSION(FSYS + [RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN ERROR(116) ELSE IF NOT COMPTYPES(LSP,GATTR.TYPTR) THEþON ERROR(116); END (*UNPACK*) ; PROCEDURE NEW; LABEL 1; VAR LSP,LSP1: STP; VARTS,LMIN,LMAX: INTEGER; LSIZE,LSZ: ADDRRANGE; LVAL: VALU; BEGIN VARIABLE(FSYS + [COMMA,RPARENT]); LOADADDRESSþd ; LSP := NIL; VARTS := 0; LSIZE := 0; IF GATTR.TYPTR <> NIL THEN WITH GATTR.TYPTR^ DO IF FORM = POINTER THEN BEGIN IF ELTYPE <> NIL THEN BEGINþ¯¿ LSIZE := ELTYPE^.SIZE; IF ELTYPE^.FORM = RECORDS THEN LSP := ELTYPE^.RECVAR END END ELSE ERROR(116); WHILE SY = COMMA DO  BEGIN INSYMBOL;CONSTANT(FSYSþ�‘ + [COMMA,RPARENT],LSP1,LVAL); VARTS := VARTS + 1; (*CHECK TO INSERT HERE: IS CONSTANT IN TAGFIELDTYPE RANGE*) IF LSP = NIL THEN ERROR(158) ELSE IF LSP^.FORM <> TAGFLD THEN EþÛ¢RROR(162) ELSE IF LSP^.TAGFIELDP <> NIL THEN IF STRING(LSP1) OR (LSP1 = REALPTR) THEN ERROR(159) ELSE IF COMPTYPES(LSP^.TAGFIELDP^.IDTYPE,LSP1) THEN þ[Ä BEGIN LSP1 := LSP^.FSTVAR; WHILE LSP1 <> NIL DO WITH LSP1^ DO IF VARVAL.IVAL = LVAL.IVAL THEN þKL BEGIN LSIZE := SIZE; LSP := SUBVAR; GOTO 1 END ELSE LSP1 := NXTVAR;  LSIZE := LSP^.SIZE; LSP := NIL; þkO END ELSE ERROR(116); 1: END (*WHILE*) ; GEN2(51(*LDC*),1,LSIZE); GEN1(30(*CSP*),12(*NEW*)); END (*NEW*) ; PROCEDURE MARK; BEGIN VARIABLE(FSYS+[RPARENT]þÇŽ); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = POINTER THEN BEGIN LOADADDRESS; GEN1(30(*CSP*),23(*SAV*)) END ELSE ERROR(125) END(*MARK*); PROCEDURE RELEASE; BEþÓ$GIN VARIABLE(FSYS+[RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = POINTER THEN BEGIN LOAD; GEN1(30(*CSP*),13(*RST*)) END ELSE ERROR(125) END (*RELEASE*); þ$Ÿ PROCEDURE PUTGETRANDOM; VAR LLEV,LADDR : INTEGER; BEGIN VARIABLE(FSYS+[COMMA]); IF GATTR.TYPTR <> NIL THEN  WITH GATTR, GATTR.TYPTR^ DO IF FORM <> FILES THEN ERROR(1þö016) ELSE BEGIN LLEV := VLEVEL; LADDR := DPLMT; IF NOT RANDOMFILE THEN ERROR(116); IF ACCESS = INDRCT THEN ERROR(399); IF SY <> COMMA THEN ERROR(116) ELSE INSYMBOL; þ{e EXPRESSION(FSYS+[RPARENT]); LOAD; IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> INTPTR THEN ERROR(116);  GEN2(50(*LDA*),LEVEL-LLEV,LADDR); GEN1(30(*CSP*),LKEY+11(*WDR,RRR*)þq) END END (*OF PUTGETRANDOM*); PROCEDURE HALT; BEGIN EXPRESSION(FSYS+[RPARENT]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR = INTPTR THEN BEGIN LOAD; GEN0(62(*HLT*þ66)) END ELSE ERROR(116) END; (*OF HALT*) PROCEDURE ABS; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR = INTPTR THEN GEN0(0(*ABI*)) ELSE IF GATTR.TYPTRþ   = REALPTR THEN GEN0(1(*ABR*)) ELSE BEGIN ERROR(125); GATTR.TYPTR := INTPTR END END (*ABS*) ; PROCEDURE SQR; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR = INTPTR THEN GEN0(24(*SQIþft*)) ELSE IF GATTR.TYPTR = REALPTR THEN GEN0(25(*SQR*)) ELSE BEGIN ERROR(125); GATTR.TYPTR := INTPTR END END (*SQR*) ; PROCEDURE TRUNC; BEGIN IF GATTR.TYPTR <> NIL THENþÝà IF GATTR.TYPTR <> REALPTR THEN ERROR(125); IF LKEY=12 THEN GEN1(30(*CSP*),31(*RND*)) ELSE GEN0(27(*TRC*)); GATTR.TYPTR := INTPTR END (*TRUNC*) ; PROCEDURE ODD; BEGIN IF GATTRþ".TYPTR <> NIL THEN IF GATTR.TYPTR <> INTPTR THEN ERROR(125); GEN0(20(*ODD*)); GATTR.TYPTR := BOOLPTR END (*ODD*) ; PROCEDURE ORD; BEGIN IF GATTR.TYPTR <> NIL THEN þi: IF GATTR.TYPTR^.FORM >= POWER THEN ERROR(125); GEN0T(58(*ORD*),GATTR.TYPTR); GATTR.TYPTR := INTPTR END (*ORD*) ; PROCEDURE CHR; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPþÚêTR <> INTPTR THEN ERROR(125); GEN0(59(*CHR*)); GATTR.TYPTR := CHARPTR END (*CHR*) ; PROCEDURE PREDSUCC; BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN þ%ERROR(125); IF LKEY = 7 THEN GEN1T(31(*DEC*),1,GATTR.TYPTR) ELSE GEN1T(34(*INC*),1,GATTR.TYPTR) END (*PREDSUCC*) ; PROCEDURE EOF; VAR LLEV,LADDR : INTEGER; BEGIN IF SY = LPARENTþïŽ THEN BEGIN INSYMBOL; VARIABLE(FSYS + [RPARENT]); IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> FILES THEN ERROR(125) þœy ELSE IF (GATTR.TYPTR^.RANDOMFILE AND NOT (LKEY = 9)) THEN ERROR(116); LOADADDRESS END ELSE WITH GATTR DO BEGIN þäú IF LKEY = 9 THEN ERROR(116) ELSE FILEDEFAULT(NA[3],175,LLEV,LADDR); GEN2(50(*LDA*),LEVEL-LLEV,LADDR) END; IF LKEY = 9 THEN GEN1(30(*CSP*),28(*EOR*)) ELSE IF Lþ³KEY = 10 THEN GEN0(8(*EOF*)) ELSE GEN1(30(*CSP*),14(*ELN*)); GATTR.TYPTR := BOOLPTR END (*EOF*) ; PROCEDURE PAGE; VAR LLEV,LADDR : INTEGER; BEGIN IF SY = LPARENT THEN BEGIN þñˆ INSYMBOL; VARIABLE(FSYS+[RPARENT]); IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = FILES THEN LOADADDRESS ELSE ERROR(116þÆg) END ELSE BEGIN FILEDEFAULT(NA[4],176,LLEV,LADDR); GEN2(50(*LDA*),LEVEL-LLEV,LADDR) END; GEN1(30(*CSP*),27(*PAG*)) END (*PAGE*); PROCEDURE CALLNONSTAþ.VNDARD; VAR NXT,LCP: CTP; LSP: STP; LKIND: IDKIND; LB: BOOLEAN; LOCPAR, LLC: ADDRRANGE; BEGIN LOCPAR := 0; WITH FCP^ DO BEGIN NXT := NEXT; LKIND := PFKIND; IF NOT EXTERN THEN GEþþ”N1(41(*MST*),LEVEL-PFLEV) END; IF SY = LPARENT THEN BEGIN LLC := LC; REPEAT LB := FALSE; (*DECIDE WHETHER PROC/FUNC MUST BE PASSED*) IF LKIND = ACTUAL THEN BEGIN þà IF NXT = NIL THEN ERROR(126)  ELSE LB := NXT^.KLASS IN [PROC,FUNC] END ELSE ERROR(399); (*FOR FORMAL PROC/FUNC LB IS FALSE AND EXPRESSION WILL BE CALLED, WHþ•ICH WILL ALLWAYS INTERPRET A PROC/FUNC ID AT ITS BEGINNING AS A CALL RATHER THAN A PARAMETER PASSING. IN THIS IMPLEMENTATION, PARAMETER PROCEDURES/FUNCTIONS ARE THEREFORE NOT ALLOWED TO HAVE PROCEDURE/Fþ0UNCTION PARAMETERS*)  INSYMBOL; IF LB THEN (*PASS FUNCTION OR PROCEDURE*) BEGIN ERROR(399); IF SY <> IDENT THEN BEGIN ERROR(2); SKIP(FSþ=†YS + [COMMA,RPARENT]) END ELSE BEGIN IF NXT^.KLASS = PROC THEN SEARCHID([PROC],LCP) ELSE BEGIN SEARCHID([FUNC],LCP); þúî IF NOT COMPTYPES(LCP^.IDTYPE,NXT^.IDTYPE) THEN ERROR(128) END; INSYMBOL; IF NOT (SY IN FSYS + [COMMA,RPARENT]) THEN þxF BEGIN ERROR(6); SKIP(FSYS + [COMMA,RPARENT]) END END END (*IF LB*) ELSE BEGIN EXPRESSION(FSYS + [COMMA,RPARENT]); IF GATTR.TYPTR <> NILþ;þ THEN  IF LKIND = ACTUAL THEN BEGIN IF NXT <> NIL THEN BEGIN LSP := NXT^.IDTYPE; IF LSP <> NIL THEN þ–« BEGIN IF (NXT^.VKIND = ACTUAL) THEN IF LSP^.FORM <= POWER THEN BEGIN LOAD; IF DEBUG THEþ²êN CHECKBNDS(LSP); IF COMPTYPES(REALPTR,LSP) AND (GATTR.TYPTR = INTPTR) THEN BEGIN GEN0(10(*FLT*)); þÌ— GATTR.TYPTR := REALPTR END; LOCPAR := LOCPAR+LSP^.SIZE; ALIGN(PARMPTR,LOCPAR); END þ6E ELSE BEGIN LOADADDRESS; LOCPAR := LOCPAR+PTRSIZE; ALIGN(PARMPþ]#TR,LOCPAR) END ELSE IF GATTR.KIND = VARBL THEN BEGIN LOADADDRESS;  þ­. LOCPAR := LOCPAR+PARMSIZE END ELSE ERROR(154); IF NOT COMPTYPES(LSP,GATTR.TYPTR) THEN ERROR(142) þ‡¨ END END END ELSE (*LKIND = FORMAL*) BEGIN (*PASS FORMAL PARAM*) END  END; þí¦ IF (LKIND = ACTUAL) AND (NXT <> NIL) THEN NXT := NXT^.NEXT UNTIL SY <> COMMA; LC := LLC; IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END (*IF LPARENT*); IF LKIND = ACTUAL THEN þKö BEGIN IF NXT <> NIL THEN ERROR(126); WITH FCP^ DO BEGIN IF EXTDEC THEN GENCUPENT(61(*CXP*),LOCPAR,PFNAME) ELSE IF EXTERN THEN GEN1(30(*CSP*),PFNAME) þÈ– ELSE GENCUPENT(46(*CUP*),LOCPAR,PFNAME); END END; GATTR.TYPTR := FCP^.IDTYPE END (*CALLNONSTANDARD*) ; BEGIN (*CALL*) IF FCP^.PFDECKIND = STANDARD THEN BEGIN LKEþ»·Y := FCP^.KEY; IF FCP^.KLASS = PROC THEN BEGIN IF NOT(LKEY IN [5,6,11,12,16]) THEN IF SY = LPARENT THEN INSYMBOL ELSE ERROR(9);  CASE LKEY OF 1,2, þø2 3,4: GETPUTRESETREWRITE; 5,11: READ; 6,12: WRITE; 7: PACK; 8: UNPACK; 9: NEW; 10: RELEASE; 13: MARK; þ…t 14,15: PUTGETRANDOM; 16: PAGE; 17: HALT END; IF NOT(LKEY IN [5,6,11,12,16]) THEN IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END þ{ ELSE BEGIN IF (LKEY <= 8) OR (LKEY >= 12) THEN BEGIN IF SY = LPARENT THEN INSYMBOL ELSE ERROR(9); EXPRESSION(FSYS+[RPARENT]); LOAD þ—« END; CASE LKEY OF 1: ABS; 2: SQR; 3,12: TRUNC; 4: ODD;  5: ORD; 6: CHR; 7,8þiƒ: PREDSUCC; 9,10,11 : EOF END; IF (LKEY <= 8) OR (LKEY >= 12) THEN IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END; END (*STANDARD PROCEDURES AND þÉÆFUNCTIONS*) ELSE CALLNONSTANDARD END (*CALL*) ; PROCEDURE EXPRESSION; VAR LATTR: ATTR; LOP: OPERATOR; TYPIND: CHAR; LSIZE: ADDRRANGE; PROCEDURE SIMPLEEXPRESSION(FSYS: SETOFSYS); VAR LATTR: ATTR; Lþ©�OP: OPERATOR; SIGNED: BOOLEAN; PROCEDURE TERM(FSYS: SETOFSYS); VAR LATTR: ATTR; LOP: OPERATOR; PROCEDURE FACTOR(FSYS: SETOFSYS); VAR LCP: CTP; LVP: CSP; VARPART: BOOLEAN; CSTPARTþƒR: SET OF 0..58; LSP: STP; BEGIN IF NOT (SY IN FACBEGSYS) THEN BEGIN ERROR(58); SKIP(FSYS + FACBEGSYS);  GATTR.TYPTR := NIL END; WHILE SY IN FACBEGSYS DO þ Œ BEGIN CASE SY OF (*ID*) IDENT: BEGIN SEARCHID([KONST,VARS,FIELD,FUNC],LCP); INSYMBOL; IF LCP^.KLASS = FUNC THEN þÒd BEGIN CALL(FSYS,LCP); WITH GATTR DO BEGIN KIND := EXPR;  IF TYPTR <> NIL THEN IF TYPTR^.FORM=SUBRANGE THEN þ;´ TYPTR := TYPTR^.RANGETYPE END END ELSE IF LCP^.KLASS = KONST THEN WITH GATTR, LþØ CP^ DO BEGIN TYPTR := IDTYPE; KIND := CST; CVAL := VALUES  END ELSE BEGIN SELECTOR(FSYS,LCP); þ27 IF GATTR.TYPTR<>NIL THEN(*ELIM.SUBR.TYPES TO*) WITH GATTR,TYPTR^ DO(*SIMPLIFY LATER TESTS*) IF FORM = SUBRANGE THEN TYPTR :þå= RANGETYPE END END; (*CST*) INTCONST:  BEGIN WITH GATTR DO BEGIN TYPTR := INTPTR; KIND := CST; þÅ CVAL := VAL END; INSYMBOL END; REALCONST: BEGIN WITH GATTR DO þ³‚ BEGIN TYPTR := REALPTR; KIND := CST; CVAL := VAL END; INSYMBOL END; STRINGCONST: BEGIN þéé WITH GATTR DO BEGIN IF LGTH = 1 THEN TYPTR := CHARPTR ELSE BEGIN NEW(LSP,ARRAYS); WITH LSPþd^ DO BEGIN AELTYPE := CHARPTR; FORM:=ARRAYS;  INXTYPE := NIL; SIZE := LGTH*CHARSIZE END; TYPTR := LSP þQ END; KIND := CST; CVAL := VAL END; INSYMBOL END; (*(*) LPARENT: BEGIN INSYMBOL; EXPREþ¦kSSION(FSYS + [RPARENT]); IF SY = RPARENT THEN INSYMBOL ELSE ERROR(4) END; (*NOT*) NOTSY: BEGIN INSYMBOL; FACTOR(FSYS); LOAD; GEN0(19(*NOT*))þÉa; IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR <> BOOLPTR THEN BEGIN ERROR(135); GATTR.TYPTR := NIL END; END; (*[*) LBRACK: þî¼ BEGIN INSYMBOL; CSTPART := [ ]; VARPART := FALSE;  NEW(LSP,POWER); WITH LSP^ DO BEGIN ELSET:=NIL;SIZE:=SETSIZE;FORM:=POWER END; IF SY = þεRBRACK THEN BEGIN WITH GATTR DO BEGIN TYPTR := LSP; KIND := CST END; INSYMBOL END þÏ;ELSE BEGIN  REPEAT EXPRESSION(FSYS + [COMMA,RBRACK]); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN þÖ BEGIN ERROR(136); GATTR.TYPTR := NIL END ELSE IF COMPTYPES(LSP^.ELSET,GATTR.TYPTR) THEN BEGIN þýà IF GATTR.KIND = CST THEN  IF (GATTR.CVAL.IVAL < SETLOW) OR (GATTR.CVAL.IVAL > SETHIGH) THEN ERROR(304) þ8> ELSE CSTPART := CSTPART+[GATTR.CVAL.IVAL] ELSE BEGIN LOAD; IF þcNOT COMPTYPES(GATTR.TYPTR,INTPTR)  THEN GEN0T(58(*ORD*),GATTR.TYPTR); GEN0(23(*SGS*)); IF VARPART THEN GEN0(28(*UNI*)) þÞ ELSE VARPART := TRUE END; LSP^.ELSET := GATTR.TYPTR; GATTR.TYPTR := LSP þg END  ELSE ERROR(137); TEST := SY <> COMMA; IF NOT TEST THEN INSYMBOL UNTIL TEST; IFþk SY = RBRACK THEN INSYMBOL ELSE ERROR(12) END; IF VARPART THEN BEGIN IF CSTPART <> [ ] THEN BEGIN NEW(LVP,PSET);þ:¤ LVP^.PVAL := CSTPART; LVP^.CCLASS := PSET; IF CSTPTRIX = CSTOCCMAX THEN ERROR(254) ELSE BEGIN CSTPTRIX := CSTPTRIX + þè°1; CSTPTR[CSTPTRIX] := LVP; GEN2(51(*LDC*),5,CSTPTRIX); GEN0(28(*UNI*)); GATTR.KIND := EXPR END þ9K  END END ELSE BEGIN NEW(LVP,PSET); LVP^.PVAL := CSTPART; LVP^.CCLASS := PSET; GATTR.CVAL.VALPþåÊ := LVP END END END (*CASE*) ; IF NOT (SY IN FSYS) THEN BEGIN ERROR(6); SKIP(FSYS + FACBEGSYS) END END (*WHILE*)  þËž END (*FACTOR*) ; BEGIN (*TERM*) FACTOR(FSYS + [MULOP]); WHILE SY = MULOP DO BEGIN LOAD; LATTR := GATTR; LOP := OP; INSYMBOL; FACTOR(FSYS + [MULOP]); LOAD; þ‡Ž IF (LATTR.TYPTR <> NIL) AND (GATTR.TYPTR <> NIL) THEN CASE LOP OF (***) MUL: IF (LATTR.TYPTR=INTPTR)AND(GATTR.TYPTR=INTPTR) THEN GEN0(15(*MPI*))  ELSE þ± BEGIN IF LATTR.TYPTR = INTPTR THEN BEGIN GEN0(9(*FLO*)); LATTR.TYPTR := REALPTR END þš2 ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR  END; þZ IF (LATTR.TYPTR = REALPTR) AND(GATTR.TYPTR=REALPTR)THEN GEN0(16(*MPR*)) ELSE IF(LATTR.TYPTR^.FORM=POWER) þs¼ AND COMPTYPES(LATTR.TYPTR,GATTR.TYPTR)THEN GEN0(12(*INT*)) ELSE BEGIN ERROR(134);GATTR.TYPTR:=NIL END END; (*/*) RDIV: BEGIN þ8 IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR END; IF LATTR.TYPTR = INTPþ½^TR THEN BEGIN GEN0(9(*FLO*)); LATTR.TYPTR := REALPTR END; IF (LATTR.TYPTR = REALPTR) AND (GATTR.þiTYPTR=REALPTR)THEN GEN0(7(*DVR*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END; (*DIV*) IDIV: IF (LATTR.TYPTR = INTPTR) AND (GATTR.TYPTR = INTPTR) þ¾ÚTHEN GEN0(6(*DVI*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END; (*MOD*) IMOD: IF (LATTR.TYPTR = INTPTR) AND (GATTR.TYPTR = INTPTR) THEN GEN0(14(*MOD*)) þpT ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END; (*AND*) ANDOP:IF (LATTR.TYPTR = BOOLPTR) AND (GATTR.TYPTR = BOOLPTR) THEN GEN0(4(*AND*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL ENDþ.A END (*CASE*) ELSE GATTR.TYPTR := NIL END (*WHILE*) END (*TERM*) ; BEGIN (*SIMPLEEXPRESSION*)  SIGNED := FALSE; IF (SY = ADDOP) AND (OP IN [PLUS,MINUS]) THEþrN BEGIN SIGNED := OP = MINUS; INSYMBOL END; TERM(FSYS + [ADDOP]); IF SIGNED THEN BEGIN LOAD; IF GATTR.TYPTR = INTPTR THEN GEN0(17(*NGI*)) ELSE IF GATTR.TYþ§PTR = REALPTR THEN GEN0(18(*NGR*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END; WHILE SY = ADDOP DO BEGIN LOAD; LATTR := GATTR; LOP := OP; INSYMBOL; TERM(FSYS + [ADDOP]); LOAD;þûi IF (LATTR.TYPTR <> NIL) AND (GATTR.TYPTR <> NIL) THEN CASE LOP OF (*+*) PLUS: IF (LATTR.TYPTR = INTPTR)AND(GATTR.TYPTR = INTPTR) THEN GEN0(2(*ADI*)) þ T ELSE BEGIN IF LATTR.TYPTR = INTPTR THEN BEGIN GEN0(9(*FLO*));  LATTR.TYPTR := REALPTR END þ·‚ ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR END; IF (LATTR.TYPTR = þŸœREALPTR)AND(GATTR.TYPTR = REALPTR) THEN GEN0(3(*ADR*)) ELSE IF(LATTR.TYPTR^.FORM=POWER)  AND COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN GEN0þÐt(28(*UNI*)) ELSE BEGIN ERROR(134);GATTR.TYPTR:=NIL END END; (*-*) MINUS: IF (LATTR.TYPTR = INTPTR)AND(GATTR.TYPTR = INTPTR) THEN GEN0(21(*SþAsBI*)) ELSE BEGIN IF LATTR.TYPTR = INTPTR THEN  BEGIN GEN0(9(*FLO*)); LATTR.TYPTR := REALPTR END þ¿íí ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR ÿP4COMPILE4.ûNNþ Í END; IF (LATTR.TYPTR = REALPTR)AND(GATTR.TYPTR = REALPTR) THEN GEN0(22(*SBR*)) ELSE IF (LATTR.TYPTR^.FORM = POWER) þ† AND COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN GEN0(5(*DIF*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END; (*OR*) OROP: þS€ IF(LATTR.TYPTR=BOOLPTR)AND(GATTR.TYPTR=BOOLPTR)THEN GEN0(13(*IOR*)) ELSE BEGIN ERROR(134); GATTR.TYPTR := NIL END END (*CASE*) ELSE GATTR.TYPTR := NIL þR© END (*WHILE*) END (*SIMPLEEXPRESSION*) ; BEGIN (*EXPRESSION*) SIMPLEEXPRESSION(FSYS + [RELOP]); IF SY = RELOP THEN BEGIN IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= PþîiOWER THEN LOAD ELSE LOADADDRESS; LATTR := GATTR; LOP := OP; IF LOP = INOP THEN  IF NOT COMPTYPES(GATTR.TYPTR,INTPTR) THEN GEN0T(58(*ORD*),GATTR.TYPTR); INSYMBOL; SIMPþèLEEXPRESSION(FSYS); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= POWER THEN LOAD ELSE LOADADDRESS; IF (LATTR.TYPTR <> NIL) AND (GATTR.TYPTR <> NIL) THEN IF LOP = INOP THEN þZ† IF GATTR.TYPTR^.FORM = POWER THEN IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR^.ELSET) THEN  GEN0(11(*INN*)) ELSE BEGIN ERROR(129); GATTR.TYPTR := NIL END ELSE BEGIN ERRþ® OR(130); GATTR.TYPTR := NIL END ELSE BEGIN IF LATTR.TYPTR <> GATTR.TYPTR THEN IF LATTR.TYPTR = INTPTR THEN BEGIN GEN0(9(*FLO*)); LþPŒATTR.TYPTR := REALPTR END ELSE IF GATTR.TYPTR = INTPTR THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR þ.›END; IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN BEGIN LSIZE := LATTR.TYPTR^.SIZE; CASE LATTR.TYPTR^.FORM OF SCALAR: IF LATTR.TYPTR = REAþáÅLPTR THEN TYPIND := 'R' ELSE IF LATTR.TYPTR = BOOLPTR THEN TYPIND := 'B' ELSE IF LATTR.TYPTR = CHARPTR THEN TYPIND := 'C' þ1 ELSE TYPIND := 'I'; POINTER: BEGIN IF LOP IN [LTOP,LEOP,GTOP,GEOP] THEN ERROR(131); TYPIND := 'A' þÚQ END; POWER: BEGIN IF LOP IN [LTOP,GTOP] THEN ERROR(132); TYPIND := 'S' END; ARRAYS: BEGIN þ¹8 IF NOT STRING(LATTR.TYPTR) AND(LOP IN[LTOP,LEOP,GTOP,GEOP])THEN ERROR(131); TYPIND := 'M' END; RECORDS: þá BEGIN IF LOP IN [LTOP,LEOP,GTOP,GEOP] THEN ERROR(131); TYPIND := 'M' END; FILES: BEGIN ERROR(1þ‹¬33); TYPIND := 'F' END END; CASE LOP OF LTOP: GEN2(53(*LES*),ORD(TYPIND),LSIZE); LEOP: GEN2(52(*LEQ*),ORD(TYPIND),LSIZE); GTOP: GEþ?wN2(49(*GRT*),ORD(TYPIND),LSIZE); GEOP: GEN2(48(*GEQ*),ORD(TYPIND),LSIZE); NEOP: GEN2(55(*NEQ*),ORD(TYPIND),LSIZE); EQOP: GEN2(47(*EQU*),ORD(TYPIND),LSIZE) þe’ END END ELSE ERROR(129) END; GATTR.TYPTR := BOOLPTR; GATTR.KIND := EXPR END (*SY = RELOP*) END (*EXPRESSION*) ; PROCEDURE ASSIGNMENT(FCP: CTP); þ�‡ VAR LATTR: ATTR; BEGIN SELECTOR(FSYS + [BECOMES],FCP); IF SY = BECOMES THEN BEGIN IF GATTR.TYPTR <> NIL THEN IF (GATTR.ACCESS<>DRCT) OR (GATTR.TYPTR^.FORM>POWER) THEN LOADADDREþ�}SS; LATTR := GATTR; INSYMBOL; EXPRESSION(FSYS); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM <= POWER THEN LOAD ELSE LOADADDRESS; IF (LATTR.TYPTR <> NIL) AND (GATTR.þümTYPTR <> NIL) THEN BEGIN  IF COMPTYPES(REALPTR,LATTR.TYPTR)AND(GATTR.TYPTR=INTPTR)THEN BEGIN GEN0(10(*FLT*)); GATTR.TYPTR := REALPTR END; IF COþÿ3MPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN CASE LATTR.TYPTR^.FORM OF SCALAR, SUBRANGE: BEGIN IF DEBUG THEN CHECKBNDS(LATTR.TYPTR); þÅ? STORE(LATTR)  END; POINTER: BEGIN IF DEBUG THEN GEN2T(45(*CHK*),0,MAXADDR,NILPTR); STORE(LATTR) þ END; POWER: STORE(LATTR); ARRAYS, RECORDS: GEN1(40(*MOV*),LATTR.TYPTR^.SIZE); FILES: ERROR(146) END EþçöLSE ERROR(129)  END END (*SY = BECOMES*) ELSE ERROR(51) END (*ASSIGNMENT*) ; PROCEDURE GOTOSTATEMENT; VAR LLP: LBP; FOUND: BOOLEAN; TTOP,TTOP1: DISPRANGE; BEGIN IF SY = INTCOþEõNST THEN BEGIN FOUND := FALSE; TTOP1 := TOP; WHILE DISPLAY[TTOP1].OCCUR <> BLCK DO TTOP1 := TTOP1 - 1; TTOP := TTOP1; REPEAT WHILE DISPLAY[TTOP].OCCUR <> BLCK DO þKÑTTOP := TTOP - 1; LLP := DISPLAY[TTOP].FLABEL; WHILE (LLP <> NIL) AND NOT FOUND DO WITH LLP^ DO IF LABVAL = VAL.IVAL THEN BEGIN FOUND := TRUE; þw£ IF TTOP = TTOP1 THEN GENUJPXJP(57(*UJP*),LABNAME) ELSE (*GOTO LEADS OUT OF PROCEDURE*) ERROR(399) END ELSE LLP := NEXTLAB; TTOP := TTOP - 1  þö… UNTIL FOUND OR (TTOP = 0); IF NOT FOUND THEN ERROR(167); INSYMBOL END ELSE ERROR(15) END (*GOTOSTATEMENT*) ; PROCEDURE COMPOUNDSTATEMENT; BEGIN REPEAT þUñ REPEAT STATEMENT(FSYS + [SEMICOLON,ENDSY]) UNTIL NOT (SY IN STATBEGSYS); TEST := SY <> SEMICOLON; IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13)  END (*COMPOUþ•”NDSTATEMENET*) ; PROCEDURE IFSTATEMENT; VAR LCIX1,LCIX2: INTEGER; BEGIN EXPRESSION(FSYS + [THENSY]); GENLABEL(LCIX1); GENFJP(LCIX1); IF SY = THENSY THEN INSYMBOL ELSE ERROR(52); STATEMENT(FSYS + [ELSþ¸†ESY]); IF SY = ELSESY THEN BEGIN GENLABEL(LCIX2); GENUJPXJP(57(*UJP*),LCIX2); PUTLABEL(LCIX1); INSYMBOL; STATEMENT(FSYS); PUTLABEL(LCIX2) END ELSE PUTLABEL(LCIX1) þ…· END (*IFSTATEMENT*) ; PROCEDURE CASESTATEMENT; LABEL 1; TYPE CIP = ^CASEINFO; CASEINFO = PACKED RECORD NEXT: CIP; CSSTART: INTEGER; þ»™ CSLAB: INTEGER END; VAR LSP,LSP1: STP; FSTPTR,LPT1,LPT2,LPT3: CIP; LVAL: VALU; LADDR, LCIX, LCIX1, LMIN, LMAX: INTEGER; BEGIN EXPRESSION(FSYS + [OFSY,COMMA,COLON]); LOAD; LSP þo%:= GATTR.TYPTR; IF LSP <> NIL THEN IF (LSP^.FORM <> SCALAR) OR (LSP = REALPTR) THEN BEGIN ERROR(144); LSP := NIL END ELSE IF NOT COMPTYPES(LSP,INTPTR) THEN GEN0T(58(*ORD*),LSP); (*BUG CORRECTION þfHBY A.F. ON 11/11/76*) GENLABEL(LCIX); GENUJPXJP(57(*UJP*),LCIX); IF SY = OFSY THEN INSYMBOL ELSE ERROR(8); FSTPTR := NIL; GENLABEL(LADDR); REPEAT LPT3 := NIL; GENLABEL(LCIX1); IF NOT(SY IþùN [SEMICOLON,ENDSY]) THEN BEGIN REPEAT CONSTANT(FSYS + [COMMA,COLON],LSP1,LVAL); IF LSP <> NIL THEN IF COMPTYPES(LSP,LSP1) THEN BEGIN LPT1 := FSTPTR; LPT2 := NIL; Wþ 0HILE LPT1 <> NIL DO WITH LPT1^ DO BEGIN IF CSLAB <= LVAL.IVAL THEN BEGIN IF CSLAB = LVAL.IVAL THEN ERROR(156); GOTO 1 þC END; LPT2 := LPT1; LPT1 := NEXT END; 1: NEW(LPT3); WITH LPT3^ DO BEGIN NEXT := LPT1; CSLAB := LVAL.IVAL; þ¥5 CSSTART := LCIX1 END; IF LPT2 = NIL THEN FSTPTR := LPT3 ELSE LPT2^.NEXT := LPT3 END ELSE ERROR(147); TEST := SY <> COMMA; IF NOT TþR¨EST THEN INSYMBOL UNTIL TEST; IF SY = COLON THEN INSYMBOL ELSE ERROR(5); PUTLABEL(LCIX1); REPEAT STATEMENT(FSYS + [SEMICOLON]) UNTIL NOT (SY IN STATBEGSYS); IF LPT3 <> NIL THEN þ.6 GENUJPXJP(57(*UJP*),LADDR); END; TEST := SY <> SEMICOLON; IF NOT TEST THEN INSYMBOL UNTIL TEST; PUTLABEL(LCIX); IF FSTPTR <> NIL THEN BEGIN LMAX := FSTPTR^.CSLAB; þ©´ (*REVERSE POINTERS*) LPT1 := FSTPTR; FSTPTR := NIL; REPEAT LPT2 := LPT1^.NEXT; LPT1^.NEXT := FSTPTR; FSTPTR := LPT1; LPT1 := LPT2 UNTIL LPT1 = NIL; LMIN := FSTPTR^.CSLAB; þe} IF LMAX - LMIN < CIXMAX THEN BEGIN GEN2T(45(*CHK*),LMIN,LMAX,INTPTR); GEN2(51(*LDC*),1,LMIN); GEN0(21(*SBI*)); GENLABEL(LCIX); GENUJPXJP(44(*XJP*),LCIX); PUTLABEL(LCIX); þ‡n REPEAT WITH FSTPTR^ DO BEGIN WHILE CSLAB > LMIN DO BEGIN GEN0(60(*UJC ERROR*)); LMIN := LMIN+1 ENDþÉG; GENUJPXJP(57(*UJP*),CSSTART); FSTPTR := NEXT; LMIN := LMIN + 1 END  UNTIL FSTPTR = NIL; PUTLABEL(LADDR) END ELSE ERROR(þì‘157) END; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13) END (*CASESTATEMENT*) ; PROCEDURE REPEATSTATEMENT; VAR LADDR: INTEGER; BEGIN GENLABEL(LADDR); PUTLABEL(LADDR); REPEAT STATEMENT(FSYS +þ˜ [SEMICOLON,UNTILSY]); IF SY IN STATBEGSYS THEN ERROR(14) UNTIL NOT(SY IN STATBEGSYS); WHILE SY = SEMICOLON DO BEGIN INSYMBOL; REPEAT STATEMENT(FSYS + [SEMICOLON,UNTILSY]); IF SY IN þÇXSTATBEGSYS THEN ERROR(14) UNTIL NOT (SY IN STATBEGSYS); END; IF SY = UNTILSY THEN BEGIN INSYMBOL; EXPRESSION(FSYS); GENFJP(LADDR) END ELSE ERROR(53) END (*REPEATSTATEMENT*) ; þ@e PROCEDURE WHILESTATEMENT; VAR LADDR, LCIX: INTEGER; BEGIN GENLABEL(LADDR); PUTLABEL(LADDR);  EXPRESSION(FSYS + [DOSY]); GENLABEL(LCIX); GENFJP(LCIX); IF SY = DOSY THEN INSYMBOL ELSE ERROR(54); STATEMENT(þ^lFSYS); GENUJPXJP(57(*IJP*),LADDR); PUTLABEL(LCIX) END (*WHILESTATEMENT*) ; PROCEDURE FORSTATEMENT; VAR LATTR: ATTR; LSP: STP; LSY: SYMBOL; LCIX, LADDR: INTEGER; LLC: ADDRRANGE; BEGIN LLCþ‚ := LC; WITH LATTR DO BEGIN TYPTR := NIL; KIND := VARBL; ACCESS := DRCT; VLEVEL := LEVEL; DPLMT := 0 END; IF SY = IDENT THEN BEGIN SEARCHID([VARS],LCP); WITH LCP^, LATTR DOþ v BEGIN TYPTR := IDTYPE; KIND := VARBL; IF VKIND = ACTUAL THEN BEGIN ACCESS := DRCT; VLEVEL := VLEV; DPLMT := VADDR END ELSE BEGIN ERROR(155); þA TYPTR := NIL END END; IF LATTR.TYPTR <> NIL THEN IF (LATTR.TYPTR^.FORM > SUBRANGE) OR COMPTYPES(REALPTR,LATTR.TYPTR) THEN BEGIN ERROR(143); LATTR.TYPTR := NIL END; þ¬Ô INSYMBOL END ELSE BEGIN ERROR(2); SKIP(FSYS + [BECOMES,TOSY,DOWNTOSY,DOSY]) END; IF SY = BECOMES THEN BEGIN INSYMBOL; EXPRESSION(FSYS + [TOSY,DOWNTOSY,DOSY]); IF GATTR.TYPTR <> NIL þ‚\THEN IF GATTR.TYPTR^.FORM <> SCALAR THEN ERROR(144)  ELSE IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN BEGIN LOAD; STORE(LATTR) END ELSE ERROR(145) EþßÅND ELSE BEGIN ERROR(51); SKIP(FSYS + [TOSY,DOWNTOSY,DOSY]) END; IF SY IN [TOSY,DOWNTOSY] THEN BEGIN LSY := SY; INSYMBOL; EXPRESSION(FSYS + [DOSY]); IF GATTR.TYPTR <> NIL THEN IF GATTR.þJmTYPTR^.FORM <> SCALAR THEN ERROR(144) ELSE  IF COMPTYPES(LATTR.TYPTR,GATTR.TYPTR) THEN BEGIN LOAD; IF NOT COMPTYPES(LATTR.TYPTR,INTPTR) THEN GEN0T(58(*ORD*),þ[1GATTR.TYPTR); ALIGN(INTPTR,LC); GEN2T(56(*STR*),0,LC,INTPTR); GENLABEL(LADDR); PUTLABEL(LADDR); GATTR := LATTR; LOAD; IF NOT COMPTYPES(GATTR.TYPTRþ€´,INTPTR) THEN GEN0T(58(*ORD*),GATTR.TYPTR); GEN2T(54(*LOD*),0,LC,INTPTR); LC := LC + INTSIZE; IF LC > LCMAX THEN LCMAX := LC; IF LSY = TOSY THENþ#' GEN2(52(*LEQ*),ORD('I'),1) ELSE GEN2(48(*GEQ*),ORD('I'),1); END ELSE ERROR(145) END ELSE BEGIN ERROR(55); SKIP(FSYS + [DOSY]) END; GENLABEL(LCIX); GENUJPXJP(33(*FJþÖP*),LCIX); IF SY = DOSY THEN INSYMBOL ELSE ERROR(54); STATEMENT(FSYS); GATTR := LATTR; LOAD; IF LSY=TOSY THEN GEN1T(34(*INC*),1,GATTR.TYPTR) ELSE GEN1T(31(*DEC*),1,GATTR.TYPTR); STORE(LATTR); GENþƒßUJPXJP(57(*UJP*),LADDR); PUTLABEL(LCIX); LC := LLC; END (*FORSTATEMENT*) ; PROCEDURE WITHSTATEMENT; VAR LCP: CTP; LCNT1: DISPRANGE; LLC: ADDRRANGE; BEGIN LCNT1 := 0; LLC := LC; REPEAT IF SþY = IDENT THEN BEGIN SEARCHID([VARS,FIELD],LCP); INSYMBOL END ELSE BEGIN ERROR(2); LCP := UVARPTR END; SELECTOR(FSYS + [COMMA,DOSY],LCP); IF GATTR.TYPTR <> NIL THEN IF GATTR.TYPTR^.FORM = RECOþűRDS THEN IF TOP < DISPLIMIT THEN BEGIN TOP := TOP + 1; LCNT1 := LCNT1 + 1; WITH DISPLAY[TOP] DO BEGIN FNAME := GATTR.TYPTR^.FSTFLD; FLABEL := NIL þS¾ END;  IF GATTR.ACCESS = DRCT THEN WITH DISPLAY[TOP] DO BEGIN OCCUR := CREC; CLEV := GATTR.VLEVEL; CDSPL := GATTR.DPLMT END þy~ ELSE BEGIN LOADADDRESS; ALIGN(NILPTR,LC); GEN2T(56(*STR*),0,LC,NILPTR); WITH DISPLAY[TOP] DO BEGIN OCCUR := VREC; VDSPL :=þ¢ç LC END;  LC := LC+PTRSIZE; IF LC > LCMAX THEN LCMAX := LC END END ELSE ERROR(250) ELSE ERROR(140); TEST := SY <> COMMA; þ“É IF NOT TEST THEN INSYMBOL UNTIL TEST; IF SY = DOSY THEN INSYMBOL ELSE ERROR(54); STATEMENT(FSYS); TOP := TOP-LCNT1; LC := LLC; END (*WITHSTATEMENT*) ; BEGIN (*STATEMENT*) IF SY = INTCONSTþ¾4 THEN (*LABEL*) BEGIN LLP := DISPLAY[TOP].FLABEL; WHILE LLP <> NIL DO WITH LLP^ DO IF LABVAL = VAL.IVAL THEN BEGIN IF DEFINED THEN ERROR(165); PUTLABEL(LABNAME); DEFIþÛÂNED := TRUE; GOTO 1 END ELSE LLP := NEXTLAB; ERROR(167); 1: INSYMBOL; IF SY = COLON THEN INSYMBOL ELSE ERROR(5) END; IF NOT (SY IN FSYS + [IDENT]) THENþ¡i BEGIN ERROR(6); SKIP(FSYS) END; IF SY IN STATBEGSYS + [IDENT] THEN BEGIN CASE SY OF IDENT: BEGIN SEARCHID([VARS,FIELD,FUNC,PROC],LCP); INSYMBOL; IF LCP^.KLASS = PROC THEN Cþ›çALL(FSYS,LCP) ELSE ASSIGNMENT(LCP) END; BEGINSY: BEGIN INSYMBOL; COMPOUNDSTATEMENT END; GOTOSY: BEGIN INSYMBOL; GOTOSTATEMENT END; IFSY: BEGIN INSYMBOL; IFSTþ»¦ATEMENT END; CASESY: BEGIN INSYMBOL; CASESTATEMENT END; WHILESY: BEGIN INSYMBOL; WHILESTATEMENT END; REPEATSY: BEGIN INSYMBOL; REPEATSTATEMENT END; FORSY: BEGIN INSYMBOL; FORSTATEMENT END; þ¬C WITHSY: BEGIN INSYMBOL; WITHSTATEMENT END END; IF NOT (SY IN [SEMICOLON,ENDSY,ELSESY,UNTILSY]) THEN BEGIN ERROR(6); SKIP(FSYS) END END END (*STATEMENT*) ; BEGIN (*BODY*) IF FPROCP þ‡e<> NIL THEN ENTNAME := FPROCP^.PFNAME ELSE GENLABEL(ENTNAME); IF PRCODE THEN BEGIN WRITELN(PRR); IF EXTN THEN WRITELN(PRR,' .ENT ?',FPROCP^.NAME) ELSE BEGIN WRITE(PRR,' .ENT L',ENTNAME:1,';':3); þßh IF FPROCP <> NIL THEN WRITE(PRR,FPROCP^.NAME:5) ELSE WRITE(PRR,'MAIN'); WRITELN(PRR) END; WRITELN(PRR) END; IF EXTN THEN WRITELN(PRR,'?',FPROCP^.NAME,':'); þýÕ PARMSUM := 0; CSTPTRIX := 0; TOPNEW := LCAFTERMARKSTACK; TOPMAX := LCAFTERMARKSTACK; PUTLABEL(ENTNAME); GENLABEL(SEGSIZE); GENLABEL(STACKTOP); GENCUPENT(32(*ENT1*),1,SEGSIZE); GENCUPENT(32(*ENT2*),2,STACKTOP); IF FPROCP <> NIL þÈ¡THEN (*COPY MULTIPLE VALUES INTO LOACAL CELLS*) BEGIN LLC1 := LCAFTERMARKSTACK; LCP := FPROCP^.NEXT; IF EXTN THEN BEGIN GENLABEL(PARMNO); GENCUPENT(32(*ENT3*),3,PARMNO) END; WHILE LCP <> Nþ…ìIL DO WITH LCP^ DO BEGIN IF KLASS = VARS THEN IF IDTYPE <> NIL THEN IF (VKIND=ACTUAL) AND (IDTYPE^.FORM>POWER) THEN BEGIN GEN2(50(þ¡Q*LDA*),0,VADDR); GEN2T(54(*LOD*),0,LLC1,NILPTR); PARMSUM := PARMSUM + PTRSIZE; GEN1(40(*MOV*),IDTYPE^.SIZE);  LLC1 := LLC1 + PTRSIZE END þáß ELSE BEGIN IF VKIND = ACTUAL THEN BEGIN PARMSUM := PARMSUM + IDTYPE^.SIZE; LLC1 := LLC1 + IDTYPE^.SIZE END þî‹ ELSE BEGIN PARMSUM := PARMSUM + PTRSIZE; LLC1 := LLC1 + PTRSIZE END;  ALIGN(PARMPTR,LLC1); ALIGN(PARMPTR,PARMSþ©\UM) END; LCP := LCP^.NEXT; END; END ELSE BEGIN SAVEID := ID; LOCFP := FEXTFILEP; WHILE LOCFP <> NIL DO BEGIN þRœ WITH LOCFP^ DO BEGIN ID := FILENAME; SEARCHID([VARS],LLCP);  IF LLCP^.IDTYPE <> NIL THEN IF LLCP^.IDTYPEþãl^.FORM <> FILES THEN BEGIN WRITELN(OUTPUT); WRITELN(OUTPUT,' ':8,'UNDECLARED ', 'EXTERNAL ','FILE',ID:8); þV‹ WRITE (OUTPUT,' ':CHCNT+16); END END;  LOCFP := LOCFP^.NEXTFILE END; ID := SAVEID; þ™[ OPENFILES(FEXTFILEP); END; OPENFILES(FLOCFP); LCMAX := LC; REPEAT REPEAT STATEMENT(FSYS + [SEMICOLON,ENDSY]) UNTIL NOT (SY IN STATBEGSYS); TEST := SY <> SEMICOLON; IF NOT TEST THEN INþæÛSYMBOL UNTIL TEST; IF SY = ENDSY THEN INSYMBOL ELSE ERROR(13); LLP := DISPLAY[TOP].FLABEL; (*TEST FOR UNDEFINED LABELS*)  WHILE LLP <> NIL DO WITH LLP^ DO BEGIN IF NOT DEFINED THEN BEGIN ERþ<ROR(168); WRITELN(OUTPUT); WRITELN(OUTPUT,' LABEL ',LABVAL); WRITE(OUTPUT,' ':CHCNT+16) END; LLP := NEXTLAB END; CLOSEFILES(FLOCFP); IF FPROCP <> NIL THEN BEGIN þ·m IF FPROCP^.IDTYPE = NIL THEN GEN1(42(*RET*),ORD('P')) ELSE GEN0T(42(*RET*),FPROCP^.IDTYPE); END ELSE BEGIN CLOSEFILES(FEXTFILEP); GEN1(42(*RET*),ORD('P')); END; ALIGN(PARMPTR,LCMAX);þêæ IF PRCODE THEN BEGIN WRITELN(PRR,'L',' ',SEGSIZE:4,'=',LCMAX:9); WRITELN(PRR,'L',' ',STACKTOP:4,'=',TOPMAX:9); END; IF (EXTN AND PRCODE) THEN WRITELN(PRR,'L',' ',PARMNO:4,'=',PARMSUM:9); IF FþÚ6PROCP = NIL THEN BEGIN IF PRCODE THEN WRITELN (PRR,'PCODE: '); IC := 0; (*GENERATE CALL OF MAIN PROGRAM; NOTE THAT THIS CALL MUST BE LOADED AT ABSOLUTE ADDRESS ZERO*) GEN1(41(*MST*),0); GENCUPENT(46(*CUPþvT*),0,ENTNAME); GEN0(29(*STP*)); END; END (*BODY*) ; BEGIN (*BLOCK*) FLOCFP := NIL; DP := TRUE; REPEAT IF SY = LABELSY THEN IF NOTEXTDEC THEN BEGIN INSYMBOL; LABELDECLARATION END ELSE BEþþXGIN ERROR(350); SKIP(FSYS-[LABELSY]) END; IF SY = CONSTSY THEN BEGIN INSYMBOL; CONSTDECLARATION END; IF SY = TYPESY THEN BEGIN INSYMBOL; TYPEDECLARATION END; IF SY = VARSY THEN IF NOTEXTDEC THEN BEGIþ¬7N INSYMBOL; VARDECLARATION END ELSE BEGIN ERROR(351); SKIP(FSYS-[VARSY]) END; WHILE SY IN [PROCSY,FUNCSY] DO BEGIN LSY := SY; INSYMBOL; PROCDECLARATION(LSY) END; IF NOTEXTDEC THEN IF SY <> BEGINSY THEN þ|ñ BEGIN ERROR(18); SKIP(FSYS) END UNTIL ((SY IN STATBEGSYS) OR EOF(INPUT)) OR (( SY = PERIOD ) AND EXTN); IF NOTEXTDEC AND (SY <> PERIOD) THEN BEGIN DP := FALSE; IF SY = BEGINSY THEN INSYMBOL ELSE ERROR(17); þá REPEAT BODY(FSYS + [CASESY]); IF (SY <> FSY) AND NOT(EXTN AND (SY = PERIOD)) THEN BEGIN ERROR(6); SKIP(FSYS) END UNTIL (((SY = FSY) OR (SY IN BLOCKBEGSYS)) OR EOF(INPUT)) OR (EXTN AND (SY = PERIOD)) ENDþŠO ELSE BEGIN ERROR(174); NOTEXTDEC := TRUE END END (*BLOCK*) ; PROCEDURE PROGRAMME(FSYS:SETOFSYS); VAR LEXTFP,PEXTFP,EXTFP:EXTFILEP; FILECOUNT : INTEGER; LLCP : CTP; EXTN : BOOLEAN; BEGIN IF SY = PROGSY THEN BEGIN INSYMBOL; EXTN:=þŽFALSE END ELSE EXTN := TRUE; IF SY = IDENT THEN BEGIN IF PRCODE THEN BEGIN (******** NOVA CONTROL STATEMENTS ******) (*****************************************) WRITELN(PRR,' .TITL ',ID:5); þùIF NOT(EXTN) THEN WRITELN(PRR,' .ENT PCODE'); END;  INSYMBOL; FILECOUNT := 0; EXTFP := NIL; IF NOT (SY IN [LPARENT,SEMICOLON]) THEN ERROR(14); IF SY = LPARENT THEN BEGIN REPEAT INSYMBOL; þžU IF SY = IDENT THEN BEGIN NEW(EXTFP); WITH EXTFP^ DO BEGIN FILENAME := ID; IF ((FILENAME = NA[3]) OR (FILENAME = NA[4]) OR (FILENAþÊeME = NA[33]) OR (FILENAME = NA[34]))  THEN BEGIN NEW(LLCP,VARS); WITH LLCP^ DO BEGIN NAME := FILENAME; IDTYPE := TEXTPTR; þèL KLASS := VARS; VKIND := ACTUAL; NEXT := NIL; VADDR := LCAFTERMARKSTACK+FILEMAX*FILECOUNT+4; VLEV := 1; FILECOUNT := FILECOUNT + 1 END; þÎ ENTERID(LLCP);  FTYPE := LLCP END; NEXTFILE := FEXTFILEP END; FEXTFILEP := EXTFP; INSYMBOLþ«‰; IF NOT ( SY IN [COMMA,RPARENT] ) THEN ERROR(20) END ELSE ERROR(2) UNTIL SY <> COMMA; IF SY <> RPARENT THEN ERROR(4); INSYMBOL END; IF SY <> SEMICOLON THþE EN ERROR(14) ELSE INSYMBOL; PEXTFP := NIL; WHILE EXTFP <> NIL DO BEGIN LEXTFP := EXTFP; WITH LEXTFP^ DO BEGIN EXTFP := NEXTFILE; NEXTFILE := PEXTFP END; PEXTFP := LEXTFP þ5B END; FEXTFILEP := PEXTFP; (*POINTERS ARE REVERSED*) END ELSE IF PRCODE THEN WRITELN(PRR,' .TITL EXTSEG'); IF PRCODE THEN BEGIN WRITELN(PRR,' .TXTM 1'); WRITELN(PRR,' .RDX 10'); WRITELN(PRR,' .Nþ6DREL'); END; REPEAT BLOCK(FSYS,PERIOD,NIL,NOT(EXTN),EXTN); IF SY <> PERIOD THEN ERROR(21) UNTIL (SY = PERIOD) OR EOF(INPUT); WRITELN(OUTPUT); WRITELN(OUTPUT); IF PRCODE THEN WRITELN(PRR,' .END'); IF EXTN AND NOT ERRFLAG THEN þç;HALT(318); IF ERRINX <> 0 THEN INSYMBOL END (*PROGRAMME*) ; PROCEDURE STDNAMES; BEGIN NA[ 1] := 'FALSE '; NA[ 2] := 'TRUE '; NA[ 3] := 'INPUT '; NA[ 4] := 'OUTPUT '; NA[ 5] := 'GET '; NA[ 6] := 'PUT '; NA[ 7] := 'RESþ+"ET '; NA[ 8] := 'REWRITE '; NA[ 9] := 'READ '; NA[10] := 'WRITE '; NA[11] := 'PACK '; NA[12] := 'UNPACK '; NA[13] := 'NEW '; NA[14] := 'RELEASE '; NA[15] := 'READLN '; NA[16] := 'WRITELN '; NA[17] := 'ABS '; NA[18] := 'SþÒ¥QR '; NA[19] := 'TRUNC '; NA[20] := 'ODD '; NA[21] := 'ORD '; NA[22] := 'CHR '; NA[23] := 'PRED '; NA[24] := 'SUCC '; NA[25] := 'EOF '; NA[26] := 'EOLN '; NA[27] := 'SIN '; NA[28] := 'COS '; NA[29] := þR'EXP '; NA[30] := 'SQRT '; NA[31] := 'LN '; NA[32] := 'ARCTAN '; NA[33] := 'PRD '; NA[34] := 'PRR '; NA[35] := 'MARK '; NA[36] := 'PUTRANDO'; NA[37] := 'GETRANDO'; NA[38] := 'PAGE '; NA[39] := 'EOR '; NA[40] :þšW= 'ROUND '; NA[41] := 'HALT '; END (*STDNAMES*) ; PROCEDURE ENTERSTDTYPES; VAR SP: STP; BEGIN (*TYPE UNDERLIEING:*) (******************þ¶ƒ*) NEW(INTPTR,SCALAR,STANDARD); (*INTEGER*) WITH INTPTR^ DO BEGIN SIZE := INTSIZE; FORM := SCALAR; SCALKIND := STANDARD END; NEW(REALPTR,SCALAR,STANDARD); (*REAL*) WITH REALPTRþ¡+^ DO BEGIN SIZE := REALSIZE; FORM := SCALAR; SCALKIND := STANDARD END; NEW(CHARPTR,SCALAR,STANDARD); (*CHAR*) WITH CHARPTR^ DO BEGIN SIZE := CHARSIZE; FORM := SCALAR; SCALKIND := STANDARD END; NEW(BOOLPTRþ#Ž,SCALAR,DECLARED); (*BOOLEAN*) WITH BOOLPTR^ DO BEGIN SIZE := BOOLSIZE; FORM := SCALAR; SCALKIND := DECLARED END; NEW(NILPTR,POINTER); (*NIL*) WITH NILPTR^ DO BEGIN ELþPäTYPE := NIL; SIZE := PTRSIZE; FORM := POINTER END; NEW(PARMPTR,SCALAR,STANDARD); (*FOR ALIGNMENT OF PARAMETERS*) WITH PARMPTR^ DO BEGIN SIZE := PARMSIZE; FORM := SCALAR; SCALKIND := STANDARD END ; NEW(TEXTPTR,FILES); þ£M (*TEXT*) WITH TEXTPTR^ DO BEGIN FILTYPE := CHARPTR; SIZE := CHARSIZE; FORM := FILES; RANDOMFILE := FALSE END END (*ENTERSTDTYPES*) ; PROCEDURE ENTSTDNAMES; VAR CP,CP1: CTP; I: INTEGER; BEGIN þ0ô (*NAME:*) (*******) NEW(CP,TYPES); (*INTEGER*) WITH CP^ DO BEGIN NAME := 'INTEGER '; IDTYPE := þàINTPTR; KLASS := TYPES END; ENTERID(CP); NEW(CP,TYPES); (*REAL*) WITH CP^ DO BEGIN NAME := 'REAL '; IDTYPE := REALPTR; KLASS := TYPES END; ENTERID(CP); NEW(CP,TYPES); þÙö (*CHAR*) WITH CP^ DO BEGIN NAME := 'CHAR '; IDTYPE := CHARPTR; KLASS := TYPES END; ENTERID(CP); NEW(CP,TYPES);  (*BOOLEAN*) WITH CP^ DO BEGIN NAME := 'BOOLEAþgÑN '; IDTYPE := BOOLPTR; KLASS := TYPES END; ENTERID(CP); CP1 := NIL; FOR I := 1 TO 2 DO BEGIN NEW(CP,KONST); (*FALSE,TRUE*) WITH CP^ DO BEGIN NAME := NA[I]; IDTYPE := BOOLPTR; þ§[ NEXT := CP1; VALUES.IVAL := I - 1; KLASS := KONST END; ENTERID(CP); CP1 := CP END; BOOLPTR^.FCONST := CP; NEW(CP,KONST);  (*NIL*) WITH CP^ DO BEGIN NAME := 'NIL '; þ?6IDTYPE := NILPTR; NEXT := NIL; VALUES.IVAL := 0; KLASS := KONST END; ENTERID(CP); FOR I := 36 TO 37 DO (*GETRANDOM,PUTRANDOM*) BEGIN NEW(CP,PROC,STANDARD); WITH CP^ DO BEGIN NAME := þKýNA[I]; IDTYPE := NIL; NEXT := NIL; KEY := I-22; KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP) END; NEW(CP,PROC,STANDARD); (*PAGE*) WITH CP^ DO þ%K BEGIN NAME := NA[38]; IDTYPE := NIL; NEXT := NIL; KEY := 16; KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP); NEW(CP,PROC,STANDARD); (*HALT*) WITH CP^ DOþiÄ BEGIN NAME := NA[41]; IDTYPE := NIL; NEXT := NIL; KEY := 17; KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP);  NEW(CP,FUNC,STANDARD); (*EOR*) WITH CP^ DOþj BEGIN NAME := NA[39]; IDTYPE := NIL; NEXT := NIL; KEY := 9; KLASS := FUNC; PFDECKIND := STANDARD END; ENTERID(CP); NEW(CP,FUNC,STANDARD); (*ROUND*) WITH CP^ þ,pDO BEGIN NAME := NA[40]; IDTYPE := NIL; NEXT := NIL; KEY := 12; KLASS := FUNC; PFDECKIND := STANDARD END; ENTERID(CP); FOR I := 5 TO 16 DO BEGIN NEW(CP,PROC,STANDARD); (*GET,PþÍëUT,RESET*) WITH CP^ DO (*REWRITE,READ*) BEGIN NAME := NA[I]; IDTYPE := NIL; (*WRITE,PACK*) NEXT := NIL; KEY := I - 4; (*UNPACK,PACK*) þ¸ø KLASS := PROC; PFDECKIND := STANDARD END; ENTERID(CP) END; NEW(CP,PROC,STANDARD); WITH CP^ DO BEGIN NAME:=NA[35]; IDTYPE:=NIL; NEXT:= NIL; KEY:=13; KLASS:=PROC; PFDECKIND:= STANDARD þúô END; ENTERID(CP); FOR I := 25 TO 26 DO BEGIN NEW(CP,FUNC,STANDARD); WITH CP^ DO BEGIN NAME := NA[I]; IDTYPE := NIL; NEXT := NIL; KEY := I - 15; KLASS := FUNC; PFDECKIND := STANDARD ENDþÈ,; ENTERID(CP) END; FOR I := 17 TO 24 DO BEGIN NEW(CP,FUNC,STANDARD); (*ABS,SQR,TRUNC*) WITH CP^ DO (*ODD,ORD,CHR*) BEGIN NAME := NA[I]; IDTYPEþì := NIL; (*PRED,SUCC*) NEXT := NIL; KEY := I - 16; KLASS := FUNC; PFDECKIND := STANDARD END; ENTERID(CP) END; NEW(CP,VARS); (*PARAMETER OF PREDECLARED FUNCTIONS*) WITþÑYH CP^ DO BEGIN NAME := ' '; IDTYPE := REALPTR; KLASS := VARS; VKIND := ACTUAL; NEXT := NIL; VLEV := 1; VADDR := 0 END; FOR I := 27 TO 32 DO BEGIN NEW(CP1,FUNC,DECLARED,ACTUAL); (*SIN,COS,EXP*) þ=! WITH CP1^ DO (*SQRT,LN,ARCTAN*) BEGIN NAME := NA[I]; EXTDEC := FALSE; IDTYPE := REALPTR; NEXT := CP; FORWDECL := FALSE; EXTERN := TRUE; PFLEV := 0; PFNAME := I - 12; KLASS := FUNC; PFþV]DECKIND := DECLARED; PFKIND := ACTUAL END; ENTERID(CP1) END END (*ENTSTDNAMES*) ; PROCEDURE ENTERUNDECL; BEGIN NEW(UTYPPTR,TYPES); WITH UTYPPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; KLASS := TYPES END; þ£î NEW(UCSTPTR,KONST); WITH UCSTPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; NEXT := NIL; VALUES.IVAL := 0; KLASS := KONST END; NEW(UVARPTR,VARS); WITH UVARPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; VKIND := AþÞîCTUAL; NEXT := NIL; VLEV := 0; VADDR := 0; KLASS := VARS END; NEW(UFLDPTR,FIELD); WITH UFLDPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; NEXT := NIL; FLDADDR := 0; KLASS := FIELD END; NEW(UPRCPTR,PROC,DECLARþopED,ACTUAL); WITH UPRCPTR^ DO BEGIN NAME := ' '; IDTYPE := NIL; FORWDECL := FALSE; EXTDEC := FALSE; NEXT := NIL; EXTERN := FALSE; PFLEV := 0; GENLABEL(PFNAME); KLASS := PROC; PFDECKIND := DECLARED; PFKIND := ACTUAL ENDþ{; NEW(UFCTPTR,FUNC,DECLARED,ACTUAL); WITH UFCTPTR^ DO BEGIN NAME := ' '; EXTDEC := FALSE; IDTYPE := NIL; NEXT := NIL; FORWDECL := FALSE; EXTERN := FALSE; PFLEV := 0; GENLABEL(PFNAME); KLASS := FUNC; PFDECKIND := DECLAREþ62D; PFKIND := ACTUAL END END (*ENTERUNDECL*) ; PROCEDURE INITSCALARS; BEGIN FWPTR := NIL; PRTABLES := FALSE; LIST := TRUE; PRCODE := TRUE; DEBUG := TRUE; ERRFLAG := FALSE; FOR IC := 1 TO MAXERRSET DO ERRORS[IC] := []; þZw DP := FALSE; PRTERR := TRUE; ERRINX := 0; INTLABEL := 0; KK := 8; FEXTFILEP := NIL; LC := LCAFTERMARKSTACK+FILEBUFFER*FILEMAX; (* NOTE IN THE ABOVE RESERVATION OF BUFFER STORE FOR 2 TEXT FILES *) IC := 3; EOL := TRUE; LINECOUNT := 0; þzÕ CH := ' '; CHCNT := 0; GLOBTESTP := NIL; MXINT10 := MAXINT DIV 10; DIGMAX := STRGLGTH - 1; END (*INITSCALARS*) ; PROCEDURE INITSETS; BEGIN CONSTBEGSYS := [ADDOP,INTCONST,REALCONST,STRINGCONST,IDENT]; SIMPTYPEBEGSYS := [LPARENT] + CþëDONSTBEGSYS; TYPEBEGSYS:=[ARROW,PACKEDSY,ARRAYSY,RECORDSY,SETSY,FILESY,RANDOMSY]+SIMPTYPEBEGSYS; TYPEDELS := [ARRAYSY,RECORDSY,SETSY,FILESY]; BLOCKBEGSYS := [LABELSY,CONSTSY,TYPESY,VARSY,PROCSY,FUNCSY, BEGINSY]; SELECTSYSþ_Q := [ARROW,PERIOD,LBRACK]; FACBEGSYS := [INTCONST,REALCONST,STRINGCONST,IDENT,LPARENT,LBRACK,NOTSY]; STATBEGSYS := [BEGINSY,GOTOSY,IFSY,WHILESY,REPEATSY,FORSY,WITHSY, CASESY]; END (*INITSETS*) ; PROCEDURE INITTABLES; PROþ[CEDURE RESWORDS; BEGIN RW[ 1] := 'IF '; RW[ 2] := 'DO '; RW[ 3] := 'OF '; RW[ 4] := 'TO '; RW[ 5] := 'IN '; RW[ 6] := 'OR '; RW[ 7] := 'END '; RW[ 8] := 'FOR '; RW[ 9] := 'VAR '; RW[10þ§…] := 'DIV '; RW[11] := 'MOD '; RW[12] := 'SET '; RW[13] := 'AND '; RW[14] := 'NOT '; RW[15] := 'THEN '; RW[16] := 'ELSE '; RW[17] := 'WITH '; RW[18] := 'GOTO '; RW[19] := 'CASE '; RW[20] := 'TYPE '; þ)5 RW[21] := 'FILE '; RW[22] := 'BEGIN '; RW[23] := 'UNTIL '; RW[24] := 'WHILE '; RW[25] := 'ARRAY '; RW[26] := 'CONST '; RW[27] := 'LABEL '; RW[28] := 'REPEAT '; RW[29] := 'RECORD '; RW[30] := 'DOWNTO '; RW[3þ�1] := 'PACKED '; RW[32] := 'RANDOM '; RW[33] := 'FORWARD '; RW[34] := 'PROGRAM '; RW[35] := 'FUNCTION'; RW[36] := 'EXTERNAL'; RW[37] := 'PROCEDUR'; FRW[1] := 1; FRW[2] := 1; FRW[3] := 7; FRW[4] := 15; FRW[5] := 22; FRW[6] := 28þåÞ; FRW[7] := 33; FRW[8] := 35; FRW[9] := 38; END (*RESWORDS*) ; PROCEDURE SYMBOLS; BEGIN RSY[1] := IFSY; RSY[2] := DOSY; RSY[3] := OFSY; RSY[4] := TOSY; RSY[5] := RELOP; RSY[6] := ADDOP; RSY[7] := ENDSY; RSY[8] := FORSY; RSY[9þr©] := VARSY; RSY[10] := MULOP; RSY[11] := MULOP; RSY[12] := SETSY; RSY[13] := MULOP; RSY[14] := NOTSY; RSY[15] := THENSY; RSY[16] := ELSESY; RSY[17] := WITHSY; RSY[18] := GOTOSY; RSY[19] := CASESY; RSY[20] := TYPESY; RSY[21] := FILESþ$¶Y; RSY[22] := BEGINSY; RSY[23] := UNTILSY; RSY[24] := WHILESY; RSY[25] := ARRAYSY; RSY[26] := CONSTSY; RSY[27] := LABELSY; RSY[28] := REPEATSY; RSY[29] := RECORDSY; RSY[30] := DOWNTOSY; RSY[31] := PACKEDSY; RSY[32] := RANDOMSY; RSY[þj33] := FORWARDSY; RSY[34] := PROGSY; RSY[35] := FUNCSY; RSY[36] := EXTRNSY; RSY[37] := PROCSY; SSY['+'] := ADDOP; SSY['-'] := ADDOP; SSY['*'] := MULOP; SSY['/'] := MULOP; SSY['('] := LPARENT; SSY[')'] := RPARENT; SSY['$'] := Oþ’ÃTHERSY; SSY['='] := RELOP; SSY[' '] := OTHERSY; SSY[','] := COMMA; SSY['.'] := PERIOD; SSY[''''] := OTHERSY; SSY['['] := LBRACK; SSY[']'] := RBRACK; SSY[':'] := COLON; SSY['^'] := ARROW; SSY['<'] := RELOP; SSY['>'] := RELOP; Sþ©¹SY[';'] := SEMICOLON; END (*SYMBOLS*) ; PROCEDURE RATORS; VAR I: INTEGER; CH: CHAR; BEGIN FOR I := 1 TO 37 (*NR OF RES WORDS*) DO ROP[I] := NOOP; ROP[5] := INOP; ROP[10] := IDIV; ROP[11] := IMOD; ROP[6] := OROP; ROP[13]þ># := ANDOP; FOR CH := CHR(ORDMINCHAR) TO CHR(ORDMAXCHAR) DO SOP[CH] := NOOP; SOP['+'] := PLUS; SOP['-'] := MINUS; SOP['*'] := MUL; SOP['/'] := RDIV; SOP['='] := EQOP; SOP['<'] := LTOP; SOP['>'] := GTOP; END (*RATORS*) ; PROCþ5¹EDURE PROCMNEMONICS; BEGIN SNA[ 1] :=' GET'; SNA[ 2] :=' PUT'; SNA[ 3] :=' RDI'; SNA[ 4] :=' RDR'; SNA[ 5] :=' RDC'; SNA[ 6] :=' WRI'; SNA[ 7] :=' WRO'; SNA[ 8] :=' WRR'; SNA[ 9] :=' WRC'; SNA[10] :=' WRS'; SNA[11] :=' OPN'; SNA[12] :þSé=' NEW'; SNA[13] :=' RST'; SNA[14] :=' ELN'; SNA[15] :=' SIN'; SNA[16] :=' COS'; SNA[17] :=' EXP'; SNA[18] :=' SQT'; SNA[19] :=' LOG'; SNA[20] :=' ATN'; SNA[21] :=' RLN'; SNA[22] :=' WLN'; SNA[23] :=' SAV'; SNA[24] :=' CLS'; SNA[25]þÜ :=' WDR'; SNA[26] :=' RRR'; SNA[27] :=' PAG'; SNA[28] :=' EOR'; SNA[29] :=' RSE'; SNA[30] :=' RWR'; SNA[31] :=' RND' END (*PROCMNEMONICS*) ; PROCEDURE INSTRMNEMONICS; BEGIN MN[0] :=' ABI'; MN[1] :=' ABR'; MN[2] :=' ADI'; MN[3] :='þ܈ ADR'; MN[4] :=' AND'; MN[5] :=' DIF'; MN[6] :=' DVI'; MN[7] :=' DVR'; MN[8] :=' EOF'; MN[9] :=' FLO'; MN[10] :=' FLT'; MN[11] :=' INN'; MN[12] :=' INT'; MN[13] :=' IOR'; MN[14] :=' MOD'; MN[15] :=' MPI'; MN[16] :=' MPR'; MN[17] :='þ< NGI'; MN[18] :=' NGR'; MN[19] :=' NOT'; MN[20] :=' ODD'; MN[21] :=' SBI'; MN[22] :=' SBR'; MN[23] :=' SGS'; MN[24] :=' SQI'; MN[25] :=' SQR'; MN[26] :=' STO'; MN[27] :=' TRC'; MN[28] :=' UNI'; MN[29] :=' STP'; MN[30] :=' CSP'; MN[31] :='þ±± DEC'; MN[32] :=' ENT'; MN[33] :=' FJP'; MN[34] :=' INC'; MN[35] :=' IND'; MN[36] :=' IXA'; MN[37] :=' LAO'; MN[38] :=' LCA'; MN[39] :=' LDO'; MN[40] :=' MOV'; MN[41] :=' MST'; MN[42] :=' RET'; MN[43] :=' SRO'; MN[44] :=' XJP'; MN[4þð55] :=' CHK'; MN[46] :=' CUP'; MN[47] :=' EQU'; MN[48] :=' GEQ'; MN[49] :=' GRT'; MN[50] :=' LDA'; MN[51] :=' LDC'; MN[52] :=' LEQ'; MN[53] :=' LES'; MN[54] :=' LOD'; MN[55] :=' NEQ';  MN[56] :=' STR'; MN[57] :=' UJP'; MN[58] :=' ORD'; MN[5þÔq9] :=' CHR'; MN[60] :=' UJC'; MN[61] := ' CXP'; MN[62] :=' HLT'; END (*INSTRMNEMONICS*) ; PROCEDURE CHARTYPES; VAR I : INTEGER; BEGIN FOR I := ORDMINCHAR TO ORDMAXCHAR DO CHARTP[CHR(I)] := ILLEGAL; CHARTP['A'] := LEþ7×TTER ; CHARTP['B'] := LETTER ; CHARTP['C'] := LETTER ; CHARTP['D'] := LETTER ; CHARTP['E'] := LETTER ; CHARTP['F'] := LETTER ; CHARTP['G'] := LETTER ; CHARTP['H'] := LETTER ; CHARTP['I'] := LETTER ; CHARTP['J'] := LETTER þ€§; CHARTP['K'] := LETTER ; CHARTP['L'] := LETTER ; CHARTP['M'] := LETTER ; CHARTP['N'] := LETTER ; CHARTP['O'] := LETTER ; CHARTP['P'] := LETTER ; CHARTP['Q'] := LETTER ; CHARTP['R'] := LETTER ; CHARTP['S'] := LETTER ; CHAþîRTP['T'] := LETTER ; CHARTP['U'] := LETTER ; CHARTP['V'] := LETTER ; CHARTP['W'] := LETTER ; CHARTP['X'] := LETTER ; CHARTP['Y'] := LETTER ; CHARTP['Z'] := LETTER ; CHARTP['0'] := NUMBER ; CHARTP['1'] := NUMBER ; CHARTP['2'] := þÞzNUMBER ; CHARTP['3'] := NUMBER ; CHARTP['4'] := NUMBER ; CHARTP['5'] := NUMBER ; CHARTP['6'] := NUMBER ; CHARTP['7'] := NUMBER ; CHARTP['8'] := NUMBER ; CHARTP['9'] := NUMBER ; CHARTP['+'] := SPECIAL; CHARTP['-'] := SPECIþê˜AL; CHARTP['*'] := SPECIAL; CHARTP['/'] := SPECIAL; CHARTP['('] := SPECIAL; CHARTP[')'] := SPECIAL; CHARTP['$'] := SPECIAL; CHARTP['='] := SPECIAL; CHARTP[' '] := SPECIAL; CHARTP[','] := SPECIAL; CHARTP['.'] := SPECIAL; CþÚòHARTP[''''] := SPECIAL; CHARTP['['] := SPECIAL; CHARTP[']'] := SPECIAL; CHARTP[':'] := SPECIAL; CHARTP['^'] := SPECIAL; CHARTP[';'] := SPECIAL; CHARTP['<'] := SPECIAL; CHARTP['>'] := SPECIAL; ORDINT['0'] := 0; ORDINT['1'] := 1; þzÍORDINT['2'] := 2; ORDINT['3'] := 3; ORDINT['4'] := 4; ORDINT['5'] := 5; ORDINT['6'] := 6; ORDINT['7'] := 7; ORDINT['8'] := 8; ORDINT['9'] := 9; END; PROCEDURE INITDX; BEGIN CDX[ 0] := 0; CDX[ 1] := 0; CDX[ 2] := -þÒ�1; CDX[ 3] := -2; CDX[ 4] := -1; CDX[ 5] := -4; CDX[ 6] := -1; CDX[ 7] := -2; CDX[ 8] := 0; CDX[ 9] := 1; CDX[10] := 1; CDX[11] := -4; CDX[12] := -4; CDX[13] := -1; CDX[14] := -1; CDX[15] := -1; CDX[16] := -2; CDX[17] := 0; CDX[þÇh18] := 0; CDX[19] := 0; CDX[20] := 0; CDX[21] := -1; CDX[22] := -2; CDX[23] := 3; CDX[24] := 0; CDX[25] := 0; CDX[26] := -2; CDX[27] := -1; CDX[28] := -4; CDX[29] := 0; CDX[30] := 0; CDX[31] := 0; CDX[32] := 0; CDX[33] := þ›-1; CDX[34] := 0; CDX[35] := 0; CDX[36] := -1; CDX[37] := +1; CDX[38] := +1; CDX[39] := +4; CDX[40] := -2; CDX[41] := 0; CDX[42] := 0; CDX[43] := -1; CDX[44] := -1; CDX[45] := 0; CDX[46] := 0; CDX[47] := -1; CDX[48] := -1; CDXþ5‹[49] := -1; CDX[50] := +1; CDX[51] := +4; CDX[52] := -1; CDX[53] := -1; CDX[54] := +4; CDX[55] := -1; CDX[56] := -1; CDX[57] := 0; CDX[58] := 0; CDX[59] := 0; CDX[60] := 0; CDX[61] := 0; CDX[62] := -1; PDX[ 1] := -1; PDX[ 2] :=þ½ -1; PDX[ 3] := -2; PDX[ 4] := -3; PDX[ 5] := -2; PDX[ 6] := -3; PDX[ 7] := -3; PDX[ 8] := -4; PDX[ 9] := -3; PDX[10] := -4; PDX[11] := -3; PDX[12] := -2; PDX[13] := -1; PDX[14] := 0; PDX[15] := 0; PDX[16] := 0; PDX[17] := 0; PDþ„X[18] := 0; PDX[19] := 0; PDX[20] := 0; PDX[21] := -1; PDX[22] := -1; PDX[23] := -1; PDX[24] := -1;  PDX[25] := -2; PDX[26] := -2; PDX[27] := -1; PDX[28] := -1; PDX[29] := -2; PDX[30] := -2; PDX[31] := 0 END; BEGIN (*INITTABLES*þ˜5) RESWORDS; SYMBOLS; RATORS; INSTRMNEMONICS; PROCMNEMONICS; CHARTYPES; INITDX; END (*INITTABLES*) ; PROCEDURE FULLINITALISATION; BEGIN (*INITIALIZE*) (************) INITSCALARS; INITSETS; INITTABLES; (*ENTER STANDARD NAMES AND STANþx-DARD TYPES:*) (******************************************) LEVEL := 0; TOP := 0; WITH DISPLAY[0] DO BEGIN FNAME := NIL; FLABEL := NIL; OCCUR := BLCK END; ENTERSTDTYPES; STDNAMES; ENTSTDNAMES; ENTERUNDECL; TOP := 1; LEVEL := 1; WITH DISþ§ÕPLAY[1] DO BEGIN FNAME := NIL; FLABEL := NIL; OCCUR := BLCK END; END; BEGIN FULLINITALISATION; (*COMPILE:*) (**********) INSYMBOL; PROGRAMME(BLOCKBEGSYS+STATBEGSYS-[CASESY]); IF ERRFLAG THEN BEGIN ERRORREPORT; HALT(31þlc9) END; END. ÿR2IREAL.SRû­ ó >þúšì .TITL R2IREAL ; A DUMMY SEGMENT TO SATISFY ALL UNDEFINED CUES ; TO REAL NUMBER OPERATIONS .ENT PADR,PSBR,PFLT,PFLO,PTRC,PNGR .ENT PSQR,PABR,PMPR,PDVR .EXTN PUNDF .NREL PADR: PSBR: PFLT: PFLO: PTRC: PNGR: PSQR: PABR: PMPR: PDVR: .PUND .END ÿR2SMYP.SRû­U,þݽ .TITL R2SMYP .ENT .MPY,.SV0 .EXTN MPY .ZREL .SV0: 0 .NREL .MPY : N. : STA 3,N.1 SUB 3,3 MOVL# 1,1,SZC ADD 2,3 MOVL# 2,2,SZC ADD 1,3 STþyS—A 3,N.2 MPY LDA 3,N.2 SUB 3,0 JMP @.+1 N.1: 0 N.2: 0 .END ÿR2SBOOLEAN.SRû­ õþvR .TITL R2SBOOLEAN ; THE P-CODE INTERPRETER'S BOOLEAN OPERATIONS .ENT PNOT,PAND,PIOR .NREL PNOT: LTOP1 1 ;"NOT" MOV 1,1,SZR ;SET AC1=1 (TRUE) IF CURRENTLY 0 SUB 1,1,SKP ; 0 IF 1 INC 1,1 STOP1 1 NEXT PAND: POP1 2 ;"AND" LTOP1 1 SUB 0,0 þ1i ANDR 2,1 ;KEEP B15 IN CARRY MOVL 0,0 ; RESULT OF "AND" IS A SINGLE BIT STOP1 0 NEXT PIOR: POP1 2 ;"INCLUSIVE OR"  LTOP1 1 SUB 0,0 COM 2,2 ;DELETE COMMON 1'S FROM AC1 AND 2,1 ADCR 2,1 ;OR MOVL 0,0 ;RESULT OF "IOR" IS A SINGLE BIT STOP1 0 þJRNEXT .END ÿMAKEDGSYMB.CMû£m þ(š·DELETE MAC.PS;^ MAC/N/S NBID FPID OSID^ ÿR2SDECODER.SRû­ ó 2þ· .TITL R2SDECODER .EXTD ITAB0,ITAB1 .ENT PUNDF ; THE INTERPRETER INSTRUCTION DECODER .LOC 40 ; SPECIAL PAGE ZERO LOCN. CONTAINING INTER ; ENTRY ADDRESS OF INTERPRETER .NREL OPMSK: 037400 ; MASK FOR OP-CODE PMSK: 000377 ; MASK FOR P-FIELD þ7INTER: LDA 0,@PC ; AC0:= NEXT INSTR. LDA 3,OPMSK ANDS 0,3 ; AC3:= OP-CODE LDA 1,PMSK AND 0,1 ; AC1(P):= P-FIELD ADDL# 0,0,SNC ; TEST Q1-BIT:- JMP @ITAB0,3 ; Q1=0: ENTER INTERP. TABLE MOVL# 0,0,SNC ; Q1=1: TEST Q2-BIT:- JMP .+4 MOV 1,2 ; Q2=þ¸_Ÿ1: AC2(Q):= P-FIELD SUB 1,1 ; AC1(P):= 0; JMP @ITAB1,3 ; ENTER INTERP. TABLE LDA 2,@PC ; Q2=0: AC2(Q):= Q-FIELD JMP @ITAB1,3 ; ENTER INTERP. TABLE PUNDF: ERR.P PEROP .END ÿR2SDBIN.SRû­ þ�; .TITL R2SDBIN .ENT .DBIN .ENT .DBNI .EXTD .PTCH .EXTD .GTCH .LOC 0 .ZREL Z. : .NREL .DBNI: N. : 54464 ; 0/ STA 3,N.9 50462 þ©g ; 1/ STA 2,N.8 20471 ; 2/ LDA 0,N.16 JSR @.PTCH ; 3/ JSR @.PTCH 102400 ; 4/ SUB 0,0 JSR @.PTCH ; 5/ JSR @.PTCH 4þ×§03 ;  6/ JMP N.1 .DBIN: 54455 ; 7/ STA 3,N.9 50453 ; 10/ STA 2,N.8 N.1: 102400 ; 11/ SUB 0,0 40462 ; 12/ STA 0,N.1þ^ 7 40452 ; 13/ STA 0,N.10 40452 ; 14/ STA 0,N.11 JSR @.GTCH ; 15/ JSR @.GTCH 24451 ; 16/ LDA 1,N.12 106405 ; þ>Ó 17/ SUB  0,1,SNR 405 ; 20/ JMP N.2 24447 ; 21/ LDA 1,N.13 106404 ; 22/ SUB 0,1,SZR 403 ; 23/ JMP N.3 10441 þB ; 24/ ISZ N.10 N.2: JSR @.GTCH ; 25/ JSR @.GTCH N.3: 24443 ; 26/ LDA 1,N.14 30443 ; 27/ LDA 2,N.15 142033 ; 30/ ADCZ# 2,0,SNC þ͉  106032 ; 31/ ADCZ# 0,1,SZC 406 ; 32/ JMP N.4 122400 ; 33/ SUB 1,0 24432 ; 34/ LDA 1,N.11 4420 ; 35/ JSþGòR N.7 44430 ; 36/ STA 1,N.11 766 ; 37/ JMP N.2 N.4: 24426 ; 40/ LDA 1,N.11 125122 ; 41/ MOVZL 1,1,SZC 10432  þ 0 ; 42/ ISZ N.17 14422 ; 43/ DSZ N.10 406 ; 44/ JMP N.5 125005 ; 45/ MOV 1,1,SNR 14426 ; 46/ DSZ N.17 124641 þíM ; 47/ NEGOR 1,1,SKP 125240 ; 50/ MOVOR 1,1 402 ; 51/ JMP N.6 N.5: 125220 ; 52/ MOVZR 1,1 N.6: 30410 ; 53/ LDA 2,N.8 þXe 2410 ; 54/ JMP @N.9 N.7: 131120 ; 55/ MOVZL 1,2 151120 ; 56/ MOVZL 2,2 147000 ; 57/ ADD 2,1 125120 ; 60/ MOVZL 1,1 þ!Ñ 107000 ; 61/ ADD 0,1 1400 ; 62/ JMP 0,3 N.8: 0 ; 63/ JMP 0 N.9: 0 ; 64/ JMP 0 N.10: 0  ; 65/ JMP 0 N.11þdx: 0 ; 66/ JMP 0 N.12: 53 ; 67/ JMP 53 N.13: 55 ; 70/ JMP 55 N.14: 60 ; 71/ JMP 60 N.15: 71 ; 72/ JMP 71 N.16: þo) 123 ; 73/ JMP 123 N.17: 0 ; 74/ JMP 0 .END ÿSETUPAZ.ûkjþ Ò (*========== SETUPAZ STARTS FROM HERE UP TO END OF THIS PROGRAM ==========*) BEGIN (* OF MAIN BODY *) WRITELN(PRR, '; SETUPA BEGINS'); WRITELN; WRITELN; WRITELN; FOR I := 0 TO TABSIZE0 DO BEGIN PCODETABLE[I].PCODEþYù := ' '; PCODETABLE[I].SEMICODE := ' '; PCODETABLE[I].ACTION := 0 END; ZERO := ORD('0'); COMPLETETASK; WRITELN('PROCEDURE COMPLE', 'TABLE;'); WRITELN; WRITELN; J := 1; K := 0; WRITEþ¬ÊLN('PROCEDURE TABLE', '0;'); WRITELN('BEGIN'); FOR I := 0 TO TABSIZE0 DO BEGIN WITH PCODETABLE[I] DO BEGIN IF SEMICODE[1] <> ' ' THEN BEGIN IF K MOD 30 = 29 THEN þ¢ BEGIN WRITELN('END;'); WRITELN; WRITELN; WRITELN('PROCEDURE TABLE', J : 1, '; '); WRITELN('BEGIN'); J := J + 1; þÓX END; WRITE(' ' : 5, 'WITH PCODETABLE[', I : 1, '] ' : 2, 'DO BEGIN PCODE:=', '''', PCODE : 4, '''; ' : 3, 'SEMICODE:=' : 10); IF SEMICODE[1] = '1' THEN PETTY := þJì-8 ELSE PETTY := 0; WRITELN( (((( PETTY + ORD(SEMICODE[2]) - ZERO) * 8 + ORD(SEMICODE[3]) - ZERO) * 8 + ORD(SEMþ5¢ICODE[4]) - ZERO) * 8 +  ORD(SEMICODE[5]) - ZERO) * 8 + ORD(SEMICODE[6]) - ZERO : 6, '; ' : 2, 'ACTION:=' : 8, ACTION : 4, ' END;'); þ�Ú K := K + 1; END END END; WRITELN('END;'); WRITELN; WRITELN; WRITELN; WRITELN('BEGIN'); FOR I := 0 TO J - 1 DO WRITELN(' ' : 5, 'TABLE' : 5, I : 1, '; '); WRITELN('END;'); þñ²iWRITELN; WRITELN; WRITELN(PRR, '; HASH TABLE SIZ', 'E = ' : 8, TABLESIZE : 1); WRITELN(PRR, '; TOTAL PCODE EN', 'TRIES = ' : 8, ENTRIES : 1); WRITELN(PRR, '; LOADING FACTOR', ' = ' : 8, ENTRIES/TABLESIZE : 1) END. ÿR2RFT.SRû­ ó =þTÓ .TITLE R2RFT .ENT XRDR,XWRR .EXTD WSA,PUTFL,LHB .EXTN FENT .EXTN WRITE,BLANK,CHINF,BFHLF,BFPTR .EXTN PURGE .NREL ;THESE ROUTINES USE THE FP INTERPRETER BRKC=2 WDISP=121 ;# OF CHARS FOR NUMBER DDISP=122 ;# OF CHARS AFTER . XRDR: SUBZL 0,0 ;SEþ MT FLAG STA 0,@.CHF ;IN CHIN FENT ;ENTER DITTO FDFC 0 ;FP NUMBER INTO FP AC0 FSTA 0,TEMPR ;COPY IT FEXT ;EXIT LDA 3,WSA LDA 3,0,3 ;PICK UP FLAG MOV 3,3,SNR ;SKIP IF NON-ZERO JMP .+3 ERR.P PERFI ;REPORT ERROR POP1 2 MOVZR 2,2 DSZ Fþ,“ST,2 ;MARK BUFFER EMPTY JMP .+1 ;EOL MAY BE SHOWING POP1 2 ;GET DESTINATION MOVZR 2,2 LDA 0,TEMPR STA 0,0,2 ;STORE FIRST HALF LDA 0,TEMPR+1 STA 0,1,2 ;STORE LAST HALF NEXT TEMPR: 0 0 .CHF: CHINF .RITE: WRITE .BLNK: BLANK .BHLF: BFHLF .BPTR: BþàöFPTR .PRGE: PURGE WIDTH: 31. CHADP: 4 BIGE: (24+64.)*256. HOLDR: 0 0 XWRR: POP1 2 ;FBA MOVZR 2,2 LDA 1,CHADP ;# CHARS AFTER . POP1 0 ;# CHARS IN TOTO STA 0,AD1 ;COMPATABILITY WITH WRI IN PURGE POP1 3 STA 3,HOLDR+1 ;FIRST HALF POP1 3 STA 3,HOLþ¨RDR ;LAST HALF LDA 3,WSA ;FP WRITE AREA STA 1,DDISP,3 ;PLACES AFTER DP LDA 1,WIDTH ;PLACES MAXIMUM STA 1,WDISP,3 SUB 1,1 ;CLEAR FLAGS STA 1,0,3 ;IN WSA LDA 1,AD1 ;FIELD WIDDTH FROM USER MOV 1,1,SNR ;SKIP IF WIDTH >0 JMP EFORM LDA 1,HOLDR ;þÖFP NUMBER PART 1 LDA 3,LHB ;MASK ANDZL 3,1 ;KEEP EXPONENT ANDD .. MOVZR 1,1 ;LOSE MANTISSA SIGN LDA 3,BIGE ;LARGEST EXPONENT FOR F FORMAT ADCZ 3,1,SZC ;SKIP IF AC1(EXP)<=AC3(BIGE) JMP EFORM FFORM: FENT ;FP ENTER FLDA 0,HOLDR ;LOAD NUMBER FFþ_�DCF 0 ;PUT IN BUFF FEXT ;FP EXIT ACS 0,2 OK JMP TESTF EFORM: FENT FLDA 0,HOLDR FFDC 0 FEXT TESTF: LDA 3,WSA LDA 3,0,3 ;PICK UP FLAG MOV 3,3,SNR ;ERROR IF NON ZERO JMP .+3 ERR.P PERFO ;REPORT ERROR JSR @.PRGE ;EMPTIES AND TIDIES BUFFER þ|Ž.END ÿR2IOUTL.SRû­ ûþb. .TITL R2IOUTL .ENT .BPUT,.BGET,.GCH,.FIND .ENT TEMP .EXTN ERR2,ERRP,PCODE .EXTD CHAN,SPACE,TEMP2,CNTAD,TABAD .EXTD LHB,RHB .TXTM 1 .ZREL ; DEFINE SOME CONSTANTS IN PAGE ZERO THAT ARE ASSUMED TO HAVE ; ADDRESSES 50 AND 51.... ERR2 ; .ERR2 = þ¯50 ERRP ; .ERRP = 51 .BPUT: BPUT .BGET: BGET .GCH: GCHAN .CTAB: CTAB .BTAB: BTAB-1 .OTAB: OTAB-1 .TTAB: TTAB-1 .FIND: FIND TEMP: 0 .NREL ; ROUTINE TO WRITE A BYTE TO A GIVEN BYTE ADDRESS ; ; CONDITIONS ... ; ; ENTRY - AC0 - BYTE TO BE WRITTEN(þù�IN LHB) ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - UNDEFINED BPUT: STA 3,BLNK ;LINK STORED LDA 1,LHB ;MASK FOR LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMINE WHþÇCICH BYTE MOVS 0,0,SKP ;RIGHT OR LEFT? MOVS 1,1 LDA 3,0,2 ;LOAD FROM WORD ADDRESS AND 1,3 ;MASK OUT OTHER BYTE ADD 0,3 ;REPLACE WITH NEW BYTE STA 3,0,2 ;AND RESTORE JMP @BLNK ; ROUTINE TO READ A BYTE FROM A GIVEN BYTE ADDRESS ; ; CONDITIONS ..þË». ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - VALUE OF BYTE READ(IN LHB) ; AC1 - UNDEFINED ; AC2 - UNDEFINED BGET: STA 3,BLNK ;STORE LINK LDA 1,LHB ;BYTE MASK FOþo÷R LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMINE WHICH BYTE MOVS 1,1 ;RIGHT OR LEFT? LDA 0,0,2 ;LOAD FROM WORD ADDRESS. AND 1,0,SZC ;EXTRACT BYTE MOVS 0,0 ;SWOP INTO LHB  JMP @BLNK ; ROUTINE TO GET THE CHANNEL NO. AND RECORD LENGTH OF SPECIFIC FILE. ;þÌ� ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - WORD ADDRESS OF FBA ; ; RETURN - AC0 - CHANNEL NUMBER ; AC1 - RECORD LENGTH ; AC2 - WORD ADDRESS OF FBA ; ; NORMAL RETURN - NONE CHAþÙRACTER INPUT/OUTPUT ; RETURN + 1 - CHARACTER INPUT/OUTPUT GCHAN: STA 3,BLNK ;STORE LINK LDA 1,LHB ;MASK FOR LEFT HAND BYTE LDA 0,FCH,2 ;CHANNEL WORD OF FBA ANDS 0,1,SNR ;ISOLATE RECORD LENGTH ISZ BLNK ;AND TEST IF CHAR I/O. MOVZL 1,1 ;MAKþ)‘E IT A BYTE COUNT LDA 3,RHB ;MASK CHANNEL NUMBER AND 3,0 STA 0,CHAN JMP @BLNK BLNK: 0 ; ROUTINE TO SEARCH TABLES FOR BUFFER DETAILS. ; ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - CHANNEL NUMBER OF þëþFILE (OR ZERO) ; ; RETURN - AC0 - BYTE ADDRESS OF BUFFER AREA(BASE) ; AC1 - ADDRESS OF BYTE COUNT (DISPLACEMENT) ; AC2 - WORD ADDRESS OF ENTRY IN CHANNEL TABLE FIND: LDA 0,TSIZE ;SIZE OF TABLE LDA 1,.CTAB ;ADDRESS OF CHANNEL TABþ¤ÁLE(TOP) STA 1,TEMP RETST: LDA 1,@TEMP ;SEARCH UNTIL A MATCH OR ERROR SUB 2,1,SNR JMP RETRN ;A MATCH IS FOUND DSZ TEMP INC 0,0,SZR ;TABLE EXHAUSTED? JMP RETST ;NO,FIND NEXT ERR.P ;YES, BLOW..... 411 RETRN: LDA 1,.OTAB SUBZ 0,1 ;ADDRESS OF BþYTE COUNT(DISPLACEMENT) STA 1,CNTAD LDA 1,@CNTAD ;LOAD ACTUAL COUNT LDA 2,C200 SUBZ# 1,2,SZC ;TEST IF LINE TOO LONG JMP .+3 JSR .NERR ;LINE LIMIT FLAGGED TO CLI 22 LDA 1,CNTAD LDA 2,.TTAB SUB 0,2 ;ENTRY IN THE TABLE TAB COUNTS STA 2,TABAD LDþ<A 2,.BTAB SUB 0,2 LDA 0,0,2 ;SET BUFFER ADDRESS(BASE) LDA 2,TEMP ;CHANNEL TABLE ADDRESS JMP 0,3 .NERR: LDA 2,0,3 ;PICK UP ERROR CODE ERR.2 C200: 200 TSIZE: -4 ;TABLE SIZE 0 0 0 CTAB: 0 ;TOP OF CHANNEL TABLE OTAB: .BLK 4 ;COUNT TABLE TTAB: .Bþ­€LK 4 ;TAB COUNTER FOR ASCII INPUT/OUTPUT BTAB: BUFF1*2 ;BUFFER TABLE BUFF2*2 BUFF3*2 BUFF4*2 BUFF1: .BLK 104 ;BUFFERS BUFF2: .BLK 104 BUFF3: .BLK 104 BUFF4: .BLK 104 .LOC .-420 ; P-CODE SYSTEM INITIALISATION PROCEDURES. .PCODE: PCODE PI: .SYSTM þ£>; X1 := NMAX; X0 := HMA; .MEM JMP . STA 0,HP ; INITIALISE HEAP POINTER TO MAX ADR SUB 1,0 ; X0 := INCREMENT FOR .MEMI CALL STA 1,DSP ; STACK STARTS AT INITIAL NMAX STA 1,MP STA 1,SP DSZ SP LDA 3,HP ; GET THE TOP OF THE HEAP STA 3,@DSP ;STOREþ?* IT IN THE STACK BASE .SYSTM ; ALLOCATE ALL AVAILABLE STORE .MEMI JMP . SUB 2,2 ;CHANNEL ZERO FOR 'COM.CM' SUB 1,1 ;NORMAL CHARACTERISTICS LDA 0,.COMF ;'COM.CM' .SYSTM .OPEN 77 ERR.2 LDA 2,.PCODE LDA 2,2,2 ;PICK UP THE LABEL OF FIRST CUP þ±¸ LDA 1,C5 ADD 1,2 ;FORM ADDRESS OF FIRST POSSIBLE FILENAME STA 2,STPC JSR COMA1 JSR COMA2 ;READS PROGRAM NAMEAND GLOBAL SWITCHES RENU: JSR COMA1 ;READS NAME OF SECOND ARGUEMENT LDA 2,.COMA STA 2,TEMP ;SET UP THE BUFFER ADDRESS LDA 2,STPC ;FIRSþ® T POSSIBLE NAME LDA 1,13,2 ;FIRST POSSIBLE OPEN COMMAND LDA 0,COPN ; CSP OPN SUB 1,0,SZR  ;IS IT A MATCH JMP NOMAT ;NO - THEN BLOW UP.... MOVZL 2,2 ;YES - THEN REPLACE FILENAME STA 2,TEMP2 LDA 0,M20 ;INITIAL COUNT STA 0,COUNT NEXTB: LDþð˜A 2,TEMP JSR @.BGET ;GET THE NEXT BYTE LDA 2,TEMP2 JSR @.BPUT ;PUT IT INTO THE FILENAME MOV 0,0,SNR ;TEST IF NULL AFTER THE PUT.... JMP ENAME ISZ TEMP ;UPDATE POINTERS ISZ TEMP2 ISZ COUNT ;ERROR IF OVER.. JMP NEXTB JSR .NERR 317 NOMAT: JSRþ~› .NERR 313 ; ROUTINE TO READ THE FILENAME COMA1: STA 3,TEMP LDA 0,.COMA ;ARGUEMENT BUFFER SUB 2,2 ;CHANNEL ZERO .SYSTM .RDL 77 ;READ THAT NAME JMP TSTEF ;SEE IF EOF? JMP @TEMP TSTEF: LDA 1,C6 ;TEST IF EOF SUB# 1,2,SZR ERR.2 ;IF NOT THEN þÃBLOW... JMP ENDAL ; ROUTINE TO READ THE SWITCHES COMA2: STA 3,TEMP LDA 0,.SWA ;SWITCH BUFFER LDA 1,C4 ;TWO WORDS SUB 2,2 ;CHANNEL ZERO .SYSTM .RDS 77 ;READ FOUR BYTES JMP TSTEF JMP @TEMP ENAME: LDA 0,SPACE ;FILL OUT WITH SPACES LDA 2,TEMP2þ F JSR @.BPUT ISZ TEMP2 ISZ COUNT JMP ENAME LDA 2,STPC ;UPDATE THE POINTER TO THE PCODE LDA 1,C15 ;BY AN APPROPRIATE AMOUNT ADD 1,2 STA 2,STPC JSR COMA2 LDA 0,SWA ;PICK UP SWITCHES MOVZL 0,0,SNC ;AND TEST IF 'A' SET ON. JMP RENU ;NO...THEN GþÜNET NEXT PARAMETER SUBZR 0,0 ;OTHERWISE SET BIT 0 OF NULLS LDA 2,STPC LDA 1,-5,2 ;COUNT ADD 0,1 STA 1,-5,2 ;RESTORE COUNT JMP RENU ENDAL: LDA 0,.PCODE ; INITIALISE PC STA 0,PC DSZ PC NEXT .COMF: COMF*2 COMF: .TXT 'COM.CM' C5: 5 C4: 4 C15: 15 Cþk„¤6: 6 .COMA: COMA*2 .SWA: SWA*2 STPC: 0 M20: -20 COUNT: 0 COPN: 161425 COMA: .BLK 10 SWA: .BLK 2 .END PI ÿR2ALLFILES.CMû£Žþ8R2SECHK,^ R2ROUTL,^ R2IFT,^ R2SMPD,^ R2SOVL,^ R2STP,^ R2SINTEGER,^ R2SBOOLEAN,^ R2SRANDOM,^ R2SOPN,^ R2IREAL,^ R2SADMIN,^ R2SRD,^ R2SIOIN,^ R2CITAB,^ R2IFNS,^ R2CRCODE,^ R2SSET,^ R2SMPY,^ R2STI,^ R2RFT,^ R2SITAB,^ R2SDIV,^ R2IFW,^ R2SMEMACC,^ R2SMISC,^ R2SþþDBIN,^ R2STESTS,^ R2SHEAP,^ R2CSPTAB,^ R2IOUTL,^ R2SDECODER,^ R2SMYP,^ R2RREAL,^ R2SREWR,^ R2RFNS,^ R2SSPTAB,^ R2SCONSTS,^ R2RFW^ ÿR2SOVL.SRû­ ó Aþ-3 .TITLE R2SOVL .TXTM 1 .NREL .ENT XOVL ; AT XOVL IT IS ASSUMED THAT THE OVERLAY NODE AND NUMBER ; ARE PASSED VIA STACK LOCATION ...... IF THE FILE IS ; FOUND NOT TO BE OPEN IT IS OPENED OVOPN: .SYSTM .GCHN ; ASK RDOS FOR A CHANNEL ERR.2 STA 2,OVCþE¸HN LDA 0,PASOL .SYSTM .OVOPN 77 ; OPEN OVERLAY FILE PASCAL.OL ERR.2 XOVL: LTOP1 0 ; PICK UP NODE AND NUMBER ADC 1,1 ; UNCONDITIONAL LOAD LDA 2,OVCHN .SYSTM .OVLOD 77 JMP ERCHK POP NEXT ERCHK: MOV 2,2,SNR JMP OVOPN ; ILLEGAL CHANNEL # LDA þ–L*1,FSHUT SUB 2,1,SNR ; FILE OPEN ? JMP OVOPN ; YES ERR.2 ; NO .. LEAVE IT TO RDOS OVCHN: -1 FSHUT: 15 PASOL: .+1*2 .TXT "P4COMPILER.OL" .END ÿR2SIOIN.SRû­ ó 9þ"Z .TITLE R2SIOIN .ENT XRDI .ENT GETC,.GTCH .ENT CHINF .EXTN .DBIN .EXTD .READ,SPACE .ZREL GETC:.GTCH:CHIN .NREL ;THE INTEGER READING ROUTINE FOLLOWS, IT MAKES USE OF ;THE ENTRY POINT .DBIN IN MATH.LB XRDI: SUBZL 0,0 ;MAKE ONE STA 0,CHINF ;SET þ ðFLAG IN CHIN JSR @DBIN ;READ INTEGER POP1 2 ;FBA MOVZR 2,2 POP1 3 ;INTEGER DESTINATION MOVZR 3,3 STA 1,0,3 ;STORE INTEGER DSZ FST,2 ;MARK BUFFER FULL NEXT ;EOL MAY BE SET NEXT ;IT MAY NOT DBIN: .DBIN CHINF: 1 CHIN: STA 3,Z1 ;KEEP RETURNþ1Ä LTOP1 2 ;USE STACK TOP MOVZR 2,2 ; .. ITS A BYTE ADDRESS DSZ CHINF JMP DIGS ; LEADR: JSR @.READ LDA 1,SPACE ;GET SPACE CHAR SUB 0,1,SZR ;SPACE ? JMP DIGS+1 ; - NO ISZ FST,2 ; - YES, SET FB EMPTY JMP LEADR DIGS: JSR @.READ MOVS 0,0 ISZ FSþ*ÚcT,2 ; SET FB EMPTY JMP @Z1 ; .END ÿR2SDIV.SRû­R*þ1ó .TITL R2SDIV .ENT .DIV .EXTN DVD .NREL .DIV : N. : STA 3,N.6 STA 2,N.5 STA 1,N.4 STA 0,N.3 MOVL 2,3,SZC NEG 2,2 SUBCL 3,3 MOVZL þ®/3,3 MOVL# 0,0,SNC JMP N.1 INC 3,3 NEG 1,1,SZR COM 0,0,SKP NEG  0,0 N.1: STA 3,N.7 SUB 0,0 DVD LDA 2,N.5 MOVL 1,1,SNC MOVR 1,1,SZC þð JMP N.2 LDA 3,N.7 MOVR 3,3,SNC COM 3,3,SKP NEG 0,0 MOVR 3,3,SNC NEG 1,1 MOVZ 3,3 JMP @N.6 N.2: LDA 0,N.3 LDA 1,N.4 JMP @N.6 N.3þ=\‘: 0 N.4: 0 N.5: 0 N.6: 0 N.7: 0 .END ÿR2SECHK.SRû­ ó 2þö4 .TITLE R2SECHK ; ERROR HANDLER AND CHECK ROUTINES .ENT HELP .ENT ERRP,ERR2,ERR .ENT PCHKC,PCHK4,PCHK2,PCHK3 .EXTD PUTFL .EXTN .BIND, BFPTR,BFBP0 .TXTM 1 .NREL ERR2: ERR: .SYSTM .ERTN JMP . ERRP: LDA 2,0,3 ;PICK UP E CODE LDA 3,INSTR ;Gþ¼ÏET LAST INSTR MARKER JMP RATS ; THIS ENTRY FOR CHECK ADDRESS PCHK4: LTOP1 0 LDA 3,@PC ; PICK UP INSTR # MOV 2,2,SZR ; POSSIBLE NULL ? JMP NONIL ; NO MOV 0,0,SNR ; YES TEST TOP OF STACK NEXT ; ITS A NULL NONIL: LDA 1,DSP ; STACK BASE LþafDA 2,@DSP ; INITIAL VALUE OF HP MOVZR 0,0 ; MAKE WORD ADDR JMP TEST KEEP: STA 3,INSTR NEXT LHB40: 40 PCHKC: LDA 0,LHB40 ADDS 0,1 ADDS 0,2 JMP PCHK2 PCHK3: MOV 2,1 ;LOWER BOUND TO AC1 LDA 2,@PC ;GET UPPER BOUND PCHK2: LDA 3,@PC ;GET INSTR þøBCOUNT LTOP1 0 ;STACK TOP TO AC0 TEST: ADDOR 0,0 ;UNSIGN THESE NUMBERS ADDOR 1,1 ;SO THAT THE FOLLOWING ADDOR 2,2 ;TESTS WORK AS INTENDED ! ADCZ# 2,0,SZC ;SKP IF AC0<=AC2 (UPPER) JMP MICE ;TROUBLE SUBZ# 1,0,SZC ;SKP IF AC0<12> BUGS" .TXT "<15><12>LAST KNOWN PCODE INSTRUCTION " ASIN: .BLK 4 .TXT "<15><12>INTERPRETER ERROþ<#R CODE " ASEC: .BLK 4 .TXT "<15><12>" MESSF: .-1*2 .END ÿSETUPAX.ûkjþ"S (* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ------------------------------ AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE I/II DATE : MARCH, 1977 *) (*******þ\ƒ********************************************************** THE MIDDLE PART ( IE THE WHOLE COMPLETETASK PROCEDURE ) OF THIS PROGRAM IS PRODUCED BY THE PROGRAM "FASTHASH". THE ORDER OF THE HASHING IS SUCH THAþê»T THE ACTIVATION OF THIS WILL EVENTUALLY PRODUCE A SET OF PROCEDURES ( IE THE WHOLE PROCEDURE COMPLETABLE IN EITHER "P4ASM" OR "P4MAC" ) THAT WILL OPTIMIZE ALL THE PCODE MNEMONICS' ACCESS MECHANISM. þ” IT OUTPUTS A SET OF PROCEDURES WHICH FORM THE MIDDLE PART OF EITHER "P4ASM" OR "P4MAC". THE OUTPUT FILE CONTAINING THIS SET OF PROCEDURES IS "P4AMY1" IN RELEASE I OR "P4AMY2" IN RELEASE II. THIS PRþ>aOGRAM IS THE AMALGAMATION OF THREE SMALLER FILES "SETUPAX", "SETUPAY" AND "SETUPAZ". THIS PROGRAM IS ACTIVATED BY THE FOLLOWING COMMAND : SETUPA P4AMY ===========þ£========== WHERE P4AMY IS A OUTPUT FILE USED TO CONTAIN  PROCEDURE COMPLETABLE IN BOTH PROGRAMS "P4ASM" AND "P4MAC". þl = AN PRR FILE USED TO CONTAIN SOME USEFUL INFORATION FOR USER REFERENCE. **************************************************************) PROGRAM SETUPA(OUTPUT, PRR); CONST þ€–TABLESIZE = 256; TABSIZE0 = 255; (** IE TABLE SIZE WITH ZERO ORIGIN **) TYPE STRING4 = ARRAY[1..4] OF CHAR; STRING6 = ARRAY[1..6] OF CHAR; TEMPLATE = RECORD PCODE : STRING4; þ”9 SEMICODE : STRING6; ACTION : INTEGER END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; I, J : 1..TABLESIZE; ZERO, ENTRIES, PETTY, K : INTEGER; PROCEDURE HASHþ?(HPCODE : STRING4; HSEMICODE : STRING6; HACTION : INTEGER); VAR TEMP, PI, RNDM : INTEGER; BEGIN TEMP := ORD(HPCODE[1]) * 4 + ORD(HPCODE[2]) * 2 + ORD(HPCODE[3]) ; IF ORD(HPCODE[þm4]) <> 0 THEN TEMP := TEMP * 2 + ORD(HPCODE[4]); TEMP := TEMP MOD TABLESIZE; RNDM := 1; PI := 0; WHILE PCODETABLE[ (TEMP + PI) MOD TABLESIZE ].PCODE <> ' ' DO BEGIN (* OF THE REHASHING ALGORITHM MENTIONED BYþ9 DAVID GRIES IN HIS 'COMPILER CONSTRUCTION' *)  RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); END; (* AN EMPTY ENTRY IN THE PCODE TABLE IS FOUND *) WITH PCODETABLE[ (TEMP + PI)þ~o MOD TABLESIZE ] DO BEGIN PCODE := HPCODE; SEMICODE := HSEMICODE; ACTION := HACTION; END; ENTRIES := ENTRIES + 1 END (* OF HASH *); (*<<<<<<<<<<<<<<<<<<<< SETUPAX ENDS HERE >>>>>>>>>>>>>>>þã»>>>>>*) ÿGRAPH.û´ #þokPROGRAM GRAPH1(OUTPUT); CONST D=0.0625; S=32 ; H=34 ; C=6.28318 ; LIM=32 ; VAR X,Y:REAL; I,N:INTEGER; BEGIN FOR I:=0 TO LIM DO BEGIN X:=D*I; Y:=EXP(-X)*SIN(C*X) ; N:=TRUNC(S*Y)+H; REPEAT WRITE(' '); N:=N-1 þ-“± UNTIL N=0; WRITELN('*') END END. ÿR2RREAL.SRû­ ó ;þz| .TITL R2RREAL ; THE P-CODE INTERPRETER'S REAL NUMBER OPERATIONS .ENT PADR,PSBR,PFLT,PFLO,PTRC,PNGR,PSQR,PABR,PMPR,PDVR .EXTD WSA .EXTN PFPIN,PFPES,PFPEX,PFPEF .NREL .PFPN: PFPIN ;ENTRY USED BY UNARY OPERATORS .PFPS: PFPES ;STORE FP0 ON STACK þAND LEAVE RFPI .PFPX: PFPEX ;LEAVE RFPI WITHOUT STORING FP0 .PFPF: PFPEF ;SIMPLY CHECK RFPI FLAGS PFPBN: STA 3,AC3 ;USED BY FP BINARY OPERATORS JSR @.PFPN FDSZ SP ;GET SECOND FDSZ SP ;FP OPERAND FLDA 0,@SP ;FROM STACK FJMP @AC3 AC3: 0 PADR:þ#| JSR PFPBN FADD 1,0 FJMP @.PFPS PSBR: JSR PFPBN FSUB 1,0 FJMP @.PFPS SAC3: 0 FLSUB: STA 3,SAC3 ;USED ONLY BY THE FLOATS SUB 2,2 ;SL TO DL INTEGER LTOP1 3 ;GET TOP OF STACK MOVL# 3,3,SZC ;-VE ? ADC 2,2 ;YES STOP1 2 PUSH1 3 ;LS HALF OF DL IþÕ¬NT JMP @SAC3 PFLT: JSR FLSUB JSR @.PFPN ;LOAD INTO FAC1 REDUNDANT FFLO @SP FJMP @.PFPX PFLO: POP1 0 ;FLOATS ITEM BELOW TOP POP1 1 ;OF STACK.....ASSUMES JSR FLSUB ;REAL ON TOP OF STACK JSR @.PFPN FFLO @SP FEXT ISZ SP ;RESTORE SP PUSH1 1 þêËPUSH1 0 JMP @.PFPF PTRC: JSR @.PFPN ;FIXES TOP OF STACK FFIX @SP ;THIS FIXES TO DL FEXT ISZ SP ;RESTORE SP POP1 1 ;GET LS HALF OF DL INT LTOP1 0 ;MS HALF OF DL INT MOVZL 1,2  ;FOLLOWING TESTS THAT INC 0,0,SNC ;SIGN OF BOTH HALVES = MOVZR 0þõ,0,SZR ;AND MS HALF HAS NO VALUE JMP PTRCE ;CONDITIONS NOT MET STOP1 1 JMP @.PFPF PTRCE: ERR.P PERTR ;TRUNCATE ERROR PNGR: JSR @.PFPN ;NEGATE FP NUMBER FNEG 1,0 FJMP @.PFPS PSQR: JSR @.PFPN ;SQUARE FP NUMBER FMOV 1,0 FMPY 1,0 FJMP @.PFPSþºH> PABR: JSR @.PFPN ;ABS OF FP NUMBER FPOS 1,0 FJMP @.PFPS PMPR: JSR PFPBN ;MULTIPLY FP FMPY 1,0 FJMP @.PFPS PDVR: JSR PFPBN ;DIVIDE FP NUMBER FDIV 1,0 FJMP @.PFPS .END ÿFASTHASH.ûŽŽþi!(* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ------------------------------ AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE II DATE : MARCH, 1977 *) (***********þj‹****************************************************** THIS PROGRAM IS TO READ IN THE HASH TABLE FROM THE INPUT FILE "SETUP.TB" PRODUCED BY THE PROGRAM "SETUP". IT THEN PROCESSES A  BIG PCODE PROGRAM (PREFERABLY "þßÊP4ASM.PC" OR "P4MAC.PC") TO OBTAIN THE FREQUENCIES OF THE PCODE INSTRUCTIONS. FINALLY IT PRODUCES A PROCEDURE (IE THE PROCEDURE COMPLETETASK IN THE PROGRAM "SETUPA"). THE ORDERING OF THE HASHING SEQUENCE IN THE OUTPUTþº­ PROCEDURE IS SUCH THAT ACCESSING THE PCODE INSTRUCTIONS IN THE TABLE WILL BE MUCH MORE IMPROVED. TO ACTIVATE THIS PROGRAM, DO THE FOLLOWING COMMAND :  FASTHASH PCODEPROGRAM SETUPAY SETUP.Tþ×”B DEVICE ============================================= WHERE SETUP.TB = INPUT FILE CONTANING THE HASH TABLE PRODUCED BY THE PROGRAM "SETUP". = PRD þk$FILE CONTAINING ANY BIG PCODE PROGRAM ( IE "P4ASM.PC" OR "P4MAC.PC"). SETUPAY = OUTPUT FILE CONTAINING THE PROCEDURE WHICH  IS "PROCEDURE COMPLETETASK " IN THþÓ«E PROGRAM "SETUPA". = PRR FILE CONTAINNG FREQUENCIES OF PCODE INSTRUCTIONS IN PCODEPROGRAM FOR USER REFERENCE. ***************************þ!Ë*****************************************) PROGRAM FASTHASH(PRD, PRR, INPUT, OUTPUT); LABEL 0; CONST TABLESIZE = 256; TABSIZE0 = 255; (*** IE TABLE SIZE WITH ZERO ORIGIN ***) TYPE INSTRTYPE = (COMMENT, LLABEL, NONPCODE, PCOþ£ìDES, PCODENTRY); STRING3 = ARRAY[1..3] OF CHAR; STRING4 = ARRAY[1..4] OF CHAR; TEMPLATE = RECORD PCODE : STRING4; SEMICODE, ACTION, FREQUENCY : INTEGER þÂÎ END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; SORT : RECORD SPCODE :STRING4;  SSEMICODE, SACTION, SFREQUENCY : INTEGER END; þ · CH : CHAR; DOTNAME : STRING3; I, J, ICOUNT, SMIN, SMAX : INTEGER; ENT : BOOLEAN; PCTYPE : INSTRTYPE; PROCEDURE OCTALIZER(SMCODE : INTEGER); VAR I, TEMP : INTEGER; þ­© COMPLEMENT : BOOLEAN; OCTALDIGIT : ARRAY[1..6] OF INTEGER; BEGIN COMPLEMENT := SMCODE < 0; SMCODE := ABS(SMCODE); FOR I := 1 TO 6 DO BEGIN TEMP := SMCODE DIV 8;þÊ OCTALDIGIT[I]:= ABS(SMCODE - TEMP * 8); SMCODE := TEMP END; IF COMPLEMENT THEN BEGIN I := 1; WHILE OCTALDIGIT[I] = 0 DO I := I + 1; OCTþ©ALDIGIT[I] := 8 - OCTALDIGIT[I]; I := I + 1; WHILE I < 6 DO BEGIN OCTALDIGIT[I] := 7 - OCTALDIGIT[I]; I := I + 1 END; OCTALDIGIT[6] :=þ–É 1 END; FOR I := 6 DOWNTO 1 DO WRITE(PRR, OCTALDIGIT[I] : 1) END (* OF OCTALIZER *); PROCEDURE CHECK; VAR TEMP, RNDM, PI : INTEGER; MORETRY : BOOLEAN; OP þ²¹ : STRING4; PROCEDURE ERRORP; BEGIN MORETRY := FALSE; WRITE(OUTPUT, 'INSTR. NO. = ' : 13, ICOUNT : 1, ' ', OP); REPEAT READ(PRD, CH); WRITE(OUTPUTþƒÚ, CH) UNTIL EOLN(PRD); READ(PRD, CH); (* RID EOLN *) WRITE(OUTPUT, '** ', OP, ' ** ILLEGAL CODE'); WRITELN(OUTPUT) END (*** ERRORP ***); BEGIN (* OF CHECK *) OP[1] :=þXC CH; READ(PRD, OP[2], OP[3]); IF EOLN(PRD) THEN OP[4] := ' ' ELSE READ(PRD, OP[4]); READLN(PRD); TEMP := ORD(OP[1]) * 4 + ORD(OP[2]) * 2 + ORD(OP[3]); IF ORD(OP[4]) <> 0 THEþ}žN TEMP := TEMP * 2 + ORD(OP[4]); TEMP := TEMP MOD TABLESIZE; MORETRY := TRUE; SMIN := SMIN + 1; SMAX := SMAX + 1; RNDM := 1; PI := 0; IF OP = ' ' THEN ERRORP þFÎ ELSE WHILE MORETRY DO WITH PCODETABLE[ (TEMP + PI) MOD TABLESIZE] DO BEGIN IF OP = PCODE THEN BEGIN FREQUENCY := FREQUENCY + 1; MORETRY := FALSE; ENþCD ELSE IF PCODE = ' ' THEN ERRORP; IF MORETRY THEN BEGIN RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); SMAX := SMAX + 1 ENDþ{! END END (*** OF CHECK ***); BEGIN (* OF MAIN *) WRITELN(OUTPUT, '; FASTHASH START', 'S NOW'); ICOUNT := 3; REPEAT READ(INPUT, CH) UNTIL CH = '*'; (*READ OFF HASH TABLE HEADER *) FOR I := 0 TO TAþ‰UBSIZE0 DO WITH PCODETABLE[I] DO BEGIN FOR J := 1 TO 4 DO READ(INPUT, PCODE[J]); READLN(INPUT, SEMICODE, ACTION) END; FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO IF PCODE[1] = ' ' THþÔ0EN FREQUENCY := -1; (************ START READING IN THE PCODE PROGRAM FROM PRD ************) (* HASH TABLE HAS JUST BEEN READ IN FROM SETUP.TB *) READ(PRD, CH, CH, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF (CH <> '.') AND (DOTNAMþ»©E <> 'TIT') THEN BEGIN WRITELN(OUTPUT, '**********', ' NO TITLE FOUND ', '**********'); WRITELN(OUTPUT); GOTO 0 END; READLN(PRD); REPEAT READ(PRD, CH); IF CH = 'I' THEN PCTYPE := COMMþÓENT ELSE IF CH = 'L' THEN PCTYPE := LLABEL ELSE IF CH = 'P' THEN PCTYPE := PCODENTRY ELSE BEGIN READ(PRD, CH); IF CH = '.' THEN PCTYPE := NONPCODE ELSE PCTYPE := PCODES þ>JEND; CASE PCTYPE OF COMMENT : (* INSTRUCTION CHECK COUNT *) BEGIN READ(PRD, J); IF (ICOUNT <> J) AND (J <> 0) THEN WRITELN(Oþ¬3UTPUT, 'I', J : 5, ' ' : 14, '; ??? PCODE'  , ' COUNT OUT OF ST', 'EP ???'); ICOUNT := J; READ(PRD, CH) (* READ OFF EOLN *) END; þ½ö LLABEL : (* LABELS *) READLN(PRD); NONPCODE : (* NON STANDARD PCODE INSTRUCTIONS *) READLN(PRD); PCODES : (* STANDARD PCODE INSTRUCTIONS *) BEGIN þÇ| CHECK;  ICOUNT := ICOUNT + 1 END; PCODENTRY : (* PACKED PCODE ENTRY POINT *) READLN(PRD) END (* OF CASE PCTYPE *); WHILE EOLN(PRD)þ÷ DO READLN(PRD) UNTIL EOF(PRD); WRITELN(OUTPUT); WRITELN(OUTPUT, '; IDEAL SEARCHES', ' = ', SMIN); WRITELN(OUTPUT, '; ACTUAL SEARCHE', 'S = ', SMAX); J := 1; REPEAT ENT := FALSE; FOR I := 0 TO TABSþs IZE0 - J DO BEGIN  IF PCODETABLE[I].FREQUENCY < PCODETABLE[I + 1].FREQUENCY THEN BEGIN ENT := TRUE; WITH PCODETABLE[I], SORT DO BEGIN þ®� SPCODE := PCODE; SSEMICODE := SEMICODE; SACTION := ACTION; SFREQUENCY := FREQUENCY END; PCODETABLE[I].PCOþëtDE := PCODETABLE[I + 1].PCODE; PCODETABLE[I].SEMICODE := PCODETABLE[I + 1].SEMICODE; PCODETABLE[I].ACTION := PCODETABE[I + 1].ACTION; PCODETABLE[I].FREQUENCY := PCODETABLE[I + 1].FREQUEþßNCY; WITH PCODETABLE[I + 1], SORT DO BEGIN PCODE := SPCODE; SEMICODE := SSEMICODE; ACTION := SACTION; þûÅ FREQUENCY := SFREQUENCY END END END; J := J + 1; UNTIL NOT ENT; WRITELN(OUTPUT); FOR I := 1 TO 4 DO WRITE(OUTPUT, ' PCODE' : 10, ' SMCODE' : 7, ' ACT' : 4, ' FREQ'þ µ : 5); WRITELN(OUTPUT); FOR I := 1 TO 4 DO WRITE(OUTPUT, '----------' : 10, '=======' : 7, '----' : 4, '*****' : 5); WRITELN(OUTPUT); I := 0; REPEAT WITH PCODETABLE[I] DO BEGIN WRITE(þÊOUTPUT, PCODE : 10, SEMICODE : 7, ACTION : 4, FREQUENCY + 1 : 5); IF I MOD 4 = 3 THEN WRITELN(OUTPUT) END; I := I + 1 UNTIL PCODETABLE[I].FREQUENCY = -1; WRITELN(OUTPUT); WRITELN(PRR); WRITELN(PRRþÁ, 'PROCEDURE COMPLE', 'TETASK;'); WRITELN(PRR); WRITELN(PRR); I := 0; J := 1; WRITELN(PRR, 'PROCEDURE TASK0;'); WRITELN(PRR, 'BEGIN'); REPEAT WITH PCODETABLE[I] DO BEGIN IF I MOD 30 = 29 THEþ¾BN BEGIN WRITELN(PRR, 'END;'); WRITELN(PRR); WRITELN(PRR); WRITELN(PRR, 'PROCEDURE TASK' : 14, J : 1, '; '); WRITELN(PRR, 'BEGIN'); J := J +þ02 1 END; WRITE(PRR, ' ' : 5, 'HASH(''' : 6, PCODE : 4, ''', ''' : 4); OCTALIZER(SEMICODE); WRITELN(PRR, ''', ' : 3, ACTION : 4, ');') END; I := I + 1;  UNTIL PCODETABLE[Iþ‹S].PCODE = ' '; WRITELN(PRR, 'END;'); WRITELN(PRR); WRITELN(PRR, 'BEGIN'); FOR I := 0 TO J - 1 DO WRITELN(PRR, ' ' : 5, 'TASK' : 4, I : 1, '; '); WRITELN(PRR, 'END;'); WRITELN(PRR); WRITELN(PRR); WRITELN(PRR)þ&`; 0 : WRITELN END. þÔÔÿPRIMES.û´& Eþ-PROGRAM PRIMES(OUTPUT); (* EXAMPLE P54 PASCAL USER MANUAL AND REPORT *) CONST WDLENGTH=16; MAXBIT=15; W=2; VAR SIEVE,PRIMES : ARRAY[0..W] OF SET OF 0..MAXBIT; NEXT : RECORD WORD,BIT : INTEGER END; J,K,T,C : INTEGER; EMPTY : BOOLþœCEAN; BEGIN FOR T:=0 TO W DO BEGIN SIEVE[T]:=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; PRIMES[T]:=[] END; SIEVE[0]:=SIEVE[0]-[0]; NEXT.WORD:=0; NEXT.BIT:=1; EMPTY:=FALSE; WITH NEXT DO REPEAT WHILE NOT(BIT IN SIEVE[WORD]) DO BIT:=SUþ:PCC(BIT); PRIMES[WORD]:=PRIMES[WORD]+[BIT]; C:=2*BIT+1; J:=BIT; K:=WORD; WHILE K<=W DO BEGIN SIEVE[K]:=SIEVE[K]-[J]; K:=K+WORD*2; J:=J+C; WHILE J>MAXBIT DO BEGIN K:=K+1; J:=J-WDLENGTH  END END; IF SIEVE[WORD]þ�?=[] THEN BEGIN EMPTY:=TRUE; BIT:=0 END; WHILE EMPTY AND (WORDC 0,0,SZR JMP .-2 JMP 0,3 .RITE: WRITE BIND: .BIND XWRI: POP1 2 ;FBA MOVZR 2,2 POP1 0 ;$ OF CHARS STA 0,AD1 ;KEEP A COPY POP1 1 ;INTEGER JSR @BIND PURGE: LDA 2,FCH,2 ;CHANNEL # LDA 1,RHB AND 1,2 LDA 3,BFHLF ;BUFFER HALFWAY LDA 1,BFPTR ;Pþ‘ÐTR UPDATED BY PUT SUBZ 3,1,SEZ ;CHARS IN BUFF JMP OK ERR.P ;REPORT NOTHING PERIW ; TO PRINT OK: SUBZ 1,0,SBN ;LEADING SPACES ? JMP NOLDR ;NO SUB 0,3 ;YES LDA 1,AD1 ;GET # OF CHARS NOLDR: MOV 3,0 ;BYTE PTR JSR @.RITE ; ;NOW RESET BUFFEþ§ÞR TO ALL SPACES ; LDA 2,BFHLF STA 2,BFPTR ;RESET PTR SUB 0,0 STA 0,PUTFL NEXT PUTCH: STA 3,Z1 LDA 1,PUTFL ;GET FLAGS MOVL# 1,1,SZC ;SIGN FLAG SET ? JMP SSET ;YES MOVZR 0,0,SNC ;NO - B15 0 FOR SPACE JMP @Z1 ;IGNORE SPACES MOVR 1,1 ;CARRYþ>ñ IS #0 - USE IT STA 1,PUTFL ;SIGN ENCOUNTERED MOVZR# 0,0,SZC ;+ OR - ? JMP @Z1 ;+ MOVOL 0,0 ;REFORM - JMP SAND ;LETIT GO SSET: MOVR# 1,1,SZC ;DIGIT FLAG SET ? JMP SAND ;YES LDA 2,ZERO ;NO - LEADING ZERO ? SUB# 0,2,SNR JMP @Z1 ;IGNORE LEADþÿ&ING ZEROES MOV 0,0,SZR ;NULL TERMINATING INTEGER ? JMP SETD MOV 2,0 ;PASS ZERO FOR NULL JMP SAND SETD: INC 1,1 ;SET DFLAG STA 1,PUTFL ;SET D FLAG SAND: MOVS 0,0,SNR ;LAST NULL ? JSR @Z1 ;YES - IGNORE IT LDA 2,BFPTR ;CURRENT POSN. JSR @.BPUT þé±å ISZ BFPTR JMP @Z1 ZERO: 60 SPWD: 1B2+1B10 ;SPACE IN EACH BYTE BFSIZ: 66. ;WORDS BFBP0: BUFFA*2 ;FIRST CHAR BFHLF: BUFFA*2+66. ;HALFWAY CHAR BFPTR: BUFFA*2+66. ;CURRENT PTR BUFFA: .DO 66. ;LINE BUFFER 1B2+1B10 .ENDC .END ÿR2STESTS.SRû­ ó 6þÆ� .TITL R2STESTS ; THE P-CODE INTERPRETER'S COMPARISON OPERATIONS ; THESE ARE RATHER TRICKY: "DOCUMENTATION" AVAILABLE FROM LW .ENT PEQU,PNEQ,PGEQ,PGRT,PLEQ,PLES .EXTN PFPIN .EXTD MIN4,WSA,LHB .NREL ASP=Z1 ;SEE PSSET ABOUT ASP & SASP .MACRþm"O SASP LDA ^1,SP LDA 0,MIN4 ADD 0,^1 STA ^1,ASP % ; BRANCH TABLE FOR SUBROUTINE COMP COMTAB: CM ;MULTIPLE CI ;INTEGER CR ;REAL CI ;BOOLEAN CS ;SET CI ;ADDRESS ; HELPFUL HINT: SUBROUTINE COMP LEAVES ZERO IN AC0. THEREFORE, IN ; THE FþEOLLOWING PEQU ET AL:- ; "INC 0,0" MEANS "AC0:= TRUE" ; "SUBCL 0,0" " "AC0:= VALUE OF CARRY" ; "SUBL 0,0" " "AC0:= VALUE OF NOT CARRY" ; NONE OF ABOVE " "AC0 REMAINS FALSE" PEQU: JSR COMP MOV# 1,1,SNR ;IFF AC1=0 & CARRY=0 SUBL 0þ£ö,0 JMP COM2 PNEQ: JSR COMP MOV# 1,1,SNR ;IFF AC1 NON-ZERO OR (AC1=0 & CARRY=1) SUBCL 0,0,SKP INC 0,0 JMP COM2 PGEQ: JSR COMP SUBL 0,0 ;IFF CARRY=0 JMP COM2 PGRT: JSR COMP MOVC 1,1,SEZ ;IFF AC1 NON-ZERO & CARRY=0 INC 0,0 JMP COM2 PLEQ: JSR þ}¼COMP MOV# 1,1,SNR ;IFF (AC1=0 & CARRY=0)OR CARRY=1 SUBL 0,0,SKP SUBCL 0,0 JMP COM2 PLES: JSR COMP MOV# 1,1,SEZ ;IFF AC1 NON-ZERO & CARRY=1 INC 0,0 JMP COM2 COM2: STOP1 0 NEXT .COMT: COMTAB ; COMP IS A UNIVERSAL (IE CAN BE USED FOR ALL STANDAþ•’RD TYPES) ; SUBROUTINE WHICH COMPARES THE TOP 2 ELEMENTS OF THE STACK. IT ; RETURNS CARRY & AC1 SET AS FOLLOWS:- ; CARRY=1 <=> LESS THAN ; AC1=0 <=> EQUAL ; PLUS THE SPECIAL CASE (FOR SETS ONLY) ; (CARRY=1 & AC1=0) <=> "NO RELATION" ; THISþv IS SUFFICIENT INFO FOR ANY OF THE 6 COMPARISON OPS ; IF YOU REALLY INSIST ON STUDYING THIS CODE, HAVE 2 ASPRINS READY - ; & BLAME JJS, NOT ME ; OTHER POINTS TO NOTE ARE THAT S/R COMP CLEARS ALL RUBBISH OFF THE ; STACK & SETS AC0="FALSE" SO THAT (AFTER POSþ�‚SIBLE RESETTING ; BY PEQU ET AL) IT IS ALL READY FOR A QUICK "STOP1" COMP: MOV 2,0 ;FIRST WE BRANCH ACCORDING TO TYPE LDA 2,.COMT ADD 1,2 JMP @0,2 .PFPN: PFPIN ; *** REAL - COMPARISON IS ARITH SUBTRACTION CR: MOV 3,0 ;TO PRESERVE LINK JSR @.PFPNþ& ;INIT'ISE FP & LOAD FAC1 FDSZ SP FDSZ SP FLDA 0,@SP FSUB 1,0 FSTA 0,@SP FEXT ;EXIT FLOAT.PT LDA 2,WSA ;CHECK REPLY WD OK LDA 1,0,2 MOV 1,1,SNR JMP CR1 ;IF NO PROBS ERR.P PERFP CR1: MOV 0,3 ;RESTORE LINK SUB 1,1 ;CRAFTY USE OF INTEGER PþÎHATH! PUSH1 1 JMP CI ; *** MULTIPLE - ARITH SUBTR OF "N-WORDS-LENGTH" INTEGERS (UNSIGNED) CM: NEG 0,2 ;START AT MOST SIGNIFICANT END. WHILE POP1 0 ;WORD-PAIRS ARE EQUAL, CARRY ON. FIRST MOVZR 0,0 LTOP1 1 ;UNEQUAL PAIR GIVES REQD RELATION MOVZR 1,þ«í1 STA 0,AI1 DSZ AI1 STA 1,AI2 DSZ AI2 CM1: LDA 0,@AI1 LDA 1,@AI2 INC 2,2,SZR ; TO DEAL WITH ODD BYTE JMP CM2 ; - NO LDA 2,LHB ; YES AND 2,0 ; AND 2,1 SUB 2,2 COM 2,2 CM2: SUBO 0,1,SNR INCC 2,2,SNR JMP COM1 JMP CM1 ; *** INTEG,BOOLE,ADDRþ#} - ARITH SUBTR (UNSIGNED) CI: POP1 0 LTOP1 1 ADDOR 0,0 ;CONVERTS SIGNED INTEGERS TO UNSIGNED ADDOR 1,1 SUBO 0,1 JMP COM1 ; *** SET - LOOK AT CORRESPONDING WORD-PAIRS. WHENEVER "NO RELN", ; EXIT "NO RELN". WHILE "EQUAL", KEEP OPEN MIND. BUT AS SOON þ¤ØAS GEQ ; OR LEQ FOUND, ALL THE REST MUST BE GEQ OR LEQ RESPECTIVELY, ELSE ; "NO RELN" CS: SASP 2 CS1: POP1 0 LDA 1,@ASP DSZ ASP SUBZ# 0,1,SZR JMP CS2 ;IF NOT EQU LDA 0,SP SUBZ# 0,2,SNC JMP CS1 SUBO 1,1 JMP CS6 ;IF EQU (DONE) CS2: AND 0,1 SUB#þV 0,1,SNR JMP CS4A ;IF GEQ SO FAR ISZ ASP LDA 0,@ASP DSZ ASP SUB# 0,1,SNR JMP CS5A ;IF LEQ SO FAR CS3: STA 2,SP SUBZ 1,1 JMP CS6 ;ELSE NEQ (DONE) CS4: POP1 0 LDA 1,@ASP DSZ ASP AND 0,1 SUBZ# 0,1,SNC JMP CS3 ;IF NEQ (DONE) CS4A: LDA 0,SP þ»SUBZ# 0,2,SNC JMP CS4 MOVZ 0,1 ;SETS C=0 & AC1 NON-ZERO STA 2,SP JMP CS6 ;IF GEQ (DONE) CS5: POP1 0 LDA 1,@ASP DSZ ASP AND 1,0 SUBZ# 1,0,SNC JMP CS3 ;IF NEQ (DONE) CS5A: LDA 0,SP SUBZ# 0,2,SNC JMP CS5 MOVO 0,1 ;SETS C & AC1 NON-ZERO STA 2þaLk,SP ;IF LEQ (DONE) CS6: POP ;GET RUBBISH OFF STACK POP POP COM1: SUBC 0,0 JMP 0,3 .END ÿMAKER2SYMB.CMû£m þ5ß¼DELETE MAC.PS;^ MAC/N/S NBID FPID OSID R2SSYMBOLS^ ÿR2ROUTL.SRû­ ûþ£R .TITL R2ROUTL .ENT .BPUT,.BGET,.GCH,.FIND .ENT TEMP .EXTN ERR2,FINT,ERRP,PCODE .EXTD CHAN,SPACE,TEMP2,CNTAD,TABAD .EXTD LHB,RHB .TXTM 1 .ZREL ; DEFINE SOME CONSTANTS IN PAGE ZERO THAT ARE ASSUMED TO HAVE ; ADDRESSES 50 AND 51.... ERR2 ; .ERþ�ËR2 = 50 ERRP ; .ERRP = 51 .BPUT: BPUT .BGET: BGET .GCH: GCHAN .CTAB: CTAB .BTAB: BTAB-1 .OTAB: OTAB-1 .TTAB: TTAB-1 .FIND: FIND TEMP: 0 .NREL ; ROUTINE TO WRITE A BYTE TO A GIVEN BYTE ADDRESS ; ; CONDITIONS ... ; ; ENTRY - AC0 - BYTE TO BE WRIþ³ãTTEN(IN LHB) ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - UNDEFINED BPUT: STA 3,BLNK ;LINK STORED LDA 1,LHB ;MASK FOR LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMIþ{ÄNE WHICH BYTE MOVS 0,0,SKP ;RIGHT OR LEFT? MOVS 1,1 LDA 3,0,2 ;LOAD FROM WORD ADDRESS AND 1,3 ;MASK OUT OTHER BYTE ADD 0,3 ;REPLACE WITH NEW BYTE STA 3,0,2 ;AND RESTORE JMP @BLNK ; ROUTINE TO READ A BYTE FROM A GIVEN BYTE ADDRESS ; ; CONDITIOþ° NS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - BYTE ADDRESS ; ; RETURN - AC0 - VALUE OF BYTE READ(IN LHB) ; AC1 - UNDEFINED ; AC2 - UNDEFINED BGET: STA 3,BLNK ;STORE LINK LDA 1,LHB ;BYTE MAþ#�SK FOR LEFT HAND BYTE MOVZR 2,2,SZC ;DETERMINE WHICH BYTE MOVS 1,1 ;RIGHT OR LEFT? LDA 0,0,2 ;LOAD FROM WORD ADDRESS. AND 1,0,SZC ;EXTRACT BYTE MOVS 0,0 ;SWOP INTO LHB JMP @BLNK ; ROUTINE TO GET THE CHANNEL NO. AND RECORD LENGTH OF SPECIFIC FIþ¤šLE. ; ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - WORD ADDRESS OF FBA ; ; RETURN - AC0 - CHANNEL NUMBER ; AC1 - RECORD LENGTH ; AC2 - WORD ADDRESS OF FBA ; ; NORMAL RETURN - NONþY¦E CHARACTER INPUT/OUTPUT ; RETURN + 1 - CHARACTER INPUT/OUTPUT GCHAN: STA 3,BLNK ;STORE LINK LDA 1,LHB ;MASK FOR LEFT HAND BYTE LDA 0,FCH,2 ;CHANNEL WORD OF FBA ANDS 0,1,SNR ;ISOLATE RECORD LENGTH ISZ BLNK ;AND TEST IF CHAR I/O. MOVZL 1,1 þŽ" ;MAKE IT A BYTE COUNT LDA 3,RHB ;MASK CHANNEL NUMBER AND 3,0 STA 0,CHAN JMP @BLNK BLNK: 0 ; ROUTINE TO SEARCH TABLES FOR BUFFER DETAILS. ; ; CONDITIONS ... ; ; ENTRY - AC0 - UNDEFINED ; AC1 - UNDEFINED ; AC2 - CHANNEL NUMBEþúÒR OF FILE (OR ZERO) ; ; RETURN - AC0 - BYTE ADDRESS OF BUFFER AREA(BASE) ; AC1 - ADDRESS OF BYTE COUNT (DISPLACEMENT) ; AC2 - WORD ADDRESS OF ENTRY IN CHANNEL TABLE FIND: LDA 0,TSIZE ;SIZE OF TABLE LDA 1,.CTAB ;ADDRESS OF CHANNEþxL TABLE(TOP) STA 1,TEMP RETST: LDA 1,@TEMP ;SEARCH UNTIL A MATCH OR ERROR SUB 2,1,SNR JMP RETRN ;A MATCH IS FOUND DSZ TEMP INC 0,0,SZR ;TABLE EXHAUSTED? JMP RETST ;NO,FIND NEXT ERR.P ;YES, BLOW..... 411 RETRN: LDA 1,.OTAB SUBZ 0,1 ;ADDRESSþT OF BYTE COUNT(DISPLACEMENT) STA 1,CNTAD LDA 1,@CNTAD ;LOAD ACTUAL COUNT LDA 2,C200 SUBZ# 1,2,SZC ;TEST IF LINE TOO LONG JMP .+3 JSR .NERR ;LINE LIMIT FLAGGED TO CLI 22 LDA 1,CNTAD LDA 2,.TTAB SUB 0,2 ;ENTRY IN THE TABLE TAB COUNTS STA 2,TABAþ)D LDA 2,.BTAB SUB 0,2 LDA 0,0,2 ;SET BUFFER ADDRESS(BASE) LDA 2,TEMP ;CHANNEL TABLE ADDRESS JMP 0,3 .NERR: LDA 2,0,3 ;PICK UP ERROR CODE ERR.2 C200: 200 TSIZE: -4 ;TABLE SIZE 0 0 0 CTAB: 0 ;TOP OF CHANNEL TABLE OTAB: .BLK 4 ;COUNT TABLE TTAþÅ¢B: .BLK 4 ;TAB COUNTER FOR ASCII INPUT/OUTPUT BTAB: BUFF1*2 ;BUFFER TABLE BUFF2*2 BUFF3*2 BUFF4*2 BUFF1: .BLK 104 ;BUFFERS BUFF2: .BLK 104 BUFF3: .BLK 104 BUFF4: .BLK 104 .LOC .-420 ; P-CODE SYSTEM INITIALISATION PROCEDURES. .PCODE: PCODE PI: .SYSþÚ5TM ; X1 := NMAX; X0 := HMA; .MEM JMP . STA 0,HP ; INITIALISE HEAP POINTER TO MAX ADR SUB 1,0 ; X0 := INCREMENT FOR .MEMI CALL STA 1,DSP ; STACK STARTS AT INITIAL NMAX STA 1,MP STA 1,SP DSZ SP LDA 3,HP ; GET THE TOP OF THE HEAP STA 3,@DSP ;þ¬4STORE IT IN THE STACK BASE .SYSTM ; ALLOCATE ALL AVAILABLE STORE .MEMI JMP . SUB 2,2 ;CHANNEL ZERO FOR 'COM.CM' SUB 1,1 ;NORMAL CHARACTERISTICS LDA 0,.COMF ;'COM.CM' .SYSTM .OPEN 77 ERR.2 LDA 2,.PCODE LDA 2,2,2 ;PICK UP THE LABEL OF FIRSTþ‚Ž CUP LDA 1,C5 ADD 1,2 ;FORM ADDRESS OF FIRST POSSIBLE FILENAME STA 2,STPC JSR COMA1 JSR COMA2 ;READS PROGRAM NAMEAND GLOBAL SWITCHES RENU: JSR COMA1 ;READS NAME OF SECOND ARGUEMENT LDA 2,.COMA STA 2,TEMP ;SET UP THE BUFFER ADDRESS LDA 2,STPC þn¢;FIRST POSSIBLE NAME LDA 1,13,2 ;FIRST POSSIBLE OPEN COMMAND LDA 0,COPN ; CSP OPN SUB 1,0,SZR ;IS IT A MATCH JMP NOMAT ;NO - THEN BLOW UP.... MOVZL 2,2 ;YES - THEN REPLACE FILENAME STA 2,TEMP2 LDA 0,M20 ;INITIAL COUNT STA 0,COUNT NEXTþoüB: LDA 2,TEMP JSR @.BGET ;GET THE NEXT BYTE LDA 2,TEMP2 JSR @.BPUT ;PUT IT INTO THE FILENAME MOV 0,0,SNR ;TEST IF NULL AFTER THE PUT.... JMP ENAME ISZ TEMP ;UPDATE POINTERS ISZ TEMP2 ISZ COUNT ;ERROR IF OVER.. JMP NEXTB JSR .NERR 317 NOMATþÕ': JSR .NERR 313 ; ROUTINE TO READ THE FILENAME COMA1: STA 3,TEMP LDA 0,.COMA ;ARGUEMENT BUFFER SUB 2,2 ;CHANNEL ZERO .SYSTM .RDL 77 ;READ THAT NAME JMP TSTEF ;SEE IF EOF? JMP @TEMP TSTEF: LDA 1,C6 ;TEST IF EOF SUB# 1,2,SZR ERR.2 ;IF NOT þ¥THEN BLOW... JMP ENDAL ; ROUTINE TO READ THE SWITCHES COMA2: STA 3,TEMP LDA 0,.SWA ;SWITCH BUFFER LDA 1,C4 ;TWO WORDS SUB 2,2 ;CHANNEL ZERO .SYSTM .RDS 77 ;READ FOUR BYTES JMP TSTEF JMP @TEMP ENAME: LDA 0,SPACE ;FILL OUT WITH SPACES LDA 2,þZTEMP2 JSR @.BPUT ISZ TEMP2 ISZ COUNT JMP ENAME LDA 2,STPC ;UPDATE THE POINTER TO THE PCODE LDA 1,C15 ;BY AN APPROPRIATE AMOUNT ADD 1,2 STA 2,STPC JSR COMA2 LDA 0,SWA ;PICK UP SWITCHES MOVZL 0,0,SNC ;AND TEST IF 'A' SET ON. JMP RENU ;NO...Tþ¾ÊHEN GET NEXT PARAMETER SUBZR 0,0 ;OTHERWISE SET BIT 0 OF NULLS LDA 2,STPC LDA 1,-5,2 ;COUNT ADD 0,1 STA 1,-5,2 ;RESTORE COUNT JMP RENU ENDAL: FINT ;START RFPI LDA 0,.PCODE ; INITIALISE PC STA 0,PC DSZ PC NEXT .COMF: COMF*2 COMF: .TXT 'COM.þ„ ¢CM' C5: 5 C4: 4 C15: 15 C6: 6 .COMA: COMA*2 .SWA: SWA*2 STPC: 0 M20: -20 COUNT: 0 COPN: 161425 COMA: .BLK 10 SWA: .BLK 2 .END PI ÿR2SMPD.SRû­U+þ2\ .TITL R2SMPD .ENT MPY,MPY0,DVD .EXTD .SV0 .ZREL MPYA: .MPYA MPYU: .MPYU DIVU: .DIVU .NREL MPY0 = JSR @MPYU MPY = JSR @MPYA DVD = JSR @DIVU ; SINGLE PRECISION FAST MULTIPLICATION ; ; ENTRY CONDITIONS - AC0 - ZERO OR VALUE TO BþFâE ADDEDTO RESULT ; AC1 - MULTIPICAND ; AC2 - MULTIPLIER ; AC3 - LINK ; ; EXIT CONDITIONS - AC0 - RESULT ; AC1-AC3 - UNDEFINED .MPYU: SUBC 0,0 ;CLEAR AC0, DON'T DISTURB CARRY .MPYA: STA 3,SAV3 ;SAVE AC3 ADCZ# 1,2,SZC ;SKIPS IF AC2þ/‹<=AC1 MOV 2,3,SKP ;LARGEST IN AC3 MOV 1,3,SKP MOV 1,2 ;SMALLEST (COUNT) AC2 SPFM: MOVZR 2,2,SZC ;BIT SET? ADD 3,0 ;YES MOV 2,2,SNR ;LAST BIT? JMP .+3 ;YES ADDZ 3,3 ;NO.. JMP .-5 ;..SO REPEAT MOV 0,1 SUB 0,0 JMP @SAV3 ; SINGLE PRECISION þä\UNSIGNED DIVIDE ; ; ENTRY CONDITIONS AC0 - DIVIDEND (HIGH ORDER) MOST SIG.BITS ; AC1 - DIVIDEND (LOW ORDER) LEAST SIG.BITS ;  AC2 - DIVISOR ; AC3 - UNUSED ; ; EXIT CONDITIONS AC0 - REMAINDER ; þ¾] AC1 - QUOTIENT ; AC2 - UNCHANGED ; AC3 - DESTROYED ; .DIVI: SUB 0,0 ; INTEGER DIVIDE,CLEAR AC0 .DIVU: STA 3,SAV3 ; SAVE AC3 SUBZ# 2,0,SZC ; TEST FOR OVERFLOW JMP DIVE ;SET CARRY AND RETURN LDA þ'$3,M20 ; 16 ITERATIONS MOVZL 1,1 ; SHIFT LOW DIVIDEND DIVN: MOVL 0,0 ; SHIFT HIGH DIVIDEND SUB# 2,0,SZC ; DOES DIVISOR GO IN? SUB 2,0 ; YES MOVL 1,1 ; SHIFT LOW DIVIDEND INC 3,3,SZR ; CHECK COUNT JMP DIVN ; NOT DONE SUBO 3,3,SKP ; DONE ,CLEAþ�¨£R CARRY DIVE: SUBZ 3,3 ; SET CARRY JMP @SAV3 ; RETURN M20: -20 SAV3: 0 ;RETURN ADDRESS .END ;END OF UNSIGNED MULTIPLY ÿR2SRANDOM.SRû­ ó ;þþ­ .TITL R2SRANDOM .ENT XRRR,XWDR,XEOR .EXTD TEMP2,.GCH,CHAN .NREL ; INPUT / OUTPUT ROUTINES FOR RANDOM FILES ; ; XRRR: SUBZL 2,2,SKP XWDR: SUBZ 2,2 STA 2,TEMP2 ;FLAG INDICATES WHETHER READING OR WRITING POP1 2 MOVZR 2,2 ;FBA ADDRESS JSR @.GCH ;þ³vPICK UP CHANNEL NUMBER JMP .+1 MOV 2,0 LDA 2,CHAN LDA 3,C64 ;TEST IF LESS THAN 64 POP1 1 ;GET RECORD NUMBER ADCZ# 1,3,SNC ;RECORD LENGTH. JMP WRBLK ;IT'S A BLOCK TRANSFER DSZ TEMP2 JMP WRRI ;IT'S WRITE A RANDOM RECORD JMP RRRI ;IT'S READ Aþ ç RANDOM RECORD WRBLK: DSZ TEMP2 JMP WRBI ;IT'S WRITE A RANDOM BLOCK JMP RRBI ;IT'S READ A RANDOM BLOCK C64: 100 ;CONSTANT 64 DECIMAL WRRI: MOV 0,3 STA 3,77,3 ;SET THE FLAG .SYSTM .WRR 77 ;WRITE A RECORD OUT IMMEDIATELY ERR.2 NEXT WRBI: MOVþA  0,3 LDA 1,C255 ADD 1,3 ;FORM FLAG ADDRESS STA 1,0,3 ;SET FLAG .SYSTM .WRB 77 ;WRITE A RANDOM BLOCK IMMEDIATELY ERR.2 NEXT RRRI: .SYSTM .RDR 77 ;READ A RECORD IMMEDIATELY ERR.2 MOV 0,2 SUB 0,0 ;TEST IF EMPTY LDA 3,77,2 MOV 3,3,SNR SUBZLþì4 0,0 STA 0,FST,2 ;SET FLAG IN BUFFER NEXT RRBI: .SYSTM .RDB 77 ;READ A RANDOM BLOCK IMMEDIATELY ERR.2 MOV 0,2 SUB 0,0 LDA 3,C255 ;TEST IF EMPTY ADD 3,2 LDA 3,0,3 MOV 3,3,SNR ;IF EMPTY SET FLAG SUBZL 0,0 STA 0,FST,2 ;LOAD FLAG WORD NEXT þ££‘; PREDICATE FOR RANDOM FILES XEOR: POP1 2 ;FBA MOVZR 2,2 LDA 0,FST,2 ;LOAD FLAGS MOVZR 0,0 SUBL 0,0 PUSH1 0 ;RETURN BOOLEAN VALUE NEXT C255: 377 .END ÿRGCD.û´%þ_ PROGRAM RGCD(OUTPUT); (* EXAMPLE P82 PASCAL USER MANUAL AND REPORT *) VAR X, Y, N: INTEGER; FUNCTION GCD(M,N: INTEGER): INTEGER; BEGIN IF N=0 THEN GCD:=M ELSE GCD:=GCD(N,M MOD N) END; PROCEDURE TRY(A,B: INTEGER); BEGIN WRITELN(A,B,GCD(A,B)) ENDþJpá; BEGIN TRY(18,27); TRY(312,2142); TRY(61,53); TRY(98,868); END. ÿHEADA2.û£j þv(* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ============================== AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE II DATE : MARCH, 1977 *) (*$D-********þ"µ******************************************************* !!!! ONLY GOOD FOR PASCAL RELEASE II !!!! PROGRAM "P4ASM.SV" WILL READ IN A NOVA-PCODE PROGRAM AND TRANSLATE IT INTO THE CORRESPONDING PACKED PCODE PROGRAM WHICH WILL Lþ�/ATER BE PROCESSED BY THE NOVA ASSEMBLER TO PRODUCEAN INTERNAL CODE. SOURCE PROGRAM "P4ASM" IS THE AMALGAMATION OF FOUR SMALLER FILES : "HEADA2", "P4AMX2", "P4AMY2" AND "P4ASMZ2". TO ACTIVATE THIS PROGRAM, DO THþž$E FOLLOWING COMMAND : P4ASM ANYPCODE.QC DEVICE ANYPCODE.PC ==================================== WHERE ANYPCODE.PC = INPUT FILE CONTAINING A PCODE PROGRAM ANYPCODE.QC = OþuOUTPUT FILE CONTAINING THE CORRESPONDING PACKED PCODE PROGRAM. DEVICE = PRR FILE OR DEVICE FOR ERROR OR USEFUL MESSAGES. ******þ\²******************************************************) PROGRAM P4ASM(OUTPUT, PRR, INPUT); ÿROMAN.û´ ß þ¾ÄPROGRAM ROMAN(OUTPUT); VAR X,Y : INTEGER; BEGIN Y:=1; REPEAT X:=Y; WRITE(X,' '); WHILE X>=1000 DO BEGIN WRITE('M'); X:=X-1000 END; IF X>=500 THEN BEGIN WRITE('D'); X:þýµ=X-500 END; WHILE X>=100 DO BEGIN WRITE('C'); X:=X-100 END; IF X>=50 THEN BEGIN WRITE('L'); X:=X-50 END; WHILE X>=10 DO BEGIN WRITE(þýCë'X'); X:=X-10 END;  IF X>=5 THEN BEGIN WRITE('V'); X:=X-5 END; WHILE X>=1 DO BEGIN WRITE('I'); X:=X-1 END; WRITELN; Y:=2*Y UNTIL Y>5000 END. ÿHEADM2.û£jþNå(* UNIVERSITY OF LANCASTER DEPARTMENT OF COMPUTER STUDIES ============================== AUTHOR : CHI-KEUNG YIP LANGUAGE : NOVA PASCAL RELEASE II DATE : MARCH, 1977 *) (*$D-*þ–a*************************************************************** !!!! ONLY GOOD FOR RELEASE II !!!! PROGRAM "P4MAC.SV" WILL READ IN A NOVA-PCODE PROGRAM AND TRANSLATE IT INTO THE CORRESPONDING PACKED PCODE PROGRAM WHICH WILL þ®LATER BE PROCESSED BY THE NOVA MACRO-ASSEMBLER TO PRODUCE AN INTERNAL CODE. SOURCE PROGRAM "P4MAC" IS THE AMALGAMATION OF FOUR SMALLER FILES : "HEADM2", "P4AMX2", "P4AMY2" AND "P4MACZ2". TO ACTIVATE THIS PROGRAþwM, DO THE FOLLOWING COMMAND : P4MAC ANYPCODE.QC DEVICE ANYPCODE.PC ==================================== WHERE ANYPCODE.PC = INPUT FILE USED TO CONTAIN A PCODE PROGRAM ANþzYPCODE.QC = OUTPUT FILE USED TO CONTAIN THE CORRESPONDING INTERNAL CODE. DEVICE = PRR FILE OR DEVICE FOR ERROR OR USEFUL MESSAGES. ******************************þD ¤******************************) PROGRAM P4MAC(OUTPUT, PRR, INPUT); ÿP4ASMFILES.CMûrr þx„åP4ASMFILES.CM,NEW2P4ASMB,SETUP,FASTHASH,SETUPAX,SETUPAZ,^ HEADA2,HEADM2,P4AMX2,P4ASMZ2,P4MACZ2,NEW2P4ASME,MAKE2P4AM.CM^ ÿR2SADMIN.SRû­ ó 4þF¶ .TITL R2SADMIN ; THE P-CODE INTERPRETER'S "CONTROL" OPERATIONS, I.E.:- ; BLOCK, PROCEDURE, AND FUNCTION ENTRY/EXIT ; JUMPS .ENT PMST,PCUP,PCXP,PENT,PRET,PCSP .ENT PTJP,PFJP,PUJP,PXJP,PUJC .EXTN .BASE .EXTN SPTAB .NREL ;REMEMBER... ; SP=STACK POþ%‹INTER ; MP=MARK POINTER ; SL=STATIC LINK ; DL=DYNAMIC LINK ; RA=RETURN ADDRESS ; PC=PCODE INSTRUCTION ADDRESS ; HP=HEAP POINTER ;REMEMBER...THAT THE CONTROL INSRUCTIONS WILL BE ENCOUNTERED ;IN THE ORDER MST CUP ENT . PMST: SUB 2,2 ;CREATE NEW STACKþÈ_ FRAME .BASE ;LEAVES SL IN AC2 LDA 3,SP ;SL:= BASE(P) STA 2,1+SL,3 LDA 0,MP ; DL:= MP STA 0,1+DL,3 LDA 0,EP ; GET STACK MAX STA 0,1+MTS,3 ; MTS:=SP LDA 0,.MSL ; SP:= SP+MSL ADD 0,3 STA 3,SP NEXT .MSL: MSL ;MSL IS 5 ; CUP PASSES IN THE Pþ€\ FIELD THE NUMBER OF PARAMETERS ; ASSOCIATED WITH THE PROCEDURE. ONE WORD IS SAVED ; FOR EACH (ADDRESS OF MULTI-WORD OBJECTS PASSED) PCUP: LDA 3,SP ; MP:= SP-MSL-P+1 SUB 1,3 ;THIS STRANGE VALUE USED LDA 1,.MSD ;..BY ENT SUBSEQUENTLY SUB 1,3 STA 3,þ3ÊMP LDA 0,PC ; RA:=PC STA 0,RA,3 STA 2,PC ; PC:=Q-1 DSZ PC NEXT .MSD: MSL-1 ;CXP CALL EXTERNAL PROCEDURE - BY A.F. ON 11/02/77 ;ADDED CHECKS FOR PARAMETER LENGTHS PCXP: LDA 2,0,2 ;ACTUAL ADDRESS OF PROCEDURE LDA 0,4,2 ;LOAD THE COUNT OF PARAMEþ²œTERS LDA 3,ENT3 ;TEST IF AN ENT3 IS HERE? SUB 0,3,SZR JMP XPER ;ERROR NO ENT3 LDA 0,5,2 ;O.K. NOW TEST NO. OF PARAMETERS MOVZR 0,0 ;DIVIDE BY 2 SUB 1,0,SNR ;BLOW OUT... IF NOT EQUAL JMP PCUP XPER: ERR.P 412 ENT3: 61003 ; ENT GIVES IN Q FIEþg)LD STACK SPACE REQD BY PROC ; (ENT1 STATIC, ENT2 DYMAMIC) ; USING STRANGE MP WE SUBTRACT # OF PARAMETERS ; FROM THIS VALUE AND UPDATE SP PENT: MOVZR 2,2 ; HALVE Q FIELD MOVZR 1,1,SNR ; FIRST ENT OF PAIR ? JMP .+4 MOV 1,1,SZC ; NO, TEST IF OTHER þQ‚NEXT ; ENT3 JMP ENT2 ; NO LDA 0,MP ; SP:=MP+Q SUB 1,1 ; MAKE ZER0 NEG 2,2,SNR ; LOCAL SPACE COUNT JMP TEST CLR: PUSH1 1 ; SET TO ZERO INC 2,2,SZR ; ALL LOCAL SPACE JMP CLR JMP TEST ; CHECK STACK ENT2: LDA 0,SP ; SP+SEGMENT ADD 2,0 ; .þ±}. WORKSPACE STA 0,EP ; .. = MAX STACK TEST: LDA 1,HP SUBO 0,1,SNC NEXT ERR.P PERSO ; REPORT NOT ENOUGH SPACE ;IN RETURNING LEAVE ONE OR TWO WORD FUNCTION ;VALUE (IF APPROPRIATE) ON TOP OF STACK PRET: LDA 2,MP ADD 2,1 ; SP:= MP-1+P STA 1,SP þef DSZ SP LDA 0,RA,2 ; PC:= RA STA 0,PC LDA 0,MTS,2 ; EP:= MTS STA 0,EP LDA 0,DL,2 ; MP:= DL STA 0,MP NEXT PCSP: LDA 0,.SPTAB ; JUMP INDIRECT SPTAB[Q] ADD 0,2 JMP @0,2 .SPTAB: SPTAB PFJP: POP1 1 ; IF Y=FALSE THEN:- MOV# 1,1,SZR NEXT PUJP: SþÝö/TA 2,PC ; PC:= Q-1 DSZ PC NEXT PTJP: POP1 1 ; IF Y=TRUE THEN:- MOV# 1,1,SNR NEXT JMP PUJP ; PC:=Q-1 PXJP: POP1 1 ; PC:= Y+Q-1 MOVZL 1,1 ;INDEX OVER 2WDS AT A TIME ADD 1,2 JMP PUJP PUJC: ERR.P PERCJ .END ÿR2SSPTAB.SRû­Žþ-Ð .TITL R2SSPTAB .EXTN XWLN,XWRC,XWRI,XWDR,XWRS .EXTN XRDC,XRDI,XRDR,XRLN .EXTN XGET,XPUT .EXTN XELN .EXTN XATN,XCOS,XEXP,XLOG,XSIN,XSQT .EXTN XNEW,XSAV,XRST .EXTN XRND,XOPN .EXTN XCLS,XRRR,XWRR .EXTN XPAG .EXTN XEOR,XRWR,XRSE .EXTN PUNDF .ENTþ^ SPTAB .NREL SPTAB : XGET ;0 XPUT ;1 XRST ;2 XRLN ;3 XNEW ;4 XWLN ;5 XWRS ;6 XELN ;7 XWRI ;8 XWRR ;9 XWRC ;10 XRDI ;11 XRDR ;12 XRDC ;13 XSIN ;14  XCOS ;15 XEXP ;16 XLOG ;17 XSQT ;18 XATN ;19 XSAV ;20 XOPN ;21..þóOPEN ANY FILE (CREATE IMPLIED) XRND ;22 PUNDF ;23 XCLS ;24 XRRR ;25 XWDR ;26 XPAG ;27 XEOR ;28 XRWR ;29 XRSE ;30 PUNDF ;31 .END þüüÿP4SOURCES.CMû£Žþ£_P4SOURCES.CM,^ R2RFW.SR,R2SECHK.SR,R2ROUTL.SR,R2IFT.SR,R2RFILES.CM,R2SMPD.SR,^ R2SOVL.SR,R2STP.SR,R2SINTEGER.SR,R2SBOOLEAN.SR,R2SRANDOM.SR,^ R2SOPN.SR,R2IREAL.SR,R2SADMIN.SR,R2SRD.SR,R2SIOIN.SR,R2CITAB.SR,^ R2IFNS.SR,R2CRCODE.SR,R2SSET.SR,Rþ»�2STI.SR,R2RFT.SR,R2SITAB.SR,^ R2SDIV.SR,P4ERRSUM,R2IFW.SR,R2SMEMACC.SR,R2SMISC.SR,R2SDBIN.SR,^ R2STESTS.SR,R2SHEAP.SR,R2ALLFILES.CM,R2CSPTAB.SR,R2IOUTL.SR,^ R2SDECODER.SR,R2RREAL.SR,R2SMYP.SR,R2IFILES.CM,R2SSYMBOLS.SR,^ R2SREWR.SR,R2RFNS.SRþË{,R2SSPTAB.SR,R2SCONSTS.SR,P4ENTERERR,^ EXAMPLES.CM,ROMAN,LIFE,GRAPH,PRIMES,RGCD,^ P4COMPILE1,P4COMPILE2,P4COMPILE3,P4COMPILE4,^ MAKER2SYMBOLS.CM,MAKEDGSYMBOLS.CM,^ P4ASMFILES.CM,NEW2P4ASMB,SETUP,FASTHASH,SETUPAX,SETUPAZ,^ HEADA2,HEADM2,þüSP4AMX2,P4ASMZ2,P4MACZ2,NEW2P4ASME,MAKE2P4AM.CM^ ÿP4ASMZ2.ûmm þ„. PROCEDURE DOTFILE; (* REDUNDANT IN RELEASE II *) BEGIN WRITELN(OUTPUT, 11008 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* READ OFF EOLN *) WRITELN(OUTPUT, '.TXT ''INPUT'''); WRITELN(OUTPUþ=æT, -8954); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8954); WRITELN(OUTPUT,  24064); WRITELN(OUTPUT, 8192); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8952); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT,þÞ 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''OUTPUT'''); WRITELN(OUTPUT, -8951); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8949); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITþò&ELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRD'''); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, -7403); WRITELN(OUTPUT, -8948); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, 8192); þ´, WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, -8946); WRITELN(OUTPUT, -8703); WRITELN(OUTPUT, 2048); WRITELN(OUTPUT, 11008); WRITELN(OUTPUT, '.TXT ''PRR'''); WRITELN(OUTPUT, -8945); WRITELN(OUTPUT, -7403); þVÐ WRITELN(OUTPUT, -8943); WRITELN(OUTPUT, 24064); WRITELN(OUTPUT, -32768); WRITELN(OUTPUT, 2048 ); WRITELN END (*** OF DOTFILE ***); PROCEDURE PACKCODE; VAR SMCODE, I, P, Q : INTEGER; LITERALS þc¦: STRING3; OP, TEMPOP : STRING4; ERROR : BOOLEAN; PROCEDURE DUMMYLABELS; BEGIN ECOUNT := ECOUNT + 1; WRITELN(PRR, '**********', ' INSTR. NO. ' : 12, ICOUNT : 5, ' ''' : 2, OP, þ/ ''' HAS NOT YET BE', 'EN CATERED FOR ');  WRITELN END (*** OF DUMMYLABELS ***); FUNCTION PKACTION : INTEGER; VAR TEMP, RNDM, PI : INTEGER; MORETRY : BOOLEAN; PROCEDURE ERRORP; þ¦è BEGIN ERROR := TRUE; ECOUNT := ECOUNT + 1; MORETRY := FALSE; WRITE(PRR, 'INSTR. NO. = ' : 13, ICOUNT : 1, ' ', OP); REPEAT READ(INPUT, CH); þ1á WRITE(PRR, CH) UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WRITELN(PRR); WRITE(PRR, '** ', OP, ' ** ILLEGAL CODE'); WRITELN(PRR) END (*** ERRORP ***); BEGIþ;N (* OF PKACTION *) PKACTION := 0; TEMP := ORD(OP[1]) * 4 + ORD(OP[2]) * 2 + ORD(OP[3]); IF ORD(OP[4]) <> 0 THEN TEMP := TEMP * 2 + ORD(OP[4]); TEMP := TEMP MOD TABLESþ>IZE; MORETRY := TRUE;  SMIN := SMIN + 1; SMAX := SMAX + 1; RNDM := 1; PI := 0; IF OP = ' ' THEN ERRORP ELSE WHILE MORETRY DO WITH PCODETABLE[ (TEMP + PI) MOD TABLESþ¢–IZE ] DO BEGIN IF OP = PCODE THEN BEGIN MORETRY := FALSE; SMCODE := SEMICODE; PKACTION:= ACTION; END ELSE IF PCODE = ' ' THEN ERRORP; þ¶ž IF MORETRY THEN  BEGIN RNDM := (RNDM * 5) MOD (TABLESIZE * 4); PI := TRUNC(RNDM / 4); SMAX := SMAX + 1 END END END (*** OF PKACTION ***); PROCEDURE NILP(P1, P2 : INþäaTEGER); (* PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1= 0)) THEN BEGIN WRITELN(OUTPUT, P2); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 ); þ,¹ READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILP ***); PROCEDURE NILPS(P1, P2, P3 : INTEGER); (* SPECIAL PCODE WITH NO P-FIELD *) BEGIN IF NOT ((P1 < HALFWORD) AND (P1 >= 0)) THEN BEGIN WRITELN(OUþDÏTPUT, P2 + P3 ); WRITELN(OUTPUT, P1) END ELSE WRITELN(OUTPUT, BIT16 + P1 + P2 + P3 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF NILPS ***); PROCEDURE QTOP(P1, P2, P3 : INTEGER); (* PCODE WIþTH P- AND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND (P2 < HALFWORD) AND (P2 >= 0)) THEN BEGIN WRITELN(OUTPUT, P3 + P1 ); WRITELN(OUTPUT, P2 : 7) END ELSE WRITELN(OUTPUT, BIT16 + P3 + P2 );þ¢d READ(INPUT, CH) (* READ OFF EOLN *) END (*** QTOP ***); PROCEDURE QTOPS(P1, P2, P3, P4 : INTEGER); (* SPECIAL PCODE WITH P- AND Q-FIELDS *) BEGIN IF NOT ((P1 = 0) AND ( P2 < HALFWORD) AND (P2 >= 0)) THEN  þÆBEGIN WRITELN(OUTPUT, P3 + P4 + P1 ); WRITELN(OUTPUT, P2) END ELSE WRITELN(OUTPUT, BIT16 + P2 + P3 + P4 ); READ(INPUT, CH) (* READ OFF EOLN *) END (*** OF QTOPS ***); PROCEDURE BOUNDS(SþõÙEMICODE, LOWERBOUND, UPPERBOUND : INTEGER); (* GENERATE POSSIBLE OFFENDING PCODE LOCATION IN CASE OF INVALID CHECK RANGE *) BEGIN IF SEMICODE > 0 THEN BEGIN IF (LOWERBOUND = 0) AND (UPPERBOUND < HALFWORD) THEN þÿ WRITELN(OUTPUT, SEMICODE + BIT16 + UPPERBOUND) ELSE BEGIN IF (LOWERBOUND >= 0) AND (LOWERBOUND < HALFWORD) THEN WRITELN(OUTPUT, SEMICODE + LOWERBOUND) þªR ELSE BEGIN WRITELN(OUTPUT, SEMICODE + HALFWORD); WRITELN(OUTPUT, LOWERBOUND) END; WRITELN(OUTPUT, UPPERBOUND) END þÿŠ END ELSE IF LOWERBOUND > 0 THEN WRITELN(OUTPUT, SEMICODE + 1) ELSE WRITELN(OUTPUT, SEMICODE); WRITELN(OUTPUT, ICOUNT + 1) END (* OF BOUNDS *); PROCEDURE LOWCODE; (* TO PROVIDE FACILITIES FOR THOSE POOR SOULS Wþm¥HO MUST LIVE WITH MACHINE CODES *) VAR I, J, K, L, ACC, LEVEL, DISPL : INTEGER; CODEND : BOOLEAN; DIRECTIVE : STRING4; LINE : ARRAY[1..80] OF CHAR; GOODCHAR : SET OF CHAR; GOODIGIT þ€» : SET OF '0'..'9'; FUNCTION GETNUM : INTEGER; VAR NUMBER : INTEGER; BEGIN WHILE ((LINE[J] = ' ') OR (LINE[J] = ',')) AND (J < I) DO J := J + 1; IF NOT (LINE[J] IN GOODþsZIGIT) THEN BEGIN WRITELN(PRR, '** ASSEMBLER COD', 'E ERROR :'); FOR J := 1 TO I DO WRITE(PRR, LINE[J]); WRITELN(PRR);  WRITELN(PRR, '** LAST RECORDED', ' PCOþ=DE COUNTER =', ICOUNT); ECOUNT := ECOUNT + 1 END; NUMBER := ORD(LINE[J]) - ZERO; J := J + 1; WHILE (J <= I) AND (LINE[J] IN GOODIGIT) DO BEGIN þÛ¨ NUMBER := NUMBER * 10 + ORD(LINE[J]) - ZERO; J := J + 1 END; GETNUM := NUMBER END (* OF GETNUM *); PROCEDURE GETLABEL;  VAR N : INTEGER; BEGIN IF J þB> 1 THEN BEGIN FOR N := 1 TO J DO WRITE(OUTPUT, LINE[N]); END END (* OF GET LABEL *); BEGIN (* OF LOWCODE *); WRITELN(OUTPUT, '.RDX 8'); WRITELþz[N(OUTPUT, '.EXTD .CST .CLD ', 'PCRTN'); CODEND := FALSE; FOR CH := '0' TO '9' DO GOODIGIT := GOODIGIT + [CH]; FOR CH := 'A' TO 'Z' DO GOODCHAR := GOODCHAR + [CH]; GOODCHAR := GOODCHAR + ['.', '$'] + GOODIGIT; þ+Ñ REPEAT IF EOF(INPUT) THEN BEGIN WRITELN(PRR, '** ASSEMBLY CODE', ' SECTION NOT PRO', 'PERLY ENDED.'); WRITELN(PRR, '** LAST RECORDED', ' PCODE COUNTER =', ICOUNT); þ2Ÿ HALT(311); END; REPEAT WHILE EOLN(INPUT) DO READLN(INPUT); READ(INPUT, CH);  IF CH = ';' THEN READLN(INPUT) UNTIL CH IN GOODCHAR; LIþ@¨NE[1] := CH; FOR I := 2 TO 80 DO LINE[I] := ' '; I := 1; J := 1; WHILE NOT( EOLN(INPUT) OR ( I = 80) OR (CH = ';')) DO BEGIN READ(INPUT, CH); IF CH <> ';'þH_ THEN BEGIN I := I + 1; LINE[I] := CH; IF CH = ':' THEN J := I END END; READLN(INPUT); IF J > 1 Tþ_HEN REPEAT J := J + 1; UNTIL LINE[J] <> ' '; L := 1; FOR K := J TO J + 3 DO BEGIN DIRECTIVE[L] := LINE[K]; þ5‚ L := L + 1 END; IF DIRECTIVE = 'JPC ' THEN BEGIN GETLABEL;  CODEND := TRUE; WRITELN(OUTPUT, 'JSR @PCRTN') END ELSE IF DþÛ IRECTIVE = 'POP ' THEN BEGIN GETLABEL; J := J + 4; WRITELN(OUTPUT, 'DSZ 41'); WRITE(OUTPUT, 'LDA ' : 5, GETNUM : 1, ' @41'); WRITELN(Oþ)jUTPUT) END ELSE IF DIRECTIVE = 'PUSH' THEN BEGIN GETLABEL;  J := J + 4; WRITELN(OUTPUT, 'ISZ 41'); WRITE(OUTPUT, 'STA ': 5, GETNUMþÑë : 1, ' @41'); WRITELN(OUTPUT) END ELSE IF DIRECTIVE = 'LOAD' THEN BEGIN GETLABEL; J := J + 4; ACC := GETNUM; LEVEL := GETNUþ¶wM; DISPL := GETNUM; WRITELN(OUTPUT, 'JSR @.CLD'); WRITELN(OUTPUT, LEVEL);  WRITELN(OUTPUT, DISPL); WRITE(OUTPUT, 'LDA ' : 5, ACC : 1, ' @47'); WRITEþYZLN(OUTPUT); END ELSE IF (DIRECTIVE = 'STOR') AND (LINE[J + 4] = 'E') THEN BEGIN GETLABEL; J := J + 5; WRITE(OUTPUT, 'STA ' : 5, GETNUM : 1, ' 47'); þÍÌ WRITELN(OUTPUT); WRITELN(OUTPUT, 'JSR @.CST');  WRITELN(OUTPUT, GETNUM); WRITELN(OUTPUT, GETNUM); END ELSE BEGIN þ"J FOR J := 1 TO I DO WRITE(OUTPUT, LINE[J]); WRITELN(OUTPUT) END; UNTIL CODEND; WRITELN(OUTPUT, '.RDX 10') END (* OF LOWCODE *); BEGIN (* OF PACKCODE *) OP[1] := CHþŒê; READ(INPUT, OP[2], OP[3]); IF EOLN(INPUT) THEN OP[4] := ' ' ELSE READ(INPUT, OP[4]); CASE PKACTION OF 0 : (* STOA STOA STOC STOI STOR STOS EOF ADI ADR SBI SBR SGS þs FLT FLO TRC NGI NGR SQI SQR ABI ABR NOT AND IOR DIF INT UNI INN MOD ODD LCA MPI MPR DVI DVR STP CHR ORDA ORDC ORDI EQUA EQUB EQUþÊÊB EQUC EQUI EQUR EQUS NEQA NEQB NEQC NEQI NEQR NEQS GEQA GEQB GEQC GEQI GEQR GEQS GRTA GRTB GRTC GRTI GRTR GRTR GRTS LEQA LEQB LEQC þÕLEQI LEQR LEQS LESA LESB LESC LESI LESR LESS RETA RETB RETC RETI RETP RETR ATN COS ELN EXP GET LOG NEW PUT RDC RDI RDR RLN RST þÌSAV SIN SQT WLN WRC WRI WRR WRS OPS  OPN OVL CMS RSN *) BEGIN IF ERROR THEN ERROR := FALSE ELSE BEGIN þ WRITELN(OUTPUT, SMCODE ); READLN(INPUT) (* RID EOLN *) END END; 1, 2, 3, 4, 5, 6, 7, 8, 9 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) þ­ô 10 : (* EQUM NEQM GEQ GRTM LEQM LESM  *) BEGIN READ(INPUT, Q); NILP(Q, SMCODE + BIT15) END; 11, 12, 13, 14, 15, 16, 17, 18, 19 : DUMMYLABELS; þλ (***** FOR FUTURE INSERTIONS *****) 20 : (* LODA LODB LODC LODI STRA STRB STRC STRI LDA *) BEGIN READ(INPUT, P, Q); QTOP(P, Q DIV 2, SMCODE) þíA END; 21, 22, 23, 24, 25, 26, 27, 28, 29 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 30 : (* LODR STRR *) BEGIN READ(INPUT, P, Q); QTOPS(P, Q DIV 2, SMCþiODE, HALFWORD) END; 31, 32, 33, 34, 35, 36, 37, 38, 39 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 40 : (* LODS STRS *) BEGIN READ(INPUT, P, Q); þú€ QTOPS(P, Q DIV 2, SMCODE, 3 * HALFWORD) END; 41, 42, 43, 44, 45, 46, 47, 48, 49 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 50 : (* CUP CXP *) BEGIN READ(INPUT, Pþt¿); READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P DIV 2 ); WRITELN(OUTPUT, CH, Q : 1); READ(þ)–INPUT, CH) (* READ OFF EOLN *) END; 51, 52, 53, 54, 55, 56, 57, 58, 59 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 60 : (* MST *) BEGIN READ(INPUT, Q); þqB WRITELN(OUTPUT, SMCODE + Q ); READ(INPUT, CH) (* READ OF EOLN *) END; 61, 62, 63, 64, 65, 66, 67, 68, 69 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 70 : (* LDOA LDOB LDOþÞKC LDOI SROA SROB SROC SROI INDA INDB INDI LAO *) BEGIN READ(INPUT, Q); NILP(Q DIV 2, SMCODE) END; 71, 72, 73, 74þö3, 75, 76, 77, 78, 79 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 80 : (* INDC *) BEGIN READ(INPUT, Q); NILPS(Q, SMCODE, 2 * HALFWORD) END; 81, 82, 83, þ“&84, 85, 86, 87, 88, 89 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 90 : (* LDOR SROR INDR *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD) END; þ¡ 91, 92, 93, 94, 95, 96, 97, 98, 99 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 100 : (*LDOS SROS INDS *) BEGIN READ(INPUT, Q); NILPS(Q DIV 2, SMCODE, HALFWORD * 3) þžÐ END; 101, 102, 103, 104, 105, 106, 107, 108, 109 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 110 : (* INCA INCI INCC IXA DECA DECI DECC *) BEGIN þ«V READ(INPUT, Q); NILP(Q, SMCODE) END; 111, 112, 113, 114, 115, 116, 117, 118, 119 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 120 : (*MOV *)  BEGIN þ#ì READ(INPUT, Q); NILP((Q + 1) DIV 2, SMCODE) END; 121, 122, 123, 124, 125, 126, 127, 128, 129 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 130 : (* ENT *) þ;´ BEGIN READ(INPUT, P); READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(OUTPUT, SMCODE + P );  WRITELN(OUTPUT, Cþ“H, Q : 1); READ(INPUT, CH) (* READ OFF EOLN *) END; 131, 132, 133, 134, 135, 136, 137, 138, 139 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 140 : (* UJC *) BEGIN þ ³ WRITELN(OUTPUT, SMCODE ); WRITELN(OUTPUT, 0 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 141, 142, 143, 144, 145, 146, 147, 148, 149 : DUMMYLABELS; (***** FOR þÉmFUTURE INSERTIONS *****) 150 : (* UJP FJP XJP TJP JPF JPT SJP *) BEGIN READ(INPUT, CH); WHILE CH <> 'L' DO READ(INPUT, CH); READ(INPUT, Q); WRITELN(Oþ‘2UTPUT, SMCODE ); WRITELN(OUTPUT, CH, Q : 1); READ(INPUT, CH) (* READ OFF EOLN *) END; 151, 152, 153, 154, 155, 156, 157, 158, 159 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS þ9¯*****) 160 : (* CSP *) BEGIN READ(INPUT, CH); WHILE CH = ' ' DO READ(INPUT, CH); I := SMCODE; TEMPOP := OP; OP[1] := CH; þäô READ(INPUT, OP[2], OP[3]); OP[4] := ' '; P := PKACTION; (* P IS DUMMY, CALLING PKACTION IS JUST TO  OBTAIN SEMI-CODE VALUE IN SMCODE *) WRITELNþŸ(OUTPUT, SMCODE + I + BIT16 ); READ(INPUT, CH) (* READ OFF EOLN *) END; 161, 162, 163, 164, 165, 166, 167, 168, 169 :DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 170 : (* CHKA CHKB CHþÞKC CHKI *) BEGIN READLN(INPUT, P, Q); BOUNDS(SMCODE, P, Q) END; 171, 172, 173, 174, 175, 176, 177, 178, 179 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) þ.ï 180 : (* LDC *) BEGIN WRITELN(OUTPUT, SMCODE + 3 ); REPEAT READ(INPUT, CH); UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) þ²Ò FOR I := 1 TO 4 DO WRITELN(OUTPUT, SWITCHES[I]); END; 181, 182, 183, 184, 185, 186, 187, 188, 189 : DUMMYLABELS;  (***** FOR FUTURE INSERTIONS *****) 190 : (* LDCB LDCI *) BEGIN þîZ READ(INPUT, Q); QTOP(0, Q, SMCODE) END; 191, 192, 193, 194, 195, 196, 197, 198, 199 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 200 : (* LDCC *) (* SORRY FOR þ]‰THIS MESS, BUT BLAME NOVA ASSEMBLER PLEASE *) BEGIN READ(INPUT, CH); (* THE ORDINAL OF (') = 7 *) WHILE ORD(CH) <> 7 DO READ(INPUT, CH); LITERALS[1] := CH; þ'ã READ(INPUT, LITERALS[2], LITERALS[3]); WRITELN(OUTPUT, SMCODE ); IF LITERALS[2] = CHR(7) (* IF LITERALS[2] = ''' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), þ‹v 39 (*NOVA CODE FOR (')*) : 1, CHR(30), CHR(7)) ELSE IF LITERALS[2] =CHR(12) (* IF CH = ',' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 44 : 1, (*NOVA þ„CODE FOR (,) *) CHR(30), CHR(7)) ELSE IF LITERALS[2] = CHR(28) (* IF LITERALS[2] = '<' *) THEN WRITELN(OUTPUT, '.TXT ', CHR(7), CHR(28), 60 (* NOVA CODE FOR (<) *) : 1, CHR(30þ�-), CHR(7)) ELSE WRITELN(OUTPUT, '.TXT ', LITERALS); READ(INPUT, CH) (* READ OFF EOLN *) END; 201, 202, 203, 204, 205, 206, 207, 208, 209 : DUMMYLABELS; (***** FOR FUTURE INSERTþohIONS *****) 210 : (* LDCN *) QTOP(0, 0, SMCODE); 211, 212, 213, 214, 215, 216, 217, 218, 219 : DUMMYLABELS; (***** FOR FUTURE INSERTIONS *****) 220 : (* LDCR *) (* NOTICE THE NON-FLOATING-POþ'IINT OUTPUT FORMAT OF 'R' *) BEGIN WRITELN(OUTPUT, SMCODE + 1, '.');  READLN(INPUT, R); WRITELN(OUTPUT, '0', R : 0); END; 230 : (* JNC *) (* PARADISE FORþ� MACHINE CODE ADDICTS ONLY *) BEGIN WRITELN(OUTPUT, SMCODE); READLN(INPUT); LOWCODE; END; (* REDUNDANT 'CCP ' 240 : BEGIN þÆî WRITELN(OUTPUT, SMCODE); READLN(INPUT, Q); WRITELN(OUTPUT, Q) END; *) END (* OF CASE PKACTION *) END (*** OF PACKCODE ***); BEGIN (* OF MAIN *) WRITELN; WRITELN; þ¦ WRITELN; WRITELN(PRR, '; ==== P4ASM BEG', 'INS NOW'); ENT := TRUE; ZERO := ORD('0'); ICOUNT := 3; FOR I := 0 TO TABSIZE0 DO WITH PCODETABLE[I] DO PCODE := ' '; COMPLETABLE; (* START READINGþk® IN THE PCODE PROGRAM FROM PRD FILE *) READ(INPUT, CH, CH, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF (CH <> '.') AND (DOTNAME <> 'TIT') THEN BEGIN WRITELN(PRR, '**********', ' NO TITLE FOUND ', '**********'); WRITELN(PRR)þ�<; HALT(311) END; WRITE(OUTPUT, CH: 16, DOTNAME); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); WRITELN; READ(INPUT, CH); (* RID EOLN *) REPEAT READ(INPUT, CH); þ0s IF CH = 'I' THEN PCTYPE := COMMENT ELSE IF CH = 'L' THEN PCTYPE := LLABEL ELSE IF (CH = 'P') OR (CH = '?') THEN PCTYPE := PCODENTRY ELSE BEGIN READ(INPUT, CH); IF CH = '.' THEN PCTYPEþ; := NONPCODE ELSE PCTYPE := PCODES END; CASE PCTYPE OF COMMENT : (* INSTRUCTION CHECK COUNT *) BEGIN READ(INPUT, J); IF (ICOUNT <> J)þÙ AND (J <> 0) THEN BEGIN  WCOUNT := WCOUNT + 1; WRITELN(PRR, 'I', J : 5, ' ' : 14, '; ??? PCODE' , ' COUNT OUT OF ST', 'EP þà˜???'); END; ICOUNT := J; READ(INPUT, CH) (* READ OFF EOLN *) END; LLABEL : (* LABELS *) BEGIN þ M WRITE(OUTPUT, CH);  READ(INPUT, I); WRITE(OUTPUT, I : 1); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) þ`7 UNTIL EOLN(INPUT); READLN(INPUT); WRITELN(OUTPUT) END; NONPCODE : (* NON STANDARD PCODE INSTRUCTIONS *) BEGIN þ9: READ(INPUT, DOTNAME[1], DOTNAME[2], DOTNAME[3]); IF DOTNAME = 'FIL' THEN DOTFILE ELSE BEGIN IF ((DOTNAME = 'SW1') OR (DOTNþ.¢AME = 'SW2') OR (DOTNAME = 'SW3') OR (DOTNAME = 'SW4')) THEN BEGIN REPEAT READ(INPUT, CH) þœû UNTIL (CH = '0') OR (CH = '1'); (* READ UNTIL BINARY IS FOUND *) BINARYSTR[1] := CH; IF CH = '1' THEN J := -1 ELSþ ãE J := 0; FOR I := 2 TO 16 DO BEGIN READ(INPUT, CH); BINARYSTR[I] := CH; þA  J := J * 2 + ORD(CH) - ZERO END; I := ORD(DOTNAME[3]) - ZERO; SWITCHES[I] := J; þ_é READ(INPUT, CH) (* READ OFF EOLN *) END ELSE IF (DOTNAME = 'TXT') AND (INPUT^ <> 'M') THEN BEGIN WRIþ¬ŠTE(OUTPUT, '.', DOTNAME : 3); REPEAT READ(INPUT, CH); WRITE(OUTPUT, CH) UNTIL CH <> ' ';þÇ' FOR I := 1 TO 16 DO BEGIN READ(INPUT, CH); IF CH = CHR(2) (* CH = '"'*) THEN  þÖê WRITE(OUTPUT, CHR(28), 34 : 1 (*NOVA CODE FOR '"'*), CHR(30)) ELSE IF CH = CHR(28 (*IF CH = '<'*)) THEN þ`t WRITE(OUTPUT, CHR(28), 60 : 1, (*NOVACODE FOR '<'*)CHR(30)) ELSE IF CH = CHR(30) (*IF CH = '>'*) THEN  þ“ª WRITE(OUTPUT, CHR(28), 62 : 1, (*NOVA CODE FOR '>'*) CHR(30)) ELSE WRITE(OUTPUT, CH) þ˜ END; READLN(INPUT, CH); (* RID EOLN *) WRITELN(OUTPUT, CH) END ELSE BEGIN  þI÷ IF DOTNAME = 'ENT' THEN BEGIN IF ENT THEN BEGIN ENT := FALSE; þ) WRITE(OUTPUT, '.', DOTNAME) END ELSE WRITE(OUTPUT, '; .', DOTNAME) END ELSE  IF NOTþ+> (DOTNAME = 'END') THEN WRITE(OUTPUT, '.', DOTNAME); IF NOT EOLN(INPUT) THEN REPEAT Rþ24EAD(INPUT, CH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); READ(INPUT, CH); (* RID EOLN *) WþïíRITELN END END END; PCODES : (* STANDARD PCODE INSTRUCTIONS *) BEGIN PACKCODE; Iþ$ÌCOUNT := ICOUNT + 1 END; PCODENTRY : (* PACKED PCODE ENTRY POINT *) BEGIN WRITE(OUTPUT, CH);  REPEAT READ(INPUT, þ,œCH); WRITE(OUTPUT, CH) UNTIL EOLN(INPUT); WRITELN; READ(INPUT, CH) (* READ OFF EOLN *) END; END (* OF CASE PþŒÀCTYPE *); WHILE EOLN(INPUT) DO BEGIN WRITELN; READ(INPUT, CH) (* READ OF EOLN *) END UNTIL EOF(INPUT); (* THE PCODE PROGRAM HAS BEEN PACKED FOR INTERPRETER *) (* WRITELNþž“(PRR); WRITELN(PRR, '; IDEAL SEARCHES', ' = ', SMIN); WRITELN(PRR, '; ACTUAL SEARCHE', 'S = ', SMAX); *) IF WCOUNT > 0 THEN WRITELN(PRR, ';---- NO. OF WAR', 'NINGS = ', WCOUNT : 6); IF ECOUNT > 0 THEN WRIþ¶0ôTELN(PRR, ';**** NO. OF FAT', 'AL ERRORS = ', ECOUNT : 6); WRITELN(OUTPUT, '.END' : 16); IF ECOUNT > 0 THEN HALT(311); WRITELN; WRITELN; WRITELN END. ÿR2CRCODE.SRû­ ó BþWc .TITL R2CRCODE .TXTM 1 .ENT .CST,.CLD,PCRTN,PJNC .EXTN .BASE .ZREL .CST: CST .CLD: CLD PCRTN: .PCRT .NREL ;ENTRY POINT USED BY THE INTERPRETER TO INITIATE CODE PJNC: JMP @PC ;RETURN FROM CODE TO THE INTERPRETER .PCRT: STA 3,PC DSZ PC JMP @IP þ{e ;LOAD AND STORE FROM THE STACK ;STORE.... CST: STA 3,Z2 ;SAVE LINK JSR SAVER ;AND REGISTERS LDA 0,Z1 LDA 3,Z2 ;RESTORE LINK LDA 1,0,3 ;LEVEL DIFFERENCE LDA 2,1,3 ;OFFSET .BASE ;FORM ADDRESS  STA 0,0,2 ;STORE @ THE ADDRESS JMP HOME þ7è ;RETURN ;LOAD...... CLD: STA 3,Z2 ;SAVE LINK JSR SAVER ;AND REGISTERS LDA 3,Z2 ;RESTORE LINK LDA 1,0,3 ;LEVEL DIFFERENCE LDA 2,1,3 ;OFFSET .BASE ;FORM ADDDRESS STA 2,Z1 HOME: ISZ Z2 ISZ Z2 JSR RESET JMP @Z2 ;RETURN SAVER: STA 0,þƒjTEMP0 STA 1,TEMP1 STA 2,TEMP2 JMP 0,3 RESET: LDA 0,TEMP0 LDA 1,TEMP1 LDA 2,TEMP2 JMP 0,3 TEMP0: 0 TEMP1: 0 TEMP2: 0 .END ÿR2SITAB.SRû­U GþK� .TITL R2SITAB ; THE INTERPRETER JUMP TABLE .ENT ITAB0,ITAB1 .EXTN PLOD,PLDO,PSTR,PSRO,PLDA,PLAO,PSTO,PLDC,PLCI,PIND .EXTN PINDC,PSTOC .EXTN PINC,PINCC .EXTN PMST,PCUP,PCXP,PENT,PRET,PCSP þ¨• .EXTN PIXA .EXTN PEQU,PNEQ,PGEQ,PGRT,PLEQ,PLES .EXTN PUJP,PFJP,PXJP,PTJP,PUJC .EXTN PCHKC,PCHK2,PCHK3,PCHK4,PEOF .EXTN PADI,PADR,PSBI,PSBR .EXTN PSGS .EXTN PFLT,PFLO,PTRC .EXTN PNGIþ´Ä,PNGR,PSQI,PSQR,PABI,PABR  .EXTN PNOT,PAND,PIOR .EXTN PDIF,PINT,PUNI,PINN .EXTN PMOD,PODD .EXTN PMPI,PMPR,PDVI,PDVR .EXTN PMOV,PLCA,PDEC,PDECC,PSTP,PHLT .EXTN PCHR,PORDI,PORDA,PORDC,PORDB .þ½pEXTN PJNC .EXTN PNON .ZREL ITAB0: PNON ; 0 NOT USED PHLT ; 1 PEQU ; 2 PNEQ ; 3 PGEQ ; 4 PGRþ¹âT ; 5  PLEQ ; 6 PLES ; 7 PSTO ; 8 PSTO ; 9 PSTOC ; 10 PSTO ; 11 PMST þÕë ; 12 PRET ; 13 PADI ; 14 PSBI ; 15 PNGI ; 16 PSQI ; 17 PABI ; 18 PMþôÓOD  ; 19 PODD ; 20 PMPI ; 21 PDVI ; 22 PADR ; 23 PSBR ; 24 PFLT ; 25 þ41 PFLO ; 26 PTRC ; 27 PNGR ; 28 PSQR ; 29 PABR ; 30 PMPR ; 31 PDVR ; 32  þ?! PNOT ; 33 PAND ; 34 PIOR ; 35 PSGS ; 36 PDIF ; 37 PINT ; 38 PUNI ; 39 þ×S PINN ; 40 PEOF ; 41 PSTP ; 42 PLCA ; 43 PORDI ; 44 SET ASIDE PORDA ; 45 4 LOCATIONS  PORþYãDC ; 46 FOR THE PORDB ; 47 ORD FAMILY PCHR ; 48 ; THE GAPS IN THE REMAINDER OF TABLE 0 ARE FOR CORAL PNON ; 49 PNON ; 50 þE3 PNON ; 51 PJNC ; 52 PNON ; 53 PNON ; 54 PNON ; 55 PNON ; 56  PNON ; 57 þÔ PNON ; 58 PNON ; 59 PNON ; 60 PNON ; 61 PNON ; 62 PNON ; 63 ITAB1: PNON ; 64þÔ˜ NOT USED PUJC ; 65 PEQU ; 66 PNEQ ; 67 PGEQ ; 68 PGRT ; 69 PLEQ  ; 70 PLES þz# ; 71 N.B MULTIPLE COMPARES PLOD ; 72 PLOD ; 73 PLOD ; 74 PLOD ; 75 PLDO ; 76 PLDO ;þj@ 77 PLDO ; 78 PLDO ; 79 PSTR ; 80 PSTR ; 81 PSTR ; 82 PSTR ; 83 PSRO þy. ; 84 PSRO ; 85 PSRO ; 86 PSRO ; 87 PIND ; 88 PIND ; 89 PINDC ; 90 PIND þ!9 ; 91 PLDA ; 92 PLAO ; 93 PLDC ; 94 PIXA ; 95 PMOV ; 96 PCUP ; 97 PENT þqG ; 98 PCSP ; 99 PUJP ;100 PFJP ;101 PTJP ;102 PXJP ;103 PINC ;104 PNONþü2 ;105 ALSO INC PINCC ;106 PNON ;107 ALSO INC PDEC ;108 ALSO NEEDS NEXT 3 PNON ;109 PDECC ;110 PNþWON ;111 PCHKC ;112 NEEDS 3 MORE PCHK2 ;113 PCHK3 ;114 PCHK4 ;115 ; THE GAPS IN THE REMAINDER OF TABLE 1 ARE FOR CORAL þ˜g PNON ; 116 PCXP ; 117 PNON ; 118 PNON ; 119 PNON  ; 120 PNON ; 121 PNON ; 122þÇs} PNON ; 123 PNON ; 124 PNON ; 125 PNON ; 126 PNON ; 127 .END ÿR2IFNS.SRû! ó ?þûÖ– .TITL R2IFNS ; A DUMMY SEGMENT TO SATISFY ALL UNDEFINED CUES ; TO REAL STANDARD PROCEDURES .ENT XATN,XCOS,XEXP,XLOG,XSIN,XSQT,XRND .EXTN PUNDF .NREL XATN: .PUND XCOS: .PUND XEXP: .PUND XLOG: .PUND XSIN: .PUND XSQT: .PUND XRND: .PUND .END ÿR2SHEAP.SRûÍ ó 8þú² .TITL R2SHEAP ; THE STANDARD PROCEDURES FOR OPERATING ON THE HEAP .ENT XNEW, XRST, XSAV .NREL XNEW: POP1 0 ;UNSTACK N (ELEMENT SIZE) MOVZR 0,0 SUB 3,3 ;AC3 AS SOURCE FOR ZEROES NEG 0,0 ;# OF WORDS TO CLEAR CLEAR: DSZ HP STA 3,@HP ;CLEAR EACHþò¤ WORD OF NEW SPACE INC 0,0,SZR JMP CLEAR LDA 1,HP POP1 2 ;UNSTACK AD (POINTER VARIABLE ADDRESS) MOVZR 2,2 MOVZL 1,1 STA 1,0,2 ;[AD]:= HP MOVZR 1,1 ; BACK TO WD ADDR TO TEST EP LDA 0,EP ; ENOUGH ROOM ? ADCZ# 0,1,SZC ; SKP IF AC1<=AC0 .. HP<=þý‡EP NEXT ; YES ERR.P ; NO - ERROR RETURN PERHO ; WITH HEAP OVERFLOW XRST: POP1 1 ;RESET HEAP POINTER MOVZR 1,1 STA 1,HP NEXT XSAV: LDA 1,HP ;SAVE HEAP POINTER POP1 2 ;UNSTACK AD MOVZL 1,1 MOVZR 2,2 STA 1,0,2 ;[AD]:= HP NEXT .END ÿR2IFW.SRû! ó ?þ¯! .TITL R2IFW ; A DUMMY SEGMENT TO RESOLVE 2 CUES WHICH ARE ; REDUNDANT TO THE INTERPRETER WITHOUT FP .ENT WSA,PFPIN .EXTN PUNDF .ZREL WSA :0 .NREL PFPIN: .PUND .END ÿR2IFILES.CMû£Žþ�R2SECHK,^ R2IFT,^ R2SMPD,^ R2STP,^ R2SINTEGER,^ R2SBOOLEAN,^ R2SRANDOM,^ R2SOPN,^ R2IREAL,^ R2SADMIN,^ R2SRD,^ R2SIOIN,^ R2IFNS,^ R2CRCODE,^ R2SSET,^ R2SMPY,^ R2STI,^ R2SITAB,^ R2SDIV,^ R2IFW,^ R2SMEMACC,^ R2SMISC,^ R2SDBIN,^ R2STESTS,^ R2SHEAP,^ R2IOUTL,^þþ-` R2SDECODER,^ R2SMYP,^ R2SREWR,^ R2SSPTAB,^ R2SCONSTS^ ÿR2SMEMACC.SRû! ó 4þ½Ì .TITL R2SMEMACC ; THE P-CODE INTERPRETER'S "MEMORY ACCESS" OPERATIONS .ENT .BASE .ENT PIND,PLDO,PLOD .ENT PSRO,PSTR,PSTO .ENT PLAO,PLDA .ENT PLDC,PLCI,PLCA .ENT PMOV .EXTD RHB,LHB .EXTN PUNDF ; "BASE" BACKS DOWN THE NUMBER OF STACK FRAMES SPþ,ÒECIFIED BY ; AC1, AND ADDS THE BASE ADDRESS OF THIS STACK FRAME TO THE ; OFFSET IN AC2 .ZREL .BASE= JSR @. ;SET UP THE MNEMONIC .BASE AS BASE ; A JUMP TO ROUTINE "BASE" .NREL BASE: NEG 1,1,SZR ;CURRENT LEVEL ? JMP .+4 LDA 1,MP ;YES - GET MARK Pþ܃OINTER ADD 1,2 ;ADD TO OFFSET JMP 0,3 ; AND RETURN STA 3,Z1 ;NO - SAVE RETURN ADDRESS LDA 3,MP ;PICK UP MARK POINTER LDA 3,SL,3 ;BACKTRACK ONE STACK LEVEL AT INC 1,1,SZR ; A TIME UNTIL AC1=0 JMP .-2 ADD 3,2 ;ADD STACK FRAME BASE TO OFFSET þ¹p JMP @Z1 ; AND RETURN ; "MOVE" MOVES THE NUMBER OF WORDS SPECIFIED BY AC1 FROM ; THE ADDRESS IN AC2 TO THE ADDRESS IN AC3 MOVE: LDA 0,0,2  STA 0,0,3 INC 1,1,SNR NEXT INC 2,2 INC 3,3 JMP MOVE TMSK: 001400 ;MASK FOR WORD COUNT ; LOAD INSTRUCTIONþTS ; AC0 CONTAINS (NO. OF WORDS TO BE LOADED - 1) IN HIGH ; ORDER BYTE. VARIABLE ADDRESS GIVEN BY : ; IND - INDEX ON TOP OF STACK + OFFSET IN AC2 ; LDO - STACK BASE (DSP) + OFFSET IN AC2 (I.E. GLOBAL) ; LOD - OFFSET IN AC2 FROM STACK FRAME BASE N LEVELS ; þ¸ˆ FURTHER DOWN, N IN AC1 PIND: POP1 1 ;INDEXED FETCH MOVZR 1,1 ; MAKE WD ADDRESS JMP .+2 PLDO: LDA 1,DSP ;LOAD CONTENTS OF BASE ADDRESS ADD 1,2,SKP PLOD: JSR BASE ;LOAD CONTENTS OF ADDRESS LDA 1,0,2 ;PICK UP VARIABLE PUSH1 1 ;PUT IT ON THE þ5ŠSTACK LDA 1,TMSK ANDS 1,0,SNR ;ANY MORE WORDS ? NEXT ;NO NEG 0,1 ;YES - LOAD THEM ONE AT A TIME PLOD1: INC 2,2 LDA 0,0,2 PUSH1 0 INC 1,1,SZR JMP PLOD1 NEXT ; STORE INSTRUCTIONS ; AC0 CONTAINS (NO. OF WORDS TO BE STORED - 1) IN HIGH ; ORDER BYþtçTE. VARIABLE ADDRESS GIVEN BY : ; SRO - STACK BASE (DSP) + OFFSET IN AC2 (I.E. GLOBAL) ; STR - OFFSET IN AC2 FROM STACK FRAME BASE N LEVELS ; FURTHER DOWN, N IN AC1 ; STO - TOP OF STACK PSRO: LDA 1,DSP ;STORE ADD 1,2,SKP PSTR: JSR BASE ;STORE ATþ]d ADDRESS LDA 1,TMSK ANDS 1,0,SZR ;ONE WORD ONLY ? JMP PSTR1 POP1 1 ;YES - STORE IT STA 1,0,2 NEXT PSTR1: MOV 2,3 ;NO - USE "MOVE" LDA 2,SP ;DECREMENT STACK POINTER ADC 0,2 STA 2,SP PSTR2: INC 2,2 ;SET UP PARAMETERS FOR "MOVE" COM 0,1 JMP MOþ�—VE PSTO: LDA 1,TMSK ;STORE AT BASE LEVEL ADDRESS ANDS 1,0,SZR ;ONE WORD ONLY ? JMP PSTO1 POP1 1 ;YES - STORE IT POP1 3 MOVZR 3,3 ; MAKE WD ADDRESS STA 1,0,3 NEXT PSTO1: LDA 2,SP ;NO - DECREMENT STACK POINTER ADC 0,2 STA 2,SP POP1 3 ;USE "MþNÜOVE" AGAIN MOVZR 3,3 ; MAKE WD ADDRESS JMP PSTR2 ; MORE LOAD INSTRUCTIONS (LOAD CONSTANT & LOAD ADDRESS) PLAO: LDA 1,DSP ;LOAD BASE LEVEL ADDRESS ADD 1,2,SKP PLDA: JSR BASE ;LOAD ADDRESS MOVZL 2,2 ; MAKE WD ADDRESS PUSH1 2 NEXT PLDC: PUSH1 2 þf° ;LOAD CONSTANT NEG 1,1,SNR ;MORE THAN ONE WORD ? NEXT ;NO PLDC1: LDA 2,@PC ;YES - PICK UP THE NEXT PUSH1 2 ; AND LOAD IT INC 1,1,SZR ;ANY MORE ? JMP PLDC1 ;YES NEXT ;NO PLCI: .PUND ;LOAD CONSTANT INDIRECT PLCA: LDA 2,PC ;LOAD ADDRESS þXeOF CONSTANT INCZL 2,2 PUSH1 2 LDA 0,RHB ;RIGHT HAND BYTE MASK LDA 1,@PC ;SEARCH FOR END OF STRING (NULL) AND 0,1,SZR ; AND UPDATE PC JMP .-2 NEXT PMOV: NEG 2,1 ;STORE STRING AWAY POP1 2 MOVZR 2,2 ; MAKE WD ADDRESS POP1 3 MOVZR 3,3 ; DITTþÚ O JMP MOVE .END ÿR2SRD.SRûK û*þ< .TITLE R2SRD .ENT PEOF,XELN,XRDC,XRLN,XGET .ENT .READ,READ .EXTD TEMP .ENT CR,TEMP1,TABAD .ENT CHAN,CNTAD,TEMP2 .EXTD .GCH,.FIND,.BPUT,.BGET .EXTD LHBNP,RHBNP,SPACE .ZREL .READ: READ CHAN: 0 CNTAD: 0 TABAD: 0 TEMP1: 0 TEMP2: 0 CR: 6400 .NREL þâê; READ - THIS ROUTINE LEAVES CHARACTER IN THE FILE BUFFER ; AND IN AC0. ; AC1 - UNDEFINED ; AC2 - FBA A BYTE ADDRESS ; ; FCH - FILE CHANNEL WORD (CONTAINS CHANNEL NO. + RECORD LENGTH). ; FST - FILE STATUS WORD (CURRENT STATE OF THE FILE). TAþ�©B: 4400 FF: 6000 CNTLZ: 15000 EOLFL: 1B1 EREOF: 6 C7: 7 READ: STA 3,USP ;USP RESTORED TO AC3 AFTER .SYSTM LDA 0,FST,2 ;GET FST MOVL# 0,0,SNC ;EOF SET ? JMP RD1 ; - NO ERR.P ; - YES PERRE ; REPORT READ ERROR RD1: MOVR 0,0,SZC ; FB EMPTY JMP þlDRD2 ; - YES LDA 0,0,2 ; - NO, GET CHAR JMP 0,3 ; AND RETURN RD2: JSR @.GCH ;PICK UP CHANNEL AN' ALL JMP RNASC ;NONE CHARACTER INPUT ; ASCII TRANSFER FROM A SPECIFIED FILE RDASC: STA 2,TEMP2 ;STORE FOR A BIT LDA 2,CHAN JSR @.FIND ;ALL FILE DEþ¨ÍTAILS. LDA 2,@CNTAD ADD 0,2 ;FORM ADDDRESS OF NEXT CHARACTER. JSR @.BGET ;AS IN BIBLE BUT FOR CHARACTER LDA 2,TEMP2 ;THE RETURN OF FBA.... LDA 3,FST,2 ;TEST IF EOLN SET FROM LAST ADDZL# 3,3,SZC ;TIME THROUGH JMP RELN ;YES... MOV 0,0,SNR ;IS þÅ­IT NULL JMP RDNULL ;FORGET NULLS IF POSS. LDA 1,CR ;HOW ABOUT A CARRIAGE RETURN,THEN SUB# 1,0,SNR JMP RDEOL LDA 1,CNTLZ ;OR THE END OF THE FILE SUB# 1,0,SNR JMP RDERR+1 ;YES IT IS EOF SO END IT LDA 1,FF ;NO! THEN IT MUST BE A SUB# 1,0,SNR ;Aþbó FORM FEED OR I'LL GIVE UP. JMP RDEOL LDA 1,TAB ;PERHAPS EVEN A TERRIBLE TAB SUB# 1,0,SNR ;WHICH MAKES THE SYSTEM AWKWARD. JMP RDTAB STA 0,0,2 ;STORE THE CHARACTER IN THE BUFFER ISZ @CNTAD ;O.K. I GIVE UP IT WAS LDA 3,EREOF ;SOMETHING ELSE. RDEþ˜ýOF: STA 3,FST,2 ;YOU THINK YOU'RE NORMAL THEN... ISZ @TABAD ;KICK THE TAB COUNTER AND JMP @USP ;I'M OFF HOME ; NONE ASCII TRANSFER FROM A SPECIFIED FILE RNASC: MOVZL 2,0 ;BYTE POINTER TO FNA LDA 2,CHAN .SYSTM .RDS 77 ;READ A RECORD JMP .+2 JMþãôP @USP JSR RDER1 ;TEST IF REAL ERROR MOVZR 0,2 ;RESET FBA SUBZR 3,3 STA 3,FST,2 ;SET EOF JMP @USP ;DEAL WITH THE END OF LINE RELN: SUB 3,3 ;RESET THE EOLN FLAG STA 3,FST,2 JSR RDRL ;GET A NEW LINE JMP RDASC ;AND RESTART ;DEAL WITH THE SPECIþS„AL CASES... RDEOL: LDA 0,EOLFL ;FOUND END OF LINE OR STA 0,FST,2 ;EQUIVALENT, SO INDICATE LDA 0,SPACE ;IN THE STATUS AND BUFFER. STA 0,0,2 JMP @USP RDNUL: JSR RDRL ;READ THE NEXT LINE JMP RDASC ;AND RETURN FOR THE NEXT CHARACTER RDTAB: LDA 1,@þ„TABAD ;TEST IF MULTIPLE OF 7 LDA 0,C7 COM 1,1 AND 1,0,SNR JMP NOTAB ;IT ISN'T NECESSARY LDA 0,SPACE STA 0,0,2 ;REPLACE WITH SPACES. JMP RDEOF-1 NOTAB: ISZ @CNTAD JMP RDASC ;GET NEXT CHARACTER. RDRL: STA 3,TEMP1 ;IF NO MORE IN BUFFER GET NEXT þ> SUB 1,1 STA 1,@CNTAD ;RESET THE BYTE COUNT. STA 1,@TABAD ;RESET THE TAB COUNTER. STA 2,TEMP2 ;STORE FBA TEMPORARILY LDA 2,CHAN ;GET THE CHANNEL AND ALL JSR @.FIND LDA 2,CHAN .SYSTM .RDL 77 JMP RDER2 LDA 2,TEMP2 LDA 0,SPACE ;LOAD A SPACE IN CþõÜASE ITS REQUIRED JMP @TEMP1 RDER2: ADD 1,0 JSR RDER1 ;TEST IF NOT EOF MOV 0,2 LDA 0,CNTLZ JSR @.BPUT ;MARK IT AS EOF LDA 2,TEMP2 JMP @TEMP1 RDERR: JSR RDER1 ;TEST IF NOT EOF LDA 0,EREOF SUBZR 3,3 ADD 0,3 LDA 2,TEMP2 ;RESTORE THE FBA JMP RþÒíDEOF ;MARK IT AS EOF RDER1: LDA 1,EREOF ;FINALLY THE ERROR CASE SUB# 1,2,SZR ERR.2 JMP 0,3 ;THE FOLLOWING ARE ENTRY POINTS USED BY PCODE PEOF: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;GET BUFFER STATUS MOVL 0,0 ;SET APPROPRIATE SUBCL 0,0 ;TRUþ|ïTH VALUE PUSH1 0 ;ON THE STACK NEXT XELN: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;GET BUFFER STATUS ADDL 0,0 ;EOL FLAG INTO CARRY SUBCL 0,0 ;SET TRUTH VALUE PUSH1 0 ;ON THE STACK NEXT XRDC: POP1 2 ;GET FBA MOVZR 2,2 JSR READ STA 2,TEMP þ˜ì; STORE FBA TEMPORARILY POP1 2 ; ADDRESS OF DESTINATION BYTE JSR @.BPUT ; MOVE IT ... LDA 2,TEMP ; AND ON WE GO AS BEFORE. LDA 0,FST,2 ; GET STATUS MOVL# 0,0,SNC ; EOF ? JMP VALID ; - NO NEXT XRLN: POP1 2 ;ET FBA MOVZR 2,2 JSR @.GCH JMP .þÐb+1 STA 2,TEMP2 LDA 2,CHAN JSR @.FIND LDA 2,TEMP2 JSR RDRL SUBZL 0,0 STA 0,FST,2 JSR @.READ NEXT XGET: POP1 2 ;GET FBA MOVZR 2,2 LDA 0,FST,2 ;CHECK BUFFER STATUS MOVL# 0,0,SNC ;FOR EOF JMP VALID ;OK - NO EOF ERR.P PERGE ;REPORT GET ERþP]ûROR VALID: MOVR 0,0,SNC ISZ FST,2 ; SET BUFFER EMPTY JSR @.READ NEXT .END ÿP4AMX2.ûŽŽþ¬‡ (********************* P4AMX2 BEGINS ********************) CONST TABLESIZE = 256; TABSIZE0 = 255; (*** IE TABLE SIZE WITH ZERO ORIGIN ***) BIT16 = -32768; BIT15 = 16384; HALFWORD = 256; TYPE þ = INSTRTYPE = (COMMENT, LLABEL, NONPCODE, PCODES, PCODENTRY); STRING3 = ARRAY[1..3] OF CHAR; STRING4 = ARRAY[1..4] OF CHAR; STRING16 = ARRAY[1..16] OF CHAR; TEMPLATE = RECORD þ½÷ PCODE : STRING4; SEMICODE, ACTION : INTEGER  END; VAR PCODETABLE : ARRAY[0..TABSIZE0] OF TEMPLATE; SWITCHES : ARRAY[1..4] OF INTEGER; CH : CHAR; DOTNAME þë\: STRING3; BINARYSTR : STRING16; R : REAL; I, J, ZERO, WCOUNT, ECOUNT, ICOUNT,SMIN, SMAX : INTEGER; ENT : BOOLEAN; PCTYPE : INSTRTYPE; (********************* P4AMX ENDS ***************þŒ}*****) þúúÿR2SOPN.SRûK û þ…‹ .TITLE R2SOPN .NREL .ENT XOPN,XCLS  .EXTN WRLIN .EXTD LHB,RHB,CHAN,TEMP,TEMP1 .EXTD .GCH,.FIND,SPACE,TEMP2 ; ; OPEN A FILE ; ; XOPN - STANDARD COMPILER PRODUCED ENTRY POINT. ; ; AT THE MOMENT ALL FILES ARE TREATED EQUALLY..... ; BUT SOME ARE MORþù�E EQUAL THAN OTHERS. ; ; TWO FORMS - ASCII WHICH BUFFERS INPUT ; RECORD INPUT - INPUTS DIRECTLY INTO USER AREA. XOPN: .SYSTM ;ASK RDOS .GCHN ; FOR CHANNEL ERR.2 STA 2,TEMP2 ;CHANNEL NUMBER MOVS 2,1 ;CHAN # TO AC1 POP1 3 ;þçÀGET FBA MOVZR 3,3 ; MAKE WD ADDRESS STA 3,TEMP ;WORD ADDR OF FBA POP1 0 ;RECORD LENGTH INC 0,0 MOVZR 0,0 ;WORD COUNT OF BYTES ADDS 0,1 ;FORM FCH CONTENTS STA 1,FCH,3 ;STORE CHAN # ISZ FST,3 ;SET BUFFER EMPTY POP1 0 ;GET FNA LDA 3,PC ;PIþøëCK UP CURRENT ADDRESS LDA 1,-3,3 ;FIND THE END OF FILENAME MOV 1,1,SZR ;TEST IF APPEND MODE? ISZ APIND ;YES THEN SET FLAG SUB 1,1 STA 1,-3,3 ;RESET THE FILENAME. REOP: SUB 1,1 ;NORMAL CHARACTERISTICS LDA 3,APIND ;APPEND MODE? MOV 3,3,SZR JMP þ³APP ;YES THEN OPEN APPEND .SYSTM .OPEN 77 JMP TEST REOP1: STA 1,APIND ;RESET APPEND MODE INDICATOR LDA 2,TEMP ;RESTORE WD ADDR OF FBA JSR @.GCH ;TEST IF ASCII FILE NEXT ;NO,CONTINUE LDA 0,SPACE ;SET SPACE IN BUFFER STA 0,0,2 SUB 2,2 ;YESþ|ë,THEN FIND A FREE BUFFER JSR @.FIND MOVZR 0,3 SUB 0,0 ;ENSURE THAT A NULL IS STA 0,0,3 ;PRESENT AT THE START OF BUFFER LDA 0,TEMP2 STA 0,0,2 ;STORE CHANNEL NUMBER IN TABLE NEXT APIND: 0 APP: .SYSTM .APPEND 77 JMP TEST JMP REOP1 ; IF THE FILEþµÞ DOES NOT EXIST, CREATE IT! TEST: LDA 1,C12 SUB# 1,2,SZR ;IS IT REAL PROBLEM? ERR.2 .SYSTM .CRAND ERR.2 LDA 3,TEMP ;ASSUME THEN THAT IT IS SUBZR 2,2 ;AN OUTPUT FILE AND STA 2,FST,3 ;SET EOF IN FILE STATUS. LDA 2,TEMP2 JMP REOP C12: 12 ; CLþ>ZOSE A FILE ; ; TAKES ONE PARAMETER FROM THE STACK - FBA ; XCLS: POP1 2 ;FBA MOVZR 2,2 ;WORD ADDRESS OF FBA SUB 3,3 ;END WITH A NULL STA 3,TEMP1 JSR @.GCH ;GET CHANNEL NUMBER ET AL. JMP CLST ;NONE CHARACTER I/O LDA 0,FST,2 ;TEST IF A WRITE FILþÓucE MOVZR 0,0,SNR JSR @.WRLN ;WRITE THE LAST LINE LDA 2,CHAN JSR @.FIND SUB 1,1 STA 1,@TEMP ;RELEASE THE BUFFER CLST: LDA 2,CHAN .SYSTM ;CLOSE THIS CHANNEL .CLOSE 77 ERR.2 NEXT .WRLN: WRLIN .END ü