@CAT,P 1075-001-001.,///10000 @ASG,T TEMP.,///10000 @ELT,OI TEMP.1075-001-001,,,141137053441,000 )@@G@@**PF**@@@@>+@@@@@@@@@@@[@#M@@@]FED/;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AA )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^@@@@W@@@@@@@@@@@@@@@@@@@AB )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AC )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@@@@@AD )@@G@@@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AE )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@AF )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AG )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AH )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AI )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AJ )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AK )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AL )@@G@@@@@@@@@@[@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AM )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@@BAN )@@G@@DOC @@@@@@@K[@@@ @ @@@[[@@@@X@@@@W@F3-^MUINSTALL AO )@@G@@@@@@@@@K[@@@GUIDE @ @@@[[@@@@K@@@@WXF02^MUMULTPK @@@@@@@@[@@^AP )@@G@@ @ @@@[]@@@BQ@@@@W!B2M^FUMULTPK @@@@@@@@A@@@ AQ )@@G@@)@@]@@@@@@[#@@@@=#B_S^FUDEMO @@@@@@@K[@@@ @ @@@[[@@@@HAR )@@G@@@@@@>AB97^FUCOMUS$SGS @@@@@@@K[@@@ @ @@@[[@@@@]@@@@>NCD>[EUAS )@@G@@COMPILE @@@@@@@K[@@@MULTPK @ @@@[[@@@@H@@@@>PB[%^FU_@@@@@_@@@@@AT )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@AU )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@AV )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@AW )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@AX )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@AY )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@AZ )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BA )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BB )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BC )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BD )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BE )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BF )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BG )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BH )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BI )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BJ )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BK )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BL )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BM )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BN )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BO )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BP )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BQ )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BR )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BS )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BT )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BU )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BV )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BW )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BX )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BY )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@BZ )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@CA )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@CB )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@CC )@@G@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@_@@@@@CD )@@G@@^@3 88^[KES)DL[D(]@A@@@@^[#B@0A@5AC8A84AC4^@3 88^[KES)DL[D(]@A@@@@^[#B@0CE )@@G@@A@5AC8A84A04^@3 88^[KES)DL[D(]@A@@@@^[#B@0A@5AC8A85AC4^@3 88^[KES)DL[D(]CF )@@G@@@A@@@@^[#B@0A@5AC8A85A04^@3 88^[KES)DL[D(]@C@@@@^[#B@1AC5A81A@3A06^[KET^CG )@@G@@^[CC))DL[D(]^@1^@5 83AK)@C@@@@^[#B@1AC5A81A@4A06^[KET^^[CC))DL[D(]^@1^@5CH )@@G@@ 83AK)@C@@@@^[#B@1AC5A81A@5AS6^[KET^^[CC))DL[D(]^@1^@5 83AK)@C@@@@^[#B@1CI )@@G@@AC5A81A@6AK6^[KET^^[CC))DL[D(]^@1^@5 83AK)@C@@@@^[#B@1AC5A81A@6A)6^[KET^CJ )@@G@@^[CC))DL[D(]^@1^@5 83AK)@C@@@@^[#B@1AC5A81A@8A)6^[KET^^[CC))DL[D(]^@1^@5CK )@@G@@ 83AK)@C@@@@^[#B@1AC5A81A@9AS6^[KET^^[CC))DL[D(]^@1^@5 83AK)@C@@@@^[#B@1CL )@@G@@AC5A81A@9BC6^[KET^^[CC))DL[D(]^@1^@5 83AK)@C@@@@^[#B@1AC6AC0A@7AK6^[KET^CM )@@G@@^[NE-[ 9JE[M^[ECDHCK)^@)@C@@@@^[#B@1AC6AC0AC7AK6^[KET^^[NE-[ 9JE[M^[ECDHCN )@@G@@CK)^@)@C@@@@^[#B@1AC6AC0AS5BC6^[KET^^[NE-[ 9JE[M^[ECDHCK)^@)@C@@@@^[#B@1CO )@@G@@AC6AC0AS6BC6^[KET^^[NE-[ 9JE[M^[ECDHCK)^@)@C@@@@^[#B@1AC6AC0A)3A06^[KET^CP )@@G@@^[CC))DL[D(]^@1^@1AS\AS2@C@@@@^[#B@1AC6AC0A)4A06^[KET^^[CC))DL[D(]^@1^@1CQ )@@G@@AS\AS2@C@@@@^[#B@1AC6AC0A)5AS6^[KET^^[CC))DL[D(]^@1^@1AS\AS2@C@@@@^[#B@1CR )@@G@@AC6AC0A)6AK6^[KET^^[CC))DL[D(]^@1^@1AS\AS2@C@@@@^[#B@1AC6AC0A)6A)6^[KET^CS )@@G@@^[CC))DL[D(]^@1^@1AS\AS2@C@@@@^[#B@2A@6AC2A)2BC6^[KET^^[CC))DL[D(]^@1^@1CT )@@G@@AS\AS2@D@@@@^[#B@2A@6AC2A83A@3^@3 84^[]ETHE))D[^^[ECDHCK)ELDE@)^@)@D@@@@CU )@@G@@^[#B@2A@6AC2B@3A@3^@3 84^[]ETHE))D[^^[ECDHCK)D9ID-T^@)@D@@@@^[#B@2A@6AC3CV )@@G@@AC1AS3^@3 84^[]ETHE))ET^^[ECDHCK)ELDE@)^@)@D@@@@^[#B@2A@6AC3AC1A03^@3 84CW )@@G@@^[]ETHE))ET^^[ECDHCK)ELDE@)^@)@D@@@@^[#B@2A@6AC3AC1BC3^@3 84^[]ETHE))ET^CX )@@G@@^[ECDHCK)ELDE@)^@)@C@@@@^[#B@2A@6AC3AK1A83^@3 84^[]ETHE))ET^^[ECDHCK)^@)CY )@@G@@@C@@@@^[#B@2A@6AC3AK2AC3^@3 84^[]ETHE))ET^^[ECDHCK)^@)@A@@@@^[#B@7A@4A@5CZ )@@G@@A)1BC4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)2A@4^[KETID))DL[D(]^@)@A@@@@DA )@@G@@^[#B@7A@4A@5A)2AS4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)2A*4^[KETID))DL[DB )@@G@@D(]^@)@A@@@@^[#B@7A@4A@5A)2A84^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)3A@4DC )@@G@@^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)3AC4^[KETID))DL[D(]^@)@A@@@@^[#B@7DD )@@G@@A@4A@5A)3A*4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)4AC4^[KETID))DL[D(]^@)DE )@@G@@@A@@@@^[#B@7A@4A@5A)4A*4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)4B@4^[KETIDF )@@G@@D))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)5A@4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5DG )@@G@@A)5AC4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)5A*4^[KETID))DL[D(]^@)@A@@@@DH )@@G@@^[#B@7A@4A@5A)5B@4^[KETID))DL[D(]^@)@A@@@@^[#B@7A@4A@5A)6A*4^[KETID))DL[DI )@@G@@D(]^@)@A@@@@^[#B@7A@4A@5A)6BC4^[KETID))DL[D(]^@)@C@@@@^[#B@7A@4A@7A84A03DJ )@@G@@^@3 88^[KETID))C(SE))DL[D(]^@)@C@@@@^[#B@7A@4A@7A84BC3^@3 88^[KETID))C(SDK )@@G@@E))DL[D(]^@)@C@@@@^[#B@7A@4A@7A85A03^@3 88^[KETID))C(SE))DL[D(]^@)@C@@@@DL )@@G@@^[#B@7A@4A@7A86A03^@3 88^[KETID))C(SE))DL[D(]^@)@D@@@@^[#B@7A@6A)4A01BC9DM )@@G@@^@7 88^[KETID))D[^^[ECDHCK)DDN^[KCS)@D@@@@^[#B@7A@6A)4A02AC9^@7 88^[KETIDN )@@G@@D))D[^^[ECDHCK)DDN^[KCS)@D@@@@^[#B@7A@6A)4A02A*9^@7 88^[KETID))D[^^[ECDHDO )@@G@@CK)DDN^[KCS)@D@@@@^[#B@7A@6A)4A03AC9^@7 88^[KETID))D[^^[ECDHCK)DDN^[KCS)DP )@@G@@@D@@@@^[#B@7A@6A)4A03A*9^@7 88^[KETID))D[^^[ECDHCK)DDN^[KCS)@D@@@@^[#B@7DQ )@@G@@A@6A)4A06AS9^@7 88^[KETID))D[^^[ECDHCK)DDN^[KCS)@D@@@@^[#B@8A@6AS2A@2AK4DR )@@G@@^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@2A*4^@3 88^[#ETBDS )@@G@@^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@2A84^@3 88^[#ETB^[]ELDCTF^[HDT )@@G@@D-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@3AS4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)DU )@@G@@@D@@@@^[#B@8A@6AS2A@3A04^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8DV )@@G@@A@6AS2A@3BC4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@4A@4DW )@@G@@^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@4BC4^@3 88^[#ETBDX )@@G@@^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@5AC4^@3 88^[#ETB^[]ELDCTF^[HDY )@@G@@D-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@5A)4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)DZ )@@G@@@D@@@@^[#B@8A@6AS2A@5A*4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8EA )@@G@@A@6AS2A@6A@4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@6AS4EB )@@G@@^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@6A*4^@3 88^[#ETBEC )@@G@@^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@7AS4^@3 88^[#ETB^[]ELDCTF^[HED )@@G@@D-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@7A04^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)EE )@@G@@@D@@@@^[#B@8A@6AS2A@8A@4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8EF )@@G@@A@6AS2A@8B@4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2A@9B@4EG )@@G@@^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2AC0A@4^@3 88^[#ETBEH )@@G@@^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8A@6AS2AC1A*4^@3 88^[#ETB^[]ELDCTF^[HEI )@@G@@D-^C8)ELDE@)@D@@@@^[#B@8A@6AS2AC2A@4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)EJ )@@G@@@D@@@@^[#B@8A@6AS2AC2A)4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@D@@@@^[#B@8EK )@@G@@A@6AS2AC3A)4^@3 88^[#ETB^[]ELDCTF^[HD-^C8)ELDE@)@C@@@@^[#B@9A@5AK0A@3AC4EL )@@G@@^@3 84^[KETB^[CC([C))DL[D(]^@)@C@@@@^[#B@9A@5AK0A@4AC4^@3 84^[KETB^[CC([EM )@@G@@C))DL[D(]^@)@C@@@@^[#B@9A@5AK0A@5AC4^@3 84^[KETB^[CC([C))DL[D(]^@)@C@@@@EN )@@G@@^[#B@9A@5AK0A@6AC4^@3 84^[KETB^[CC([C))DL[D(]^@)@D@@@@^[#B@9A@6AK5A*3A@5EO )@@G@@^[KETB^[NE-[E))DL[D(]^@1^@1AS\AS2^@)@D@@@@^[#B@9A@6AK5A*3A05^[KETB^[NE-[EP )@@G@@E))DL[D(]^@1^@1AS\AS2^@)@D@@@@^[#B@9A@6AK5A*4A@5^[KETB^[NE-[E))DL[D(]^@1EQ )@@G@@^@1AS\AS2^@)@D@@@@^[#B@9A@6AK5A*5A@5^[KETB^[NE-[E))DL[D(]^@1^@1AS\AS2^@)ER )@@G@@@C@@@@^[#B@9A@6AK5BC3AC5^[KETB^[JE[M^[ECDHCK)AC)BC\AC6@C@@@@^[#B@9A@6AK5ES )@@G@@BC3A85^[KETB^[JE[M^[ECDHCK)AC)BC\AC6@C@@@@^[#B@9A@6AK5BC4AC5^[KETB^[JE[MET )@@G@@^[ECDHCK)AC)BC\AC6@C@@@@^[#B@9A@6AK5BC5AC5^[KETB^[JE[M^[ECDHCK)AC)BC\AC6EU )@@G@@@[@@@@C[ D1^@^@@@@C[NFDH -^^[KELDD1O^))^@)_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EV )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XFJIMN EW )@@G@@ SCHED/INVCL ^MUFE______*@@@@@@@@@@@@@@@__"@@@@@@@@@@@G@@)3;8ICPOLLEX )@@G@@DISPLAY @@)3;8@@@[@@@@=52R@I@52;@[$@@@@@@@@@@@@@@@@@@@@@5_G6@;+WU#E^EY )@@G@@@@@@]O@@@P'@@@CA-J@@@@[$@@@@@@@@@@@@@@@@@@@@@5,.@@[@@#@@@@@@@@@AV)@@@@@REZ )@@G@@@@@U).@@K5!8@@@@@@@@@=M;K@.5\,MAPER0LEG1 @@@@@@AC? 00AC? 00AK6 ),A@1 ),FA )@@G@@A@1BS)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@)FB )@@G@@AC,A@0 )0AS,B@5BTOC(SE))^8)^@)^@)^@)^@)^@)^@)^@)^@$BS)^@)^@)^@)^@)^@)^@)FC )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@)AK,A@0 )0AS,B@5BTOFD )@@G@@C(SE))^8)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@$BS)^@)^@)^@)^@)^@)FE )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@) 01 )0AS,BC0BT^CDK^@7 05 )0AS,BC0BS)FF )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)FG )@@G@@^@)^@)@O@O=@C1JD1O^@2BTHCDK^@0A@,AC?A@4 00A*;E- F[O^@$AK1A83A86^8;^@)^@)FH )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@)FI )@@G@@AC,A@0 )0A),A@5BTOC(SE))^9#AK5D-M^@)^@)^@)^@)^@)^@$BS)^@)^@)^@)^@)^@)^@)FJ )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@)AK,A@0 )0A),A@5BTOFK )@@G@@C(SE))^9PD1DE)?E9CDDOC*)D[DC9C^[KC(MC0)^@)^@)^@)^@)^@$BS)^@)^@)^@)^@)^@)FL )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@)A),A85 )0A),A@5BTOC(SE))^8)^@)^@2A@0FM )@@G@@^8;^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)FN )@@G@@^@)^@)@O@O=@D([E@)A*,A*0 )0A),A@5BTOC(SE))^80A)\AK0 89A@?^@1^8;^@)^@)^@)FO )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@D([E@)FP )@@G@@A0,A*0 )0AS,BC0BT]CDMCS)AC9 -I ))^82AC7AS7A0$^@)^@)^@)^@)^@)^@)^@)^@)^@)FQ )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)@O@O=@ ),AK5 ),AK5 ),A@1 ),A@2FR )@@G@@A0? 00AC? 00AC? 00AC? 00AK6 ),A@1 ),A@1BS)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)FS )@@G@@^@)^@)^@)^@)^@)^@)^@)^@)^[ D1^^@,^@)___D->H1$I-*^[YEL\G0)F- HD!I[2H90G(2FT )@@G@@ 0)B@0^[5IT>G))^8) 0)^@)@A@@@I^@)^@)^@)^@)^[HETB^@)^@7A)?B@) 0)^@)@E@@@IFU )@@G@@^@$E(0I[>IK)GL\I(,G))F1LB))H-\I9>IK)GL\I(,G))H9&*[S@@@*SDFF*@C@@@'. COFV )@@G@@PYRIGHT 1976 BY THE UNIVERSITY OF MARYLAND@[@@@'. @D@@@'. QUESTIONFW )@@G@@S CONCERNING THIS SHOULD BE DIRECTED TO: @[@@@'. @ @@@'. MARFX )@@G@@VIN V. ZELKOWITZ @B@@@'. DEPARTMENT OF COMPUTER SCIENCE @A@@@'FY )@@G@@. UNIVERSITY OF MARYLAND @B@@@'. COLLEGE PARK, MARYLANFZ )@@G@@D 20742 @[@@@'. @G@@@'. PERMISSION TO USE THESE LISTINGS GA )@@G@@AND THE COMPUTER PROGRAMS THEY@E@@@'. REPRESENT IS GRANTED UNDER THE FGB )@@G@@OLLOWING CONDITIONS: @[@@@'. @G@@@'. 1. UNLIMITED USE MAY GC )@@G@@BE MADE OF THE PROGRAMS REPRESENTED BY @G@@@'. THESE LISTINGS PROVIGD )@@G@@DED THAT THE NAME PLUM OR UNIVERSITY OF MARYLAND@E@@@'. PL/1 COMPILER GE )@@G@@REMAINS ASSOCIATED WITH THESE PROGRAMS. @[@@@'. @F@@@'. 2. GF )@@G@@MODIFICATIONS MAY BE MADE TO THE LISTINGS PROVIDED: @[@@@'. @G@@@'GG )@@G@@. (A) ANY RESULTING PROGRAM, OR REPORT, PAPER OR DOCUMENTATION GH )@@G@@@G@@@'. DESCRIBING SUCH PROGRAM WILL CLEARLY INDICATE THAT THE PRGI )@@G@@OGRAM @E@@@'. IS A DIALECT OF PLUM OR IS DERIVED FROM PLUM, AND GJ )@@G@@@[@@@'. @G@@@'. (B) ALL SUCH MODIFICATIONS, OTHER THAN TRIVIAGK )@@G@@L CORRECTIONS @F@@@'. OF ERRORS IN THE SOURCE PROGRAMS, SHALLGL )@@G@@ BE REPORTED AND @G@@@'. A BRIEF DESCRIPTION OF THE FEATURE ADDEGM )@@G@@D SHALL BE SUBMITTED @C@@@'. TO THE UNIVERSITY OF MARYLAND, ANGN )@@G@@D @[@@@'. @F@@@'. (C) NO PROGRAMS DERIVED FROM THESE LISTGO )@@G@@INGS SHALL BE SOLD@G@@@'. WITHOUT WRITTEN APPROVAL FROM THE UNIVEGP )@@G@@RSITY OF MARYLAND, AND @[@@@'. @F@@@'. (D) COPIES OF THESE PGQ )@@G@@ROGRAMS MAY BE TRANSMITTED TO OTHER @G@@@'. LOCATIONS PROVIDED THGR )@@G@@AT SUCH TRANSMITTALS CLEARLY INDICATE @G@@@'. WHETHER THE PROGS )@@G@@GRAMS ARE EXACT COPIES OF THE UNIVERSITY OF @E@@@'. MARYLAND GT )@@G@@PLUM COMPILER OR ARE MODIFICATIONS TO IT. @[@@@'. @G@@@'. 3. GU )@@G@@THESE CONDITIONS ONLY APPLY TO THE PLUM COMPILER ITSELF, @F@@@'. ANGV )@@G@@D ARE NOT MEANT TO APPLY TO ANY PROGRAM WRITTEN USING PLUM. @E@@@'. THGW )@@G@@E PURPOSE OF THESE CONDITIONS IS TO ALLOW ANY USER TO @F@@@'. EXPERIMEGX )@@G@@NT WITH THE COMPILER AS LONG AS THE RESULTING PRODUCT @G@@@'. IS NOT SGY )@@G@@OLD AND AS LONG AS IT IS KNOWN THAT THE PRODUCT DEVELOPED @#@@@'. FRGZ )@@G@@OM PLUM. @[@@@'. @[@@@'. @[@@@'. @[@@@'. @[@@@'. HA )@@G@@@[@@@'/. @#@@@9/ AXR$ . @#@@@9 DCLRG . @[@@@9 . HB )@@G@@@^@@@9 . SETUP DSECTS @B@@@9 . ADD PLTVDS,PLCGST,PLDSAW,PLHC )@@G@@CSAW @#@@@9 UNLIST . @#@@@9@ADD,P PLTVDS @#@@@9@ADD,P PLCGSHD )@@G@@T @#@@@9 LIST . @#@@@9@ADD,P PLDSAW . @#@@@9 PLAHE )@@G@@C . @]@@@9 PLAR@#@@@9 PLSD . @#@@@9 PLCGD . HF )@@G@@@#@@@9 PLWORD .@#@@@9 PLIG . @#@@@9@ADD,P PLCSAW HG )@@G@@@^@@@9/CGDRVR CSECT 3 . @ @@@9 . LABELS THAT WILL STAY HERE@E@@@9HH )@@G@@ERCGPRM EQU 27 . PARAMETER IN I/O LIST OR CHECK PREFIX @B@@@9ERCGSLHI )@@G@@ EQU 28 . STRING LENGTH OUT OF RANGE@D@@@9ERVG02 EQU 34 . VBLE HAS A '*'HJ )@@G@@ FOR BOUND OR LENGTH @H@@@'ERBLOC EQU 39 . BEGIN BHK )@@G@@LOCK HAS NO VARS, SHOULD USE DO; @C@@@9ERVG03 EQU 35 . '' '' NON-'HL )@@G@@*' '' '' @E@@@9ERVG01 EQU 36 . CONSTANT BND OR LNGTH FIELD EXCEHM )@@G@@EDS 32767 @A@@@9ERVG04 EQU 33 . INIT NOT IMPLEMENTED@B@@@9ERCXBD EQU 3HN )@@G@@0 . LOWER BOUND > UPPER BOUND @B@@@9ERCXMP EQU 32 . UB REQUIRES TOO MUCHHO )@@G@@ SPACE@B@@@9ERCXV0 EQU 31 . LB '' '' '' @F@@@9ERXGRN EQUHP )@@G@@ 52 . NONSTANDARD PL/1 OPTION USED @E@@@9EXCLS0 EQUHQ )@@G@@ 37 . UNEXPECTED BITS IN SD @]@@@9 CEND .@H@@@9HR )@@G@@KKHWMX SF +0202177777700 . CHECK FOR HALFWORD OVERFLOW OF FLOAT CNSHS )@@G@@T @F@@@9KKMASK SF +017000000 . MASK FOR X FIELD OF INSTHT )@@G@@RT @E@@@9KKLXUX SF +013742 . OPCODE FUDGE FOR LX,U X2HU )@@G@@@E@@@9KKLMJX SF +036262 . OPCODE FUDGE FOR LMJ X2 @C@@@9HV )@@G@@KKXFLD SF +01000000 . MASK FOR X1 @H@@@9KKSNSM SAC +01HW )@@G@@0000,0777777 . ARRAY V.O. INITIALIZATION INTERRUPT WORD @E@@@9FIXER HX )@@G@@ SFW 0 . CREATE DUMMY STACK ELEMENT FOR INITIAL @ @@@9 +SDHY )@@G@@0ART,SDDCBN,0,17 .@B@@@9KBXHMP EQU 17 . HALFWORD MAX PRECISION@C@@@9HZ )@@G@@MXSTLN EQU 01000 . MAXIMUM STRING LENGTH @B@@@9KBXMXP EQU 35 . MIA )@@G@@AX PREC. FOR FIXED BIN @B@@@9ICSCHF EQU 0200 . CHECK/NOCHECK PRESENT IB )@@G@@@F@@@9FLGSIE EQU 01 . SINGLE ITERATION ENCOUNTERED IC )@@G@@@F@@@9FLGNIF EQU 02 . NEGITIVE CONSTANT ITER FACT ID )@@G@@@E@@@9DDGCHK INSERT 5,'CHE','CK ' . CHECK IS NONSTANDARD PL1 @[@@@9IE )@@G@@ . @[@@@9. @#@@@9. =============== @E@@@9 LIT . SUBSEIF )@@G@@QUENT LITERALS ARE UNDER L.C. 3 @^@@@9 USING SGDSCT,X7 .@#@@@9IG )@@G@@ . ---------------@^@@@9 . INITIALIZE DRIVER @#@@@9 . ---------------IH )@@G@@@#@@@9PLCGDR* LABEL . @E@@@9 MOVE DLTOPT,5,I . SET ASSEMBLY II )@@G@@LISTING OPTIONS @D@@@9 MOVE DXGFL3,0,I . SET JUNK FOR IJ )@@G@@ZELK. @E@@@9 GFIX ADPCSE . START OF CODE GEN AREA (END OF SD'S) IK )@@G@@@C@@@9 LOAD A8,ADPCBC . START B-CODE AREA @E@@@9 STOIL )@@G@@RE A8,DCGGNB . END OF CODE GENERATION AREA @C@@@9 GMARK DPGSLIM )@@G@@C . START OF STATIC INIT AREA@F@@@9 LOADXI X10,1,I . SET GENERAIN )@@G@@TED CODE POINTER INCREMENTOR @C@@@9 MOVE DCGFL2,0,I . CLEAR CIO )@@G@@ODEGEN FLAGS@E@@@9CGSTR1 LABEL . MERGE AFTER SETTING LINE IP )@@G@@COUNT @C@@@9 LOADA A9,DCGTST . TEMP STACK START @E@@@9 IQ )@@G@@ AU,U A9,1 . SET A10 TO BOTTOM OF TEMP STACK@E@@@9 MOVE IR )@@G@@ DCGBPT-FH1,ZERO,DCGBSZ . CLEAR BLOCK STATUS @D@@@9 STORE A10IS )@@G@@,DCGTLV . SET BOTTOM OF TEMP STACK@E@@@9RGINMV LABEL . EIT )@@G@@NTRY POINT TO REINITIALIZE @A@@@9 MOVE DCGINT,RGCORE,RGSIZE . IU )@@G@@@C@@@9 LOAD X9,ADBK0S . EXTERNAL (0) BLOCK @D@@@9 STOREIV )@@G@@ X9,DCGBPT . SET OUTER BLOCK POINTER @^@@@9 USING SDSECT,X9 .IW )@@G@@@F@@@9 STORE A9,SDBKAW,X9 . SET FAKE AW FOR OUTER BLOCKIX )@@G@@@B@@@9 MOVE SDCHLD,0,I . EMPTY CHECKLIST@E@@@9 MOVE DCGSNIY )@@G@@O,0,I . INITIALIZE STATEMENT NUMBER @D@@@9 MOVE ADPCLC,0,I .IZ )@@G@@ STATIC LABEL CHAIN HEAD @F@@@9 MOVE DBGSCL,0,I . EMPTY SJA )@@G@@CALAR INITIALIZATION CHAIN @D@@@' MOVE DBGPTC,0,I . EMPTY JB )@@G@@STATIC PTR CHAIN @F@@@9 MOVE DXGTPS,XGSANY,I . SET TO ACCEPT ANYJC )@@G@@ OPERAND TYPE @E@@@9 MOVE DCGELB,0,I . ENTRY LABEL LIST STJD )@@G@@ARTS EMPTY @E@@@9 LOADA X7,DCGCST . START OF CHECK LIST OVERFLOW JE )@@G@@STACK @E@@@9 LOADXI X7,1,I . SET INCREMENTOR FOR XGPUSH JF )@@G@@@F@@@9 STORE X7,DCGSTL . SET STARTING COMPILE STACK LEVEL JG )@@G@@@D@@@' LOADXI X1,1,I . SET GETC INCREMENT REG. @G@@@9 JH )@@G@@ STORE X7,DXGXPR . INITIALIZE AGGREGATE STACK ENTRY POINTER @D@@@9JI )@@G@@ MOVE SDDOOF,ARSTSZ,I . RESET BLOCK 0 DO OFFSET@ @@@9 STOJJ )@@G@@RE A6,SDBSLD,X9 . @ @@@9 USING SDSECT,X5 . @E@@@9 LOAD JK )@@G@@ X5,ADPCSS . START OF STATIC VARIABLE CHAIN @D@@@9 IF X5,ZEROJL )@@G@@ THEN,BGNSTV . -> NO STATIC VBLES @G@@@9 LOAD A14,AGSTK . PJM )@@G@@UT STATIC FIXED VARIABLES IN COMPILED CODE@E@@@9 ADD A14,W1XU,JN )@@G@@X10 . NEXT ADDRESS FOR VARIABLES @]@@@9 . ------ @ @@@9 . STATIC STJO )@@G@@ORAGE ALLOCATION @]@@@9 . ------ @#@@@9CGSTST LABEL . @G@@@9 JP )@@G@@ IF SDMEMS,ON,SDCLS2 THEN,CGSTAL . ->VBLE MEMBER OF STRUCTURE @D@@@'JQ )@@G@@ LOAD F,SDCLS0,X5 . THIS IS ASSUMED LATER @F@@@9 LOAD JR )@@G@@ A2,SDCLS0,X5 . USE TYPE OF SD AS INDEX TO BRANCH @C@'@9 ANDJS )@@G@@,U A2,7 . GET RELAVENT BITS @C@@@' AND,U A2,017 . JT )@@G@@ GET RELAVENT BITS@A@@@9 LOAD A2,BGTPTB+FH1,A3 . @C@@@9 JU )@@G@@ LINK 0,A2 . ALLOCATE ACCORDING TO TYPE @#@@@9CGSTAL LABEL . @C@@@9JV )@@G@@ LSDP X5,SDSTCH,X5 . NEXT STATIC ID @D@@@9 IF X5,NZERJW )@@G@@O THEN,CGSTST . -> DETERMINE TYPE @I@@@9 GFIX A14 . RJX )@@G@@ESET GENERATED CODE POINTER BEYOND FIXED ALLOCATIO @E@@@9 GMAJY )@@G@@RK DPGSLC . UPDATE CODE GENERATION START @G@@@9 GMARK ADPJZ )@@G@@CSE . INCLUDE NEWLY ALLOCATED LOCS WITH SD'S @E@@@9BGNSTV LABKA )@@G@@EL . MERGE FROM NO STATIC VARIABLES @E@@@9 LOAD A14KB )@@G@@,ARSTSZ,I . FAKE FIXED LENGTH @^@@@9 GOTO BGALEN . KC )@@G@@@^@@@9 . ------------------- @ @@@9 . CHANGE OF BLOCK STATUS @H@@@9KD )@@G@@ . (BRANCHED TO FROM DGPRC5,DGBGN1. IF PROC, ON ENTRY X2=S.D. POINTER KE )@@G@@TO @ @@@9 . START OF ENTRIES CHAIN.) @^@@@9 . ------------------- KF )@@G@@@#@@@9DGBLCK* LABEL . @D@@@9 LINK DGBRCH . GEN BR. AROUND BLKG )@@G@@OCK BODY @C@@@9 LOAD A14,SDCHLD,X9 . START C/NC LIST@A@@@9KH )@@G@@ SET CGRCHB,ON,DCGFL2 . @E@@@9 STORE A8,A10 . SKI )@@G@@AVE POINTER TO PROCEDURE BLOCK@C@@@9 STORE X7,SDFXLN,X9 . SAVE KJ )@@G@@STACK LEVEL @C@@@9 STORE X1,ADPCBC . SAVE META CODE PTR @H@@@9KK )@@G@@ LOADXM X1,DCGGNB . START OF G-CODE FOR THIS STATEMENT WITH BUFFKL )@@G@@ER @D@@@9 ADD X1,10,I . REMOVE BUFFER LENGTH @C@@@9KM )@@G@@ LOAD A1,KLCH2W . RESET GETC TO H1 @]@@@9 GETC .@G@@@9KN )@@G@@ IF ICTCHF,OFF,A8 THEN,DGB2EN . -> NO CHECK/NOCHECK PREFIXES KO )@@G@@@B@'@9 NONPL1 XGFCHK,DDGCHK,DGBXXQ . @#@@@9DGBXXQ LABEL . KP )@@G@@@G@@@' ADD X1,2,I . SKIP STMT#,COND L.P.,PREFIX FLAKQ )@@G@@GS @A@@@9 . LOOP TO CHECK OR NOCHECK PREFIXES@#@@@9DGB2LC LABEL . KR )@@G@@@#@@@9 GETC . @G@@@9 IF A8,LT,ACCHK,I THEN,DGB2LC . ->KS )@@G@@ TRY NEXT META-CODE SYLLABLE @E@@@9 IF A8,NE,ACCHK,I THEN,DGB2NKT )@@G@@C . -> NO CHECK PREFIX @E@/@' MOVE F,0,I . SAY NEXKU )@@G@@T SD IS WITH CHECK@F@@@/ MOVE A2,0,I . SAY NEXT SD KV )@@G@@IS WITH CHECK @B@'@9 LOAD F,SDCLS3 . (USED AT DGB2CE) @B@@@9KW )@@G@@ GOTO DGB2CK . CHECK PREFIX @#@@@9DGB2NC LABEL . @D@@@9KX )@@G@@ IF A8,NE,ACNCHK,I THEN,DGB2EN . -> NO NOCHECK@C@'@9 LOADNKY )@@G@@ F,SDCLS3 . (USED AT DGB2CE) @F@/@' MOVE F,1,I . KZ )@@G@@ SAY NEXT SD IS WITH NOCHECK @F@@@/ MOVE A2,1,I . LA )@@G@@ SAY NEXT SD IS WITH NOCHECK @^@'@9 GOTO DGB2CK . @C@@@9LB )@@G@@DGB2CK LABEL . POINT TO FIRST ITEM@ @'@9 GETC . LC )@@G@@ ACRPAR @ @@@' GETC . ACLPAR @B@@@' NONPL1 XGLD )@@G@@FCHK,DDGCHK,DGBSCR . @#@@@9DGBSCR LABEL . @ @@@9 GETC . LE )@@G@@ ACSTEX @^@@@9 GETC . SD @#@@@9DGB2CL LABEL . @F@@@9LF )@@G@@ LOAD X5,A8 . IDENTIFIERS'S SD (A8=R15) (X8=R8) @^@@@9LG )@@G@@ LOAD X8,A8 . @B@/@' IF F,EQ,0,I THEN,DGB222 . LH )@@G@@@B@@@/ IF A2,EQ,0,I THEN,DGB222 . @C@@@' LOADN F,SDCLI )@@G@@LS3,X5 . (USED AT DGB2CE) @ @@@' GOTO DGB2CS . @#@@@'LJ )@@G@@DGB222 LABEL . @C@@@' LOAD F,SDCLS3,X5 . (USED AT DGB2CE) LK )@@G@@@#@@@9DGB2CS LABEL . @D@@@9 LOAD A8,X5 . SAVE FOR LINKLL )@@G@@ IN CHAIN @C@@@9 . LSDP X5,X5 . EXPAND SD POINTER @^@@@9LM )@@G@@ USING SDSECT,X5 .@F@@@9. IF SDPARM,OFF,SDCLS2 THEN,DGB2C1 LN )@@G@@. -> NOT A PARAMETER @D@@@9. IF A8,NE,X8 THEN,DGB2C1 . -> NOT LO )@@G@@A MAJOR NAME@E@@@9. CHECK PREFIX NOT REALLY AN ERROR *****FIX IT LP )@@G@@***** @H@@@9. EXERR ERCGPRM LEVEL,0 . '*** IS A PARM IN AN I/O LISTLQ )@@G@@ OR CHK PRFX' @#@@@9DGB2C1 LABEL . @^@@@9 USING SDSECT,X5 .LR )@@G@@@F@@@9 IF SDSTRU,OFF,SDCLS4 THEN,DGB2CE . -> NOT A STRUCTURE LS )@@G@@@D@@@9 LOAD X5,SDSON,X5 . DO FIRST SON IN STRUCTURE @^@@@9 LT )@@G@@ GOTO DGB2CS . @[@@@9 . @#@@@9DGB2CE LABEL . @I@;@9 IF SDLU )@@G@@CHCK,ON THEN,DGB2CK . (F LOADED AT DGB2LC/NC) THIS OCC. OF VBLE IN LV )@@G@@@I@@@; IF SDCHCK,ON THEN,DGB2CB . (F LOADED AT DGB2LC/NC) THIS OCLW )@@G@@C. OF VBLE IN @I@@@9 . THE CHECK/NOCHECK PREFIX DOESN'LX )@@G@@T CHANGE THE STATUS OF THE VBLE @ @@@9 LOAD A3,SDCLS3,X5 . LY )@@G@@@H@@@9 XOR,U A3,SDCHCK . FLIP CHECK BIT *******LZ )@@G@@******** @ @@@9 STORE A4,SDCLS3,X5 . @F@@@9 IF SDCHK2,MA )@@G@@OFF,SDCLS3 THEN,DGB2NW . -> FIRST TIME FOR VBLE@E@@@9 SUB X7,MB )@@G@@1,I . PUSH CHECKLIST OVERFLOW STACK @G@@@9 LOAD A6,SDCHLT,XMC )@@G@@5 . SAVE PREVIOUS LINK IN CHECK OVERFLOW STACK @ @@@9 STORE A6,W1MD )@@G@@H1,X7 . @^@@@9 LOADN A14,A14 . @#@@@9DGB2NW LABEL . @D@@@9ME )@@G@@ SET SDCHK2,ON,SDCLS3 . => VBLE ON CHECKLIST @ @@@9 STOREMF )@@G@@ A14,SDCHLT,X5 . @^@@@9 LOAD A14,A8 . @C@@@9DGB2CB LABEL . MG )@@G@@ BACK TO ORIGINAL SD@E@@@9 IF A8,EQ,X8 THEN,DGB2ND . -MH )@@G@@> FINISHED WITH ENTRY @D@@@9 LOAD A8,SDDAD . SAVE POINTER MI )@@G@@TO FATHER SD@C@@@9 LOAD X5,SDBROT . BROTHER, IF ANY @D@@@9MJ )@@G@@ IF X5,NZERO THEN,DGB2CS . -> GOOD BROTHER @B@@@9 LSDP MK )@@G@@ X5,A8 . FIND FATHER SD @E@@@9 GOTO DGB2CB . -> SEE ML )@@G@@IF FATHER HAS BROTHER @[@@@9 . @#@@@9DGB2ND LABEL . @A@@@9 MM )@@G@@ GETC . ACENEX @C@@@9 GETC . ACCOMA MN )@@G@@OR ACRPAR @E@@@9 IF A8,NE,ACCOMA,I THEN,DGB2LC ELSE,DGBSCR MO )@@G@@. @[@@@9 . @E@@@9 . SAVE STATUS OF OUTER BLOCK; AND INITIALIZE NMP )@@G@@EW BLOCK @[@@@9 . @^@@@9 USING SDSECT,X9 .@#@@@9DGB2EN LABELMQ )@@G@@ . @ @@@9 XGPUSH 'SIZE',DCGBSZ .@^@@@9 USING WORD,X7 . MR )@@G@@@F@@@9 MOVE W1,DCGBPT-FH1,DCGBSZ . SAVE OUTER BLOCK'S STATUS MS )@@G@@@E@@@9 MOVE DCGBPT-FH1,ZERO,DCGBSZ . CLEAR STATUS INFO @C@@@9MT )@@G@@ STORE X9,DCGBPT . SAVE BLOCK POINTER @D@@@9 STORE X7,MU )@@G@@DCGSTL . STARTING STACK LEVEL @E@@@9 LOAD X8,DCGTLV . CMV )@@G@@URRENT TEMPORARY STACK LEVEL @G@@@9 STORE X8,DCGTSK . FIRST EMW )@@G@@NTRY IN TEMP STACK AT BLOCK ENTRY @D@@@9 LSDP X9,A10 . SD OF NMX )@@G@@EW BLOCK (SAVED ABOVE) @F@@@' MOVE DCGONF,SDSTON . COPY NEMY )@@G@@W CONDITION PREFIX FLAGS@C@@@9 STORE A14,SDCHLD . TOP OF CHECKLISMZ )@@G@@T @D@@@9 STORE X2,SDECHN . START OF ENTRY CHAIN IN PROC@C@@@9NA )@@G@@ STORE A7,SDNMEN . # OF ENTRIES IF PROC @E@@@9 LOAD X8,NB )@@G@@W1XU+1,X8 . FIRST WORD ABOVE TEMP STACK @F@@@9 STORE X8,SDBKAWNC )@@G@@,X9 . SET POINTER TO BLOCK AW @D@@@9 LOAD X4,W1U+1,ND )@@G@@X8 . X4 -> BLOCK'S AW+1 @G@@@9 LOAD A3,SDBSLD,X9 . NE )@@G@@ A3 = OFFSET IN AR OF STATIC LINK @E@@@9 STORE A3,W1H2,X4 . NF )@@G@@ OFFSET OF RETURNED VALUE @D@@@9 STORE X8,W1H1,X4 . POINT NG )@@G@@TO PROPER REGISTER@D@@@9 ADD A3,1,I . ALLOCATE TWO WORD FOR NH )@@G@@RETURN@C@@@9BGPMWS LABEL . CREATE PARAMETER AW@D@@@9 NI )@@G@@ ADD A3,1,I . ADVANCE OFFSET IN AR @F@@@9 ADD X4,NJ )@@G@@1,I . ADVANCE POINTER TO NEXT FREE AW SLOT @E@@@9 STORE A3,NK )@@G@@W1H2,X4 . OFFSET OF PARAMETER LINK IN AR @D@@@9 STORE X8,W1H1,XNL )@@G@@4 . USE STATIC LINK FOR BLOCK@E@@@9 IF A3,LT,SDNMPM THEN,BGPNM )@@G@@MWS . -> MORE PARAMETERS@C@@@9BGINIT LABEL . SET UP VALUESNN )@@G@@ IN SD@G@@@9 ADD A3,2,I . ADVANCE OFFSET TO DO STACK NO )@@G@@ ***???* @I@@@9 ADD X4,1,I . FIND ADDRESS OF NEXT AVAINP )@@G@@LABLE TEMPORARY ALLOCATOR @F@@@9 STORE A3,SDDOOF,X9 . ONQ )@@G@@FFSET TO BEGINING OF DO STACK @D@@@9 STORE X4,DCGTLV . INITIALNR )@@G@@IZE TEMP STACK @H@@@9 STORE A3,DCGLOF . FIRST IN DO STACK INS )@@G@@S FOR LABELS NOT IN ANY DO @C@@@9 LOAD A14,SDMXDO,X9 . DNT )@@G@@O STACK SIZE@ @@@9 STORE A14,DCGNBT . @F@@@9 ADD A14NU )@@G@@,W1U+1,A3 . OFFSET TO FIRST FREE BYTE IN AR @^@@@9 LINK BGDSPNV )@@G@@Y . @ @@@9 . ---------------------- @ @@@9 . CODEGEN: STORAGE ALLNW )@@G@@OCATOR@ @@@9 . ---------------------- @F@@@9 LOAD X5,SDECHNNX )@@G@@,X9 . DO PARAMETER LIST SD'S @F@@@9 IF X5,ZERO TNY )@@G@@HEN,DG0006 . -> BLOCK ENTRY, NO PARAM'S @#@@@9DG0005 LABEL . @^@@@9NZ )@@G@@ LINK DGENCH . @ @@@9 USING SDSECT,X5 . @F@'@9 OA )@@G@@ IF SDENCH,ZERO THEN,DG0006 . -> NO MORE ENTRY POINTS @F@@@' OB )@@G@@ IF SDENCH,ZERO THEN,DG0006X . -> NO MORE ENTRY POINTS @ @@@9 OC )@@G@@ LOAD X5,SDENCH . @G@@@9 GOTO DG0005 . -OD )@@G@@> PROCESS NEXT ENTRY POINT @#@@@9DG0006 LABEL . @ @@@9 USIOE )@@G@@NG SDSECT,X9 . @G@@@' IF SDNXDC,NZERO THEN,DG0006X . -> SOMEOF )@@G@@ VARS WERE DECLARED @F@@@' IF SD3OBK,ON,SDCLS3 THEN,DGOG )@@G@@0006X . ON UNIT BLOCK @D@@@' EXERR ERBLOC LEVEL,1 . SHOULD USEOH )@@G@@ DO GROUP @G@@@'DG0006X LABEL . HERE IF ANY VARS INOI )@@G@@ BLOCK OR IF PROC @E@@@9 MOVE DBGSCL,0,I . EMPTY SCALAR INITIALIZOJ )@@G@@ATION CHAIN @E@@@' MOVE DBGPTC,0,I . EMPTY SCALAR PTR CHOK )@@G@@AIN @ @@@9 LOADA X11,BGNXTL . @^@@@9 LOAD X5,X9 . OL )@@G@@@ @@@9 LOADXI X2,SDBKAW . @^@@@9 LOADXM X2,0,I . @C@@@9OM )@@G@@ ADD A14,X2 . MAKE A14 INTO ADDR WORD @ @@@9 USING SDSON )@@G@@ECT,X5 . @#@@@9BGNXTL LABEL . @^@@@9 LSDP X5,SDNXDC .@G@@@9OO )@@G@@ IF X5,ZERO THEN,BGALEN . -> ALL VBLES IN BLOCK ARE ALLOCATED OP )@@G@@@C@@@9 LOAD F,SDCLS0 . STORAGE CLASS? @D@'@9 IF SOQ )@@G@@D0AUT,OFF THEN,BGNXTL . -> NOT AUTOMATIC @G@@@' IF SD0AUT+SD0BSDOR )@@G@@+SD0CNT,OFF THEN,BGNXTL . -> NOT AUTOMATIC @F@@@9 IF SDMEMS+OS )@@G@@SDPARM,OFF,SDCLS2 THEN,BG0001 . -> GO ALLOCATE @I@@@9 IF 15-SD0EOT )@@G@@NT,ON THEN,BGNXTL . -> ALLOCATE MEMOS WITH REST OF STRUCTURE @F@@@9OU )@@G@@ . -> ALLOCATE PARMS WITH ENTRY POINT @#@@@9OV )@@G@@BG0001 LABEL . @^@@@9 LOAD A2,SDCLS0 .@^@'@9 AND,U A2,OW )@@G@@7 . @^@@@' AND,U A2,017 . @G@@@9 LOAD A2,BGTPTB+FH1,A3 OX )@@G@@. SDCLS0 BITS GIVE PROPER TABLE ENTRY @^@@@9 GOTO 0,A2 . OY )@@G@@@[@@@9 . @I@@@9BGTPTB LABEL . H1 IS NORMAL VARIABLE TABLE, H2 IS OZ )@@G@@MEMBER OF STRUCTURE TABLE @H@@@9FILL(1) SAC BGLJMP,BGBOMB . 0 IGNOPA )@@G@@RE UNKNOWN TYPE, BOMB ON UNKNOWN TYPE @H@@@9FILL(1) SAC BGARBL,BGSTPB )@@G@@AB . 1 ARITHMETIC DATA TYPE, ARITH MEMBER OF STRU. @F@@@9FILL(1) SAC PC )@@G@@ BGNTRY,BGBOMB . 2 ENTRY NAME, UNEXPECTED ENTRY NAME @E@@@9FILL(1) SAC PD )@@G@@ BGSTRU,BGSTR3 . 3 STRUCTURE, SUBSTRUCTURE @F@@@9FILL(1) SAC BGSTRPE )@@G@@I,BGSTRI . 4 STRING, STRING MEMBER OF STRU. @D@@@9FILL(1) SAC BGARBPF )@@G@@L,BGSTAB . 5 LABEL, LABEL " @F@@@9FILL(1) SAC BGFILE,BGBOMB . 6PG )@@G@@ FILE, FILE CAN'T BE STRU MEMBER .@D@'@9FILL(1) SAC BGARBL,BGBOMB . 7PH )@@G@@ POINTER, PTR " @C@@@'FILL(1) SAC BGARBL,BGSTAB . 7 POINTER, PPI )@@G@@TR @C@@@'FILL(1) SAC BGBOMB,BGBOMB . 10 BLOCK IS ILLEGAL@E@@@'FILL(1PJ )@@G@@) SAC BGSTRI,BGSTRI . 11 AREA,HANDLE LIKE STRINGS @[@@@9 . @#@@@9PK )@@G@@BGBOMB LOCAL . @E@@@9 EXERR EXCLS0 LEVEL,2 . UNEXPECTED BITS PL )@@G@@IN SDCLS0 @D@'@9 UNSTK X11 . RESTORE RETURN REGISTER PM )@@G@@@B@'@9 LJMP . TRY AGAIN @E@@@' GOTO BPN )@@G@@GNTR0 . RETURN, UNSTACKING X11 @]@@@9 . ------- @F@@@9 . N.BPO )@@G@@. BELOW, A14 CONTAINS BASE AND OFFSET TO FIRST FREE BYTE @]@@@9 . ---PP )@@G@@---- @#@@@9BGARBL LABEL . @ @@@9 USING SDSECT,X5 . @F@@@9PQ )@@G@@ IF SDARRY,ON,SDCLS2 THEN,BGSTRI . ->ARITH OR LABEL ARRAY @ @'@9PR )@@G@@ . ARITH OR LABEL SCALAR @[@@@'. @A@@@' . ARITH OR LABEL OR POPS )@@G@@INTER SCALAR@B@@@'. (NOT STRUCTURE MEMBER!) @[@@@'. PT )@@G@@@G@@@' IF SD0BSD++SD0CNT,OFF THEN,BGARB1 . -> NOT BASED IS NORMAPU )@@G@@L! @E@@@' LOAD A3,SDCLS0 . SEE IF PTR TO SET BIT ON PV )@@G@@@ @@@' AND,U A3,SD0PTR . @E@@@' IF A4,NE,SD0PTR,I THEPW )@@G@@N,BGARBL1 . -> IF NOT PTR @A@@@' SET SD5PTR,ON,SDCLS5 . PX )@@G@@@#@@@'BGARBL1 LABEL . @F@@@' IF SD3BSD,OFF,SDCLS3 THEN,BGARB3 PY )@@G@@. VAR DCLD A BASED; @F@@@' IF SD0BSD,OFF THEN,BGARB3 . -> SKPZ )@@G@@IP IF VAR IS CNTRLD @#@@@' LOCAL . @E@@@' LMCP RQA )@@G@@,SDBPTR,X5 . GET SD OF IMPLIED PTR IN A8 @ @@@' STORE A8,SDBPQB )@@G@@TR . @^@@@' UNSTK X11 . @#@@@'BGARB3 LABEL . @D@@@' QC )@@G@@ MOVE SDPROF,0,I . DISP. FROM POINTER@E@@@' MOVE SQD )@@G@@DLCOF-FH2,0,I . SET OFFSET FROM POINTER! @G@@@' GOTO BGARB2 QE )@@G@@. DON'T NEED SPACE IN AREC FOR IT! @E@@@'BGARB1 LABEL . QF )@@G@@ HERE FOR NORMAL VARIABLE @D@@@9 STORE A14,SDLCOF,QG )@@G@@X5 . LOCATION OF OFFSET IN AR @ @@@9 STORE A14,SDA1BS-FH1 . @G@@@9QH )@@G@@ ADD A14,SDRTC . WORDS NEEDED FOR VARIABLE SET BY FIRST PASSQI )@@G@@@D@@@' AND,U F,07 . SEE IF VAR IS A PTR@D@@@' QJ )@@G@@ IF A6,NE,7,I THEN,BGARB2 . -> IF NOT PTR @E@@@' MOVE SQK )@@G@@DPTRC,DBGPTC . PUT PTR ON FRONT OF LIST @ @@@' STORE X5,DBGPQL )@@G@@TC . @F@@@'BGARB2 LABEL . MERGE LANE FROM BASED VARQM )@@G@@S @G@@@9 IF SDINTL,OFF,SDCLS3 THEN,LJMP . -> NO INITIALIZATIQN )@@G@@ON NEEDED @E@@@9 MOVE SDENBK,DBGSCL . ADD THIS SD TO CHAIN OF SQO )@@G@@CALERS@D@@@9 STORE X5,DBGSCL . WHICH NEED INITIALIZATION@#@@@9QP )@@G@@ LJMP . @[@@@9 . @D@@@9BGARPR LABEL . IS PARAQQ )@@G@@METER AN ARRAY? @G@@@9 IF SDARRY,OFF,SDCLS2 THEN,BGNTR4 . ->SCQR )@@G@@ALAR PRM, NO ALLOCATION @G@'@9 MOVE SDNSPS,0,I . ARITHMATIC ARRQS )@@G@@AYS HAVE NO STRING LEAVES @#@@@9BGSTRI LLOC . @E@@@9 STOREQT )@@G@@ A14,SDLCOF . SET OFFSET TO STRING DV IN AR @D@@@9 STORE A14,SQU )@@G@@DA1BS-FH1 .SET AW FOR VARIABLES @H@@@' IF SD0BSD++SD0CNQV )@@G@@T,OFF THEN,BGSTRS . ->ANOTHER NORMAL VARIABLE @F@@@' MOVE SQW )@@G@@DPROF,0,I . ASSUME NOT MEMBER OF STRUCTURE @G@@@' IF SDMEMSQX )@@G@@,OFF,SDCLS2 THEN,BGSTRS1 . -> NOT MEMBER OF STRUCTURE @C@@@' LOAQY )@@G@@D A2,DBGWC1 . GET ROOT SD @F@@@' LOAD A3,SDCLS0 . QZ )@@G@@ SEE IF PTR ARRAY IN STRUCTURE @ @@@' AND,U A3,SD0PTR . RA )@@G@@@B@@@' IF A4,NE,SD0PTR,I THEN,BGSTRS2 . @ @@@' USING SRB )@@G@@DSECT,A2 . @H@@@' SET SD5PTR,ON,SDCLS5 . SET BIT IN ROOT SDRC )@@G@@ SAYING PTR PRESENT @ @@@' USING SDSECT,X5 . @#@@@'BGSTRSRD )@@G@@2 LABEL . @F@@@' LOAD A2,SDA1BS-FH1,A2 . GET ADDRESS OF TOPRE )@@G@@ OF D.V. @H@@@' SUB A2,A14 . GET -(OFFSET FROM TRF )@@G@@OP OF STRUCTURE D.V.) @C@@@' LMA A2,A2 . ELIMINARG )@@G@@TE -0 @G@@@' STORE A2,SDPROF . SET OFFSET FROM START OF RH )@@G@@STRUCT DV @#@@@9BGSTRS LABEL . @D@'@9 LOAD A3,SDDVA,X5 .RI )@@G@@ POINT TO D. V. @E@@@' LOAD A3,SDDVA,X5 . POINT TRJ )@@G@@O D. V. TEMPLATE @D@'@9 ADD A14,W1Q1,A3 . ADD SIZE OF DRK )@@G@@. V.+1@E@@@' LOAD A4,SDDVSZ,A3 . GET SIZE OF TEMPLATE RL )@@G@@@D@@@' SUB A4,1,I . GET SIZE OF D.V. @E@@@' RM )@@G@@ STORE A4,SDDVLG . SET LENGTH OF D.V. IN SD @F@@@' ADDRN )@@G@@ A14,A4 . ADD SIZE INTO AREC POSITION @E@'@9 SUBRO )@@G@@ A14,1,I . ADJUST TO ACTUAL D.V. SIZE@#@@@9 LJMP . RP )@@G@@@E@@@'BGSTRS1 LABEL . FIX UP SDBPTR FOR BASED STRINGS & ARRAYS @E@@@'RQ )@@G@@ LOAD A3,SDCLS0 . SEE IF BASED PTR ARRAY @ @@@' RR )@@G@@ AND,U A3,SD0PTR . @E@@@' IF A4,NE,SD0PTR,I THEN,BGSTRS3 . RS )@@G@@-> NOT PTR ARRA @A@@@' SET SD5PTR,ON,SDCLS5 . @#@@@'BGSTRSRT )@@G@@3 LABEL . @F@@@' IF SD3BSD,OFF,SDCLS3 THEN,BGSTRS . VAR DCLD RU )@@G@@'A BASED;' @D@@@' IF SD0BSD,OFF THEN,BGSTRS . -> IF CNTRLD RV )@@G@@@#@@@' LOCAL . @ @@@' LMCP R,SDBPTR,X5 .@ @@@' RW )@@G@@ STORE A8,SDBPTR . @^@@@' UNSTK X11 . @ @@@' GOTRX )@@G@@O BGSTRS . @^@@@9 . ------------------ @#@@@9 . STRUCTURES RY )@@G@@@^@@@9 . ------------------ @#@@@9BGSTRU LOCAL . @C@@@9 STORZ )@@G@@RE X5,DBGWC1 . SAVE SD POINTER @A@@@' IF SD0BSD,OFF THEN,BGSA )@@G@@STR3 .@C@@@' IF SD3BSD,OFF,SDCLS3 THEN,BGSTR3 . @#@@@' SB )@@G@@ LOCAL . @A@@@' LMCP R,SDBPTR,X5 . @ @@@' STOSC )@@G@@RE A8,SDBPTR . @^@@@' UNSTK X11 . @#@@@9BGSTR3 LABEL . SD )@@G@@@E@@@9 STORE A14,SDLCOF . SET OFFSET OF VARIABLE IN AR @E@@@9SE )@@G@@ STORE A14,SDA1BS-FH1 .SET AW FOR STRUCTURE VARIABLE @[@@@.. SF )@@G@@@B@@@.. COMPUTE DISPL FOR BASED SUBSTRUCTURES @[@@@.. @F@@@. SG )@@G@@ IF SD0BSD++SD0CNT,OFF,SDCLS0 THEN,BGSTR3A . -> NOT BSD @C@@@. SH )@@G@@ LOAD A2,DBGWC1 . GET ROOT SD @A@@@. LOAD A2,SDA1SI )@@G@@BS-FH1,A2 . @ @@@. SUB A2,A14 . @ @@@. STOREN ASJ )@@G@@2,SDPROF . @^@@@.BGSTR3A LABEL .@A@@@9 LSDP X5,SDSON . SK )@@G@@ FIND SON @#@@@9BGSTR1 LABEL . @E@@@9 LOAD A2,SDCLS0 . USL )@@G@@SE SD TYPE AS INDEX INTO TABLE@^@'@9 AND,U A2,7 . @^@@@' SM )@@G@@ AND,U A2,017 . @E@@@9 LOAD A2,BGTPTB+FH2,A3 . CLS0 GIVES INDESN )@@G@@X INTO TABLE@D@@@9 LINK 0,A2 . ALLOCATE ACCORDING TO TYPE SO )@@G@@@[@@@9 . @F@@@9BGSTR2 LABEL . RETURN TO HERE IF NOT SUBSP )@@G@@STRUCTURE @E@@@9 IF SDBROT,NZERO THEN,BGSTR4 . -> HAS BROTHSQ )@@G@@ER SD @[@@@'. @C@@@'. IF NOT AT LEAF THEN COMPUTE DV LENGTH SR )@@G@@@[@@@'. @E@@@' IF SD0STU,OFF,SDCLS0 THEN,BGSTR2A . -> AT A LSS )@@G@@EAF @F@@@' LOAD A3,A14 . GET CURRENT POSITION IN AST )@@G@@REC @D@@@' SUB A3,SDA1BS-FH1 . GET START OF D.V. @D@@@'SU )@@G@@ STORE A3,SDDVLG . SET LENGTH OF D.V. @G@@@'BGSTR2A LABSV )@@G@@EL . EITHER LEAF OR D.V. LEGNTH COMPUTED @ @@@9 SW )@@G@@ LSDP X5,SDDAD,X5 . @G@@@9 IF X5,NZERO THEN,BGSTR2 . -> HSX )@@G@@AS FATHER, LOOK FOR BROTHER @E@@@9 LOAD X5,DBGWC1 . RELOAD SY )@@G@@ORIGINAL SD POINTER @E@'@9 UNSTK X11 . PUT RETURN ADSZ )@@G@@DRESS BACK IN X11 @E@'@9BGLJMP LABEL . DO NOTHING BUT RETUTA )@@G@@RN LABEL @#@'@9 LJMP . @E@@@' GOTO BGNTR0 . TB )@@G@@ RETURN, UNSTACKING X11 @#@@@9BGSTR4 LABEL . @ @@@9 LSDTC )@@G@@P X5,SDBROT,X5 . @^@@@9 GOTO BGSTR1 . @[@@@9 . @ @@@9 . ANOTD )@@G@@THER MEMBER OF STRUCTURE@[@@@9 . @#@@@9BGSTAB LABEL . @G@@@9 TE )@@G@@ IF SDARRY,ON,SDCLS2 THEN,BGSTRI . -> GO ALLOCATE FOR ARRAY @ @@@9TF )@@G@@ STORE A14,SDLCOF . @ @@@9 STORE A14,SDA1BS-FH1 . @E@@@9TG )@@G@@ ADD A14,1,I . ONE WORD FOR SCALAR IN STRUCTURE @G@@@' TH )@@G@@ IF SD0BSD++SD0CNT,OFF THEN,LJMP . -> NORMAL VARIABLE AGAIN @C@@@'TI )@@G@@ LOAD A2,DBGWC1 . GET ROOT SD @ @@@' LOAD ATJ )@@G@@3,SDCLS0 . @ @@@' AND,U A3,SD0PTR . @D@@@' IF A4,NE,TK )@@G@@SD0PTR,I THEN,BGSTAB1 . -> NOT PTR @ @@@' USING SDSECT,A2 . TL )@@G@@@A@@@' SET SD5PTR,ON,SDCLS5 . @ @@@' USING SDSECT,TM )@@G@@X5 . @#@@@'BGSTAB1 LABEL . @G@@@' LOAD A2,SDA1BS-FH1,A2 . TN )@@G@@GET ADDRSS OF D.V. OF ROOT IN AREC @G@@@' SUB A2,A14 . TO )@@G@@ GET -(OFFSET FROM TOP OF ROOT D.V.) @^@@@' LMA A2,A2 TP )@@G@@@E@@@' SUB A2,1,I . CORRECT FOR HAVING ADDED TO A14 @G@@@'TQ )@@G@@ STORE A2,SDPROF . SET OFFSET FROM WHERE POINTER IS! TR )@@G@@@#@@@9 LJMP . @[@@@9 . @C@@@9BGNTRY LOCAL . STS )@@G@@AVE RETURN POINT @F@@@9 IF SDARST,OFF,SDCLS1 THEN,BGNTR0 . -> RTT )@@G@@ETURNS ARITH VALUE@G@@@9 LINK BGSTRI . PROCESS ENTRY NAME TU )@@G@@WHICH RETURNS A STRING @#@@@9BGNTR0 LABEL . @B@'@9 UNSTK X11TV )@@G@@ . RESET X 11 @B@@@' UNSTK X11 . RESET X11 TW )@@G@@@F@@@'BGLJMP LABEL . DO NOTHING BUT RETURN LABEL TX )@@G@@@B@@@9 LJMP . -> RETURN @[@@@9. @[@@@9. TY )@@G@@@[@@@9. @A@@@9. DO PARAMETER LIST SD'S @[@@@9. @#@@@9TZ )@@G@@DGENCH LOCAL . @D@@@9 STORE X5,DBGWC2 . SAVE ENTRY POINTUA )@@G@@ SD @C@@@9 LOADA X11,BGNTR3 . SET RETURN POINT @E@@@9 UB )@@G@@ LOAD X8,DCGTSK . COMPUTE AW BASE FOR PARAMETERS @ @@@9 SUBUC )@@G@@ X8,SDBSLD,X9 . @^@@@9 ADD X8,1,I . @^@@@9 LSDP X2,SDUD )@@G@@PLST .@E@@@9 IF X2,ZERO THEN,BGNTND . ->END OF PARMATER LIST UE )@@G@@@#@@@9BGNTR1 LABEL . @B@@@9 LSDP X5,ELWSD,X2 . PARAMETER'S SDUF )@@G@@@G@@@9 IF SDLCOF,NZERO THEN,BGNTR2 . ->PARM ALLOCATED BEFORE, SKUG )@@G@@IP IT @D@@@9 LOAD A15,SDPROF,X5 . FORM AW FOR PARAMETER @^@@@9UH )@@G@@ ADD A15,X8 . @^@@@9 SLB A15,18 . @^@@@9 LOAD UI )@@G@@ A2,SDCLS0 .@^@'@9 AND,U A2,7 . @^@@@' AND,U A2,017 . UJ )@@G@@@E@@@9 LOAD A2,BGNTTB+FH1,A3 . GET ENTRY POINT FROM TABLE @^@@@9UK )@@G@@ GOTO 0,A2 . @#@@@9BGNTR3 LABEL . @D@@@9 MOVE SDA2BUL )@@G@@S-FH1,SDA1BS-FH1 . FIXUP PARM SD @#@@@9BGNTR4 LABEL . @B@@@9 UM )@@G@@ STORE A15,SDA1BS-FH1 . SET PARM AW@#@@@9BGNTR2 LABEL . @D@@@9 UN )@@G@@ LSDP X2,ELWNXT,X2 . FOLLOW PARM LIST CHAIN @D@@@9 IF X2,NZERUO )@@G@@O THEN,BGNTR1 . -> THERES MOR PARMS@#@@@9BGNTND LABEL . @D@'@9 UP )@@G@@ UNSTK X11 . RESTORE RETURN ADDRESS @C@@@9 LOAD X5,UQ )@@G@@DBGWC2 . RESTORE SD POINTER @D@'@9 LJMP . DONE WITH ENTRY PARUR )@@G@@AMETER PROCESSING @E@@@' GOTO BGNTR0 . RETURN, UNSTAUS )@@G@@CKING X11 @[@@@9 . @I@@@9BGNTTB LABEL . H1 IS PARAMETER TYPE BRAUT )@@G@@NCHING TABLE, H2 FOR STRUCTURE PARAME @D@@@9FILL(1) SAC BGBOMB,BGBOUU )@@G@@MB . 0 BOMB ON UNKNOWN TYPE @E@@@9FILL(1) SAC BGARPR,BGSTAB . 1 ARITHUV )@@G@@METIC PARAMETER, MEMBER @G@@@9FILL(1) SAC BGNTR4,BGBOMB . 2 ENTRY PARM,UW )@@G@@ ENTRY UNEXPECTED IN STRUCTURE@E@@@9FILL(1) SAC BGESTR,BGEST3 . 3 STRUCUX )@@G@@TURE PARM, SUB-STRU. @F@'@9FILL(1) SAC BGEST6,BGEST5 . 4 STRING PARMUY )@@G@@, STRING STRUCTURE LEAF @F@@@'FILL(1) SAC BGSTRI,BGSTRI . 4 STRING PARMUZ )@@G@@, STRING STRUCTURE LEAF @C@@@9FILL(1) SAC BGARPR,BGSTAB . 5 LABEL ' VA )@@G@@ ' @F@@@9FILL(1) SAC BGNTR4,BGBOMB . 6 FILE PARM, FILE NAME UNEXPECTVB )@@G@@ED @D@'@9FILL(1) SAC BGBOMB,BGBOMB . 7 POINTER NOT EXPECTED @B@@@'VC )@@G@@FILL(1) SAC BGARPR,BGSTAB . 7 POINTER @D@@@'FILL(1) SAC BGBOMB,VD )@@G@@BGBOMB . 10 BLOCK NOT EXPECTED@E@@@'FILL(1) SAC BGSTRI,BGSTRI . 11 VE )@@G@@AREA,HANDLE LIKE STRINGS@[@@@9 . @#@@@9BGFILE LABEL . @D@@@9 VF )@@G@@ LOADXI X5,AGRX0 . FORM FILE SD ADDRESS AW @D@@@9 STORE X5,VG )@@G@@SDA1BS-FH1,X5 . PUT INTO SD @C@@@9 LJMP . -VH )@@G@@> RETURN TO CALLER@[@@@9 . @C@'@9BGESTR LOCAL . SAVE REVI )@@G@@TURN ADDRESS@#@@@'BGESTR LABEL . @C@@@9 STORE X5,DBGWC1 . SVJ )@@G@@AVE SD POINTER @F@'@9 LOAD A12,0,I . CLEAR NUMBER OF STRVK )@@G@@ING LEAVES COUNTER@E@'@9 LOAD A13,A14 . SAVE OFFSET TO FIRST WVL )@@G@@ORD OF DV @E@@@' LOAD A13,A14 . SAVE OFFSET TO FIRST WORD OFVM )@@G@@ DV @[@@@'. @B@@@'. PROBABLY SOME ERRORS HERE!!! @[@@@'VN )@@G@@. @ @'@9 LOAD X11,BGEST2 . @#@@@9BGEST3 LABEL . @ @@@9VO )@@G@@ STORE A14,SDLCOF . @ @@@9 STORE A15,SDA1BS-FH1 . @ @@@9VP )@@G@@ STORE A14,SDA2BS-FH1 . @B@@@9 LSDP X5,SDSON,X5 . FIND SOVQ )@@G@@N @#@@@9BGEST1 LABEL . @^@@@9 ADD A15,A14 . @F@@@9 VR )@@G@@ SUB A15,13 . AW FOR STRUCTURE MEMBER PARAMETER @C@@@9 VS )@@G@@ LOAD A13,A14 . SAVE LAST OFFSET @^@@@9 LOAD A2,SDCLS0 .VT )@@G@@@^@'@9 AND,U A2,7 . @^@@@' AND,U A2,017 . @D@@@9 VU )@@G@@ LOAD A2,BGNTTB+FH2,A3 . GO THROUGH TABLE @D@@@9 LINK 0,A2 VV )@@G@@. RETURN ADDR WILL BE BGEST2 @#@@@9BGEST2 LABEL . @F@@@9 VW )@@G@@ MOVE SDA2BS-FH1,SDA1BS-FH1 . FIX UP SD FOR PARAMETER @ @@@9 VX )@@G@@ STORE A15,SDA1BS-FH1 . @#@@@9BGEST4 LABEL . @D@@@9 LOAD A2,SDVY )@@G@@DAD,X5 . SAVE PTR FOR FATHER @ @@@9 LSDP X5,SDBROT,X5 . VZ )@@G@@@E@@@9 IF X5,NZERO THEN,BGEST1 . ->ALLOCATE FOR BROTHER @B@@@9WA )@@G@@ LSDP X5,W1XU,A2 . FIND FATHER @G@@@9 IF X5,NZERO THEWB )@@G@@N,BGEST4 . ->ALLOCATE FOR BROTHER OF FATHER @D@'@9 UNSTK X11WC )@@G@@ . RESTORE RETURN ADDRESS @E@@@9 LOAD X5,DBGWC1 . RWD )@@G@@ESTORE ORIGINAL SD POINTER @H@'@9 STORE A12,SDNSPS,X5 . SET NWE )@@G@@UMBER OF STRING LEAVES OF STRUCTURE PARAM @B@@@9 GOTO BGNTR2 . ->WF )@@G@@TO ENTRY LOOP @D@'@9BGEST5 LABEL . STRING STRUCTURE LEWG )@@G@@AF @F@'@9 ADD A12,1,I . INCREMENT COUNT OF STRING LEAVEWH )@@G@@S @E@'@9 GOTO BGSTRI . -> MERGE WITH STRING PROCESSINGWI )@@G@@@#@'@9BGEST6 LABEL . @F@'@9 MOVE SDNSPS,1,I . STRING PARAMETWJ )@@G@@ERS COUNT 1 STRING LEAF @E@'@9 GOTO BGSTRI . -> MERGE WITHWK )@@G@@ STRING PROCESSING@[@'@9 . @]@@@' . ------- @A@@@' . SET UP FOR BLOCWL )@@G@@K STARTS HERE @]@@@' . ------- @ @@@9 USING SDSECT,X9 . WM )@@G@@@#@@@9BGALEN LABEL . @D@@@9 STORE A14,DTGTBT . OFFSET OF LOWESTWN )@@G@@ TEMP CELL @C@@@9 STORE A14,DTGMAX . NOW, ALSO HIGHEST @F@@@9WO )@@G@@ LOAD X11,DCGTLV . SET LEVEL OF TEMP ALLOCATOR STACK @ @@@9WP )@@G@@ USING TGDSCT,X11 . @E@@@9 STORE A14,TGFSET,X11 . SET SWQ )@@G@@IZE ZERO TEMP INTO STACK@ @@@9 MOVE TGSIZE,0,I . @]@@@9 . ---WR )@@G@@---- @C@@@9 . GENERATE INITIALIZATION CODE FOR SCALARS @]@@@9 . ---WS )@@G@@---- @D@@@9 LOAD R11,DCGSNO . SAVE STATEMENT NUMBER @ @@@9WT )@@G@@ STORE R11,DCGSNS . @ @@@9 USING SDSECT,X9 . @F@@@9WU )@@G@@ GMARK SDSCIN . INITIALIZATION ROUTINE STARTS HERE @E@@@'WV )@@G@@ MOVE SDPTRB,DBGPTC . SAVE PTR LISTHD IN BLK SD @^@@@9 WW )@@G@@ LOAD X5,DBGSCL @D@@@9 MOVE DCGLST,0177777,I . INDICATE NEW STMWX )@@G@@T @D@'@9. THE FOLLOWING LINE WAS DEEMED UNNECESSARY @D@'@9WY )@@G@@. MOVE DCGSNS,DCGSNO . SAVE STATEMENT NUMBER @C@@@9 LINWZ )@@G@@K BGALN1 . JUMP INTO LOOP @D@@@9 LOADA X11,$ . RXA )@@G@@ELOAD RETURN ADDRESS @F@@@9 MOVE DCGLST,DCGSNO . STATEMENT NUMXB )@@G@@BER OF LAST STATEMENT @B@@@9 LOAD X5,SDENBK,X5 . FOLLOW CHAIN XC )@@G@@@#@@@9BGALN1 LABEL . @G@'@9 IF X5,NZERO THEN,CGNTSC . -> GXD )@@G@@EN INITIALIZE SCALER CODE @G@@@' IF X5,NZERO THEN,CGNTSC XE )@@G@@. -> GEN INITIALIZE SCALAR CODE @#@@@9BGNOST LABEL . @E@@@9 XF )@@G@@ GEN . GENERATE RETURN TO EXNTRY AFTER@E@@@9 GSUXG )@@G@@B EXSCIE . DOING SCALER INITIALIZATION @]@@@9 . -------- @A@@@9XH )@@G@@ . INIT DOPE VECTORS, STRING LENGTHS@]@@@9 . -------- @ @@@9 LSDP XI )@@G@@ X5,SDDVC,X9 . @E@@@9 IF X5,ZERO THEN,BGNDVN . ->AREN'T ANY IXJ )@@G@@N THIS BLOCK@D@@@9 MOVE DCGLST,0177777,I . FORCE NEW STMT LOC.XK )@@G@@@#@@@'VGDVLP LABEL . @#@'@9VGDVLP LABEL . @^@@@' USING SDSECXL )@@G@@T,X5 .@C@@@' LOAD X4,SDDVA,X5 . ADDR(DV TEMPLATE) @I@@@' XM )@@G@@ IF SD0BSD+SD0CNT,OFF,SDCLS0 THEN,VGDV17 . SKIP IF NOT BASED OR XN )@@G@@CONTRO@H@@@' LINK BGDUNSPY . SET ADDRESS WORDS FOR BASXO )@@G@@ED-CONTROLLED @G@@@' XGPUSH 'SIZE',1 . GET WORD FOR XP )@@G@@JUMP AROUND INIT CODE @#@@@' GEN . @G@@@' GJUMP SXQ )@@G@@GDAID . GENERATE JUMP ARROUND INIT+D.V. CODE @F@@@' GMAXR )@@G@@RK SDALFD . SAVE ADDR TO BEGIN OF D.V. CODE@#@@@' GENXS )@@G@@ . @^@@@' GLIT 1 . @#@@@' LOCAL . @D@@@' XT )@@G@@ LOAD A3,SDDVLG,X5 . GET SIZE OF DV @B@@@' STORE AXU )@@G@@3,AGX0OF . SAVE SIZE @#@@@' GEN . @E@@@' GINST OXV )@@G@@PLR,AGRX1,AGXR0,U . GET SIZE TO TRANSFER @ @@@' LOAD X4,SDDVXW )@@G@@A,X5 .@C@@@' LOAD A6,W1U+1,X4 . GET ADDRESS @E@@@' XX )@@G@@ STORE A6,AGX0OF . PUT WHERE CAN GET IT @F@@@' LOAXY )@@G@@DXI A3,SDBKAW,X9 . SET TO GO THRU STATIC LINKS @E@@@' LOAXZ )@@G@@DXM A3,SDLCOF,X5 . GET LOCAL OFFSET OF DV @D@@@' STORE AYA )@@G@@3,AGXTMP . SET FOR CODE GEN @#@@@' GENM . @E@@@' YB )@@G@@ GINST OPLA,AGRA3,AGXTMP,U 'NO' . GET INTO X REG. @E@@@' GINYC )@@G@@ST OPLA,AGRA2,AGXR0,U 'NO' . GET INTO X REG. @^@@@' GLIT 3YD )@@G@@ . @^@@@' LXI,U A3,1 . @^@@@' LXI,U A2,1 . @D@@@'YE )@@G@@ BT A3,0,*A2 . MOVE DV TEMPLATE @#@@@' GFIYF )@@G@@N . @#@@@'VGDV17 LABEL . @C@'@9 LOAD X4,SDDVA,X5 . ADDR(DV TYG )@@G@@EMPLATE) @C@@@9 GMARK DBGWC1 . SAVE START OF DV INIT CODE@F@@@9YH )@@G@@ MOVE DBGWC1+1,KKSNSM . SET FOR ADDRESS INTERUPT @^@'@9YI )@@G@@ USING SDSECT,X5 .@F@@@9 LOAD R11,SDDCNM,X5 . STAYJ )@@G@@TEMENT NUMBER OF DECLARE@E@@@9 STORE R11,DCGSNO . SET CURRENT SYK )@@G@@TATEMENT NUMBER @H@@@' IF SD0ARE,ISON,SDCLS0 THEN,VGDV17YL )@@G@@A . AREAS LOOK LIKE STRINGS @E@@@9 IF SDARST,OFF,SDCLS1 THEN,VYM )@@G@@GDV01 . ->NON-STRING @[@@@9 . ---@A@@@9 . EVALUATE STRING LENGTH EXPRYN )@@G@@S @[@@@9 . ---@#@@@'VGDV17A LABEL . @D@'@9 LOADXI X1,1,I .YO )@@G@@ MAKE SURE INCR PART IS 1 @D@@@9 USING SDDV,X4 . DOPE VEYP )@@G@@CTOR TEMPLATE @F@@@9 LMCP SDDVSM,X4 . POINT TO META-CODE YQ )@@G@@FOR STRING LENGTH @E@@@9 LINK VGCVBD . RETURNS LENGTH IN X2, CONYR )@@G@@D CODE IN A3@F@@@9 IF A3,EQ,VGNCON,I THEN,VGDV02 . ->LENGTH NON-YS )@@G@@CONSTANT @E@@@9 IF A2,GE,1,I THEN,VGDV33 . LENGTH OK IF > YT )@@G@@0 @H@@@9 EXERR ERCGSL LEVEL,2 . 'LENGTH OF XX IS OUTOFRANGE.YU )@@G@@ 80 IS USED' @E@@@9 . 'LENGTH OF ', SDX5, ' IS NOT IN PROPER RANGE(YV )@@G@@', NUMA2, @^@@@9 . '). 80 IS USED.' @^@@@9 LOAD A2,80,I . YW )@@G@@@#@@@9VGDV33 LABEL . @F@@@9 STORE A2,SDDVSL,X4 . SET STRING LEYX )@@G@@NGTH IN DV TEMPLATE @^@@@9 GOTO VGDV30 . @#@@@9VGDV02 LABELYY )@@G@@ . @C@@@9 LOAD A11,SDLCOF,X5 . START OF DV IN AR @E@@@9 YZ )@@G@@ ADD A11,1,I . OFFSET TO STRING LENGTH FIELDS @D@@@' LINZA )@@G@@K VGVGEH . FIX UP ADDRESSING @F@'@9 STORE A11,AGR10ZB )@@G@@D . FORM ADDRESS WORD FOR STRING LENGTH @G@@@' STORE A11,AGXTMZC )@@G@@P+FH2 . FORM ADDRESS WORD FOR STRING LENGTH @^@@@9 USING SDSECZD )@@G@@T,X5 @E@@@9 SET SDLNXP,ON,SDCLS2 . MARK LENGTH TO BE EVALUATED ZE )@@G@@@#@@@9 GENM . @E@@@9 GIFR VGDV03,AGPTX2 . -> LENGTH ALZF )@@G@@READY IN REGISTER @B@@@9 GLOAD AGPTX2 . ASSURE IN REGISTER @#@@@9ZG )@@G@@VGDV03 GLBL . @C@'@9 GINST OPSA,AGPTX2,AGXR10 . MOVE INTO DV ZH )@@G@@@C@@@' GINST OPSA,AGPTX2,AGXTMP . MOVE INTO DV @#@@@9 GFIN ZI )@@G@@. @#@@@9VGDV30 LABEL . @ @@@9 LOAD F,SDCLS1,X5 . @F@@@9ZJ )@@G@@ IF SDFXVR,OFF THEN,VGDVS2 . -> FIXED LENGTH STRING @H@@@9ZK )@@G@@ MOVE DBGWC1+1+FS1,ARDVUN++ARDVVR,I . MARK VARYING UNALLOCATED ZL )@@G@@STRING@D@@@9 LOAD A2,0,I . SET ZERO CURRENT LENGTH @E@@@9ZM )@@G@@VGDVS2 LABEL . DETERMINE TYPE OF STRING DATA @F@@@9 ZN )@@G@@ STORE A2,SDDVSM,X4 . SET CURRENT LENGTH FIELD @E@@@9 ZO )@@G@@ IF SDARRY,OFF,SDCLS2 THEN,VGDV36 . ->SCALAR STRING @#@@@9VGDV01 LABELZP )@@G@@ . @G@'@9 IF SDARRY,OFF,SDCLS2 THEN,VGDV05 . ->SCALAR MEM OF ZQ )@@G@@STRUCTURE @H@@@' IF SDARRY,ON,SDCLS2 THEN,VGDV01A . ->NOT SCALZR )@@G@@AR MEM OF STRUCTURE @G@@@' IF SD0BSD+SD0CNT,OFF,SDCLS0 ZS )@@G@@THEN,VGDV05 . NOT BASED/CNTRLD@#@@@' GEN . @^@@@' GLIZT )@@G@@T 1 . @#@@@' JMP . @E@@@' GOTO VGDV05 . ZU )@@G@@ SCALAR MEM OF STRUCTURE @#@@@'VGDV01A LABEL . @[@@@9 . ---@H@@@9ZV )@@G@@ . EVAL BOUNDS EXPR FOR ARRAY (FIND LARGEST DIMENSIONED STRUCTURE CONTAIZW )@@G@@NING @ @@@9 . THIS BASE ELEMENT AS A SON)@[@@@9 . ---@^@@@9 LOAZX )@@G@@D X3,0,I . @#@@@9VGDV07 LABEL . @B@@@9 LOAD X4,X5 . X4=SD PTZY )@@G@@R TO SON @ @@@9 LSDP X5,SDDAD,X5 . @F@@@9 IF X5,ZEROZZ )@@G@@ THEN,VGDV06 . ->NO FATHER, MAJOR STRUCURE @G@@@9 IF SDNDIM,AA )@@G@@ZERO THEN,VGDV06 . -> SUPER STRUC., NOT DIMENSIONED @ @@@9 LOAD AB )@@G@@ A3,SDLCOF,X4 . @^@@@9 USING SDSECT,X5 .@F@@@9 IF A3,EQ,SAC )@@G@@DLCOF THEN,VGDV07 . ->X4 IS FIRST SON OF X5 @H@@@9 . NOW, X4 IS SD PAD )@@G@@TR TO LARGEST STRUCTURE CONTAINING THE ORIG. BASE ELEMENT @E@@@9 . AS AE )@@G@@THE FIRST NON-STRUCTURE SON (THIS MAY BE ORIGINAL SD) @#@@@9VGDV08 LABELAF )@@G@@ . @G@@@9 LOAD X3,SDNDIM,X5 . # OF DIMENSIONS INHERITED FROM DAG )@@G@@AD (NID) @#@@@9VGDV06 LABEL . @F@@@9 ADD X3,W1U,X3 . NAH )@@G@@UMBER OF INHERITED DIMENSIONS (NID) @#@@@9VGDV77 LABEL . @H@@@9 AI )@@G@@ LOAD A7,SDNDIM,X4 . NUMBER DIMENSIONS IN CURRENT SD (NCD) AJ )@@G@@@ @@@9 ADD A7,SDNDIM,X4 . @]@@@9 . ------ @C@@@9 . FIND METAAK )@@G@@-CODE FOR SUBSCRIPT BNDS ON NCD @]@@@9 . ------ @^@@@9 USINGAL )@@G@@ SDSECT,X4 .@E@'@9 IF SDSTRU,OFF,SDCLS4 THEN,VGDV09 . ->BASE ELEAM )@@G@@MENT @G@@@9 LOAD A8,SDSTRB,X4 . FOR A STRU. THIS POINTS TO M-CODAN )@@G@@E FOR BOUNDS@F@@@' IF SDSTRU,ON,SDCLS4 THEN,VGDV10 . ->NOT BASE AO )@@G@@ELEMENT @^@'@9 GOTO VGDV10 . @[@'@9 . @#@'@9VGDV09 LABELAP )@@G@@ . @ @@@9 LOAD X2,SDDVA,X4 . @E@@@9 LOAD A8,SDDVBM,XAQ )@@G@@2 . FOR NON-STRU. M-CODE IS HERE @#@@@9VGDV10 LABEL . @E@@@9 AR )@@G@@ LMCP R,A8 . POINT TO FIRST BOUND EXPRESSION@C@@@9 LOAD AS )@@G@@ X5,X4 . SAVE CURRENT SD POINTER @ @@@9 USING SDSECT,X5 . AT )@@G@@@B@@@9. A8 [0(R11)] = CURRENT META-CODE SYMBOL@D@@@9. X3 [R3] = AU )@@G@@NUMBER OF INHERINTED DIMENSIONS @C@@@9. X4 = SD POINTER OFAV )@@G@@ ROOT OF SUBTREE @A@@@9. X5 [R5] = CURRENT SD POINTER@B@@@9. A7 AW )@@G@@ [R0] = DIMENSIONS IN CURRENT SD@F@@@9. AT ENTRY EITAX )@@G@@HER ACDIML OR ACDIMU IS THE CURRENT@D@@@9. META-CODE JUAY )@@G@@ST GETC'ED INTO A8 @G@@@9. A10 = VALUE OF EXTENT - 1, LOWEAZ )@@G@@R BOUND PAIR FOR DV TEMPLATE @E@@@9. X2 [R2] = POINTER TO AW FOR BA )@@G@@VARIABLE SUBSCRIPT BOUND@D@@@9. A2 [R2] = VALUE FOR CONSTANT SUBSBB )@@G@@CRIPT BOUND @E@@@9. A9 = SCRATCH FOR CONSTANT EXTENT-1 CALCUBC )@@G@@LATION@D@@@9. A10 = VALUE FOR CONSTANT LOWER BOUND @E@@@9BD )@@G@@. A9 = IN SOME CASES POINTS TO LOWER BOUND AW @E@@@9VGDV11BE )@@G@@ LABEL . DETERMINE LOWER BOUND @B@@@9 GETBF )@@G@@C . READ ACLB OR ACUB @H@@@9 IF A7,EQ,X3 THEN,VGDV1BG )@@G@@2 . -> REPEAT UNTIL N1D=NCD,THEN TO SON @G@@@9 ADD X3,2,I . BH )@@G@@ ADVANCE TO NEXT MULTIPLIER-BOUNDS PAIR @G@@@9 DLN ABI )@@G@@9,KKD0-(IN 63,0,1,0) . SET DOUBLEWORD ZERO AS DEFAULT @D@@@9. BJ )@@G@@ FOR UNKNOWN BOUNDS @C@@@9 IF A8,EQ,ABK )@@G@@CDMLB,I THEN,VGDVL1 . @F@@@9 LOAD A10,1,I . SET DEFBL )@@G@@AULT LOWER BOUND OF ONE @B@@@9 GOTO VGDVLO . ->MERGEBM )@@G@@@B@@@9VGDVL1 LABEL . LOWER BOUND WAS GIVEN . @F@@@9 LINK VBN )@@G@@GCVBD . EVALUATE LOWER BOUND EXPRESSION@G@@@9 IF ABO )@@G@@3,NE,VGCON,I THEN,VGDVLV . ->VARIABLE LOWER BOUND @C@@@9 GETBP )@@G@@C . SKIP ACCOLN @C@@@9 GETC . BQ )@@G@@ SKIP ACDMUB @D@@@9 LOAD A10,A2 . SAVE CONSTANT LOWERBR )@@G@@ BOUND@C@@@9VGDVLO LABEL . CONSTANT LOWER BOUND KNOWN @F@@@9 BS )@@G@@ LINK VGCVBD . EVALUATE UPPER BOUND EXPRESSION@G@@@9 BT )@@G@@ IF A3,NE,VGCON,I THEN,VGDVUV . ->VARIABLE UPPER BOUND @C@@@9BU )@@G@@ GETC . IGNORE "," SKIP ACCOMA @D@@@9 LOAD ABV )@@G@@9,A2 . SAVE UPPER BOUND @D@@@9 SUB A9,A10 . BW )@@G@@ DETERMINE EXTENT-1 @F@@@9 LOAD A3,W1U,X3 . OFFSET BX )@@G@@TO CURRENT MULTIPLER . @E@@@9 SRB A3,1 . COMPUTEBY )@@G@@ SUBSCRIPT NUMBER @E@@@9 JP A9,VGDVEK . ->EXTENT IS OBZ )@@G@@K SO FAR @E@@@9 EXERR ERCXBD LEVEL,2 . LOWER BOUND>UPPER BCA )@@G@@OUND @H@@@9 . 'LOWER BOUND OF ', SDX5, ' IS GREATER THAN LOWER BOUND FOCB )@@G@@R SUBSCRIPT', @ @@@9 . NUMA3, ' (1:10) IS USED.' @D@@@9 GOTCC )@@G@@O VGDVER . ->REPAIR BOUNDS @B@@@9VGDVEK LABEL . CONSTANCD )@@G@@T EXTENT OK,SO FAR@ @@@9 USING WORD,0 . @[@@@9. @[@@@9CE )@@G@@. @G@@@9. THE PROCS WON'T ALLOW MORE THAN 16 BITS IN CF )@@G@@U FIELD... @E@@@9. THEREFORE THE FOLLOWING ASM CHEATS DOCG )@@G@@ THIS @[@@@9. @G@@@9. IF A9,LT,W1U+0400000 THEN,VGDVES .CH )@@G@@ EXTENT SMALL ENOUGH @ @@@9 TLE,U A9,0400000 . @^@@@9 CI )@@G@@ GOTO VGDVES @D@@@9 EXERR ERCXMP LEVEL,2 . EXTENT TOO LACJ )@@G@@RGE @G@@@9. 'EXTENT OF SUBSCRIPT', NUMA3, 'OF ',SDX5,' IS TOCK )@@G@@O LARGE.' @ @@@9. ' (0:10) IS USED.' @B@@@9VGDVER LABEL . RCL )@@G@@EPAIR FAULTY BOUNDS @E@@@9 LOAD A9,10,I . REPAIR CM )@@G@@VALUE FOR EXTENT-1@E@@@9 GOTO VGDVES . ->SET CONSTANCN )@@G@@T EXTENT @D@@@9VGDVUV LABEL . CONSTANT LOWER BOUND, VARIABLE UPPER CO )@@G@@@ @@@9 GETC . IGNORE "," @F@@@9 IF A10,NE,1,I THCP )@@G@@EN,VGDVNO . ->LOWER BOUND NOT ONE @D@@@9 MOVE AGTMP1,0,I . CQ )@@G@@PREPARE A CLEAN LABEL AW@#@@@9 GENM . @E@@@9 GIFR VCR )@@G@@GDVJG,AGPTX2 . UPPER BOUND IN REGISTER? @F@@@9 GLOAD AGPTX2,CS )@@G@@1 . PUT UPPER BOUND IN REGISTER . @G@@@9VGDVJG GLBL . CT )@@G@@ MERGE WHEN UPPER BOUND IN REGISTER @E@@@9 GJGD ACU )@@G@@GPTX2,AGTMP1 . COMPUTE THE EXTENT -1 @F@@@9 GSUB EXJGDE CV )@@G@@. ->REPAIR THE EXTENT IF NEEDED @D@@@9 GLABEL AGTMP1 CW )@@G@@. FIX LABEL FOR JGD .@H@@@9 GFIN . PCX )@@G@@ROPER EXTENT-1 NOW IN REGISTER AGPTX2 @E@@@9 GOTO VGDVUH CY )@@G@@. ->EXTENT-1 IN REGISTER @C@@@9VGDVNO LABEL . CONSTANT LOWECZ )@@G@@R BOUND NOT ONE @#@@@9 GENM . @E@@@9 GIFR VGDVOL,DA )@@G@@AGPTX2 . ->UPPER BOUND IN REGISTER@H@@@9 GLOAD AGPTX2,1 . DB )@@G@@ OTHER WISE PUT UPPER BOUND INTO REGISTER @#@@@9VGDVOL GLBL . DC )@@G@@@#@@@9 GFIN . @F@@@9 IF A10,EQ,0,I THEN,VGDVUH . DD )@@G@@UPPER BOUND = EXTENT-1 @E@@@9 STORE A10,AGX0OF . SET CONDE )@@G@@STANT LOWER BOUND @D@@@9 GEN . COMPUTE EXTENDF )@@G@@T-1 @E@@@9 GINST OPAA,AGPTX2,AGXR0,XU 'NO' . (UPPER-LOWER) DG )@@G@@@E@@@9VGDVUH LABEL . CONSTANT LOWER BOUND,VARIABLE UPPER BOUND @B@@@9DH )@@G@@. X2->AW @F@@@9 MOVE DGFLGZ,DI )@@G@@1,I . SET FLAG TO STORE EXTENT-1 ONLY@#@@@9VGDVES LABEL . @E@@@9DJ )@@G@@ SLB A10,18 . LEFT JUSTIFY LOWER BOUND @H@@@9 DK )@@G@@ SRBD A9,18 . PACK EXTENT-1 AND LOWER BOUND INTO A10 DL )@@G@@@ @@@9 GOTO VGDV14 . @B@@@9VGDVLV LABEL . VARIABLE LOWEDM )@@G@@R BOUND @C@@@9 GETC . SKIP ACCOLN @C@@@9DN )@@G@@ GETC . SKIP ACDMUB @E@@@9 SUB XDO )@@G@@7,DCGSLT,I . PUSH A FAKE STACK ITEM . @B@@@9. LOWER BOUND IS DP )@@G@@THEN AGRL1 AGAIN .@E@@@9 LINK VGCVBD . EVALUATE UPPEDQ )@@G@@R BOUND @F@@@9 LOAD X8,AGXR0 . THIS PUTS POINTER TO AGRXDR )@@G@@0 IN H1 @A@@@9 LOADXM X8,0400000,I . @D@@@9 STODS )@@G@@RE X8,AGTMP1 . SET DEBUG TEST AW @G@'@9 MOVE DGFLGZ,DT )@@G@@DGOPT3 . PUT DEBUG OPTION WHERE ACCESSABLE @G@@@' MOVE DDU )@@G@@GFLGZ,DCGONF . PUT CONDITION FLAGS WHERE ACCESSABLE @C@@@9 MOVDV )@@G@@E AGLBL,0,I . INITIALIZE LABEL AW@G@@@9 IF A3,EQ,VGNCON,DW )@@G@@I THEN,VGDVVU . ->VARIABLE UPPER BOUND @D@@@9 STORE A2,AGX0DX )@@G@@OF . SET AW FOR CONSTANT@F@@@9 GENM . XDY )@@G@@2->AW OF AGRL1 BEFORE POP @G@@@9 GGETGR AGPTX2,1 . GDZ )@@G@@ET AN 'A' REGISTER FOR UPPER BOUND @G@@@9 GINST OPLA,AGPTX2,AEA )@@G@@GXR0,XU 'NO' . LOAD CONSTANT UPPER BOUND @F@@@9 GMODE 'S' . EB )@@G@@ SET FLAG TO PACK FOR IGEN CODE @B@@@9 GGOTO VGDVUR EC )@@G@@. ->MERGE@C@@@9VGDVVU LABEL . VARIABLE UPPER AND LOWER BOUNDSED )@@G@@@F@@@9 GENM . X2->AW FOR VARIABLE UPPER BOUNDEE )@@G@@@E@@@9 GIFR VGDVUR,AGPTX2 . ->UPPER BOUND IN REGISTER@F@@@9EF )@@G@@ GLOAD AGPTX2,1 . PUT UPPER BOUND INTO REGISTER @C@@@9EG )@@G@@VGDVUR GLBL . NOW UPPER BOUND IS IN REGISTER @F@@@9 GINST OEH )@@G@@PANA,AGPTX2,AGRL1 'NO' . COMPUTE THE EXTENT-1 @E@'@9 GBOFF VEI )@@G@@GDVND,0400 . ->NO DEBUGGING REQUESTED @E@@@' GBOFF VGDVND,EJ )@@G@@02 . ->NO SUBSCRIPTRANGE SET @G@@@9 GINST OPTLE,AGPTX2,EK )@@G@@AGTMP1,U 'NO' . ->VALUE FITS IN HALF WORD @F@@@9 GCJMP OPJP,AGEL )@@G@@PTX2,AGLBL 'NO' .->EXTENT NOT NEGATIVE @F@@@9 GSUB EXJGDE EM )@@G@@. ->REPAIR EXTENT WHERE NEEDED @E@@@9 GLABEL AGLBL .EN )@@G@@ SET TARGET UP FOR JP @D@@@9VGDVND GLBL . MERGE HERE AFEO )@@G@@TER CHECKING EXTENT-1 @F@@@9 GBR VGDVST,SDSTRU,OFF,AGPTX5,EP )@@G@@Q1 . ->NOT A STRUCTURE @G@@@9 GSHIN OPLSSL,AGPTX2,18,I . PUT EQ )@@G@@EXTENT-1 INTO H1 OF REGISTER @G@@@9 GINST 072,AGPTX2,AGRL1,04ER )@@G@@ . GENERATE AH LOWER BOUND TO H2 @F@@@9 GFIN 'POP' . ES )@@G@@ GET RID OF FAKE STACK ELEMENT @F@@@9 MOVE DGFLGZ,2,I . ET )@@G@@ BOUNDS PAIR IN ONE REGISTER @ @@@9 GOTO VGDV14 . EU )@@G@@@D@@@9 GMODE 'M' . SET FOR PACKED IGEN CODE @H@@@9VGDVSTEV )@@G@@ GLBL . WHEN NOT STRUCTURE TWO REGISTERS CONTAIN EW )@@G@@@E@@@9. EXTENT-1,AND LOWER BOUND @E@@@9EX )@@G@@ GIFR VGDV95,AGRL1 . ->LOWER BOUND IN REG @F@@@9 EY )@@G@@ GLOAD AGRL1,1 . PUT LOWER BOUND IN 'A' REG @A@@@9VGDV95EZ )@@G@@ GLBL . BOTH PARTS IN REGS @#@@@9 GFIN . @F@@@9 MOVFA )@@G@@E DGFLGZ,4,I . BOUNDS PAIR IN TWO REGISTERS @E@@@9 LOAFB )@@G@@DA A9,AGRL1,X7 . A9-> LOWER BOUND REGISTER@F@@@9 XGPOP 'FC )@@G@@SIZE',DCGSLT . GET RID OF FAKE STACK ELEMENT @G@@@9. ----------------FD )@@G@@----------------------------------------------------- @C@@@9. GENERATE CFE )@@G@@ODE TO PUT BOUND INTO DOPE VECTOR . @G@@@9. ----------------------------FF )@@G@@----------------------------------------- @#@@@9VGDV14 LABEL . @H@@@9FG )@@G@@ LOAD A8,X4 . POINTER TO ORIGINAL SD FOR COMPARIFH )@@G@@SION @E@@@9VGDV15 LABEL . MERGE WHEN SETTING BOUNDS OF SON FI )@@G@@@F@@@9 IF SDSTRU,ON,SDCLS4 THEN,VGDV97 . -> FIND SON OF SON FJ )@@G@@@D@@@9 LOAD X8,SDDVA,X5 . DV TEMPLATE ADDRESS@H@@@9 FK )@@G@@ ADD X8,W1U+1,X3 . OFFSET IN DV TEMPLATE TO BOUNDS PAIR-1 FL )@@G@@@E@@@9 STORE A10,W1+1,X8 . SET TEMPLATE BOUNDS PAIR@G@@@9FM )@@G@@ JP A10,VGDV96 . ->CONSTANT BOUNDS TO CODE GENERATED FN )@@G@@@F@@@9 LOAD A2,SDLCOF,X5 . OFFSET IN AR TO START OF DV FO )@@G@@@F@@@9 ADD A2,W1U+1,X3 . OFFSET IN AR DV TO BOUNDS PAIR FP )@@G@@@D@@@' LINK VGVGEH . FIX UP ADDRESSING @E@'@9 FQ )@@G@@ STORE A2,AGR10D . PREPARE AW FOR BOUNDS @E@@@' STOFR )@@G@@RE A2,AGXTMP+FH2 . PREPARE AW FOR BOUNDS@H@@@9 GENM . FS )@@G@@ GENERATE APPROPRIATE STORE INSTRUTIONS @E@@@9 FT )@@G@@ GBOFF VGDV81,04 . ->BOUNDS IN ONE REGISTER @G@'@9 GINFU )@@G@@ST OPSA,AGPTX2,AGXR10,H1 . SET EXTENT-1 AND FREE REGISTER@G@@@' FV )@@G@@ GINST OPSA,AGPTX2,AGXTMP,H1 . SET EXTENT-1 AND FREE REGISTER@H@'@9FW )@@G@@ GINST OPSA,AGPTA9,AGXR10,H2 . SET LOWER BOUND AND FREE REGISFX )@@G@@TER @H@@@' GINST OPSA,AGPTA9,AGXTMP,H2 . SET LOWER BOUND ANFY )@@G@@D FREE REGISTER @G@@@9 GFIN . BOUNDS IN ONEFZ )@@G@@ DV ONLY (SDSTRU IS OFF)@G@@@9 GETC . ABSORBGA )@@G@@ ACCOMA BEFORE NEXT DIM PAIR @G@@@9 GOTO VGDV11 . GB )@@G@@->NODE WAS LEAF, MORE DIMENSIONS? @E@@@9 GMODE 'M' . GC )@@G@@ SET FOR PACKED IGEN CODE@B@@@9VGDV81 GLBL . BOUNDS IN ONE REGISGD )@@G@@TER @E@@@9 GBOFF VGDV82,02 . ->CONSTANT LOWER BOUND GE )@@G@@@D@'@9 GINST OPSA,AGPTX2,AGXR10 'NO' . BOUND PAIR @D@@@' GF )@@G@@ GINST OPSA,AGPTX2,AGXTMP 'NO' . BOUND PAIR @ @@@9 GGOTO VGG )@@G@@GDV84 . @B@@@9VGDV82 GLBL . CONSTANT LOWER BOUND @E@'@9 GH )@@G@@ GINST OPSA,AGPTX2,AGXR10,H1 'NO' . SET EXTENT-1 @E@@@' GINGI )@@G@@ST OPSA,AGPTX2,AGXTMP,H1 'NO' . SET EXTENT-1 @F@@@9VGDV84 GLBL . GJ )@@G@@ MERGE AFTER STORING BOUNDS @#@@@9 GFIN . GK )@@G@@@H@@@9VGDV96 LABEL . MERGE FROM SETTING CONSTANT BOUGL )@@G@@NDS PAIR @ @@@9 USING SDSECT,X5 . @F@@@9 IF AGM )@@G@@8,EQ,X5 THEN,VGDV55 . BACK TO ORIGINAL,FREE REGS@F@@@9 IF SDBGN )@@G@@ROT,ZERO THEN,VGDV71 . -> NO BROTHER, FIND DAD @G@@@9 LSDP XGO )@@G@@5,SDBROT,X5 . ->PREPARE TO SET BOUNDS INTO BROTHER @D@@@9 GOTGP )@@G@@O VGDV15 . ->PROCESS BROTHER @C@@@9VGDV97 LABEL . GQ )@@G@@ FIND SON @C@@@9 LSDP X5,SDSON,X5 . ->LOOK GR )@@G@@AT SON@B@@@9 GOTO VGDV15 . PROCESS SON @C@@@9VGDV71 LABGS )@@G@@EL . EXAMINE DAD @C@@@9 LOAD X5,SDDAD,X5 .GT )@@G@@ ->GET FATHER @E@@@9 GOTO VGDV96 . LOOK AT BROTHGU )@@G@@ER OF FATHER@F@@@9VGDV12 LABEL . CURRENT NODE'S DIMEGV )@@G@@NSIONS DONE @ @@@9 USING SDSECT,X5 . @G@@@9 IF SGW )@@G@@DSTRU,OFF,SDCLS4 THEN,VGDV48 . ->HAVE REACHED LEAF . @E@@@9 LOAGX )@@G@@D X4,SDSON,X5 . PREPARE TO LOOK AT SON @F@@@9 GOTO VGY )@@G@@GDV77 . ->FIND DIMENSIONS OF SON . @H@@@9VGDV55 LABEL . GZ )@@G@@ FREE REGISTERS AFTER BOUNDS PAIR STORED @H@@@9 HA )@@G@@ JP A10,VGDV11 . CONSTANT EXTENT,NO FREE NEEDED,MORE DIMS? HB )@@G@@@B@@@9 GEN . FREE REGISTER THAT WAS USED@D@@@9 GFREE AHC )@@G@@GPTX2 . FREE EXTENT REG @H@@@9 GOTO VGDV11 . HD )@@G@@ ->LOOK FOR MORE DIMENSIONS IN CURRENT NODE @F@@@9. ----------------HE )@@G@@----------------------------------------------- @A@@@9. FIGURE OUT THE VHF )@@G@@O AND THE MPLRS @F@@@9. ----------------------------------------------HG )@@G@@----------------- @C@@@9 . UNKNOWN BOUNDS AND EXTENTS ARE MARKED BY -0. HH )@@G@@@B@@@9. A15 = MULTIPLIER AND ARRAY SIZE . @A@@@9. A13-A14 =HI )@@G@@ V.O. STORAGE @D@@@9. A11-A12 = V.O. COMPUTATION WITH LOWER BHJ )@@G@@OUND @B@@@9. A9-A10 = EXTENT COMPUTATION @A@@@9. X8 = -HK )@@G@@> TO CURRENT MULTIPLIER @F@@@9. ----------------------------------------HL )@@G@@----------------------- @#@@@9VGDV48 LABEL . @ @@@9 LOAD X8,HM )@@G@@SDDVA,X5 . @F@@@9 ADD X8,W1U+1,X3 . DV TEMPLATE LAST MULTIPLIHN )@@G@@ER ADDRESS @F@@@9 SLBD A13,72 . CLEAR VIRTUAL ORIGIHO )@@G@@N STORAGE . @F@@@9 LOAD A15,SDRTC,X5 . DATA WIDTH IS FIRSTHP )@@G@@ MULTPLIER @G@@@9 LOADXI X8,-2,I . SET TO DECREMENT THHQ )@@G@@ROUGH MULTIPLIERS @F@@@9 LOAD F,SDCLS2,X5 . GET BOUND EXPHR )@@G@@RESSION FLAGS @#@@@9VGDV47 LABEL . @F@@@9 STORE A15,W1,HS )@@G@@X8 . SET MULTIPLIER INTO DV TEMPLATE @#@@@9VGDV49 LABEL . @H@@@9HT )@@G@@ LOAD A11,W1XH2+1,*X8 . GET LOWER BOUND AND MOVE POINTER DOHU )@@G@@WN @G@@@9 TNZ A11 . SKIP IF LOWER BOUND KNOWNHV )@@G@@ NOT ZERO @E@@@9 JN A11,VGDV39 . ->UNKNOWN LOWER BOUHW )@@G@@ND @E@@@9 MPY A11,A15 . LOWER BOUND*MULTIPLIER HX )@@G@@@D@@@9 DAN A13,A11 . VIRTUAL ORIGIN @E@@@9 HY )@@G@@ DLSC A2,A13 . CHECK FOR V.O. OVERFLOW @E@@@9 IF HZ )@@G@@ A4,GE,37,I THEN,VGDV46 . ->VO WITHIN RANGE @E@@@9 LOAD AIA )@@G@@3,X3 . GET MULTIPLIER OFFSET @F@@@9 SRB A3,1 . IB )@@G@@ CORRECT TO SUBSCRIPT NUMBER . @E@@@9 EXERR ERCXV0 IC )@@G@@ LEVEL,2 . VIRITUAL ORIGIN OVERFLOW @D@@@9 . SDX5, 'REQUIRES TOO MUCH SPID )@@G@@ACE. LOWER BOUND ', @A@@@9 . NUMA3, ' IS ADJUSTED TO ZERO. ' @[@@@9IE )@@G@@. @E@@@9 DA A13,A11 . APPLY CORRECTION TO V.O. IF )@@G@@@ @@@9 USING WORD,X8 . @D@@@9 MOVE W1H2+3,0,I . IG )@@G@@ RESET LOWER BOUND @F@@@9VGDV46 LABEL . VIRTUALIH )@@G@@ ORIGIN WITHIN RANGE @E@@@9 TP 3,X8 . SKIP IFII )@@G@@ EXTENT-1 KNOWN @D@@@9 GOTO VGDV39 . ->EXTENT UNKNIJ )@@G@@OWN @C@@@9 LOAD A10,W1H1+3,X8 . EXTENT-1 @D@@@9 IK )@@G@@ STORE A15,A9 . SAVE OLD MULTIPLER @D@@@9 ADD AIL )@@G@@10,1,I . COMPUTE EXTENT @D@@@9 MPYS A15,A10 . IM )@@G@@ MPLR=MPLR*EXTENT @F@@@9 TLE,U A15,0400000 . SKIP IIN )@@G@@F MULTIPLIER TOO LARGE @E@@@9 GOTO VGDV29 . ->CHECKIO )@@G@@ FOR MORE BOUNDS @E@@@9 LOAD A3,X3 . GET MULTIPLIEIP )@@G@@R OFFSET @F@@@9 SRB A3,1 . CONVERT TO SUBSCRIPIQ )@@G@@T NUMBER @D@@@9 EXERR ERCXMP LEVEL,2 . MULT TOO LARGE . IR )@@G@@@[@@@9. @D@@@9 . SDX5, ' REQUIRES TOO MUCH SPACE. UPPER BOUND ', IS )@@G@@@A@@@9 . NUMA3, ' IS SET TO LOWER BOUND.' @[@@@9. @G@@@9 LOAIT )@@G@@D A15,A9 . RETURN MULTIPLIER TO FORMER VALUE @ @@@9 IU )@@G@@ USING WORD,X8 . @E@@@9 MOVE W1H1+3,0,I . SET CORIV )@@G@@RECTION EXTENT-1 @B@@@9VGDV29 LABEL . CHECK FOR MORE BOUNDS @G@@@9IW )@@G@@ SUB X3,2,I . DECREMENT TO NEXT MULTIPLIER OFFSET IX )@@G@@@B@@@9 IF X3,ZERO THEN,VGDV28 . @D@@@9 IF SIY )@@G@@DBDEX,ON THEN,VGDV49 ELSE,VGDV47 . @D@@@9VGDV39 LABEL . IZ )@@G@@ UNKNOWN EXTENT @E@@@9 SET SDBDEX,ON .SET FLAG FOR BJA )@@G@@OUNDS COMPUTATION @G@@@9 SUB X3,2,I . DECREMENT TO JB )@@G@@NEXT MULTIPLIER OFFSET @G@@@9 IF X3,NZERO THEN,VGDV49 . ->JC )@@G@@PROCEED TO NEXT BOUND WITHOUT @D@@@9. RJD )@@G@@ESETTING MPLR @D@@@9VGDV28 LABEL . ALL BOUNDS CHJE )@@G@@ECKED @D@@@9 STORE F,SDCLS2,X5 . RESTORE BOUND FLAGS@#@@@9JF )@@G@@VGDV36 LABEL . @^@@@9 USING SDSECT,X5 .@I@'@9 IF SDBDEX+JG )@@G@@SDLNXP,OFF,SDCLS2 THEN,VGDV05 . -> CONSTANT BOUNDS AND STRING @E@@@'JH )@@G@@ IF SD0BSD+SD0CNT,OFF,SDCLS0 THEN,VGDV09 . @#@@@' JI )@@G@@ GEN . @^@@@' GLIT 1 . @#@@@' JMP . @G@'@9JJ )@@G@@ GEN . RETURN TO EXNTRY AFTER DV INITIALIZATION JK )@@G@@@G@'@9 GSUB EXADVE . FOR NON-CONSTANT BOUNDS OR STRING LENJL )@@G@@GTHS @ @@@' GOTO VGDV05 . @#@@@'VGDV09 LABEL . @I@@@'JM )@@G@@ IF SDBDEX+SDLNXP,OFF,SDCLS2 THEN,VGDV05 . -> CONSTANT BOUNDS ANJN )@@G@@D STRING @G@@@' GEN . RETURN TO EXNTRY AFJO )@@G@@TER D.V. INIT @G@@@' GSUB EXADVE . FOR NON-CONSTANT BOJP )@@G@@UNDS OR STRING LENGTHS @#@@@9VGDV05 LABEL . @^@@@9 USING SDDJQ )@@G@@V,X4 .@C@@@9 LOAD X4,SDDVA,X5 . DOPE VECTOR ADDRESS@ @@@9 JR )@@G@@ LOADD A3,DBGWC1 . @G@@@9 STORE A3,SDDVBD,X4 . SETJS )@@G@@ INITIALIZATION CODE ADDRESS @I@@@9 STORE A4,SDDVMX,X4 . JT )@@G@@ SET STRING FLAG, UNALLOCATED FLAG, AND AD @#@@@9VGDV37 LABEL . JU )@@G@@@^@@@9 USING SDSECT,X5 .@F@'@9 IF SDINTL,OFF,SDCLS3 THEN,VJV )@@G@@GDVNL . -> NO INITIALIZATION @F@@@' IF SDINTL,OFF,SDCLS3 THEN,VJW )@@G@@GDVNL . -> NO INITIALIZATION @F@@@9 IF SDARRY,OFF,SDCLS2 THEN,VJX )@@G@@GSTRN . STRING INITIALIZATION @E@'@9 LOAD A3,SDCLS0,X5 . LJY )@@G@@OAD UP STORAGE CLASS @E@'@9 AND,U A3,017 . GET RID OF JZ )@@G@@STORAGE CLASS @G@'@9 IF A4,EQ,SD0LAB,I THEN,VGLABL . LABEL KA )@@G@@ARRAY TO BE INITIAL @F@@@9 LMCP SDINTM,X5 . GET IKB )@@G@@NITIALIZATION B-CODE @F@@@9. IF A8,EQ,ACCALL,I THEN,VGLABL .KC )@@G@@ INITIALIZED BY CALL @[@@@9. @E@@@9. INITIALIZATION OF ARRKD )@@G@@AYS STARTS HERE, 1ST ESTABLISH@E@@@9. A PROLOGUE ROUTINE TO STEP KE )@@G@@THORUGH THE ELEMENTS OF @^@@@9. THE ARRAY. @[@@@9. @E@@@'KF )@@G@@ IF SD0BSD+SD0CNT,OFF,SDCLS0 THEN,VGDV04 . @E@@@' KG )@@G@@ GMARK SDALSI . SAVE BEGIN OF ARRAY INIT.@#@@@' GENKH )@@G@@ . @^@@@' GLIT 1 . @#@@@' LOCAL . @#@@@'VGDV04KI )@@G@@ LABEL . @G@@@9 XGPUSH . GET STACK SPACE FOR INITIALKJ )@@G@@IZATION OF ARRAY @F@@@9 GMARK DBGWC1 . SAVE START OFKK )@@G@@ INITIAL CODE @C@@@9 STORE F,ITRFLG . SAVE F REG KL )@@G@@@F@@@9 MOVE AGX0OF,SDRTC . GET SIZE OF ARRAY ELEMENT KM )@@G@@@#@'@9 GENM . @E@'@9 GINST OPLXI,AGRX1,AGXR0,U 'NO' KN )@@G@@. LOAD INCREMENT @#@'@9 GFIN . @[@@@9. @A@@@9. FINKO )@@G@@D LOCAL DISP OF V.O. @[@@@9. @F@@@9 LOAD X3,SDLCOF,X5 KP )@@G@@ . GET LOCAL OFFSET OF DV IN AR @E@@@9 LOAD A6,SDA1BS-FH1,XKQ )@@G@@5 . GET AW FOR ARRAY DV @ @@@9 STORE A6,AGTMP1 . @ @@@'KR )@@G@@ STORE A6,AGTMP2 . @ @'@9 STORE A6,AGTMP2 . @#@'@9KS )@@G@@ GEN . @#@@@' GENM . @E@@@' GINST OPLXI,AGRKT )@@G@@X1,AGXR0,U 'NO' . LOAD INCREMENT @E@'@9 GINST OPLXM,AGRX1,AGTKU )@@G@@MP1 'N0' . GET THE V.O. IN X1@E@@@' GINST OPLXM,AGRX1,AGTMP1 'NKV )@@G@@O' . GET THE V.O. IN X1@I@@@' GSHIFT AGRA5 . SET A5 KW )@@G@@ADDRESS WORD TO POINT TO A6*********** @#@@@' GFIN . @D@@@9KX )@@G@@ ADD X3,2,I . X3-> MULTIPLIER @D@@@9 MOVKY )@@G@@E ITRNUM,SDNDIM . MOVE #DIMS INTO STACK @G@@@9 LOADA X6,SDDVMLKZ )@@G@@,X4 . X6-> COMPILE TIME BOUND PAIRS @^@@@9 LOADXI X6LA )@@G@@,2,I .@F@@@9 LOAD A4,0,I . A4-> CURRENT SUM[LB(I)*LB )@@G@@MP(I)]@G@@@9 LOAD A9,1,I . A9-> CURRENT PRODUCT[EXLC )@@G@@TENT(I)+1] @[@@@9. @D@@@9. X3 -> CURRENT OFFSET OF MULTIPLIELD )@@G@@R REAL TIME.@B@@@9. X6-> COMPILE TIME MULTIPLIERS @A@@@9. LE )@@G@@ A4-> CURRENT ELEMENT OFFSET@B@@@9. A9-> CURRENT #ELEMENTS COMPLF )@@G@@UTED @#@@@9. X4-> SDDV@ @@@9. X5-> SD OF ARRAY @[@@@9LG )@@G@@. @E@@@9. LOOP THROUGH THE ARRAY, GATHER ALL CONSTANT PAIRS LH )@@G@@@[@@@9. @C@@@9VGOVER LABEL . TOP OF LOOP @^@@@9LI )@@G@@ USING WORD,X6 .@ @@@9 LOAD A2,W1,X6 . @D@'@9 LJ )@@G@@ IF A2,LT,0,I THEN,VGNONC . UNKNOWN MULTIPLIER@D@@@' IF A2,LE,LK )@@G@@0,I THEN,VGNONC . UNKNOWN MULTIPLIER@ @@@9 LOAD A2,W1+1,X6 . LL )@@G@@@E@'@9 IF A2,LT,0,I THEN,VGNONC . UNKNOWN BOUNDS PAIR @E@@@'LM )@@G@@ IF A2,LE,0,I THEN,VGNONC . UNKNOWN BOUNDS PAIR @E@'@9 LN )@@G@@ LOAD A3,W1H2+1 . GET THE LOWER BOUND @E@@@' LOALO )@@G@@D A3,W1XH2+1 . GET THE LOWER BOUND @D@@@9 LOAD A7,LP )@@G@@W1H1+1 GET THE EXTENT-1 @C@@@9 ADD A7,1,I LQ )@@G@@ . EXTENT @^@@@9 MPYS A9,A7 . @F@@@9 MPYS A3LR )@@G@@,W1,*X6 . MULTIPLIER LB BY MULTIPLIER @E@@@9 ADD A4,LS )@@G@@A3 . ADD TO ALREADY KNOWN @D@@@9 ADD X3,2,I LT )@@G@@ . X3-> NEXT SET @D@@@9 LOAD A7,ITRNUM . GETLU )@@G@@ #DIMS THUS FAR. @C@@@9 SUB A7,1,I . # LEFT LV )@@G@@@D@@@9 STORE A7,ITRNUM . RESTORE UPDATED COUNT@D@@@9 LW )@@G@@ IF A7,NE,0,I THEN,VGOVER . MORE DIMS TO GO. @D@@@9 STORE A4,LX )@@G@@AGX0OF . STORE INTO OFFSET@E@@@' MOVE AGTMP1,AGXR0 LY )@@G@@. MOVE TO AUX ADDR WORD @#@'@9 GEN . @F@'@9 GINLZ )@@G@@ST OPAX,AGRX1,AGXR0,U 'NO' . X1-> V.O.+SUM(LB*MP) @ @@@9 STOMA )@@G@@RE A9,AGX0OF . @#@@@9 GENM . @E@'@9 GINST OPLA,AGRAMB )@@G@@3,AGXR0,U 'NO' . A3-> PROD(EXTNTS) @#@'@9 GLIT 1 @^@'@9 MC )@@G@@ SA A3,A6 .@F@@@' GINST OPAX,AGRX1,AGTMP1,XU 'NO' . X1-> MD )@@G@@V.O.+SUM(LB*MP) @B@@@' GINST OPLA,AGRA5,AGXR0,U 'NO' @#@@@9ME )@@G@@ GFIN . @G@@@9 GOTO VGSTRT . MERGE FOR CREMF )@@G@@ATION OF PROLOGUE CODE. @H@@@9VGNONC LABEL . UNKNOWNMG )@@G@@ MULTIPLIER OR BOUNDS ENCOUNTERED @[@@@9. @C@@@9. GEN WHAT MH )@@G@@CONSTANTS ARE KNOWN THUS FAR @[@@@9. @D@@@9 STORE A4,AGX0OFMI )@@G@@ . SUM(LB*MP) THUS FAR@D@@@' IF A4,EQ,0,I THEN,VGNONX . MJ )@@G@@-> DON'T ADD 0 @#@@@9 GEN . @B@@@9 GINST OPAX,AGRXMK )@@G@@1,AGXR0,U 'NO' @#@@@'VGNONX LABEL . @E@@@9 STORE A9,AGX0OFML )@@G@@ . PROD(EXTENTS) THUS FAR @#@'@9 GEN . @#@@@' MM )@@G@@ GENM . @B@'@9 GINST OPLA,AGRA3,AGXR0,U 'NO' @G@@@' MN )@@G@@ GINST OPLA,AGRA5,AGXR0,U 'NO' . GET PROD OF EXTENTS INTO A6 @^@@@'MO )@@G@@ GLIT 1 . @I@@@' LA,U A1,1 . GET ''EMP )@@G@@XTENT CORRECTOR'' INTO A1 BEFORE LOOP @#@@@' GFIN . @[@@@9MQ )@@G@@. @G@@@9VGNNBK LABEL . TOP OF UNKNOWN MULTIPLIER AND BOMR )@@G@@UND LOOP @H@@@9 STORE X3,AGTMP1+FH2 . X3-> RUN TIME MULMS )@@G@@TIPLIER THAT STOPED COMS@D@@@9 ADD X3,1,I . POINTMT )@@G@@ BOUNDS PAIR@F@@@9 STORE X3,AGTMP2+FH2 . RUN TIME AW FOR BMU )@@G@@OUNDS PAIR @#@@@9 GENM . @B@@@9 GINST OPLA,AGRA2,AGTMMV )@@G@@P1 'NO' . @D@@@9 GINST OPMSI,AGRA2,AGTMP2,XH2 'NO' . LB*MP MW )@@G@@@B@@@9 GINST OPAX,AGRX1,AGRA2 'NO' . @#@'@9 GLIT 1 MX )@@G@@@^@'@9 LA,U A1,1 @E@'@9 GINST OPAA,AGRA1,AGTMP2,H1 MY )@@G@@'NO' . EXTENT IN A1 @E@@@' GINST OPAU,AGRA1,AGTMP2,H1 'NO' .MZ )@@G@@ EXTENT IN A1 @F@'@9 GINST OPMSI,AGRA3,AGRA1,U 'NO' . TIMES NA )@@G@@THE REST THUS FAR @F@@@' GINST OPMSI,AGRA5,AGRA2 'NO' . TIMES THNB )@@G@@E REST THUS FAR @#@@@9 GFIN . @H@@@9 ADD X3,1,I NC )@@G@@ . POINT X3 TO NEXT RUN TIME MULTIPLIER @B@@@9 LOAND )@@G@@D A7,ITRNUM . #OF DIMS @E@@@9 SUB A7,1,I NE )@@G@@. # OF DIMS LEFT IN A7 @C@@@9 STORE A7,ITRNUM . STORE UPDNF )@@G@@ATED @C@@@9 IF A7,NE,0,I THEN,VGNNBK . MORE TO GO @[@@@9. NG )@@G@@@B@@@9. ALL MULTIPLIERS AND BOUNDS GENED @[@@@9. @#@'@9 NH )@@G@@ GEN . @#@'@9 GLIT 1 . @^@'@9 SA A3,A6 .@[@'@9NI )@@G@@. @F@@@9VGSTRT LABEL . MERGE FOR END OF PROLOGUNJ )@@G@@E. @[@@@9. @D@@@9. ITRTOP AW FOR LABEL TO TOP OF INITIAL LNK )@@G@@IST @D@@@9. ITREND AW FOR LABEL TO END OF INITIAL LIST @C@@@9NL )@@G@@. ITRPRO AW FOR LABEL ENTRY TO PROLOGUE @[@@@9. @B@@@9. NM )@@G@@ GENERATE REMAINING PROLOGUE @[@@@9. @G@@@9 LOAD A7,NN )@@G@@KKLXUX . LOAD A7 WITH LX,U X2 OPCODE FUDGE @#@@@9 GENNO )@@G@@M . @I@@@' GSHIFT AGRA5 . POINT A5 ADDRESS WORD BACNP )@@G@@K AT A5 ************ @H@@@9 GJUMP ITRTOP . SET UP NQ )@@G@@ADDRESS PORTION TO INITIAL LIST @E@@@9 GAPPN VGINFG . NR )@@G@@ CHANGE JUMP TO A LA,U @F@@@9 GLABEL ITRPRO . ENS )@@G@@NTRY TO PROLOGUE STARTS HERE @#@@@9 GLIT 1 .@ @@@9 JGDNT )@@G@@ A6,0,X2 . @I@@@9 GJUMP ITREND . ARRAY ELEMENTNU )@@G@@S EXHAUSTED,GOTO END OF INITIAL @E@@@9 GLABEL ITRTOP . NV )@@G@@ START OF INITIAL LIST @#@@@9 GFIN . @F@@@9 LOANW )@@G@@D X4,X7 . SAVE A POINTER TO LABEL ENTRIES@[@@@9. @B@@@9NX )@@G@@. INITIAL PROLOGUE ROUTINE DONE @B@@@9. START INITIALIZNY )@@G@@ATION OF ARRAY @[@@@9. @H@@@9 XGPUSH . CNZ )@@G@@REATE STACK ENTRY FOR SINGLE ELMT OF ARRAY@F@@@9 MOVE SGDAID+FHOA )@@G@@2,SD2SP . COPY SCALE AND PREC FROM ARRAY @D@@@9 MOVE SGDCLS,SDOB )@@G@@CLS1 . COPY ATTRIBUTES @D@@@9 LOAD A3,SDCLS0 . GOC )@@G@@ET STORAGE CLASS @G@@@9 AND,U A3,15 . MASK OUT GARAOD )@@G@@BAGE BITS(LIKE CHECK) @D@@@9 STORE A4,SGDID . STORE IOE )@@G@@N STACK @F@'@9 LOADA A3,AGRX1 . GET THE ADDRESS BAOF )@@G@@SE OF X1 @F@@@' LOADA A5,AGRX1 . GET THE ADDRESS BAOG )@@G@@SE OF X1 @E@'@9 STORE A3,AGRL1+FH1 . STORE INTO STACK AOH )@@G@@W @E@@@' STORE A5,AGRL1+FH1 . STORE INTO STACK AW OI )@@G@@@D@@@'. ADDRESS IS 0,X1 @G@@@' OJ )@@G@@ IF SDRLCX,OFF,SDCLS1 THEN,VGNTLB . -> NOT LABEL OR COMPLEX @G@@@'OK )@@G@@ STORE A5,AGIM1+FH1 . SETUP 0,X1 FOR NOW AS IMAG ADDRESS OL )@@G@@@E@@@' LOAD A3,SDRTC . GET SIZE OF COMPLEX ITEM@D@@@'OM )@@G@@ SRB A3,1 . SIZE OF REAL PART @E@@@' STOON )@@G@@RE A3,AGIM1+FH2 . IMAG IS AT SDRTC/2,X1 @#@@@'VGNTLB LABEL . OO )@@G@@@^@'@9 LOADA A3,AGAW .@ @'@9 STORE A3,AGIM1+FH1 . @C@'@9OP )@@G@@. MOVE AGIM1+FH2,KKDO . **??**??** @[@@@9. @[@@@9. OQ )@@G@@@D@@@9. REGISTER USAGE THROUGHOUT LIST PROCESSING @A@@@9. OR )@@G@@ X5 -> SD OF ARRAY @C@@@9. X4 -> PROLOGUE OF STAOS )@@G@@CK ENTRY @ @@@9. X7 -> STACK @B@@@9. A3,OT )@@G@@A6,A7,A8 USED AS SCRATCH@[@@@9. @[@@@9. @A@@@9. PROCESS TOU )@@G@@OKENS IN LIST @[@@@9. @D@@@9 LOAD F,0,I . COV )@@G@@LEAR FLAG REGISTER@#@@@9VGDOIT LABEL . @#@@@9 GETC . @ @@@9OW )@@G@@VGAFTR LABEL . BYPASS GETC @D@@@9 IF A8,NE,ACCOMA,I THEN,VGNTOX )@@G@@ST . NOT A COMMA @G@@@9. IF FLGNIF,ON THEN,VGDOIT . NEG ITER FOY )@@G@@ACT,IGNORE ALL ITEMS @G@@@9 IF FLGSIE,OFF THEN,VGDOIT ELSE,VGOZ )@@G@@ITON . TEST FOR SINGLE ITER @#@@@9VGNTST LABEL . @D@@@9 IF PA )@@G@@A8,NE,ACRPAR,I THEN,VGITER . NOT A ')' @G@@@9 IF FLGNIF,OFF PB )@@G@@THEN,VGNOTN . TEST FOR SCAN OF END OF NEG ITER @B@@@9 SET FPC )@@G@@LGNIF,OFF . RESET FLAG @F@@@9 GOTO VGDOIT . LOOK FOPD )@@G@@R NEXT ITEM IN LIST @C@@@9VGNOTN LABEL . NORMAL ENTRY TO ")" HANDPE )@@G@@LER @ @@@9 USING SGDSCT,X4 . @G@@@9 IF ITRNUM,NZEROPF )@@G@@ THEN,VGITON . NOT DONE YET(LEVELS EXISTS) @#@@@9 XGPOP . PG )@@G@@@ @@@9 USING SGDSCT,X7 . @#@'@9 GENM . @#@@@' PH )@@G@@ GEN . @ @@@9 GLABEL ITREND . @H@@@' IF SPI )@@G@@D0BSD+SD0CNT,ON,SDCLS0 THEN,VGDV13 . BASED OR CONTROLLED @#@@@' PJ )@@G@@ GEN . @ @@@9 GSUB EXAYIN . @#@@@'VGDV13 LABEL . PK )@@G@@@#@'@9 GFIN . @C@@@9 LOAD F,ITRFLG . RESTOREPL )@@G@@ FLAGS@#@@@9 XGPOP . @F@@@9 LOAD A3,DBGWC1 . LPM )@@G@@OAD UP START OF INITIAL CODE @D@@@9 STORE A3,SDINTM,X5 . AND PN )@@G@@SAVE IN THE SD @F@@@9 GOTO VGDVNL . GET NEXT DV TPO )@@G@@O BE INITIALIZED @[@@@9. @D@@@9VGINFG LLOC . GPP )@@G@@APPN TO PROLOGUE @^@@@9 SUB X10,1,I .@C@@@9 LOAD A7,PQ )@@G@@DCGSV4+1 . GET OPCODE @D@@@9 LOAD A8,W1,X10 . GPR )@@G@@ET INSTRUCTION @E@@@9 SLB A8,14 . SHIFT OFF OLPS )@@G@@D OPCODE @D@@@9 SRBD A7,14 . SHIFT ON NEW OPCODEPT )@@G@@@E@@@9 STORE A8,W1,*X10 . STORE BACK INTO CODE @B@@@9PU )@@G@@ LJMP . DONE @[@@@9. @E@@@9VGITON LABPV )@@G@@EL . SOME LEVEL OF ITERATION @#@@@9 GEN . PW )@@G@@@#@@@9 GLIT 1 .@ @@@9 JGD A5,0,X3 . @ @@@9 PX )@@G@@ USING SGDSCT,X4 . @ @@@9 LOAD A6,ITRNUM . @E@@@9 PY )@@G@@ IF A6,EQ,1,I THEN,VGITMG . ONLY 1 LEVEL THUS FAR @[@@@9. @ @@@9PZ )@@G@@. MORE THAN 1 LEVEL @ @@@9. RESTORE OUTER LEVEL @[@@@9QA )@@G@@. @ @@@9 USING SGDSCT,X7 . @#@@@9 GENM . @F@@@9QB )@@G@@ GINST OPLA,AGRA5,ITRARL 'NO' . RESTORE OUTER COUNT @F@@@9QC )@@G@@ GINST OPLX,AGRX3,ITRREG 'NO' . RESTORE OUTER RETURN LABEL@C@@@9QD )@@G@@ GFREE ITRARL,1 . FREE TEMPS @ @@@9 GFREE ITRQE )@@G@@REG,1 . @#@@@9 GFIN . @H@@@9VGITMG LABEL . QF )@@G@@ MERGE FROM NESTED AND 1 LEVEL ITERATION @#@@@9 GEN . QG )@@G@@@E@@@9 GLABEL ITREND . END OF ITER FACTOR LIST@F@@@9QH )@@G@@ XGPOP . POP OFF STACK ENTRY FOR NESTED ITERATION @ @@@9QI )@@G@@ USING SGDSCT,X4 . @F@@@9 LOAD A3,ITRNUM . GQJ )@@G@@ET THE EXISTING ITER LEVEL @C@@@9 SUB A3,1,I . QK )@@G@@UPDATE IT @E@@@9 STORE A3,ITRNUM . RESTORE BACK IN STAQL )@@G@@CK @F@@@9 IF FLGSIE,OFF THEN,VGDOIT . NOT SINGLE ITERATION REQM )@@G@@TURN @[@@@9. @D@@@9. SINGLE ITERATION FACTOR JUST ACCOUNTED QN )@@G@@FOR @D@@@9. TURN FLAG OFF AND RESCAN JUST READ TOKEN @G@@@9QO )@@G@@. (I.E IF ','-THEN IGNORE IT IF ')'-THEN SHOULD BE END OF INITIAL)QP )@@G@@@[@@@9. @ @@@9 SET FLGSIE,OFF . @D@@@9 GOTO VGAFQQ )@@G@@TR . SKIP NEXT GETC @[@@@9. @#@@@9VGITER LABEL . QR )@@G@@@D@@@9 IF A8,NE,ACLPAR,I THEN,VGSTAR . NOT A "(" @E@@@9 QS )@@G@@ IF FLGNIF,OFF THEN,VGITCN . NOT IN A NEG ITER LIAS @[@@@9. @D@@@9QT )@@G@@. NESTED WITHIN A NEGATIVE CONSTANT ITER FACT LIST @^@@@9. IGNORE AQU )@@G@@LL OF IT @[@@@9. @C@@@9 ADD X1,1,I . 2 GETCQV )@@G@@'S @#@@@9 GETC . @G@@@9 IF A8,NE,ACLLST,I THEN,VGDOQW )@@G@@IT . SINGLE ELEMENT IN LIST DONE. @#@@@9VGIPR1 LABEL . @#@@@9 QX )@@G@@ GETC . @G@@@9 IF A8,NE,ACRPAR,I THEN,VGIPR1 ELSE,VGDOIT . PQY )@@G@@URGE SELF OF LIST @[@@@9. @#@@@9VGITCN LABEL . @G@@@9 XGPQZ )@@G@@USH . CREATE STACK ENTRIES FOR ITERATION @E@@@9 RA )@@G@@ GMARK A7 . NOTE START OF GEN'D CODE.@B@@@9 GETRB )@@G@@C . READIN ITER FACTOR TOKEN @C@@@9 XGEN I . ERC )@@G@@VALUATE IT @G@@@9 IF SDVRCN,OFF,SGDCLS THEN,VG1NCN . NOT A CONSRD )@@G@@TANT ITER FACT @G@@@9 IF SGDSGN,OFF,SGDCLS THEN,VG1NCN . NOT RE )@@G@@A NEGATIVE CONSTANT FACT@[@@@9. @C@@@9. NEGATIVE CONSTANT ITERATION RF )@@G@@FACTOR ENCOUNTERED@C@@@9. SET FLAG TO IGNORE THIS COMMING LIST RG )@@G@@@[@@@9. @G@@@9 XGPOP 'SIZE',2*DCGSLT . POP OFF BOTH ITER RH )@@G@@AND FACT ENTRIES @B@@@9 GFIX A7 . RESET ANY CODE GEN'D@ @@@9RI )@@G@@ GETC . READ IN ")" @B@@@9 GETC . READ IN START OF LRJ )@@G@@IST @G@@@9 IF A8,NE,ACLLST,I THEN,VGDOIT . ONLY SINGL E ITEM ARK )@@G@@LL DONE @G@@@9 SET FLGNIF,ON . LIST COMMING, SET FRL )@@G@@LAG TO IGNORE IT @E@@@9 GOTO VGDOIT . GET FIRST ITERM )@@G@@M IN LIST @[@@@9. @E@@@9VG1NCN LABEL . VALID NON-NEGITIVE CONSTARN )@@G@@NT ITER FACTOR @E@@@9 IF ITRNUM,ZERO THEN,VG1ITER . 1ST LEVERO )@@G@@L ITERATION @ @@@9 USING SGDSCT,X7 . @[@@@9. @D@@@9. RP )@@G@@ NESTED ITERATIONS: MUST SAVE OUTER LEVEL @[@@@9. @#@@@9 RQ )@@G@@ GENM . @C@@@9 GGETT ITRARL+DCGSLT,1 . GET A TEMP @D@@@9RR )@@G@@ GGETT ITRREG+DCGSLT,1 . GET ANOTHER TEMP . @E@@@9 GINRS )@@G@@ST OPSA,AGRA5,ITRARL+DCGSLT . SAVE OUTER'S A5@E@@@9 GINST ORT )@@G@@PSX,AGRX3,ITRREG+DCGSLT . SAVE OUTER'S X3 @#@@@9 GFIN . @#@@@9RU )@@G@@VG1ITER LABEL . @E@@@9 LOAD A7,DCGTLV . SAVE TEMP STARV )@@G@@CK LEVEL @F@@@9 GASGN 'TEMP' R,X7 'ATTR',FIXER 'COND' . CONVERW )@@G@@RT ITER FACT@D@@@' MOVE AGXTMP,0,I . CLEAR WORD FOR JUMPRX )@@G@@@#@'@9 GEN . @#@@@' GENM . @F@@@9 GINST ORY )@@G@@PLA,AGRA5,AGRL1 . LOAD UP COUNTER WITH ITER FAC @E@@@' GJGD ARZ )@@G@@GRA5,AGXTMP . JUMP AND SUBTRACT ONE @#@@@' GFIN . @G@@@9SA )@@G@@ IF SDVRCN,ON,SGDCLS THEN,VG1NCON . POS CONS NO TEST NEEDED SB )@@G@@@A@'@9 GENM . GEN TEST FOR EXPERS@A@@@' GEN . GEN TESTSC )@@G@@ FOR EXPERS @I@@@' GJUMP ITREND+DCGSLT . ABOVE JGD WILL FAILSD )@@G@@ IF ITER EXPR IS ZERO,OR N @F@'@9 GCJMP OPJN,AGRA5,ITREND+DSE )@@G@@CGSLT . IF EXPR IS NEGATIVE OR@G@'@9 GCJMP OPJZ,AGRA5,ITREND+DSF )@@G@@CGSLT . IF EXPR IS 0 THEN SKIP LIST.@#@'@9 GFIN . @F@@@9VG1NCOSG )@@G@@N LABEL . MERGE WITH EXPRES AND POS CONST@E@@@9 SH )@@G@@ GMARK A3 . GET CURRENT CODE ARRDESS @E@'@9 ADDSI )@@G@@ A3,2,I . POINT TO TOP OF LOOP @E@@@' ADD ASJ )@@G@@3,1,I . POINT TO TOP OF LOOP @F@@@9 STORE A3,AGX0SK )@@G@@OF . PUT WHERE ICODE CAN GET IT @#@@@9 GENM . @E@@@'SL )@@G@@ GLABEL AGXTMP . FIX ABOVE JGD ADDRESSES @#@'@9 SM )@@G@@ GLIT 1 . @^@'@9 ANA,U A5,1 . @F@@@9 GINST OPLX,AGSN )@@G@@RX3,AGXR0,U 'NO' . POINT TO TOP OF LOOP @^@@@9 GFIN 'POP' .SO )@@G@@@E@@@9 STORE A7,DCGTLV . RESTORE TEMP STACK LEVEL.@[@@@9SP )@@G@@. @ @@@9 USING SGDSCT,X4 . @D@@@9 LOAD A6,ITRNUMSQ )@@G@@ . LOAD UP ITER COUNT @E@@@9 ADD A6,1,I . ISR )@@G@@NCREMENT EXISTING COUNT @D@@@9 STORE A6,ITRNUM . RESTORESS )@@G@@ IN STACK @C@@@9 GETC . GET THE ')' @E@@@9ST )@@G@@ GETC . GET THE '(' OF THE LIST @E@@@9 SU )@@G@@ IF A8,EQ,ACLLST,I THEN,VGDOIT . REAL '(' FOUND @F@@@9 SETSV )@@G@@ FLGSIE,ON . NOT '(' MUST BE SINGLE ITER @D@@@9 GOTSW )@@G@@O VGAFTR . PROCESS SINGLE ITEM@[@@@9. @#@@@9VGSTAR LABSX )@@G@@EL . @D@@@9 IF A8,NE,ACSTAR,I THEN,VGASGN . NOT AN '*' @F@@@9SY )@@G@@ IF FLGNIF,ON THEN,VGDOIT . IN NEG CON FACT LIST IGNORED @D@@@9SZ )@@G@@ LOAD X6,X7 . SAVE STACK POINTER @F@@@9 LOATA )@@G@@D X7,X4 . POINT STACK TO INITIAL ENTRY @G@@@9 LOATB )@@G@@D A7,KKLMJX . LOAD A7 WITH LMJ X2 OPCODE FUDGE @#@@@9 TC )@@G@@ GENM . @#@@@9 GLIT 1 . @I@@@9 NOP A0,0,*X1 . TD )@@G@@ DO NOTHING BUT INCREMENT ARRAY ELEMENT POINTER @^@@@9 GJUTE )@@G@@MP ITRPRO . @D@@@9 GAPPN VGINFG . FIX UP THE OPCODE TF )@@G@@@#@@@9 GFIN . @E@@@9 LOAD X7,X6 . RESTORETG )@@G@@ STACK POINTER @F@@@9 GOTO VGDOIT . PROCESS NEXT TH )@@G@@TOKEN IN LIST @[@@@9. @#@@@9VGASGN LABEL . @[@@@9. @E@@@9TI )@@G@@. MUST BE AN ASSIGNMENT TO AN ELEMENT OF TE ARRAY @[@@@9. TJ )@@G@@@F@@@9 IF FLGNIF,ON THEN,VGDOIT . IN NEG CON FACT LIST IGNORED TK )@@G@@@E@@@9 XGEN I . EVALUATE THE EXPRESSION @ @@@9TL )@@G@@ USING SGDSCT,X4 . @^@@@9 GMARK A7 . @F@@@9 TM )@@G@@ SUB X4,DCGSLT,I . X4-> ARRAY ELEMENT STACK ENTRY @C@@@9 TN )@@G@@ GASGN R,X4 R,X7 . DO THE ASSGNT@C@@@9 ADD X4,DCGSLTTO )@@G@@,I . RESTORE X4 @^@@@9 GMARK A8 . @H@@@9 LOATP )@@G@@D A6,A8 . LOAD UPPER BOUND OF CODE GENED FOR ASSGNT @F@@@9TQ )@@G@@ SUB A6,A7 . A6-> AMOUNT OF CODE FOR ASSGNT @E@@@9TR )@@G@@ LOAD X3,A7 . X3-> START OF GENED CODE @E@@@9 TS )@@G@@ SUB X3,1,I . X3 -> 1 BEFORE START OF CODE @E@@@9 LOATT )@@G@@D R1,A6 . SET THE REPEAT COUNT @D@@@9 LOAD A6,TU )@@G@@KKXFLD . GET THE X1 MASK @E@@@9 LOAD R2,KKMASK . TV )@@G@@ GET THE X FIELD MASK @G@@@9 MSE A6,1,*X3 . STW )@@G@@EARCH FOR USE OF X1 IN GENED CODE @F@@@9 GOTO BGBOMB . TX )@@G@@ NOT FOUND *Y O U L O S E* @E@@@9 LOAD A6,W1,X3 . TY )@@G@@ FETCH THE INSTRUCTION @F@@@9 OR,U A6,0400000 . STZ )@@G@@ET THE AUTO INCREMENT BIT ON @F@@@9 STORE A7,W1,X3 . RUA )@@G@@ESTORE THE FIXED INSTRUCTION @G@@@9 LOAD A7,KKLMJX . LUB )@@G@@OAD A7 WITH OPCODE FUDGE OF LMJ X2 @E@@@9 LOAD X6,X7 . UC )@@G@@ SAVE THE STACK POINTER @F@@@9 LOAD X7,X4 . UD )@@G@@ADJUST STKPTR TO INITIAL ENTRY@#@@@9 GENM . @^@@@9 GJUUE )@@G@@MP ITRPRO . @D@@@9 GAPPN VGINFG . FUDGE THE OPCODE UF )@@G@@@#@@@9 GFIN . @D@@@9 LOAD X7,X6 . RESTORUG )@@G@@E STKPTR @F@@@9 XGPOP . POP OFF ASSIGNED EXUH )@@G@@PRESSION @E@@@9 GOTO VGDOIT . PICK UP NEXT ITEM IUI )@@G@@N LIST@[@@@9. @ @@@9 USING SGDSCT,X7 . @[@@@9. @D@@@9UJ )@@G@@VGLABL LABEL . NOT IMPLEMENTED YET *Y O U L O S E*@[@@@9. @C@'@9UK )@@G@@. MORE TO COME HERE (EVENTUALLY ?!?!) @[@'@9. @I@@@9 . ---UL )@@G@@------------------------------------------------------------------------UM )@@G@@-- @E@'@9 EXERR ERVG04 LEVEL,2 . 'INIT NOT YET IMPLEMENTED' UN )@@G@@@E@@@'. EXERR ERVG04 LEVEL,2 . 'INIT NOT YET IMPLEMENTED' @I@@@9UO )@@G@@ . ---------------------------------------------------------------------UP )@@G@@-------- @[@@@9 . @#@@@9VGDVNL LABEL . @H@@@' IF SUQ )@@G@@D0BSD+SD0CNT,OFF,SDCLS0 THEN,VGDVNL2 . BASED OR CONTROLLED @G@@@' UR )@@G@@ IF SDINTL,OFF,SDCLS3 THEN,VGDVNL1 . NOTHING INITIALIZED @#@@@'US )@@G@@ GEN . @^@@@' GLIT 1 . @#@@@' JMP . UT )@@G@@@#@@@'VGDVNL1 LABEL . @#@@@' GEN . @D@@@' GLABEL SUU )@@G@@GDAID . FIX UP FORWARD JUMP@F@@@' XGPOP 'SIZE',1 . UV )@@G@@ GET RID OF WORD FOR FWRD JMP @F@@@' LINK BGDSPY . UW )@@G@@ FIX UP A.W.'S FOR BASED STRG @#@@@'VGDVNL2 LABEL . @E@@@' UX )@@G@@ LSDP X5,SDDVCH,X5 . TO NEXT SD WITH DOPE VECTOR @H@@@' IF XUY )@@G@@5,NZERO THEN,VGDVLP . ->REPEAT FOR EACH AGGREGATE VBLE; ELSE... @E@'@9UZ )@@G@@ LSDP X5,SDDVCH,X5 . TO NEXT SD WITH DOPE VECTOR @H@'@9 VA )@@G@@ IF X5,NZERO THEN,VGDVLP . ->REPEAT FOR EACH AGGREGATE VBLE; ELSE... VB )@@G@@@^@@@9 . ----------------- @ @@@9 . PREPARE TO EXIT BLOCK INIT @^@@@9VC )@@G@@ . ----------------- @^@@@9 USING SDSECT,X9 .@#@@@9BGNDVN LABELVD )@@G@@ . @ @@@9 STORE X10,DBGWC1 . @F@@@9 STORE X10,SDADDVE )@@G@@,X9 . SET BLOCK ENTRY ADDRESS @E@@@9 IF SDBGPR,OFF,SDVF )@@G@@CLS1 THEN,BGEXIT . ->NOT PROC-BLOCK@C@@@9 LINK DGNTRY . ->DEFINEVG )@@G@@ ENTRY POINTS @[@@@9 . @#@@@9BGEXIT LABEL . @D@@@9 LOAVH )@@G@@D R11,DCGSNS . RESET STATEMENT NUMBER @D@@@9 STORE R11,DCGSNVI )@@G@@O . USE ENTRY POINT NUMBER @E@@@9 MOVE DCGLST,0177777,I . FORVJ )@@G@@CE NEW STATEMENT NUMBER @F@@@9 LOADXM X1,ADPCBC . SET UP GETC TVK )@@G@@O CURRENT META CODE @^@@@9 SETGC 2,0,X1 . @D@@@9 GOTO VL )@@G@@ PGNXT0 . GO GEN CODE FOR WHAT'S IN BLOCK @]@@@' . ------- @ @@@' . GENVM )@@G@@ INIT CODE FOR A SCALAR @]@@@' . ------- @C@'@9CGNTSC LOCAL . VN )@@G@@ SAVE RETURN ADDRESS@C@@@'CGNTSC LOCAL . SAVE RETURN AVO )@@G@@DDRESS@E@@@9 LOADXI X1,1,I . SET AUTO INCREMENT FOR GETC. VP )@@G@@@G@@@9 LMCP SDINTM,X5 . POINT TO INITIALIZATION META-CODE ANDVQ )@@G@@ GETC @C@@@9. POINTING TO ACLLST OR ACCALL @D@@@9. VR )@@G@@ AND,U A8,0777000 . SAVE ACLLST OR ACCALL @#@@@9 GETC . VS )@@G@@@G@'@9 IF A8,EQ,ACSTAR,I THEN,JMP . -> STAR, NO INITIALIZATIOVT )@@G@@N @G@@@' IF A8,EQ,ACSTAR,I THEN,JMP . -> STAR, NO INITIALVU )@@G@@IZATION @ @@@' USING SDSECT,X5 . @E@@@' IF SVV )@@G@@D0BSD+SD0CNT,OFF,SDCLS0 THEN,VGDV21 . @G@@@' IF SD5STR,VW )@@G@@ON,SDCLS5 THEN,VGDV21A . ALREADY GEN THIS CODE @H@@@' LINK BVX )@@G@@GDUNSPY . SET UP ADDRESS WORDS FOR BASED-CONTROLLED @ @@@' VY )@@G@@ XGPUSH 'SIZE',1 . @#@@@' GEN . @ @@@' GJUMP SVZ )@@G@@GDAID . @#@@@'VGDV21A LABEL . @E@@@' GMARK SDALSI . WA )@@G@@ SAVE START OF INIT CODE @#@@@' GEN . @^@@@' GLIWB )@@G@@T 1 . @A@@@' LOCAL . BEGIN TO INIT CODE @#@@@'VGDV21 LABWC )@@G@@EL . @B@@@9 LOAD R10,A8 . SAVE !- @H@@@9 LOAWD )@@G@@D R11,SDDCNM,X5 . SET STATEMENT NUMBER OF INITIALIZATION @D@@@9WE )@@G@@ STORE R11,DCGSNO . SET STATEMENT NUMBER @F@@@9 LINWF )@@G@@K PGMVIS . -> RESET STATEMENT CODE GENERATOR @E@@@' STOWG )@@G@@RE R11,DCGLST . SAVE STATEMENT NUMBER @H@@@9. IF A9,EQ,(WH )@@G@@ACCALL/IC)*IC,I THEN,DGCALL+1 . ->GEN CALL TO USER SUBROUT @A@@@9. WI )@@G@@ CALL IN INIT NOT IN ANSI PL/1@[@@@'. @C@@@'. IF BASED/CWJ )@@G@@ONTROLLED THEN,MESSY! @[@@@'. @B@@@9 LOAD A8,W1XU,X5 . SWK )@@G@@D FOR SCALER@E@@@9 XGEN I 'SINGLE' . MAKE STACK ITEM FOR ELEMEWL )@@G@@NT @E@@@9 SET SGDCHR,OFF,SGDID . SET CHECK FLAG OFF WM )@@G@@@^@@@9 LOAD A8,R10 . @C@@@9 XGEN I . EVALUATE WN )@@G@@CONSTANT @F@@@9 GASGN SGDAID+DCGSLT SGDAID . ASSIGN VALUE TOWO )@@G@@ SCALER @D@'@9 XGPOP 'SIZE',2*DCGSLT . CLEAR STACK WP )@@G@@@D@@@' XGPOP 'SIZE',2*DCGSLT . CLEAR STACK @H@@@' WQ )@@G@@ IF SD0BSD+SD0CNT,OFF,SDCLS0 THEN,JMP . NOT BASED OR CONTROLLED WR )@@G@@@G@@@' IF SD5STR,ON,SDCLS5 THEN,JMP . WILL GEN THIS CODE LAWS )@@G@@TER @#@@@' GENM . @^@@@' GLIT 1 . @#@@@' WT )@@G@@ JMP . @ @@@' GLABEL SGDAID . @#@@@' GFIN . WU )@@G@@@ @@@' XGPOP 'SIZE',1 . @G@@@' LINK BGDSPY . WV )@@G@@ FIX UP A.W.'S FOR BASED OR CONTROLLED@#@@@'CGIN21 LABEL . @A@@@9WW )@@G@@ JMP . -> RETURN TO CALLER @^@@@9 USING SGDSCT,X7 .@E@@@9WX )@@G@@VGSTRN LABEL . STRING INITIALIZATION @F@@@9 WY )@@G@@ GMARK DBGWC1 . SAVE START OF INITIAL CODE @E@@@' WZ )@@G@@ SET SD5STR,ON,SDCLS5 . SET FLAG = STRING INIT @^@@@9 LINXA )@@G@@K CGNTSC . @A@@@' SET SD5STR,OFF,SDCLS5 .@F@@@9 LOAXB )@@G@@D A3,DBGWC1 . PICK UP START OF INITIAL CODE @F@@@9 STOXC )@@G@@RE A3,SDINTM,X5 . AND PUT IT IN THE SD FOR EXEC @D@@@' IF XD )@@G@@ SD0BSD+SD0CNT,ON,SDCLS0 THEN,VGDVNL .@#@@@9 GEN . @D@@@9XE )@@G@@ GSUB EXAYIN . RETURN TO EXEC @F@@@9 GOTXF )@@G@@O VGDVNL . GET NEXT DV TO BE INITIALIZED @^@@@9/ . ========XG )@@G@@========== @E@@@9 . SUBROUTINE FINDS BOUNDS WHICH MUST FIT INTO A HALFWXH )@@G@@ORD @^@@@9 . ----------------- @G@@@9VGCVBD LOCAL . ON RETURN A3=COXI )@@G@@ND CODE (0->CONSTANT BOUND;1->NON-CONST) @#@@@9 GETC . @D@@@9XJ )@@G@@ IF A8,NE,ACSTAR,I THEN,VGCVB2 . -> NON-'*' @^@@@9 USINGXK )@@G@@ SDSECT,X5 .@E@@@9 IF SDPARM,ON,SDCLS2 THEN,VGCVB3 . ->PARM WITHXL )@@G@@ '*' @^@@@9 LOAD F,SDCLS5 . @F@@@9 IF SD5MSG,ON THEN,VGCXM )@@G@@VB3 . ->ERROR MESSAGE ALREADY GIVEN @C@@@9 SET SD5MSG,ON . SET FXN )@@G@@LAG AND GIVE ERROR@^@@@9 STORE F,SDCLS5 . @G@@@9 EXERR ERVG0XO )@@G@@2 LEVEL,2 . 'VBLE HAS A * BOUND OR LENGTH. 10 IS USED'@G@@@9 . 'VARIABLEXP )@@G@@ ', SDX5, ' HAS A * BOUND OR LENGTH FIELD. 10 IS USED' @[@@@9 . XQ )@@G@@@#@@@9VGCVB3 LABEL . @^@@@9 LOAD A2,10,I . @G@@@9 LOAD XR )@@G@@ A3,VGCON,I . SET DEFAULT AND SET CONDITION FOR CONSTANT @C@@@9 XS )@@G@@ LOADA X2,AGRL1,X7 . POINT TO FAKE AW @ @@@9 SUB X2,DCGSLTXT )@@G@@,I . @^@@@9 JMP . RETURN @[@@@9 . @[@@@9 . @E@@@9VGCVB2XU )@@G@@ LABEL . NON-STAR BOUND OR LENGTH FIELD @F@@@9 IF SXV )@@G@@DPARM,OFF,SDCLS2 THEN,VGCVB8 . ->NON-PARM,NON-'*' @^@@@9 LOAD XW )@@G@@ F,SDCLS5 . @E@@@9 IF SD5MSG,ON THEN,VGCVB4 . ->MESSAGE ALREADY XX )@@G@@GIVEN @D@@@9 SET SD5MSG,ON . SET FLAG AND GIVE MESSAGE @^@@@9XY )@@G@@ STORE F,SDCLS5 . @E@@@9 EXERR ERVG03 LEVEL,2 . 'VBLE HAS A XZ )@@G@@NON-STAR BOUND @[@@@9 . @#@@@9VGCVB4 LABEL . @#@@@9 GETC YA )@@G@@. @G@@@9 IF A8,NE,ACENEX,I THEN,VGCVB4 . ->GETC'S UNTIL END YB )@@G@@OF EXPR. @C@@@9 GOTO VGCVB3 . EXIT WITH CONSTANT FLAG SET@[@@@9YC )@@G@@ . @[@@@9 . @#@@@9VGCVB8 LABEL . @ @@@9 USING SDSECT,X5YD )@@G@@ . @F@@@9 IF SD0STA,OFF,SDCLS0 THEN,VGCVB1 . ->NOT STATIC VBLYE )@@G@@E @C@@@9 MOVE DXGTPS,XGSTAT,I . CONSTANTS ONLY @#@@@9 YF )@@G@@ XGEN I . @D@@@9 MOVE DXGTPS,XGSANY,I . RESET CLASS TO ANY YG )@@G@@@^@@@9 GOTO VGCVB0 . @[@@@9 . @#@@@9VGCVB1 LABEL . @#@@@9YH )@@G@@ XGEN I . @G@@@9VGCVB0* LLOC . XGEN ENTERS HERE(IT STACKS RET AYI )@@G@@DDR BEFORE ENTERING) @^@@@9 USING SGDSCT,X7 .@E@@@9 IF SYJ )@@G@@DVRCN,ON,SGDCLS THEN,VGCNBD . ->CONSTANT FOUND @F@@@9 STORE X3,YK )@@G@@DBGWC2 . SAVE REGISTERS ACROSS CGCONV CALL @ @@@9 STORE X4,YL )@@G@@DBGWC2+1 . @C@@@9 MOVE DGGSTK,0,I . FAKE A STACK ENTRY @B@@@9YM )@@G@@ MOVE DGGCLS,SDDCBN,I . FIXED BIN@F@@@9 CGCONV DGGSTK R,YN )@@G@@X7 . CONVERT TO FIXED BINARY IF NEEDED @E@@@9 LOAD A3,DGGSCPYO )@@G@@ . SIGNED SCALE AND PRECISION @E@@@9 DSA A3,9 . SYP )@@G@@IGNED SCALE RIGHT JUSTIFIED @D@@@9 SRB A4,36-9 . RIGHT JYQ )@@G@@USTIFIED PRECISION@D@@@9 SUB A4,A3 . PRECISION OF INTEGEYR )@@G@@R PART@D@@@9 TLE,U A4,18 . -> PRECISION TOO LARGE @E@@@9YS )@@G@@ TG,U A4,0 . -> PRECISION IN PROPER RANGE @G@@@9 YT )@@G@@ LOAD A4,KBXHMP,I . LOAD MAX PREC FOR A BINARY FIXED HALFWORD @E@@@9YU )@@G@@ STORE A4,DGGSCP . SET NEW SCALE (=0) AND PRECISION @C@@@9 YV )@@G@@ CGCONV R,X2 R,X3 . CONVERT TO INTEGER @#@@@9VGCVB6 LABEL . @^@@@9YW )@@G@@ LOAD A3,SGDPRE .@F@@@9 IF A3,LT,KBXHMP+1,I THEN,VGCVB7 .YX )@@G@@ -> WILL FIT IN HALFWORD@F@@@9 LOAD A6,0400000,I . SETYY )@@G@@ COMPARISON CONSTANT @ @@@9 STORE A6,AGX0OF . @#@@@9 YZ )@@G@@ GENM . @E@@@9 GIFR VGCVBG,AGRL1 . -> OPERAND ALREADY IN REGZA )@@G@@ISTER @C@@@9 GLOAD AGRL1 . ASSURE THAT ITS A REG AW @#@@@9VGCVBGZB )@@G@@ GLBL . @F@@@9 GINST OPTG,AGRL1,AGXR0,XU 'NO' . SKIP IF NUMBZC )@@G@@ER TOO SMALL@G@@@9 GINST OPTG,AGRL1,AGXR0,U 'NO' . SKIP IF NUMBZD )@@G@@ER NOT TOO LARGE @E@@@9 GSUB EXHWOV . ROUTINE FOR OVERFLOZE )@@G@@W CORRECTION@#@@@9 GFIN . @#@@@9VGCVB7 LABEL . @D@@@9 ZF )@@G@@ LOAD X3,DBGWC2 . RESTORE SCRATCH REGISTER @B@@@9 LOAD X4,ZG )@@G@@DBGWC2+1 . AFTER CGCONV @E@@@9 LOAD A3,VGNCON,I . SET COND CODE ZH )@@G@@FOR NOT EQUAL @A@@@9 GOTO VGBDEX . AND RETURN @[@@@9 . ZI )@@G@@@#@@@9VGCNBD LABEL . @D@@@9 LSDP X2,SGDRSD,X7 . GET ADDR OF CZJ )@@G@@ONSTANTS SD @F@@@9VGFXIT LABEL . DO IT THE LONG WAY WITH LZK )@@G@@ARGE SCALE @G@@@9 DFU A2,SDFLPT-(SDCLS4-FQ1),X2 . UNPACK FLOAZL )@@G@@TING CONSTANT @G@@@9 IF A2,LT,02001,I THEN,VGZRCN . -> COZM )@@G@@NSTANT TRUNCATES TO ZERO@H@@@9 IF A2,GE,02022,I THEN,VGTOBG .ZN )@@G@@ -> FLOATING CONSTANT TOO LARGE @E@@@9 STOREN A2,X2 . SZO )@@G@@ET SHIFT COUNT FOR SCALING @D@@@9 DSA A3,02074,X2 . RIGHT JZP )@@G@@USTIFY INTEGER @C@@@9 LOAD A2,A4 . SET FOR RETURN ZQ )@@G@@@^@@@9 GOTO VGSGNT . @F@@@9VGZRCN LABEL . CONSTANZR )@@G@@T MAGNATUDE SMALLER THAN 1 @E@@@9 LOAD A2,0,I . SET ZERZS )@@G@@O AS RETURNED VALUE @^@@@9 GOTO VGSGN1 . @A@@@9 . BOUND TOOZT )@@G@@ LARGE. WRITE ERROR @#@@@9VGTOBG LABEL . @I@@@9 EXERR ERVG01ZU )@@G@@ LEVEL,2 . 'CONSTANT BOUND OR LENGTH EXCEEDS 32767, 10 IS USED @[@@@9ZV )@@G@@ . @#@@@9VGDFLT LABEL . @B@@@9 LOAD A2,10,I . SET DEFAULT VZW )@@G@@ALUE @C@@@9 GOTO VGSGNT . SET SIGN SAME AS ORIGINAL @[@@@9 . ZX )@@G@@@#@@@9VGSGNT LABEL . @F@@@9 IF SGDSGN,OFF,SGDCLS THEN,VGSGN1 ZY )@@G@@. ->POSITIVE CONSTNT @^@@@9 LOADN A2,A2 . @#@@@9VGSGN1 LABELZZ )@@G@@ . @D@@@9 LOAD A3,VGCON,I . SET COND CODE FOR RETURN @C@@@9AA )@@G@@ ADD A2,0,I . ENSURE CLEAN ZERO @E@@@9VGBDEX LABEL . AB )@@G@@ RETURN REMOVING STACK ITEM @D@@@9 LOADA X2,AGRL1,AC )@@G@@X7 . POINT TO AW OF RESULT @#@@@9 XGPOP . @]@@@9 JMP .AD )@@G@@@A@@@'/. ROUTINE TO UNDO WHAT BGDSPY DOES@#@@@'BGDUNSPY LLOC . @F@@@'AE )@@G@@ LOAD A3,X9 . START HERE AT CURRENT BLOCK SD @#@@@'AF )@@G@@BGDUN1 LABEL . @D@@@' LOAD X4,SDBKAW,A3 . GET ADDRESS WAG )@@G@@ORD @ @@@' USING WORD,X4 . @E@@@' MOVE W1H1,AGAH )@@G@@RX10,I . SAY TO USE STATIC LINKS @D@@@' LOAD A6,SDBSLD,A3 AI )@@G@@. GET STATIC DEPTH @E@@@' SUB A6,1,I . ZELK SAAJ )@@G@@YS IT'S 1 TOO BIG @E@@@' STORE A6,W1H2,X4 . SET STATIC LIAK )@@G@@NK POINTER @D@@@' LOAD A3,SDBKLK,A3 . MOVE OUT ONE BLOCK AL )@@G@@@G@@@' IF A3,ZERO THEN,LJMP ELSE,BGDUN1 . IF ZERO THEN DONAM )@@G@@E @[@@@'. @C@@@'. ROUTINE TO FIX UP BLOCK ADDRESSING AN )@@G@@@[@@@'. @#@@@'VGVGEH LLOC . @E@@@' LOAD A3,SDBKAW,X9 AO )@@G@@. GET BLOCK ADDRESS WORD @D@@@' MOVE AGXTMP,AGXR10 . AAP )@@G@@SSUME TO USE X10 @ @@@' USING WORD,A3 . @E@@@' IF AQ )@@G@@ W1H1,ZERO THEN,LJMP . IS BLOCK USING X10 @E@@@' STORE AAR )@@G@@3,AGXTMP+FH1 . NOPE! -> USE STATIC LINKS@#@@@' LJMP . @E@@@9AS )@@G@@ END . MAIN CODE GENERATION SETUPS ___@@9 AT )@@G@@*[S@@@*SDFF*@C@@@S. COPYRIGHT 1975 BY UNIVERSITY OF MARYLAND @[@@@SAU )@@G@@. @D@@@S. QUESTIONS CONCERNING THIS SHOULD BE DIRECTED TO: @[@@@SAV )@@G@@. @ @@@S. MARVIN V. ZELKOWITZ @B@@@S. DEPARTMENT OF CAW )@@G@@OMPUTER SCIENCE @A@@@S. UNIVERSITY OF MARYLAND @B@@@S. AX )@@G@@ COLLEGE PARK, MARYLAND 20742 @[@@@S. @G@@@S. PERMISSIOAY )@@G@@N TO USE THESE LISTINGS AND THE COMPUTER PROGRAMS THEY@E@@@S. REPRESENAZ )@@G@@T IS GRANTED UNDER THE FOLLOWING CONDITIONS: @[@@@S. @G@@@S. BA )@@G@@ 1. UNLIMITED USE MAY BE MADE OF THE PROGRAMS REPRESENTED BY @G@@@SBB )@@G@@. THESE LISTINGS PROVIDED THAT THE NAME PLUM OR UNIVERSITY OF MARYLANDBC )@@G@@@E@@@S. PL/1 COMPILER REMAINS ASSOCIATED WITH THESE PROGRAMS. @[@@@SBD )@@G@@. @F@@@S. 2. MODIFICATIONS MAY BE MADE TO THE LISTINGS PROVIDBE )@@G@@ED: @[@@@S. @G@@@S. (A) ANY RESULTING PROGRAM, OR REPORT, PBF )@@G@@APER OR DOCUMENTATION @G@@@S. DESCRIBING SUCH PROGRAM WILL CLEABG )@@G@@RLY INDICATE THAT THE PROGRAM @E@@@S. IS A DIALECT OF PLUM OR IS BH )@@G@@DERIVED FROM PLUM, AND @[@@@S. @G@@@S. (B) ALL SUCH MODIFICABI )@@G@@TIONS, OTHER THAN TRIVIAL CORRECTIONS @F@@@S. OF ERRORS IN THBJ )@@G@@E SOURCE PROGRAMS, SHALL BE REPORTED AND @G@@@S. A BRIEF DESCRIPBK )@@G@@TION OF THE FEATURE ADDED SHALL BE SUBMITTED @C@@@S. TO THE UNBL )@@G@@IVERSITY OF MARYLAND, AND @[@@@S. @F@@@S. (C) NO PROGRAMSBM )@@G@@ DERIVED FROM THESE LISTINGS SHALL BE SOLD@G@@@S. WITHOUT WRITTENBN )@@G@@ APPROVAL FROM THE UNIVERSITY OF MARYLAND, AND @[@@@S. @F@@@S. BO )@@G@@ (D) COPIES OF THESE PROGRAMS MAY BE TRANSMITTED TO OTHER @G@@@S. BP )@@G@@ LOCATIONS PROVIDED THAT SUCH TRANSMITTALS CLEARLY INDICATE @G@@@SBQ )@@G@@. WHETHER THE PROGRAMS ARE EXACT COPIES OF THE UNIVERSITY OF BR )@@G@@@E@@@S. MARYLAND PLUM COMPILER OR ARE MODIFICATIONS TO IT. @[@@@SBS )@@G@@. @G@@@S. 3. THESE CONDITIONS ONLY APPLY TO THE PLUM COMPILERBT )@@G@@ ITSELF, @F@@@S. AND ARE NOT MEANT TO APPLY TO ANY PROGRAM WRITTEN BU )@@G@@USING PLUM. @E@@@S. THE PURPOSE OF THESE CONDITIONS IS TO ALLOW ANY USBV )@@G@@ER TO @F@@@S. EXPERIMENT WITH THE COMPILER AS LONG AS THE RESULTING PRBW )@@G@@ODUCT @G@@@S. IS NOT SOLD AND AS LONG AS IT IS KNOWN THAT THE PRODUCT BX )@@G@@DEVELOPED @#@@@S. FROM PLUM. @[@@@S. @[@@@S. @[@@@S. BY )@@G@@@[@@@S. @[@@@S. @[@@@S/. @]@@@R AXR$ @]@@@R DCLRGBZ )@@G@@@]@@@R REGS @]@@@R ALREG@#@@@R UNLIST . @#@@@R@ADD,PCA )@@G@@ PLTVDS @#@@@R@ADD,P PLCGST @#@@@R@ADD,P PLDSAW @]@@@R CENCB )@@G@@D @#@@@R LIST . @#@@@R/ PLWORD @]@@@R PLCGDCC )@@G@@@]@@@R PLSD @]@@@R PLIG @A@@@RGGKNST CSECT 3 . MY CONSTACD )@@G@@NTS @C@@@RK332S9 EQU DCVDTB . LOG 10/LOG 2 * 2**14@G@@@RKKSCL CE )@@G@@ EQU 14 . HOW FAR TO SHIFT CONVERSION CONSTANT (K332S9)@B@@@RCF )@@G@@KBXMXP EQU 35 . MAX PREC FOR BIN FIX @B@@@RKDXMXP EQU 18 . MAXCG )@@G@@ PREC FOR DEC FIX @C@@@RKBFMXP EQU 60 . MAX PREC FOR BIN FLOAT CH )@@G@@@C@@@RKSFTMX EQU 36 . SINGLE WORD MAX SHIFT COUNT@C@@@RCGMSK1 SAC SCI )@@G@@DFXFL++SDDCBN++SDRLCX,0777777 . @^@@@RCGMSK2 SF 0777777777 . @]@@@RCJ )@@G@@ CEND @[@@@R. @[@@@R. @H@@@R. GENM AND GENMR SPECIALY DCK )@@G@@EFINED FOR CGCONV SO X2 DOESN'T GET CLOBBERED @#@@@RP PROC *1 . CL )@@G@@@#@@@RCGENR* NAME 1 . @#@@@RCGENMR* NAME 2 . @^@@@R LOAD A10,XCM )@@G@@2 . @C@@@R DO P(0,0)=1 , GENR P(1,1),P(1,2) . @C@@@R CN )@@G@@ DO P(0,0)=2 , GENMR P(1,1),P(1,2) . @^@@@R STORE A10,X2 . CO )@@G@@@]@@@R END .@[@@@R. @B@@@R/. TO USE: CGCONV TARGET CP )@@G@@SOURCE@B@@@R. A(TARGET)->X2 @B@@@R. CQ )@@G@@ A(SOURCE)->X3 @[@@@R. @I@@@R. ACTION: CONVECR )@@G@@RTS AN ENTRY (THE SOURCE OR RIGHT) TO THE TYPE AND PRE- @D@@@R. CS )@@G@@ CISION (P,Q) OF THE TARGET (OR LEFT). @H@@@R. CT )@@G@@ IF THE TYPES AND PRECISIONS (P,Q) ARE THE SAME, NO CODE @ @@@R. CU )@@G@@ IS GENERATED. @H@@@R. IF THE (P,Q) OF THE TARCV )@@G@@GET IS ZERO, THEN THE IMPLIED PL/1 @F@@@R. PRECISION IS COMPCW )@@G@@UTED AND ASSIGNED TO THE SOURCE. @[@@@R. @C@@@R. UPON RETURN: CX )@@G@@ X2 POINTS TO THE TARGET. @C@@@R. X3 POINTS TO TCY )@@G@@HE SOURCE @G@@@R. X4 = 0 -> TARGET IS REAL (FLOAT BICZ )@@G@@N/DEC, FIXED DEC) @H@@@R. 1 -> TARGET IS COMPLEX DA )@@G@@(FLOAT BIN/DEC, FIXED DEC) @D@@@R. 2 -> TARGETDB )@@G@@ IS REAL FIXED BIN@E@@@R. 3 -> TARGET IS COMPLEX DC )@@G@@FIXED BIN @[@@@R. @H@@@R. SET FLAGS IGBNFX OR IGDDD )@@G@@CFX IN DGFLGZ ACCORDING TO WHETHER @H@@@R. THE TYPE OF THE TDE )@@G@@ARGET IS FIXED DEC OR FIXED BIN RESPECTIVELY. @I@@@R. DF )@@G@@ SET SDEXPR IN SGDID IFF SOURCE IS CONSTANT OR THE SOURCE TYPE @B@@@RDG )@@G@@. OR PRECISION WAS MODIFIED. @G@@@R. -*--*--*--*--*--*--*--DH )@@G@@*--*--*--*--*--*--*--*--*--*--*--*--*--*--*- @[@@@R. @F@@@R. IDI )@@G@@NTERNALLY: INITIALLY, X5 USED FOR BRANCH TABLE CGNTAB @ @@@R. DJ )@@G@@ 1 = LEFT DECIMAL @B@@@R. 2 = RIGHT FIX DK )@@G@@@C@@@R. 4 = RIGHT DECIMAL @ @@@R. DL )@@G@@ 8 = LEFT FLOAT @[@@@R. @H@@@R. THROUGHOUT, X4 ISDM )@@G@@ USED FOR REAL/COMPLEX BRANCH TABLES @B@@@R. 0 = LEFT REDN )@@G@@AL RIGHT REAL @C@@@R. 1 = LEFT REAL RIGHT COMPLEX DO )@@G@@@B@@@R. 2 = LEFT COMPLEX RIGHT REAL @C@@@R. 3 = LDP )@@G@@EFT COMPLEX RIGHT COMPLEX @[@@@R. @H@@@R. ABBREDQ )@@G@@V FOR FIXED IS 'X', SO THAT E.G. CGBXDF IS FOR THE @F@@@R. DR )@@G@@ CODE THAT CONVERTS TO FIXED BIN FROM FLOAT DECIMAL. @G@@@R. DS )@@G@@ 'FUNNY FLOAT' IS THE SAME AS FIXED DECIMAL FORMAT @I@@@R. -*--DT )@@G@@*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--DU )@@G@@*- @#@@@RCGSCT1 CSECT 3 . @^@@@R/CGCV* GNTR 3 . @G@@@R DV )@@G@@ LOAD F,SGDCLS,X3 . PUT CLASS INTO F-REG FOR EZ REFERENCE @A@@@RDW )@@G@@ SET IGDCFX+IGBNFX,OFF,DGFLGZ @I@@@R LOAD A10,0,I . A10-DX )@@G@@>X4 UPON RETURN TO CALLER. ITS STORED IN SAVEAREA @D@@@R LOAD DY )@@G@@ X4,0,I . CLEAR BRANCH TABLE REGISTER@D@@@R LOAD X5,0,I DZ )@@G@@ . CLEAR BRANCH TABLE REGISTER@^@@@R USING SGDSCT,X2 @F@@@R EA )@@G@@ IF SDRLCX,OFF,SGDCLS THEN,CGN001 . ->NOT COMPLEX @F@@@R EB )@@G@@ ADD X4,2,I . FOR REAL/COMPLEX BRANCH TABLE LEFT COMPLEX@E@@@R EC )@@G@@ ADD A10,1,I . RETURN REGISTER WILL SAY COMPLEX @]@@@RCGN001 LABELED )@@G@@@E@@@R IF SDDCBN,OFF,SGDCLS THEN,CGN010 . LEFT IS DEC @E@@@REE )@@G@@ IF SDFXFL,OFF,SGDCLS THEN,CGN013 . LEFT IS BX @]@@@RCGN002EF )@@G@@ LABEL@B@@@R ADD X5,8,I . FOR BRANCH TABLE @]@@@RCGN003 LABELEG )@@G@@@B@@@R LOAD A3,W1,X3 . GET W1 OF STACK @D@@@RTFUDGE EQU +(IN EH )@@G@@0,0,1,0) . ELIMINTAE T-FLAG @H@@@R STORE A10,DCGSV3+9 .EI )@@G@@ RETURN 0-3 IN X4 FOR USE IN BRANCH TABLE(S). @I@@@R AND A3,CGEJ )@@G@@MSK1-TFUDGE . REMOVE FROM SGDCLS ALL BITS BUT RLCX,DCBN,FXFT @E@@@REK )@@G@@ LOAD A2,W1,X2 . LOAD THE LEFT STACK DESCRIPTION@F@@@R EL )@@G@@ AND A2,CGMSK2-TFUDGE . LEAVE ONLY CLASS, Q AND P @^@@@R EM )@@G@@ USING WORD,X2 @G@@@R IF A4,NE,A3 THEN,CGN005 . TYPER,QR,PR\EN )@@G@@=TYPEL,QL,PL SO CONTINUE@E@@@S IF SDFXFL,ON THEN,CGT005 . FLOAT EO )@@G@@CONSTANTS ARE OK @E@@@S IF SDVRCN,ON THEN,CGN005 . IF FIXED CONEP )@@G@@STANT FIX AW@D@@@SCGT005 LABEL . NOT FIXED CONSTANT EQ )@@G@@@F@@@R IF SGDSGN,ON THEN,CGN008 . DO THE STUFF FOR THE SIGN ER )@@G@@@D@@@R GRTN 3 . ALL DONE,RETURN @#@@@RCGN005ES )@@G@@ LABEL . @F@@@R IF SDRLCX,OFF THEN,CGN004 . -> RIGHT ET )@@G@@IS REAL @^@S@R USING SGDSCT,X3 @F@S@R SET SGDEXP,ON,SEU )@@G@@GDID . INDICATE CONVERSION TO BE DONE @G@@@R ADD X4,1,I . FEV )@@G@@OR REAL/COMPLEX BRANCH TABLE RIGHT IS COMPLEX @]@@@RCGN004 LABEL@E@@@REW )@@G@@ IF SDDCBN,ON THEN,CGN006 . ->RIGHT IS BIN @F@@@R EX )@@G@@ ADD X5,4,I . FOR BRANCH TABLE RIGHT IS DEC@]@@@RCGN006EY )@@G@@ LABEL@E@@@R IF SDFXFL,ON THEN,CGN007 . ->RIGHT IS FLOAT EZ )@@G@@@F@@@R ADD X5,2,I . FOR BRANCH TABLE RIGHT IS FIXFA )@@G@@@]@@@RCGN007 LABEL@D@@@R LOADA X1,AGRL1,X3 . X1 <- ADDR(RIGHT AFB )@@G@@W) @D@@@R LOADA X5,CGNTAB,X5 . WHICH CONVERSION TO GOTO @^@@@RFC )@@G@@ USING SGDSCT,X2 @E@@@R IF SGDPRE,ZERO THEN,CGN014 . -FD )@@G@@>IMPLIED PRECISION@ @@@R LOAD X5,W1H2,X5 . @^@@@R GOTO FE )@@G@@ 0,X5 . @#@@@RCGN014 LABEL . @^@@@R LOAD X5,W1H1,X5 @^@@@RFF )@@G@@ GOTO 0,X5 . @[@@@R. @A@@@RCGN010 LABEL . LEFT IS DFG )@@G@@ECIMAL@B@@@R ADD X5,1,I . FOR BRANCH TABLE @^@@@R USINGFH )@@G@@ SGDSCT,X2 @E@@@R IF SDFXFL,ON,SGDCLS THEN,CGN002 . -> LEFT ISFI )@@G@@ FLOAT@ @@@R SET IGDCFX,ON,DGFLGZ @#@@@R GOTO CGN003@A@@@RFJ )@@G@@CGN013 LABEL . LEFT IS FIXED @E@@@R ADD A10,2,I . RETUFK )@@G@@RN REGISTER WILL SAY BIN FIX @E@@@R SET IGBNFX,ON,DGFLGZ . FL )@@G@@SET I-CODE BIN FIX FLG @#@@@R GOTO CGN003@#@@@RCGTBLE CSECT 3 . FM )@@G@@@H@@@RCGNTAB SFW 0 . BRANCH TABLE FOR TYPE OF CONVERSION. LH = PREC FN )@@G@@NOT IMLIED, @A@@@R . . RH = PREC IMPLIED @A@S@RFILL(1) SAC FO )@@G@@ CGBXBF,CGBXBF . 00 @F@@@SFILL(1) SAC CGBXBF,CGBXBF . 00 NOTE INFP )@@G@@PLIED PREC IMPOSSIBLE @A@@@RFILL(1) SAC CGDXBF,CGDXBF . 01 @A@@@RFQ )@@G@@FILL(1) SAC CGBXBX,CGN050Y . 02 @A@@@RFILL(1) SAC CGDXBX,CGFBX . FR )@@G@@03 @A@S@RFILL(1) SAC CGBXDF,CGBXDF . 04 @F@@@SFILL(1) SAC CGBXDFS )@@G@@F,CGBXDF . 04 NOTE IMPLIED PREC IMPOSSIBLE @A@S@RFILL(1) SAC CGDXDFT )@@G@@F,CGDXDF . 05 @F@@@SFILL(1) SAC CGDXDF,CGDXDF . 05 NOTE IMPLIED FU )@@G@@PREC IMPOSSIBLE @A@@@RFILL(1) SAC CGBXDX,CGBUDU . 06 @A@@@RFILL(1FV )@@G@@) SAC CGDXDX,CGN050X . 07 @A@@@RFILL(1) SAC CGBFBF,CGFUFU . 08 FW )@@G@@@A@@@RFILL(1) SAC CGDFBF,CGFUFU . 09 @A@@@RFILL(1) SAC CGBFBX,CGFBFX )@@G@@X . 10 @A@@@RFILL(1) SAC CGDFBX,CGFBX . 11 @A@@@RFILL(1) SAC FY )@@G@@ CGBFDF,CGN021 . 12 @A@@@RFILL(1) SAC CGDFDF,CGFUFU . 13 @A@@@RFZ )@@G@@FILL(1) SAC CGBFDX,CGN021 . 14 @A@@@RFILL(1) SAC CGDFDX,CGN021 . GA )@@G@@15 @B@@@R/. BINARY FLOAT <- BINARY FLOAT @C@@@R. GB )@@G@@ DECIMAL FLOAT <- DECIMAL FLOAT @[@@@R. @]@@@RCGBFBF LABEL@]@@@RGC )@@G@@CGDFDF LABEL@ @@@R LOAD A7,SGDPRE,X3 @D@@@R STORE A7,SGGD )@@G@@DPRE,X2 . CHANGE TARGET PRECISION @#@@@R GOTO CGFUFU@[@@@R. GE )@@G@@@[@@@R. @B@@@R. DECIMAL FLOAT <- BINARY FLOAT@[@@@R. GF )@@G@@@]@@@RCGDFBF LABEL@B@@@R LINK CGCLDP . A7 = CEIL(P/3.32)@D@@@RGG )@@G@@ STORE A7,SGDPRE,X2 . CHANGE TARGET PRECISION @C@@@R GH )@@G@@ . THEN GOTO CGFUFU @[@@@R. @[@@@R. @G@@@R. GI )@@G@@ COME HERE TO DETERMINE COMPLEX/REAL OF DEC FLT, BIN FLT OR @F@@@RGJ )@@G@@. DEC FIX. X4 HOLDS THE APPROPRIATE INDEX (X4=0-3) @[@@@RGK )@@G@@. @C@@@RCGFUFU LABEL . REAL/COMPLEX BRANCH TABLE @C@@@R GL )@@G@@ LOADA X4,CGN019,X4 . WHERE TO BRANCH TO @ @@@R LOAD X4,W1H1,X4 GM )@@G@@. @#@@@R GOTO 0,X4 @#@@@RCGTBLE CSECT 3 . @#@@@RCGN019 SFW GN )@@G@@ 0 @D@@@RFILL(1) SAC CGRET,CGRET . LEFT REAL, RIGHT REAL @D@@@RGO )@@G@@FILL(1) SAC CGFRFC,CGFRFC . LEFT REAL, RIGHT COMP @D@@@RFILL(1) SAC GP )@@G@@ CGFCFR,CGFCFR . LEFT COMP, RIGHT REAL @D@@@RFILL(1) SAC CGRET,CGN0GQ )@@G@@18 . LEFT COMP, RIGHT COMP @]@@@RCGN018 LABEL@B@@@R ADD X1,1,I GR )@@G@@ . POINT TO IMAGINARY AW@A@@@R LOAD X4,0,I . FORCE RETURN @D@@@RGS )@@G@@ GOTO 0,X5 . RETURN TO FROM WHENCE YOU CAME @C@@@R/. GT )@@G@@ DECIMAL FLOAT <- DECIMAL FIXED @[@@@R. @]@@@RCGDFDX LABEL@ @@@RGU )@@G@@ LOAD A7,SGDPRE,X3 @D@@@R STORE A7,SGDPRE,X2 . CHANGGV )@@G@@E TARGET PREC @]@@@RCGN021 LABEL@^@@@R USING SGDSCT,X3 @D@@@RGW )@@G@@ IF SGDSCL,ZERO THEN,CGFUFU . -> SCALE=0 @]@@@RCGN022 LABELGX )@@G@@@F@@@R IF SDVRCN,ON THEN,CGN025 . RICHT IS A CONSTANT GY )@@G@@@D@@@RCGN023 LABEL . RIGHT IS A VARIABLE @C@@@R GZ )@@G@@ LOADN A7,SGDSCP,X3 . (GEN /10**QR)@C@@@R SSA A7,9 HA )@@G@@. TO GET SIGNED SCALE @C@@@R LINK CGDSFT . GEN SHIFTING CODHB )@@G@@E @]@@@RCGN025 LABEL@B@@@R LOADA X5,CGN022 . WHERE TO RETURN HC )@@G@@@D@@@R LOAD X4,CGN019,X4 . WHICH ENTRY OF TABLE @^@@@R HD )@@G@@ GOTO 0,X4 . @[@@@R. @[@@@R. @B@@@R. BINARY FLOAHE )@@G@@T <- DECIMAL FIXED@B@@@R. BINARY FLOAT <- DECIMAL FLOAT@[@@@RHF )@@G@@. @]@@@RCGBFDF LABEL@]@@@RCGBFDX LABEL@B@@@R LINK CGCLMP HG )@@G@@. A7<-CEIL(P*3.32)@F@@@R IF A7,LT,KBFMXP+1,I THEN,CGN026 . -HH )@@G@@>PREC IS OKAY @C@@@R LOAD A7,KBFMXP,I . USE MAX PREC FOR BF HI )@@G@@@]@@@RCGN026 LABEL@D@@@R STORE A7,SGDPRE,X2 . CHANGE TARGET PREHJ )@@G@@C @E@@@R GOTO CGN021 . FIX UP FOR THE SCALE HK )@@G@@@B@@@R/. RETURN: CEIL(P/3.32) IN A7 @ @@@R. DESTRHL )@@G@@OY: A8 @[@@@R. @]@@@RCGCLDP LLOC @E@@@R LOAD A8,SGDPRE,XHM )@@G@@3 . GET PRECISION OF SOURCE @G@@@R SLB A8,KKSCL HN )@@G@@ . SO P'S SCALE MATCHES THAT OF CONSTANT @^@@@R LOAD A7,0,I HO )@@G@@@B@@@R DIV A7,K332S9 . CONVERT @C@@@R ADD A7,1,HP )@@G@@I . GET CEILING @]@@@R LJMP @[@@@R. @[@@@R. HQ )@@G@@@B@@@R. RETURN: CEIL(P*3.32) IN A7 @[@@@R. @]@@@RCGCLMPHR )@@G@@ LLOC @E@@@R LOAD A7,SGDPRE,X3 . GET PRECISION OF SOURCE HS )@@G@@@I@@@R MPYS A7,K332S9 . CONVERT--P=9 BITS, K332S9=15 BITSHT )@@G@@--> NO OVERFLW @D@@@R SRB A7,KKSCL . SHIFT AWAY SCALHU )@@G@@E @C@@@R ADD A7,1,I . GET CEILING @]@@@R HV )@@G@@ LJMP @B@@@R/. BINARY FIXED <- DECIMAL FIXED@[@@@R. @]@@@RHW )@@G@@CGBXDX LABEL@A@@@R LOAD A7,SGDSCP,X3 . @C@@@R SSA HX )@@G@@ A7,9 . TO GET SIGNED SCALE @D@@@R IF A7,EQ,0,I THEN,CHY )@@G@@GN129 . -> NO SCALE @C@@@R MPYS A7,K332S9 . QR*3.32*2**HZ )@@G@@9 @E@@@R SSA A7,KKSCL . SHIFT OUT SCALE OF CONSTANT IA )@@G@@@D@@@R IF A7,LT,0,I THEN,CGN029 . -> NEG. SCALE@D@@@R IB )@@G@@ ADD A7,1,I . POSITIVE SCALE, TAKE CEILING@E@@@R IF A7,LT,KIC )@@G@@BXMXP+1,I THEN,CGN129 . -> QR IS OKAY@C@@@R LOAD A7,KBXMXP,IID )@@G@@ . SET SCALE TO MAX. @^@@@R GOTO CGN129 @#@@@RCGN029 LABELIE )@@G@@ . @D@@@R SUB A7,1,I . NEGATIVE SCALE, TAKE FLOOR @E@@@RIF )@@G@@ IF A7,GE,-KBXMXP,I THEN,CGN129 . -> QR IS OKAY @C@@@R IG )@@G@@ LOAD A7,-KBXMXP,I . SET SCALE TO MIN @#@@@RCGN129 LABEL . @B@S@RIH )@@G@@ STORE A7,SGDSCL,X3 . SET SCALE @B@@@S STORE A7,SGDSCL,XII )@@G@@2 . SET SCALE @B@@@R LINK CGCLMP . CEIL(PR*3.32) @E@@@RIJ )@@G@@ IF A7,LT,KBXMXP+1,I THEN,CGN329 . -> PR IS OKAY@C@@@R IK )@@G@@ LOAD A7,KBXMXP,I . SET PREC. TO MAX. @#@@@RCGN329 LABEL . @C@S@RIL )@@G@@ STORE A7,SGDPRE,X3 . SET PRECISION @C@@@S STORE A7,SGIM )@@G@@DPRE,X2 . SET PRECISION @[@@@R. @E@@@RCGBUDU LABEL IN )@@G@@. BINARY UNKNOWN <- DECIMAL UNKNOWN @F@@@R IF SDVRCN,OFF IO )@@G@@THEN,CGN031 . ->ITS A VARIABLE @E@@@R LOAD X5,AWOFST,X1 . IP )@@G@@X5 <- DISPLACEMENT OF SDFLPT @#@@@RCGN034 LABEL . @^@@@R USINGIQ )@@G@@ SGDSCT,X3 @C@@@R IF SGDSCL,NZERO THEN,CGBXBF . ->QR_0 @D@@@RIR )@@G@@ SUB X5,2,I . POINT TO FUNNY FLOAT @^@@@R USINGIS )@@G@@ WORD,X5 . @B@@@R LOAD A7,W1 . GET W1 OF FXPT @G@@@R IT )@@G@@ IF A7,NE,0,I THEN,CGN033 . ->NOT AN INTEGER ******* @C@@@RIU )@@G@@ ADD X5,1,I . INPUT DID CONVERT, SO @E@@@R STORE X5,AWIV )@@G@@OFST,X1 . POINT TO INTEGER CONSTANT AND@G@@@R SET SDDCBN,ONIW )@@G@@ . SET BINARY INPUT . QDECIMAL=QBINARY=0 @C@@@R GOTO CGN05IX )@@G@@0 . DO BX- VARIABLE @D@@@R LOAD X5,KB )@@G@@AWOFST,X1 . POINT TO FLOAT VALUE @C@@@R SUB X5,2,I . KC )@@G@@ FUNNY FLOAT PTR@B@@@R STORE X5,AWOFST,X1 . SAVE IT @^@@@RKD )@@G@@ USING WORD,X5 .@E@@@R IF W1,NZERO THEN,CGFUFU . ->HAKE )@@G@@VE FUNNY FLOAT @D@@@R ADD X5,1,I . ONLY HAVE BINARKF )@@G@@Y FORM@ @@@R STORE X5,AWOFST,X1 .@D@@@R GOTO CGN066 . KG )@@G@@ ->CONVERT BX TO DX @B@@@RCGN050Y LABEL . BXKH )@@G@@-BX @C@@@R IF SDVRCN,OFF THEN,CGN050 . -> DO IT@ @@@R KI )@@G@@ LOAD X5,AWOFST,X1 . @E@@@R SUB X5,2,I . POINT TKJ )@@G@@O BINARY VALUE @^@@@R USING WORD,X5 .@E@@@R IF W1,KK )@@G@@NZERO THEN,CGN050Z . ->SETUP FIXED DECIMAL@F@@@R ADD X5,1,I . KL )@@G@@ POINT TO ACTUAL BINARY VALUE @ @@@R STORE X5,AWOFSTKM )@@G@@,X1 . @^@@@R GOTO CGN050 . @D@@@RCGN050Z LABEL . KN )@@G@@ USE FUNNY FLOAT @E@@@R SET SDFXFL,ON . DO FLOATKO )@@G@@ TO FIX CONVERSION@^@@@R GOTO CGBXBF . @C@@@RCGN050X LABEL . KP )@@G@@ DX-DX CONVERSION @D@@@R IF SDVRCN,OFF THEN,CGN05KQ )@@G@@0 . -> VARIBALE @E@S@R LOAD A7,AWOFST,X1 . CHANGE FROM FKR )@@G@@LOAT TO FFT @E@@@S LOAD A3,AWOFST,X1 . CHANGE FROM FLOAT TKS )@@G@@O FFT @^@S@R SUB A7,2,I . @^@@@S SUB A3,2,I . @ @S@RKT )@@G@@ STORE A7,AWOFST,X1 . @ @@@S STORE A3,AWOFST,X1 . @^@@@SKU )@@G@@ USING WORD,A3 .@D@@@S IF W1,NZERO THEN,CGN050 . -> FKV )@@G@@UNNY FLT, OK@[@@@S. @B@@@S. REALLY FIXED BINARY CONSTANT KW )@@G@@@[@@@S. @^@@@S ADD A3,1,I . @ @@@S STORE A3,AWOFSTKX )@@G@@,X1 . @E@@@S LOAD A3,SGDPRE,X3 . CONVERT DEC P TO BIN P KY )@@G@@@ @@@S MPYS A3,DCVDTB . @^@@@S SRB A3,14 . @ @@@SKZ )@@G@@ STORE A3,SGDPRE,X3 . @C@@@S SET SDDCBN,ON . SELA )@@G@@T BINARY @ @@@S SET SDVRCN,OFF . @E@@@S GOTO CGFLB )@@G@@BX . DO BINARY FIXED -> DEC FIXED@]@@@RCGN050 LABEL@ @@@R LC )@@G@@ LOAD A7,SGDSCP,X2 @D@@@R SSA A7,9 . GET SIGLD )@@G@@NED SCALE @ @@@R LOAD A8,SGDSCP,X3 . @C@@@R SSA A8,9 LE )@@G@@ . TO GET SIGNED SCALE @B@@@R SUB A7,A8 . COMPUTE QLLF )@@G@@-QR @G@@@R IF A7,EQ,0,I THEN,CGFUFU . QR=QL, ANALYSE REALLG )@@G@@/COMPLEX @G@@@R IF SDDCBN,OFF THEN,CGN045 . -> GOT HLH )@@G@@ERE THRU DXDX @#@@@RCGN051 LABEL . @B@@@R LINK CGISFT LI )@@G@@. GEN(*2(QL-QR)) @ @@@R LOAD X4,CGN032,X4 @C@@@R GOTO LJ )@@G@@ 0,X4 . ANALYZE REAL/COMPLEX @[@@@R. @]@@@RCGN045 LABEL@D@@@RLK )@@G@@ LOADA X5,CGN045 . FOR RETURN FROM COMP/COMP @B@@@RCGN040 LABLL )@@G@@EL . MERGE HERE FROM CGDXDF @C@@@R IF A7,EQ,0,I THEN,CGN0LM )@@G@@46 . ->QL=0 @C@@@R LINK CGDSFT . GEN (*10**(QL-QR)) @C@@@RLN )@@G@@ IF A7,GE,1,I THEN,CGN044 . QL-QR>0@E@@@RCGN041 LABEL . LO )@@G@@ COME HERE FROM CGBXDX @E@@@R GEN . LP )@@G@@ TRY TO TRUNCATE IF DIVIDE@H@@@R GFLOAT OPDFA,AGPTX1,AGXLQ )@@G@@UNZ . TRUNCATE FRACT PART USING UNNORM'ED ZERO @^@@@R GOTO CGN04LR )@@G@@6 @F@@@RCGN044 LABEL . CHECK FOR OVFL IF MULTIPLLS )@@G@@Y @G@T@R IF OOPTD,OFF,DGOPT3 THEN,CGN046 . ONLY CHECK ILT )@@G@@F D OPT SET @F@V@T IF DCONFO,OFF,DCGONF THEN,CGN046 . FOFLLU )@@G@@ DISABLED @F@@@V IF DCONSI,OFF,DCGONF THEN,CGN046 . SIZELV )@@G@@ DISABLED @E@U@R GENM . GENERATE OVERFLOW CLW )@@G@@HECK @E@@@U. GENM . GENERATE OVERFLOW CHECK LX )@@G@@@C@U@R GSUB RTOVCH . TO RUNTIME CHECKER @C@@@U. GSUB LY )@@G@@ RTOVCH . TO RUNTIME CHECKER @F@U@R GINST 00,AGRA3,AGPTLZ )@@G@@X1 'NO' . FUNNY INST FOR SUBROUTINE@F@@@U. GINST 00,AGRA3,AGPTMA )@@G@@X1 'NO' . FUNNY INST FOR SUBROUTINE@#@U@R GFIN . @#@@@U. MB )@@G@@ GFIN . @D@U@R LOAD A6,SGDPRE,X2 . GET THE PRESISION MC )@@G@@@D@@@U. LOAD A6,SGDPRE,X2 . GET THE PRESISION @E@U@R MD )@@G@@ SUB X10,1,I . GO BACK AN INSTRUCTION @E@@@U. SUBME )@@G@@ X10,1,I . GO BACK AN INSTRUCTION @F@U@R ADD AMF )@@G@@6,A6 . FIX THE PRE FOR INDEX IN TABLE @F@@@U. ADD AMG )@@G@@6,A6 . FIX THE PRE FOR INDEX IN TABLE @G@U@R STORE AMH )@@G@@6,W1Q1,*X10 . PUT THE SCALE IN CODE FOR SUB @G@@@U. STOMI )@@G@@RE A6,W1Q1,*X10 . PUT THE SCALE IN CODE FOR SUB @]@@@RCGN046MJ )@@G@@ LABEL@ @@@R USING SGDSCT,X3 . @A@@@R SET SGDEXP,ONMK )@@G@@,SGDID . @ @@@R LOAD X4,CGN019,X4 @B@@@R GOTO 0,X4 ML )@@G@@ . ANALYZE COMP/REAL @C@@@R/. DECIMAL FIXED <- DECIMAL FLOAMM )@@G@@T @B@@@R. DECIMAL FIXED <- BINARY FLOAT@[@@@R. @]@@@RMN )@@G@@CGDXBF LABEL@]@@@RCGDXDF LABEL@^@@@R USING SGDSCT,X2 @ @@@R MO )@@G@@ LOAD A7,SGDSCP,X2 @C@@@R SSA A7,9 . TO GET SIGNED SCMP )@@G@@ALE @D@@@R LOADA X5,CGDXBF . FOR RETURN FROM COMP/COMP @ @@@RMQ )@@G@@ GOTO CGN040 . @B@@@R/. BINARY FLOAT <- BINARY MR )@@G@@FIXED @B@@@R. DECIMAL FIXED <- BINARY FIXED@B@@@R. MS )@@G@@ DECIMAL FLOAT <- BINARY FIXED@[@@@R. @]@@@RCGBFBX LABEL@D@@@R MT )@@G@@ LOAD A7,SGDPRE,X3 . SET IMPLIED PRECISION @ @@@R STORE A7,SGMU )@@G@@DPRE,X2 . @#@@@R GOTO CGFBX@[@@@R. @]@@@RCGDXBX LABEL@[@@@RMV )@@G@@. @B@@@R LINK CGCLDP . CEIL(P/3.32) @ @@@R STOREMW )@@G@@ A7,SGDPRE,X2 . @G@@@R. THIS SECTION OF CODE WAS THE SUBR. CGCNDQ (CALMX )@@G@@LING CGCNMQ) IN PL/C @B@@@R. IT COMPUTES CEILING/FLOOR OF (Q/3.32) MY )@@G@@@ @@@R LOAD A9,SGDSCL,X3 @B@@@R SLB A9,27 . PUT SIGN MZ )@@G@@IN SIGN BIT @B@@@R LOADM A8,A9 . DO DIV. ON POS #@F@@@R NA )@@G@@ SRB A8,27-KKSCL . SO Q HAS SAME SCALE AS CONSTNNT @A@@@R NB )@@G@@ LOAD A7,0,I . FOR DIV. @^@@@R DIV A7,K332S9 @D@@@R NC )@@G@@ IF A7,EQ,0,I THEN,CGN065 . PREC IS OKAY @H@@@R IF A9,GE,1ND )@@G@@,I THEN,CGN064 . WHETHER TO TAKE FLOOR OR CEILING @H@@@R NE )@@G@@ SUB A7,2,I . FLOOR, SO THAT NET RESULT WILL BE A7-1 (A7-2+1) NF )@@G@@@]@@@RCGN064 LABEL@A@@@R ADD A7,1,I . CEILING @]@@@RCGN065NG )@@G@@ LABEL@ @@@R STORE A7,SGDSCL,X2 . @#@@@R GOTO CGFBX@[@@@RNH )@@G@@. @]@@@RCGDFBX LABEL@[@@@R. @B@@@R LINK CGCLDP . CEILNI )@@G@@(P/3.32) @ @@@R STORE A7,SGDPRE,X2 . @C@@@RCGFBX LABEL NJ )@@G@@ . ANY FLOAT <- BINARY FIXED @D@@@R IF SDVRCN,OFF THEN,CGN06NK )@@G@@6 . -> VARIABLE @D@@@R LOAD X5,AWOFST,X1 . RIGHT PTR TO SOUNL )@@G@@RCE @D@@@R SUB X5,1,I . POINT TO BINARY VALUE @ @@@RNM )@@G@@ STORE X5,AWOFST,X1 . @#@@@RCGN066 LABEL . @C@@@R CGENMRNN )@@G@@ CGFLOT . FLOAT THE BIN FIX # @^@@@R USING SGDSCT,X3 @A@@@RNO )@@G@@ SET SGDEXP,ON,SGDID . @F@@@R LOADN A7,SGDSCP,X3 NP )@@G@@. GET NEGATIVE OF SCALE (IN 8 BITS) @D@@@R SSA A7,9 . NQ )@@G@@ FIX FOR THE XH2 @C@@@R IF A7,EQ,0,I THEN,CGN061 . -NR )@@G@@>QR=0 @B@@@R LINK CGTSFT . GEN ( /2**QR) @#@@@RCGN061 LABELNS )@@G@@ . @D@@@R LOADA X5,CGFBX . FOR RETURN FROM COMP/COMP @^@@@RNT )@@G@@ USING SGDSCT,X2 @G@@@R IF SDFXFL,ON THEN,CGN046 . -> NU )@@G@@TARGET IS FLOAT (IE NOT DX) @ @@@R LOAD A7,SGDSCP,X2 @C@@@RNV )@@G@@ SSA A7,9 . TO GET SIGNED SCALE @G@@@R IF ANW )@@G@@7,NE,0,I THEN,CGN040 ELSE,CGN041 . THEY'LL HANDLE THIS@B@@@R/. NX )@@G@@ FLOAT REAL<-FLOAT COMPLEX @]@@@RCGFRFC LABEL@ @@@R LOADA X1,SGNY )@@G@@DIBS,X3 @]@@@R GEN @F@@@R GFREE AGPTX1 . FREE TEMPONZ )@@G@@RARA POINTED TO BY IMAGIN AW @#@@@R GOTO CGRET@[@@@R. @B@@@ROA )@@G@@. FLOAT COMPLEX<-FLOAT REAL @]@@@RCGFCFR LABEL@D@@@R OB )@@G@@ LOAD A7,AGDZRO . INIT IMAGINARY AW TO 0 @G@@@R STORE A7,AGOC )@@G@@IM1,X3 . IMAGIN PART OF ENTRY. NOW TO CGRET... @^@@@S USINGOD )@@G@@ SGDSCT,X3 @E@@@S SET SGDEXP,ON,SGDID . INDICATE CONVERSION WAOE )@@G@@S DONE@[@@@R. @D@@@R. COME HERE TO RETURN FROM WHENCE YOUOF )@@G@@ CAME @]@@@RCGRET LABEL@H@@@R IF SGDSGN,OFF THEN,CGRET1 OG )@@G@@ . -> SIGN POSITIVE, NOT MUCH TO DO@#@@@RCGN008 LABEL . @B@@@R OH )@@G@@ LOADA X4,CGSGND . ASSUME DOUBLE @F@@@R IF 2,OFF,DCGSV3+9 THEOI )@@G@@N,CGRET3 . -> MUST DO DOUBLE NEG @D@@@R LOADA X4,CGSGNS . CHANOJ )@@G@@GE TO SINGLE FOR BIN FIX@#@@@RCGRET3 LABEL . @B@@@R LOADA X1,SGOK )@@G@@DRBS,X3 . REAL PART @^@@@R CGENMR R,X4 . @F@@@R IF 1OL )@@G@@,OFF,DCGSV3+9 THEN,CGRET2 . -> ITS NOT COMPLEX @B@@@R LOADAOM )@@G@@ X1,SGDIBS,X3 . IMAGIN PART@^@@@R CGENMR R,X4 . @#@@@RCGRET2ON )@@G@@ LABEL . @^@S@R USING SGDSCT,X3 @E@@@R SET SGDEXP,ON,SOO )@@G@@GDID . ANSWER IS SIGNED EXPR. @#@@@RCGRET1 LABEL . @D@@@R OP )@@G@@ LOAD A7,W1H2,X2 . RIGHT P,Q <-- LEFT P,Q @ @@@R STORE A7,W1OQ )@@G@@H2,X3 . @D@@@R LOAD F,SGDCLS,X2 . MOVE THE CLASS BITSOR )@@G@@@G@@@R SET SGDSGN+SDVRCN,OFF . REMOVE SIGN AND CONSTANT OS )@@G@@BITS @F@@@R STORE F,SGDCLS,X3 . RESTORE TARGET CLASS FROM F-ROT )@@G@@EG. @#@@@R GRTN 3 @[@@@R. @D@@@R. CODE FOR NEOU )@@G@@GATION OF COVVERTED NUMBER @^@@@R. X1 = A(AW) @B@@@R. OV )@@G@@ GENMR CGSGND FOR DLN A,A @B@@@R. GENMR CGSGNS FOROW )@@G@@ LNA A,A @[@@@R. @C@@@R GMODE 'M' . SET BIT FOR PACKING IOX )@@G@@CODE @]@@@RCGSGND GLBL @E@@@R GIFR CGSGN1,AGPTX1 . -> IF ALREAOY )@@G@@DY IN REGISTER @D@@@R GGETGR AGXTMP,2 . GET A FREE REOZ )@@G@@GISTER@E@@@R GDBLE OPDLN,AGXTMP,AGPTX1 . LOAD THE NEGATIVE PA )@@G@@@F@@@R GSET AGPTX1,AGXTMP . POINT TO THE NEW ADRESS WRD PB )@@G@@@#@@@R GFIN . @]@@@RCGSGN1 GLBL @F@@@R GDBLE OPDLN,AGPTXPC )@@G@@1,AGPTX1 'NO' . DO DOUBLE WORD NEGATE @]@@@R GFIN @]@@@RCGSGNSPD )@@G@@ GLBL @E@@@R GIFR CGSGN2,AGPTX1 . -> IF ALREADY IN REGISTER PE )@@G@@@A@@@R GGETGR AGXTMP . GET A REG.@D@@@R GINST OPLNA,AGXTMPF )@@G@@P,AGPTX1 . NEGATIVE LOAD @ @@@R GSET AGPTX1,AGXTMP . @#@@@RPG )@@G@@ GFIN . @]@@@RCGSGN2 GLBL @F@@@R GINST OPLNA,AGPTX1,AGPTPH )@@G@@X1 'NO' . DO SINGLE WORD NEGATE @]@@@R GFIN @ @@@R/. PI )@@G@@ DECIMAL SCALING @B@@@R. A7 = SCALE X1 = A(AW) @F@@@RPJ )@@G@@. GENERATES CODE TO MULTIPLY (A7>0) OR DIVIDE (A7<0) @E@@@RPK )@@G@@. THE (FLOATING) AW POINTED TO BY X1 BY10**Q. @[@@@R. PL )@@G@@@#@@@RCGDSFT LOCAL . @G@@@R LOAD A9,A7 . SAVE A7, IN CASE PM )@@G@@RETURN HERE FOR COMPLEX-ITIES @H@@@R ADD A9,A9 . FOR INDEX OF CPN )@@G@@ORRECT ENTRY (TABLE IS IN DBLE WORDS) @C@@@R IF A9,GE,0,I THPO )@@G@@EN,CGD001 . -> MULTIPLY @A@@@R LOADM A9,A9 . Q<-ABS(Q) @C@@@RPP )@@G@@ LOADA A8,CGD006 . ADDR OF DIVISION CODE @^@@@R GOTO CGD00PQ )@@G@@2 @]@@@RCGD001 LABEL@C@@@R LOADA A8,CGD005 . MULTIPLICATION CPR )@@G@@ODE @]@@@RCGD002 LABEL@B@@@R LOADA A3,KKPW10-2 . BASE OF TABLE PS )@@G@@@F@@@R IF A9,LT,KFLTSZ+1,I THEN,CGD003 . ->Q*2<=TABLE SIZE PT )@@G@@@B@@@R LOADA A3,KFLTSZ-2,X5 . LAST ENTRY @^@@@R GOTO CGD00PU )@@G@@4 @]@@@RCGD003 LABEL@D@@@R ADD A3,A9 . IF OK, GET PROPEPV )@@G@@R ENTRY @]@@@RCGD004 LABEL@E@@@R STORE A3,AGX0OF . DISPLACEMAPW )@@G@@NT OF DESIRED POWER @^@@@R CGENMR R,A8 . @ @@@R USIPX )@@G@@NG SGDSCT,X3 . @A@@@R SET SGDEXP,ON,SGDID . @C@@@R PY )@@G@@ SUB A9,KFLTSZ,I . NEED WE DO MORE? @C@@@R IF A9,GE,1,I THPZ )@@G@@EN,CGD002 . WE DO. @]@@@R JMP .@C@@@R GMODE 'M' . SETQA )@@G@@ BIT FOR PACKING ICODE @]@@@RCGD005 GLBL @B@@@R GIFR CGD007,AGPTQB )@@G@@X1 . IN REG YET?@B@@@R GLOAD AGPTX1,2 . NO, LOAD IT @#@@@RQC )@@G@@CGD007 GLBL . @F@@@R GFLOAT OPDFM,AGPTX1,AGXR0 . MULT BY PROPQD )@@G@@ER POWER OF 10 @#@@@R GFIN . @]@@@RCGD006 GLBL @B@@@R QE )@@G@@ GIFR CGD008,AGPTX1 . IN REG YET?@B@@@R GLOAD AGPTX1,2 . NO, QF )@@G@@LOAD IT @#@@@RCGD008 GLBL . @F@@@R GFLOAT OPDFD,AGPTX1,AGQG )@@G@@XR0 . DIV BY PROPER POWER OF 10 @#@@@R GFIN . @ @@@R/. QH )@@G@@ BASE TWO SCALING @B@@@R. A7 = SCALE X1 = A(AW) QI )@@G@@@F@@@R. GENERATES CODE TO MULTIPLY (A7>0) OR DIVIDE (A7<0) QJ )@@G@@@C@@@R. THE AW POINTED TO BY X1 BY 2**Q. @[@@@R. @]@@@RQK )@@G@@CGTSFT LOCAL@F@@@R LSSC A7,6 . SHIFT INTO PROPER PQL )@@G@@OSITION @E@@@R ADD A7,0200140,I . ADD BIAS, AND FRACTION QM )@@G@@OF 1 @C@@@R STORE A7,AGX0OF . FOR IMMEDIATE LOAD @]@@@R QN )@@G@@ GENM @C@@@R GIFR CGTSF1,AGPTX1 . IN A REG YET ? @E@@@R QO )@@G@@ GGETGR AGXTMP,2 . GET A FREE REGISTER PAIR @F@@@R GSHQP )@@G@@IFT AGXTMP . 'SHIFT ' TO POINT TO EVEN REG @F@@@R GINQQ )@@G@@ST OPLA,AGXTMP,AGXR0,XU . GET THE EXPONENT INTO REG @E@@@R GSHQR )@@G@@IFT AGXTMP . POINT BACK TO ODD REG @G@@@R GSHIN OQS )@@G@@PLDSL,AGXTMP,36+18,I . LEFT JUSTIFY NUMBER IN REG PAIR@F@@@R GFLQT )@@G@@OAT OPDFM,AGXTMP,AGPTX1 . MULTIPLY,AND FREE AGPTX1 @D@@@R GSEQU )@@G@@T AGPTX1,AGXTMP . SET NEW POINTER @E@@@R GFIN . QV )@@G@@ TURN OFF CODE MONSTER @E@@@R GOTO CGTSF2 . QW )@@G@@ RETURN TO CODE @F@@@R GMODE 'M' . SQX )@@G@@ET BIT PACKING FOR ICODER @D@@@RCGTSF1 GLBL . CQY )@@G@@OME HERE IF IN REG@D@@@R GINST OPLA,AGRA2,AGXR0,XU . LOAD EXPOQZ )@@G@@NENT @D@@@R GSHIN OPLDSL,AGRA1,36+18,I . SHIFT OVER @C@@@RRA )@@G@@ GFLOAT OPDFM,AGPTX1,AGRA1 . SCALE @#@@@R GFIN . RB )@@G@@@#@@@RCGTSF2 LABEL . @ @@@R USING SGDSCT,X3 . @A@@@R RC )@@G@@ SET SGDEXP,ON,SGDID . @]@@@R JMP @ @@@R/. INTEGRD )@@G@@ER SCALING @B@@@R. A7 = SCALE X1 = A(AW) @F@@@R. RE )@@G@@ GENERATES CODE TO MULTIPLY (A7>0) OR DIVIDE (A7<0) @E@@@R. RF )@@G@@ THE (BIN FIX) AW POINTED TO BY X1 BY 2**Q. @[@@@R. @#@@@RRG )@@G@@CGISFT LOCAL . @D@@@R IF A7,EQ,0,I THEN,JMP . NO SHIFT NRH )@@G@@EEDED @D@@@R LOADM A8,A7 . Q<-ABS(Q) (LEAVE A7 ALONE) @G@@@RRI )@@G@@ IF A8,LT,KSFTMX+1,I THEN,CGI003 . ITS A LEGAL SHIFT COUNT RJ )@@G@@@E@@@R LOAD A8,KSFTMX,I . MAKE IT MAXIMUM LEGAL SHIFT COUNT@]@@@RRK )@@G@@CGI003 LABEL@C@@@R STORE A8,AGX0OF . FOR IMMEDIATE SHIFT @C@@@RRL )@@G@@ IF A7,GE,0,I THEN,CGI001 . -> MULTIPLY @C@@@R LOADA A3,CGRM )@@G@@I005 . ADDR OF DIVISION CODE @^@@@R GOTO CGI002 @]@@@RCGI001RN )@@G@@ LABEL@H@T@R IF OOPTD,OFF,DGOPT3 THEN,CGI008 . ->NO OVERFLORO )@@G@@W CHECK NEEDED @G@@@T IF DCONOV,OFF,DCGONF THEN,CGI008 RP )@@G@@. =>OVERFLOW DISABLED @E@@@R LOAD A3,35,I . SET UP FRQ )@@G@@OR THE LSC INST @E@@@R SUB A3,SGDPRE,X2 . SUBTRACT OFF RR )@@G@@THE PRE @C@@@R ADD A3,A8 . ADD THE SCALE@E@@@RRS )@@G@@ LOADXI A3,AGXR0+FH1 . GET ADRESS WORD SETUP @F@@@R RT )@@G@@ STORE A3,AGXTMP . SET SHIFT COUNT INTO TEMP AW @F@@@R RU )@@G@@ LOADA A3,CGI009 . SET ADRESS OF 'CHECK' CODE @B@@@R RV )@@G@@ GOTO CGI002 . ->MERGE@B@@@RCGI008 LABEL . COME HERE IF RW )@@G@@NOT CHECK @C@@@R LOADA A3,CGI004 . MULTIPLICATION CODE @]@@@RRX )@@G@@CGI002 LABEL@^@@@R CGENMR R,A3 . @ @@@R USING SGDSCT,X3RY )@@G@@ . @A@@@R SET SGDEXP,ON,SGDID . @]@@@R JMP .@C@@@RRZ )@@G@@ GMODE 'M' . SET BIT FOR PACKING ICODE @C@@@RCGI009 GLBL . CSA )@@G@@ODE FOR 'CHECK' ON LEFT SHIFT @D@@@R GIFR CGISF1,AGPTX1 . ISB )@@G@@S IT IN A REG YET @D@@@R GLOAD AGPTX1,1 . NO -> PUT IT SC )@@G@@IN ONE@C@@@RCGISF1 GLBL . -> MERGE HERE@G@@@R SD )@@G@@ GSHIN OPLSC,AGRA2,AGPTX1 'NO' . COUNT THE NUMBER OF SIGN BITS@G@@@RSE )@@G@@ GINST OPTLE,AGRA3,AGXTMP,XU . TEST TO SEE IF SHIFT COUNT OK SF )@@G@@@F@@@R GSUB RTOVFL . ->GREATER,ERROR ************* SG )@@G@@@D@@@R GGOTO CGI006 . ALREADY IN REG NOW @]@@@RCGI004SH )@@G@@ GLBL @C@@@R GIFR CGI006,AGPTX1 . IS IT IN A REG ? @B@@@R SI )@@G@@ GLOAD AGPTX1,1 . NO, PUT IT IN @]@@@RCGI006 GLBL @C@@@R GSHINSJ )@@G@@ OPLSSC,AGPTX1,AGXR0 . LEFT SHIFT @]@@@R GFIN @]@@@RCGI005 GLBL SK )@@G@@@C@@@R GIFR CGI007,AGPTX1 . IS IT IN A REG ? @B@@@R GLOADSL )@@G@@ AGPTX1,1 . NO, PUT IT IN @]@@@RCGI007 GLBL @C@@@R GSHIN OPSSSM )@@G@@A,AGPTX1,AGXR0 . RIGHT SHIFT @]@@@R GFIN @A@@@R/. FLOATSN )@@G@@ TO FIX CONVERSION@]@@@RCGFIX GLBL @E@@@R GFLOAT OPDFU,AGRA1,ASO )@@G@@GPTX1 . DFU IT,AND FREE AGPTX1@D@@@R GGETGR AGPTX1,1 . GSP )@@G@@ET A REGISTER @C@@@R GSUB RTFXFL . TO RUNTIME 'FIXER' SQ )@@G@@@E@@@R GINST OPSA,AGRA1,AGPTX1 . PUT # INTO TEMPORARY @[@@@RSR )@@G@@. NOTE@[@@@R. NOTE@D@@@R. NOTE ROUTINE RTFXFL RETURNS FIXED VALUE IN SS )@@G@@A1 @[@@@R. NOTE@[@@@R. NOTE@#@@@R GFIN . @[@@@R. @A@@@RST )@@G@@. FIX TO FLOAT CONVERSION@]@@@RCGFLOT GLBL @#@@@R GLIT SU )@@G@@ 1 @C@@@R LA,XU A1,02074 . SETUP MAX. EXPONENT @C@@@R SV )@@G@@ GIFR CGFLT1,AGPTX1 . IN A REG YET?@G@@@RCGFLT2 GLBL . SW )@@G@@ EITHER IN EVEN REG,OR NOT IN REG AT ALL @E@@@R GINST OPLA,SX )@@G@@AGRA3,AGPTX1 . LOAD BIN FIX # INTO A3 @#@@@R GLIT 2 @E@@@RSY )@@G@@ DSA A3,36 . PROPAGATE SIGN FOR DOUBLE WORD @B@@@R SZ )@@G@@ DLCF A1,A3 . DO CONVERSION @]@@@RCGFLT3 GLBL @ @@@R GGETGTA )@@G@@R AGPTX1,2 . @A@@@R GDBLE OPDS,AGRA2,AGPTX1 . @]@@@R TB )@@G@@ GFIN @^@@@R GMODE 'M' . @C@@@RCGFLT1 GLBL . COME HERE IF TC )@@G@@IN REG ALREADY @E@@@R GIFE CGFLT2,AGPTX1 . IS IT IN A EVTD )@@G@@EN REG? @F@@@R GSHIN OPDSA,AGPTX1,36,I . ->ODD REG,SIGN FITE )@@G@@LL LOWER @F@@@R GFLOAT OPDFP,AGRA1,AGPTX1 . LOAD,AND CONVERTTF )@@G@@ TO FLOATING@D@@@R GGOTO CGFLT3 . ->GO RESTORE NUM TG )@@G@@@F@@@R GLBL . DUMP EXTRA CODE (IF ANY)!!!! TH )@@G@@@]@@@R CEND @]@@@R END ___ PROPER POSITION @E@@@R TI )@@G@@*[S@@@*SDFF*@C@@@%. COPYRIGHT 1975 BY UNIVERSITY OF MARYLAND @[@@@%TJ )@@G@@. @D@@@%. QUESTIONS CONCERNING THIS SHOULD BE DIRECTED TO: @[@@@%TK )@@G@@. @ @@@%. MARVIN V. ZELKOWITZ @B@@@%. DEPARTMENT OF CTL )@@G@@OMPUTER SCIENCE @A@@@%. UNIVERSITY OF MARYLAND @B@@@%. TM )@@G@@ COLLEGE PARK, MARYLAND 20742 @[@@@%. @G@@@%. PERMISSIOTN )@@G@@N TO USE THESE LISTINGS AND THE COMPUTER PROGRAMS THEY@E@@@%. REPRESENTO )@@G@@T IS GRANTED UNDER THE FOLLOWING CONDITIONS: @[@@@%. @G@@@%. TP )@@G@@ 1. UNLIMITED USE MAY BE MADE OF THE PROGRAMS REPRESENTED BY @G@@@%TQ )@@G@@. THESE LISTINGS PROVIDED THAT THE NAME PLUM OR UNIVERSITY OF MARYLANDTR )@@G@@@E@@@%. PL/1 COMPILER REMAINS ASSOCIATED WITH THESE PROGRAMS. @[@@@%TS )@@G@@. @F@@@%. 2. MODIFICATIONS MAY BE MADE TO THE LISTINGS PROVIDTT )@@G@@ED: @[@@@%. @G@@@%. (A) ANY RESULTING PROGRAM, OR REPORT, PTU )@@G@@APER OR DOCUMENTATION @G@@@%. DESCRIBING SUCH PROGRAM WILL CLEATV )@@G@@RLY INDICATE THAT THE PROGRAM @E@@@%. IS A DIALECT OF PLUM OR IS TW )@@G@@DERIVED FROM PLUM, AND @[@@@%. @G@@@%. (B) ALL SUCH MODIFICATX )@@G@@TIONS, OTHER THAN TRIVIAL CORRECTIONS @F@@@%. OF ERRORS IN THTY )@@G@@E SOURCE PROGRAMS, SHALL BE REPORTED AND @G@@@%. A BRIEF DESCRIPTZ )@@G@@TION OF THE FEATURE ADDED SHALL BE SUBMITTED @C@@@%. TO THE UNUA )@@G@@IVERSITY OF MARYLAND, AND @[@@@%. @F@@@%. (C) NO PROGRAMSUB )@@G@@ DERIVED FROM THESE LISTINGS SHALL BE SOLD@G@@@%. WITHOUT WRITTENUC )@@G@@ APPROVAL FROM THE UNIVERSITY OF MARYLAND, AND @[@@@%. @F@@@%. UD )@@G@@ (D) COPIES OF THESE PROGRAMS MAY BE TRANSMITTED TO OTHER @G@@@%. UE )@@G@@ LOCATIONS PROVIDED THAT SUCH TRANSMITTALS CLEARLY INDICATE @G@@@%UF )@@G@@. WHETHER THE PROGRAMS ARE EXACT COPIES OF THE UNIVERSITY OF UG )@@G@@@E@@@%. MARYLAND PLUM COMPILER OR ARE MODIFICATIONS TO IT. @[@@@%UH )@@G@@. @G@@@%. 3. THESE CONDITIONS ONLY APPLY TO THE PLUM COMPILERUI )@@G@@ ITSELF, @F@@@%. AND ARE NOT MEANT TO APPLY TO ANY PROGRAM WRITTEN UJ )@@G@@USING PLUM. @E@@@%. THE PURPOSE OF THESE CONDITIONS IS TO ALLOW ANY USUK )@@G@@ER TO @F@@@%. EXPERIMENT WITH THE COMPILER AS LONG AS THE RESULTING PRUL )@@G@@ODUCT @G@@@%. IS NOT SOLD AND AS LONG AS IT IS KNOWN THAT THE PRODUCT UM )@@G@@DEVELOPED @#@@@%. FROM PLUM. @[@@@%. @[@@@%. @[@@@%. UN )@@G@@@[@@@%. @[@@@%. @[@@@%/. @#@@@( AXR$ . @#@@@( UO )@@G@@ DCLRG @#@@@( UNLIST @#@@@(@ADD,P PLTVDS @#@@@(@ADD,PUP )@@G@@ PLCGST @#@@@(@ADD,P PLDSAW @#@@@( LIST @#@@@( UQ )@@G@@ PLWORD @#@@@( PLAC @#@@@( PLCGD @#@@@( UR )@@G@@ PLSD @#@@@( PLIG @A@@@(. ** ASSIGNMENT CODE GENERATORUS )@@G@@** @^@@@(AGRHSR EQU AGPTX3 @^@@@(AGRHSI EQU AGPTX4 @D@@@(UT )@@G@@AGLHSR EQU 1 . (SAME AS AGPTA7) @D@@@(AGLHSI EQUUU )@@G@@ 2 . (SAME AS AGPTA8) @G@@@%FLITRG EQU A10+1 .UV )@@G@@ POINT TO SAVE SLOT WHERE A5 GOES @^@@@(. **ASSIGNMENT DRIUW )@@G@@VER** @#@@@(XGAS CSECT 3 @#@@@(DXGF350 SFW 0@A@@@( +SUX )@@G@@D0ART+SGDEXP,SDDCBN,0,35@ @@@(XGASGN* LABEL .@ @@@( UY )@@G@@ GNTR 7 .@G@@@( LOADA X5,XGASTB . [R5] X5 -> TAUZ )@@G@@BLE OF ICODE DISPLACEMENTS @B@@@( GOTO XGASM1 .VA )@@G@@ MERGE@E@@@(XGATMR LABEL . RETURN THROUGH HERE WHEN A TEMP ASSIGN VB )@@G@@@D@@@( USING SGDSCT,X3 . SET UP THE USING @F@@@( VC )@@G@@ IF SGDEXP,OFF,SGDID THEN,JMP . DON'T TRANSFER BACK @[@@@(. VD )@@G@@@F@@@(. TRANSFER THE ''TEMPS'' ADDRESS WORDS BACK TO THE SOURCE VE )@@G@@@A@@@(. THEY WERE PUT INTO TEMPS @[@@@(. @G@@@( MOVVF )@@G@@E SGDAID+1,DXGTMP+1,2 . MOVE ADDRESS WORDS FOR TEMPS @D@@@( VG )@@G@@ JMP . RETURN TO CALLER @#@@@:XGATMP0 LOCAL . VH )@@G@@@ @@@: GOTO XGATMP1 . @#@@@(XGATMP* LABEL . @#@@@( VI )@@G@@ GNTR 7 @#@@@:XGATMP1 LABEL . @D@@@( USING SGDSCT,X2 . VJ )@@G@@ SET UP THE USING @G@@@( MOVE DXGTMP,SGDAID . MOVE TYVK )@@G@@PE,CLASS INTO TEMP WORK AREA @D@@@( USING SGDSCT,X3 . SVL )@@G@@ET UP THE USING @[@@@(. @E@@@(. VM )@@G@@COULD BE UN NECESSARY @[@@@(. @G@@@( MOVE DXGTMP+1,SGDAVN )@@G@@ID+1,2 . SAVE ADDRESSES IN CASE NO CHANGES@E@@@( LOADA X2,DXGTMPVO )@@G@@ . THE TARGET IS NOW DXGTMP @F@@@( SET SGDCHR,OFF,SGVP )@@G@@DID . CAN'T CHECK ON A TEMP ASSING @F@@@( LOADA X11,XGATMR . VQ )@@G@@ POINT TO THE RETURN ROUTINE @E@@@( LOCAL . VR )@@G@@ SET THE RETURN ADDRESS @G@@@( LOADA X5,XGTPTB . PVS )@@G@@OINT TO THE TABLE OF TEMP ICODES @#@@@(XGASM1 LABEL . @G@@@( VT )@@G@@ SET IGCHEK++IGARRY++IGSTVR++IGCSZE,OFF,DGFLGZ . CLEAR ICODE FLAG@C@@@(VU )@@G@@ LOADA X11,XGASND . SET RETURN @D@@@( LOAD A3,VV )@@G@@SGDID,X2 . GET TARGET TYPE @E@@@( AND,U A3,15 VW )@@G@@ . SAVE ONLY TYPE FIELD @^@@@( LOAD X1,A4 @D@@@( VX )@@G@@ LOAD X1,XGTPTB+FH1,X1 . GET ROUTINE OFFSET @D@@@( GOTO 0,XVY )@@G@@1 . GET PROPER ROUTINE @#@@@(XGAS CSECT 3 @E@@@(. * H2VZ )@@G@@ IS TABLE OF I-CODE OFFSETS FOR TEMPORARY ASSIGNMENTS @#@@@(XGTPTB LABWA )@@G@@EL . @A@%@(FILL(1) SAC XGASND,0 . 0 @B@@@%FILL(1) SAC XGAWB )@@G@@SND,000000 . 0@F@@@(FILL(1) SAC XGARAS,XGTPRF-XGTPTB . 1WC )@@G@@ ARITHMATIC ASSIGNMENT @B@@@(FILL(1) SAC XGASND,XGTPTB-XGTPCF . 2WD )@@G@@@G@@@(FILL(1) SAC XGSTGA,XGTPRX-XGTPTB . 3 'STRING' P.V. ASSIGNMEWE )@@G@@NT @F@@@(FILL(1) SAC XGSTAS,XGTPTB-XGTPCX . 4 STRING ASSIGNMENWF )@@G@@T @E@@@(FILL(1) SAC XGLABA,XGTPLB-XGTPTB . 5 LABEL ASSIGNMENTWG )@@G@@@B@@@(FILL(1) SAC XGASND,XGTPLV-XGTPTB . 6@G@%@(FILL(1) SAC XGPWH )@@G@@TRA,XGSTA1-XGTPTB . . 7 POINTER ASSIGNMENT,CHAR=XXXX@G@@@%FILL(1) SACWI )@@G@@ XGPTRA,XGSTA1-XGTPTB . 7 POINTER ASSIGNMENT,CHAR=XXXX@G@@@(FILL(1WJ )@@G@@) SAC XGUSPA,XGSTA2-XGTPTB . 8 'UNSPEC' P.V. ASSIGN,BIT=CHAR@B@@@(WK )@@G@@FILL(1) SAC XGASND,XGSTA3-XGTPTB . 9@E@@@(. * H2 IS TABLE OF I-CODWL )@@G@@E OFFSETS FOR NORMAL ASSIGNMENT @#@@@(XGASTB LABEL . @C@%@(FILL(1WM )@@G@@) SAC XGASND,0 . 10 @C@@@%FILL(1) SAC XGASND,00WN )@@G@@0000 . 10 @C@%@(FILL(1) SAC XGASND,XGASRF-XGASTB . 1WO )@@G@@1 @E@@@%FILL(1) SAC XGASND,XGASRF-XGASTB . 11 AREA ASSIGNMENT WP )@@G@@@F@@@(FILL(1) SAC XGSBPV,XGASTB-XGASRF . 12 SUBSTR P. V. ASSIGNMNTWQ )@@G@@@C@@@(FILL(1) SAC XGASND,XGARX1-XGASTB . 13 @F@@@(FILL(1) SACWR )@@G@@ XGCLCK,XGASTB-XGARX1 . 14 CLOCK PSEUDO VAR @G@@@(FILL(1) SACWS )@@G@@ XGPNPV,XGASLB-XGASTB . 15 PAGE NUMBER PSEUDO VAR @ @%@(FILL(1WT )@@G@@) SAC 0,XGASLV-XGASTB@E@@@%FILL(1) SAC 0,XGASLV-XGASTB . OFFSET=OFWU )@@G@@FSET,LABEL=LABEL @C@%@(FILL(1) SAC 0,XGSTA1-XGASTB . CHAR = XXXX WV )@@G@@@E@@@%FILL(1) SAC 0,XGSTA1-XGASTB . OFFSET=POINTER,CHAR = XXXX @C@%@(WW )@@G@@FILL(1) SAC 0,XGSTA2-XGASTB . BIT = CHAR @E@@@%FILL(1) SAC 0,XWX )@@G@@GSTA2-XGASTB . POINTER=OFFSET,BIT = CHAR @C@%@(FILL(1) SAC 0,XGSTA3-WY )@@G@@XGASTB . BIT = BIT @G@@@%FILL(1) SAC XGPTPT-XGASTB,XGSTA3-XGASTBWZ )@@G@@ . POINTER=POINTER,BIT = BIT @#@@@( CEND @D@@@(/XGARAS LAXA )@@G@@BEL . ARITHEMATIC ARGUMENT @ @@@(XGASM0 LOCAL XB )@@G@@ .@E@%@( IF OOPTD,OFF,DGOPT3 THEN,XGASM6 . IF D OPT OFFXC )@@G@@@H@?@% IF DCONFO+DCONSI,OFF,DCGONF THEN,XGASM6 . FOFL,SIZEXD )@@G@@ DISABLED @F@@@? IF DCONSI,OFF,DCGONF THEN,XGASM6 . SIZEXE )@@G@@ DISABLED @ @@@( LOAD A7,SGDPRE,X2 @ @@@( USING SXF )@@G@@GDSCT,X3 @E@!@( IF A7,LT,SGDPRE THEN,XGASM6 . IF TARGET BIXG )@@G@@G ENUF@E@@@! IF A7,GE,SGDPRE THEN,XGASM6 . IF TARGET BIG ENUFXH )@@G@@@^@@@( USING SGDSCT,X2@F@@@( IF SDFXFL,ON,SGDCLS THENXI )@@G@@,XGASM6 . IF TARGET FLOAT @D@@@( SET IGCSZE,ON,DGFLGZ . XJ )@@G@@SET SIZE CHECK ON @D@@@( LOAD A9,SGDPRE,X2 . GET BIN PRXK )@@G@@EC @C@@@( IF SDDCBN,ON,SGDCLS THEN,XGASM6A . @G@@@( XL )@@G@@ LSSC A9,1 . SET SCALE FOR INDEX IN KKPW10 TABLE @E@@@(XM )@@G@@ GOTO XGASM6 . MERGE WITH FIXED BIN @D@@@(XGASM6XN )@@G@@A LABEL . CHECK IF PRE = 35 @D@@@( IF A9,NE,XO )@@G@@35,I THEN,XGASM6 . CHECK IF PRE < 35@E@@@( SET IGCSZE,OFF,DGXP )@@G@@FLGZ . DON'T CHECK IF PRE = 35@#@@@(XGASM6 LABEL . @F@@@( CGCXQ )@@G@@ONV R,X2 R,X3 . CONVERT LHS TO TYPE OR RHS @F@@@( STOXR )@@G@@RE A9,AGX0OF . SET PRE FOR RUNTIME ROUTINE @^@@@( ADDXS )@@G@@ X4,X5 . @F@%@( LOAD X1,W1XH2+1,X4 . X1= OFFSET TOXT )@@G@@ ASS ICODE @G@@@% LOAD X1,W1XH2+1,X4 . X1= OFFSET TOXU )@@G@@ ASSIGNMENT ICODE @^@@@( SUB X4,X5 . @#@@@(XGASM2 LABEL . XV )@@G@@@F@@@( USING SGDSCT,X3 . IS RHS A CONSTANT OR EXPRESSION? XW )@@G@@@G@@@( IF SGDEXP,ON,SGDID THEN,XGAMLB . DON'T EXIT IF EXPRESSXX )@@G@@ION @D@@@( LOAD A7,X5 . TEMP ENTRY POINT USED? @I@@@(XY )@@G@@ IF A7,EQ,+(IN 0,0,1,XGTPTB),I THEN,JMP . EXIT IF TEMP ENTRY XZ )@@G@@USED AND @B@@@(XGAMLB LABEL . MERGE POINT @ @@@( YA )@@G@@ LOAD A6,X1 .@E@@@( IF A6,GE,0,I THEN,XGASM3 . ->NYB )@@G@@OT COMPLEX IF POS @D@@@( STORE X2,A10 . SAVE X2 POINTEYC )@@G@@R @D@@@( STORE X3,A9 . SAVE X3 POINTER @F@@@(YD )@@G@@ STOREN A6,X1 . POINT TO THE RIGHT OFFSET NOW @E@@@(YE )@@G@@ ADD X1,X5 . ADD BACK IN TABLE OFFSET @G@@@( YF )@@G@@ LOAD X5,XGASTB+FXH2,X4 . GET THE POINTER TO THE ICODE @E@@@(YG )@@G@@ LOADA X5,XGASTB,X5 . ADD IN THE TABLE OFFSET @[@@@(. YH )@@G@@@G@@@(. REVERSE REAL AND COMPLEX POINTERS FOR ASSINGMENT OF COMPLEX HYI )@@G@@ALVES @[@@@(. @F@@@( LOADA A7,SGDIBS,X2 . POINT TO IMAGYJ )@@G@@INARY AW OF LHS @E@@@( LOADA A8,SGDRBS,X2 . POINT TO REALYK )@@G@@ AW OF LHS @F@@@( LOADA X4,SGDRBS,X3 . SET AW OF REAL PARTYL )@@G@@ OF RHS @F@@@( LOADA X3,SGDIBS,X3 . SET AW OF IMAGINARYYM )@@G@@ OF RHS @^@@@( GENMR R,X1 @G@@@(. YN )@@G@@ FORCE REAL ASSIGNMENTS NOW WITH ZERO @E@@@( MOVE X1,YO )@@G@@0,I . X1 <- 0 (THEN X1 <- X1 + X5) @D@@@( LOAD X2,A10 YP )@@G@@ . RESET X2 POINTER @D@@@( LOAD X3,A9 . RYQ )@@G@@ESTORE RHS POINTER@#@@@(XGASM3 LABEL . @^@@@( ADD X1,X5 YR )@@G@@@#@@@(XGASM5 LABEL . @^@@@( USING SGDSCT,X2@G@@@( IF YS )@@G@@ SGDCHR,OFF,SGDID THEN,XGASM4 . -> LHS IS NOT CHECKED @D@@@( YT )@@G@@ LOAD X5,X2 . SET PTR TO AW @E@@@( SET IGCYU )@@G@@HEK,ON,DGFLGZ . SET FLAG FOR ICODER@D@@@( LSDP X4,SGDRSYV )@@G@@D,X2 . X4GETS SD FOR LHS@^@@@( USING SDSECT,X4@E@@@( YW )@@G@@ IF SDARRY,OFF,SDCLS2 THEN,XGASM4 . ARRAY REF @A@@@( SETYX )@@G@@ IGARRY,ON,DGFLGZ . @#@@@(XGASM4 LABEL . @D@@@( LOADA A7,YY )@@G@@SGDRBS,X2 . LEFT REAL AW @D@@@( LOADA A8,SGDIBS,X2 YZ )@@G@@ . LEFT IMAG AW @D@@@( LOADA X4,SGDIBS,X3 . AW OF I PAZA )@@G@@RT OF RHS @D@@@( LOADA X3,SGDRBS,X3 . AW OF REAL PART OF RHS ZB )@@G@@@^@@@( GENMR R,X1 . @^@@@( LOAD X2,A10 . @#@@@( ZC )@@G@@ JMP . @C@@@(XGSTGA LABEL . NOT YET INSTALLED @C@%@(ZD )@@G@@XGPTRA LABEL . NOT YET INSTALLED @#@@@(XGASND LABEL . ZE )@@G@@@E@@@( STORE A10,AGX0OF . RESTORE SHIFT INFORMATION@#@@@(ZF )@@G@@ GRTN 7 @D@@@(XGLABA LOCAL . LABEL ASSIGZG )@@G@@NMENT @F@%@( LOADXM X1,5+W1XH2,X5 . OFFSET FOR LAB VAZH )@@G@@R ASS @G@@@% LOADXM X1,5+W1XH2,X5 . OFFSET FOR LAB VAZI )@@G@@R ASSIGNMENT@ @@@( USING SGDSCT,X3 . @F@%@( IF SDVZJ )@@G@@RCN,OFF,SGDCLS THEN,XGASM2 . RHS LABEL VAR @F@@@% IF SDVZK )@@G@@RCN,ON,SGDCLS THEN,XGASM2 . RHS LABEL VAR @G@@@( LOADXM X1ZL )@@G@@,6+W1XH2,X5 . OFFSET FOR LABEL CONSTANT @^@@@( GOTZM )@@G@@O XGASM3 @C@@@%/. POINTERS AND OFFSETS ARE HANDLED HERE @[@@@%ZN )@@G@@. @#@@@%XGPTRA LOCAL . @H@@@% LOAD A7,X5 . SZO )@@G@@EE IF THIS SHOULD BE A TEMP ASSIGNMENT @G@@@% IF A7,EQ,+(IN 0ZP )@@G@@,0,1,XGASTB),I THEN,XGPTR1 . -> NORAL ASSIGNMENT@G@@@% LOADA XZQ )@@G@@5,XGASTB . SET TO LOOK LIKE NORMAL ASSIGNMENT @G@@@% GTMZR )@@G@@P 3 . GET A 3 WORD TEMP FOR THE ASSIGNMENT @E@@@% ZS )@@G@@ STORE A8,AGR10D . MAKE AN ADDRESS WORD @ @@@% USIZT )@@G@@NG SGDSCT,X2 . @E@@@% LOAD A7,AGXR10 . GET THE ADDREZU )@@G@@SS WORD @E@@@% STORE A7,SGDRBS-FH1 . SET THE STACK ADDREZV )@@G@@SS @E@@@% ADD A7,1,I . SET TO CLEAR MIDDLE WORD ZW )@@G@@@D@@@% STORE A7,AGXTMP . SAVE FOR ICODE @E@@@% ZX )@@G@@ GEN . SET THE TEMP AS UNLINKED!@E@@@% GINZY )@@G@@ST OPSZ,AGRX0,AGXTMP 'NO' . SET AS UNLINKED! @ @@@% ADD AZZ )@@G@@7,1,I . @D@@@% STORE A7,AGXTMP . POINT TO NEXT WORD AA )@@G@@@E@@@% GEN . SET TEMP POINTER FLAG @B@@@%AB )@@G@@ GINST OPSR,AGRR12,AGXTMP,H2 . @F@@@%XGPTR1 LABEL . AC )@@G@@ HAVE NOW TAKEN CARE OF 'TEMPS' @E@@@% LOAD X1,W1H1AD )@@G@@+6,X5 . ASSUME OFFSET=OFFSET @^@@@% ON AD$DR .@E@@@%AE )@@G@@ IF SDPTOF,ON,SGDCLS THEN,XGPTR2 . -> LHS IS OFFSET @^@@@% AF )@@G@@ OFF AD$DR .@F@@@% LOAD X1,W1H1+9,X5 . NOT OFF=OFF,TAG )@@G@@RY POINTER=POINTER@C@@@% USING SGDSCT,X3 . POINT TO RHS AH )@@G@@@G@@@% IF SDPTOF,OFF,SGDCLS THEN,XGASM3 . -> PTR=PTR,GO JOIN OTHAI )@@G@@ERS @E@@@% LOAD X1,W1H1+8,X5 . HERE POINTER=OFFSET! AJ )@@G@@@H@@@%. GOTO XGASM3 . GO MERGE! (NEXT LINE FORCES YOUAK )@@G@@ THERE) @^@@@% ON AD$DR .@E@@@%XGPTR2 LABEL . AL )@@G@@ HERE IF LHS IS OFFSET @F@@@% IF SDPTOF,ON,SGDCLS TAM )@@G@@HEN,XGASM3 . -> RHS IS OFFSET TOO! @E@@@% LOAD X1,W1H1+7,X5 AN )@@G@@. HERE IT IS OFFSET=POINTER@C@@@% GOTO XGASM3 . GAO )@@G@@O AND MERGE @^@@@% OFF AD$DR .@C@@@(/. STRING ASSINGMEAP )@@G@@NTS ARE HANDLED HERE @[@@@(. @[@@@(. @E@%@(XGSTAS LOCAL AQ )@@G@@ . OFFSET TO STRING ASS @F@@@%XGSTAS LOCAL AR )@@G@@ . OFFSET TO STRING ASSIGNMENT @ @@@( LOAD X1,7+W1XHAS )@@G@@2,X5 .@^@@@( USING SGDSCT,X2@F@@@( IF SDCHBT,OFF,SGDCAT )@@G@@LS THEN,XGSTS1 . LHS IS CHAR STRING @ @@@( LOAD X1,9+W1XH2,X5 .AU )@@G@@@ @@@( USING SGDSCT,X3 . @E@@@( IF SDCHBT,ON,SGDCLAV )@@G@@S THEN,XGSTS1 . RHS IS BIT @ @@@( LOADXM X1,8+W1XH2,X5 @#@@@(AW )@@G@@XGSTS1 LABEL . @E@@@( LOAD A7,X5 . GET THE ADDR AX )@@G@@OF TABLE @G@@@( IF A7,EQ,+(IN 0,0,1,XGASTB),I THEN,XGASM3 . AY )@@G@@NORMAL ASSIGN? @F@@@( IF SGDEXP,OFF,SGDID THEN,JMP . DON'T AZ )@@G@@ASSIGN IF NOT EXP @E@@@( LOAD A7,AGSTK . SET LHS TO STBA )@@G@@RING STACK @^@@@( USING SGDSCT,X2@A@@@( STORE A7,SGDRBSBB )@@G@@-FH1,X2 @ @@@( MOVE SGDRDS,0,I @ @@@( SET SGDBC )@@G@@EXP,ON,SGDID@D@@@( GOTO XGASM3 . FINSH ASSIGNMENT BD )@@G@@@ @@@(/. CLOCK PSEUDO - VAR @[@@@(. @[@@@(. @#@@@(XGCLCKBE )@@G@@ LLOC . @E@@@( CGCONV DXGF350 R,X3 . CHANGE TO FIXED BINBF )@@G@@ 35,0 @C@@@( LOADA X4,SGDRDS,X3 . POINT TO RHS @#@@@( BG )@@G@@ GENM @A@@@( GINST OPLA,AGRA3,AGRHSI . @^@@@( GSUBH )@@G@@B BFCLPV @#@@@( GFIN @D@@@( GRTN 7 . BI )@@G@@ RETURN TO CALLER @A@@@(/. PAGE NUMBER PSEUDO VAR @#@@@(BJ )@@G@@XGPNPV LLOC . @C@@@( STORE X2,A9 . SAVE LHS BK )@@G@@@F@@@( CGCONV DXGF350 R,X3 . CONVERT NUMBER TO FIXED BIN BL )@@G@@@C@@@( LOAD X2,A9 . POINT TO LHS @ @@@( USIBM )@@G@@NG SGDSCT,X2 . @E@@@( MOVE AGX0OF,SGDRSD . SET TO POINT BN )@@G@@TO FILE SD @D@@@( LOADA X4,SGDRDS,X3 . POINT TO RHS AW BO )@@G@@@C@@@( GENM . CALL CODER @D@@@( GINBP )@@G@@ST OPLA,AGRA3,AGXR0,U . LOAD ADDR OF SD @D@@@( GINST OPLA,AGBQ )@@G@@RA2,AGRHSI . GET NEW VALUE @D@@@( GSUB BFPNPV . CBR )@@G@@ALL SUBROUTINE @#@@@( GFIN . @D@@@( GRTN 7 . BS )@@G@@ RETURN TO CALLER @C@@@(/. CODE TO PREPARE FOR SUBSTR BT )@@G@@PSEUDO VAR @[@@@(. @[@@@(. @#@@@(XGSBPV LOCAL . @ @@@( BU )@@G@@ USING SDSECT,X2 . @E@@@( LOAD A9,SGDISD . GET FLABV )@@G@@G ABOUT LENGTH @E@@@( IF A9,NE,0,I THEN,XGSBP1 . FLAG IS ON IBW )@@G@@F NO LENGTH @E@@@( LOADA A7,AGRL1+3,X2 . POINT TO WHERE LENGBX )@@G@@TH IS @#@@@( GENM . @C@@@( GSHIFT AGRA3 . PBY )@@G@@OINT TO A4 @E@@@( GINST OPLA,AGRA3,AGLHSR . GET LENGTH INTO ABZ )@@G@@4 @D@@@( GSHIFT AGRA3 . POINT BACK TO A3 @#@@@(CA )@@G@@ GFIN . @#@@@(XGSBP1 LABEL . @ @@@% USING SGDSCT,CB )@@G@@X3 . @F@@@% IF SGDEXP,ON,SGDID THEN,XGSBP3 . SEE IF RHS ICC )@@G@@S EXPR@C@@@% LOAD A9,SGDRSD,X2 . GET SD OF LHS@G@@@% CD )@@G@@ IF A9,NE,SGDRSD THEN,XGSBP3 . STR ON LHS<>STR ON RHS @D@@@:CE )@@G@@ SET SGDEXP,ON,SGDID . SAY RHS IS EXPR @D@@@: STACF )@@G@@CK X2 . SAVE PTR TO LHS @F@@@:. FAKE A GASGN 'TEMP' CG )@@G@@ R,X3 'ATTR',R,X3 'COND','IFEXPR' CALL @F@@@:. SINCE A NORMAL GASGN CH )@@G@@HERE WOULD DESTROY THE DCGSV7 SAVE AREA @^@@@:. WITH A SECOND GNTR 7CI )@@G@@@^@@@: LOAD X2,X3 .@ @@@: LINK XGATMP0 . @^@@@:CJ )@@G@@ UNSTK X2 . @H@:@% GASGN 'TEMP' R,X3 'ATTR',R,X3CK )@@G@@ 'COND','IFEXPR' . PUT RHS IN TEMP @#@@@%XGSBP3 LABEL . @D@@@( CL )@@G@@ LOADA X1,XGSBP2 . POINT TO ICODE @E@@@( GOTO XCM )@@G@@GASM5 . GO TO COMMON ROUTINE @B@@@(/. **UNSPED PSEUDO-VARIACN )@@G@@BEL ASSIGNMENT @[@@@(. @[@@@(. @#@@@(XGUSPA LOCAL . @ @@@%CO )@@G@@ USING SGDSCT,X2 . @E@@@% IF A3,EQ,A4 THEN,XGUSP1 . ICP )@@G@@S IT STRING OR ARITH ARG@E@@@% LOAD A4,SGDCLS . ARITH, CQ )@@G@@GET BIT COUNT @E@@@% OR A4,GARBG3 . MAKE INTO LA,CR )@@G@@U A4,SIZE @#@@@% GEN . @D@@@% GLITRG FLITRG . CS )@@G@@ GEN CONTENTS OF A5 @C@@@%XGUSP1 LABEL . MERGE HCT )@@G@@ERE @F@@@( LOADA X1,XGASUB . POINT TO ICODE FOR UNSPECCU )@@G@@ PV @C@%@( LOAD A5,SGDRSD-FH1 . GET JUMP INST@C@@@% CV )@@G@@ LOAD A5,SGDIBS-FH1 . GET JUMP INST@D@@@( GOTO XGASM5 CW )@@G@@. MERGE WITH NUMBERS @[@@@(. @A@@@(. HERE ISCX )@@G@@ THE ICODE @[@@@(. @^@@@( GMODE 'M' . @#@@@(XGASUB GLBCY )@@G@@L . @D@@@( GBAL XGLA10 . LOAD A2 AND A3 @D@%@(CZ )@@G@@ GLITRG A5 . GENERATE PROPER LMJ@E@@@% GLIDA )@@G@@TRG FLITRG . GEN POPER LMJ (IN A5) @B@@@( GGOTO XDB )@@G@@GCKS1 . FINISH @A@@@(/. ICODES FOR ASSIGNMENTS @[@@@(DC )@@G@@. @[@@@(. @#@@@( GMODE 'M'@#@@@(XGTPCF GLBL . @G@@@(DD )@@G@@ GGETT AGLHSI,2 . GET TEMPS FOR REAL,THEN IMAGINARY DE )@@G@@@G@@@(. REMEMBER THAT REAL & IMAG POINTERS ARE SWDF )@@G@@ITCHED@#@@@(XGTPRF GLBL . @F@@@( GGETT AGLHSR,2 . PDG )@@G@@UT THE NUMBER INTO A TEMP @#@@@(XGASRF GLBL . @D@@@( GIFDH )@@G@@R XGARF2,AGRHSR . IF RHS IN REG @C@@@( GLOAD AGRHSR,2DI )@@G@@ . PUT IN REG @#@@@(XGARF2 GLBL . @ @@@( GBOFF XGCDJ )@@G@@K1S,IGCSZE @F@@@( GSUB RTOVCH . GENERATE THE CALL TDK )@@G@@O SUBROUTINE@F@@@( GINST 00,AGRX0,AGRHSR 'NO' . FUNNY INST FODL )@@G@@R SUBROUTINE@G@@@( GAPPN XGARF3 . GO PUT THE PRECISIODM )@@G@@N INTO THE CODE @E@@@(XGCK1S GLBL . HERE TO FINISDN )@@G@@H ASSIGNMENT@B@@@( GDBLE OPDS,AGRHSR,AGLHSR 'NO' @^@@@( DO )@@G@@ GGOTO XGCKS1 @#@@@(XGTPCX GLBL . @G@@@( GGETT AGLHSI,1 DP )@@G@@. GET TEMPS FOR REAL,THEN IMAGINARY @G@@@(. DQ )@@G@@ REMEMBER THAT REAL & IMAG POINTERS ARE SWITCHED@#@@@(XGTPRX GLBDR )@@G@@L . @F@@@( GGETT AGLHSR,1 . PUT THE NUMBER INTO A TEMDS )@@G@@P @#@@@(XGARX1 GLBL . @ @@@( GIFR XGARX2,AGRHSR @^@@@(DT )@@G@@ GLOAD AGRHSR,1 @#@@@(XGARX2 GLBL . @ @@@( GBOFF XGADU )@@G@@RX3,IGCSZE @F@@@( GINST OPLA,AGRA3,AGRHSR 'NO' . LOAD INTO SCDV )@@G@@RATCH REG @E@@@( GSHIN OPSSA,AGRA3,AGXR0 . SHIFT BY THE PRESICDW )@@G@@ISION @^@@@( GLIT 1 . @D@@@( TZ A3 . DX )@@G@@ CHECK FOR OVERFLOW @E@@@( GSUB RTSZCK . GENERATDY )@@G@@E CALL TO SUB @E@@@(XGARX3 GLBL . MERGE HERE FRDZ )@@G@@OM ABOVE @C@@@( GINST OPSA,AGRHSR,AGLHSR 'NO' . @#@@@(EA )@@G@@XGCKS1 GLBL . @ @@@( GBOFF XGCKS2,IGCHEK @E@@@( GBOEB )@@G@@FF XGCKS3,IGARRY . NOT ARRAY @B@@@( GINST OEC )@@G@@PLA,AGRA3,AGLHSR,U 'NO' @^@%@( GSUB EXCHKA @^@@@% GSUED )@@G@@B ONCHKA @^@@@( GGOTO XGCKS4 @#@@@(XGCKS3 GLBL . @^@%@(EE )@@G@@ GSUB EXCHK @^@@@% GSUB ONCHK @#@@@(XGCKS4 GLBEF )@@G@@L . @^@@@( GAPPN XGCKS5 @#@@@( GLITRG A8@#@@@(XGCKS2EG )@@G@@ GLBL . @^@@@( GFREE AGRHSR @#@@@( GFIN @#@@@(EH )@@G@@ GLBL . @#@@@(XGCKS5 LLOC @A@@@( LOAD A3,DCGSV4EI )@@G@@+AGLHSI @ @@@( LOAD A3,SGDRSD-2,A3 @ @@@( STORE A3,EJ )@@G@@DCGSV4+2 @#@@@( LJMP @G@@@(XGARF3 LLOC . EK )@@G@@ PUT THE SCALE INTO THE CODE FOR RTOVCH @C@@@( LOAD A6,AGX0EL )@@G@@OF . GET THE SCALE@D@@@( SUB X10,1,I . BACK UPEM )@@G@@ ONE LINE @E@@@( SA,Q1 A6,0,*X10 . STORE IT IN THE CODEN )@@G@@E @B@@@( LJMP . RETURN @^@@@( GMOEO )@@G@@DE 'M' . @#@@@(XGTPLB GLBL . @^@@@( GBAL XGGETS @#@@@(EP )@@G@@XGASLB GLBL . @F@@@( GINST OPLA,AGRA3,AGRHSI,U 'NO' . EQ )@@G@@ **??** @B@@@( GINST OPSA,AGRA3,AGLHSI 'NO' @B@@@(ER )@@G@@ GINST OPLA,AGRA3,AGRHSR 'NO' @B@@@( GINST OPSA,AGRAES )@@G@@3,AGLHSR 'NO' @^@@@( GGOTO XGCKS1 @#@@@(XGTPLV GLBL . ET )@@G@@@^@@@( GBAL XGGETS @#@@@(XGASLV GLBL . @A@@@( GDBEU )@@G@@LE OPDL,AGRA3,AGRHSR @A@@@( GDBLE OPDS,AGRA3,AGLHSR @^@@@(EV )@@G@@ GGOTO XGCKS1 @#@@@(XGSTA1 GLBL . @^@@@( GBAL XGLEW )@@G@@A10 @E@@@( GSUB EXCCA . ASSIGN INTO CHAR STRING EX )@@G@@@^@@@( GGOTO XGCKS1 @#@@@(XGSTA2 GLBL . @D@@@( GBAEY )@@G@@L XGLA10 . SET UP POINTERS @E@@@( GSUB EXBCA .EZ )@@G@@ ASSIGN CHAR INTO BIT @D@@@( GGOTO XGCKS1 . FA )@@G@@ IS IT CHECKED? @#@@@(XGSTA3 GLBL . @^@@@( GBAL XGLFB )@@G@@A10 @D@@@( GSUB EXBBA . ASSIGN BIT INTO BIT@^@@@(FC )@@G@@ GGOTO XGCKS1 @[@@@(. @A@@@(. ICODE FOR SUBSTR PSEUFD )@@G@@DO VAR@[@@@(. @#@@@(XGSBP2 GLBL . @F@@@( GBAL XGLA10 FE )@@G@@. LOAD REGS TO POINT TO STRINGS @E@@@( GINST OPLA,AGFF )@@G@@RA1,AGLHSI . GET CHAR TO START ON @D@@@( GSUB BFSBPV . FG )@@G@@ CALL PSEUDO SUBSTR @F@@@( GLITRG A9 . FLAG IFFH )@@G@@ NEED TO COMPUTE LENGTH @E@@@( GGOTO XGCKS1 . SEE IF FI )@@G@@VAR IS CHECKED @#@@@(XGGETS GLBL . @^@@@( GGETT AGLHSR,1 FJ )@@G@@@^@@@( GGETT AGLHSI,1 @#@@@( GRTRN @#@@@(XGLA10 GLBFK )@@G@@L . @B@@@( GINST OPLA,AGRA2,AGLHSR,U 'NO' . @B@@@( GINFL )@@G@@ST OPLA,AGRA3,AGRHSR,U 'NO' . @#@@@( GRTRN @[@@@%. @C@@@%FM )@@G@@. CODE FOR POINTER AND OFFSET ASSIGNMENTS@[@@@%. @^@@@% FN )@@G@@ ON AD$DR .@C@@@%XGOFOF GLBL . OFFSET=OFFSETFO )@@G@@@D@@@% GBAL XGPTR3 . LOAD COMMON REGS @F@@@% FP )@@G@@ GSUB OFFASG . CALL OFFSET ASSIGNMENT CODE @E@@@% FQ )@@G@@ GGOTO XGCKS1 . MERGE FOR CHECK CONDITION@D@@@%XGOFPT GLBFR )@@G@@L . OFFSET=POINTER @E@@@% GBAL XGPTR3 FS )@@G@@. LOAD COMMON REGISTERS @E@@@% GSUB PTTOOF . FT )@@G@@ CALL RUNTIME ROUTINE @E@@@% GGOTO XGCKS1 . MFU )@@G@@ERGE FOR CHECK CONDITION@^@@@% OFF AD$DR .@D@@@%XGPTPT GLBFV )@@G@@L . POINTER=POINTER @E@@@% GBAL XGPTR3 FW )@@G@@. LOAD COMMON REGISTERS @F@@@% GSUB PTRASG . FX )@@G@@ CALL POINTER ASSIGNMENT ROUTINE@E@@@% GGOTO XGCKS1 . FY )@@G@@ MERGE FOR CHECK CONDITION@^@@@% ON AD$DR .@E@@@%XGPTOFFZ )@@G@@ GLBL . HERE FOR POINTER=OFFSET @C@@@% GBAGA )@@G@@L XGLA10 . GET A2,A3 @D@@@% GINST OPLA,AGRA1,AGGB )@@G@@RHSI . GET AREA ADDRESS @E@@@% GSUB OFTOPT . CALL RUGC )@@G@@NTIME ROUTINE @E@@@% GGOTO XGCKS1 . MERGE FOR CHEGD )@@G@@CK CONDITION@^@@@% OFF AD$DR .@E@@@%XGPTR3 GLBL . GE )@@G@@ HERE TO LOAD COMMON REGS @D@@@% GINST OPLA,AGRA3,AGGF )@@G@@LHSR,U 'NO' . GET TARGET@F@@@% GINST OPLA,AGRA2,AGRHSR,U 'NO' GG )@@G@@. GET SOURCE ADDRESS @D@@@% GRTRN . RETURN GH )@@G@@TO ABOVE @#@@@( GFIN @#@@@( CEND . @]@@@( GI )@@G@@ END___ XGARF3 . *[S@@@*SDFF*@C@@@'. COPYRIGHT 1975 BY UNIVERSIGJ )@@G@@TY OF MARYLAND @[@@@'. @D@@@'. QUESTIONS CONCERNING THIS SHOULDGK )@@G@@ BE DIRECTED TO: @[@@@'. @ @@@'. MARVIN V. ZELKOWITZ @B@@@'GL )@@G@@. DEPARTMENT OF COMPUTER SCIENCE @A@@@'. UNIVERSITY OF MGM )@@G@@ARYLAND @B@@@'. COLLEGE PARK, MARYLAND 20742 @[@@@'. GN )@@G@@@G@@@'. PERMISSION TO USE THESE LISTINGS AND THE COMPUTER PROGRAMGO )@@G@@S THEY@E@@@'. REPRESENT IS GRANTED UNDER THE FOLLOWING CONDITIONS: GP )@@G@@@[@@@'. @G@@@'. 1. UNLIMITED USE MAY BE MADE OF THE PROGRAMS GQ )@@G@@REPRESENTED BY @G@@@'. THESE LISTINGS PROVIDED THAT THE NAME PLUM OGR )@@G@@R UNIVERSITY OF MARYLAND@E@@@'. PL/1 COMPILER REMAINS ASSOCIATED WITH GS )@@G@@THESE PROGRAMS. @[@@@'. @F@@@'. 2. MODIFICATIONS MAY BE MADGT )@@G@@E TO THE LISTINGS PROVIDED: @[@@@'. @G@@@'. (A) ANY RESULTIGU )@@G@@NG PROGRAM, OR REPORT, PAPER OR DOCUMENTATION @G@@@'. DESCRIBINGV )@@G@@G SUCH PROGRAM WILL CLEARLY INDICATE THAT THE PROGRAM @E@@@'. IS GW )@@G@@A DIALECT OF PLUM OR IS DERIVED FROM PLUM, AND @[@@@'. @G@@@'. GX )@@G@@ (B) ALL SUCH MODIFICATIONS, OTHER THAN TRIVIAL CORRECTIONS @F@@@'GY )@@G@@. OF ERRORS IN THE SOURCE PROGRAMS, SHALL BE REPORTED AND @G@@@'GZ )@@G@@. A BRIEF DESCRIPTION OF THE FEATURE ADDED SHALL BE SUBMITTED HA )@@G@@@C@@@'. TO THE UNIVERSITY OF MARYLAND, AND @[@@@'. @F@@@'HB )@@G@@. (C) NO PROGRAMS DERIVED FROM THESE LISTINGS SHALL BE SOLD@G@@@'HC )@@G@@. WITHOUT WRITTEN APPROVAL FROM THE UNIVERSITY OF MARYLAND, AND HD )@@G@@@[@@@'. @F@@@'. (D) COPIES OF THESE PROGRAMS MAY BE TRANSMITTHE )@@G@@ED TO OTHER @G@@@'. LOCATIONS PROVIDED THAT SUCH TRANSMITTALS CLEHF )@@G@@ARLY INDICATE @G@@@'. WHETHER THE PROGRAMS ARE EXACT COPIES OHG )@@G@@F THE UNIVERSITY OF @E@@@'. MARYLAND PLUM COMPILER OR ARE MODHH )@@G@@IFICATIONS TO IT. @[@@@'. @G@@@'. 3. THESE CONDITIONS ONLY APHI )@@G@@PLY TO THE PLUM COMPILER ITSELF, @F@@@'. AND ARE NOT MEANT TO APPLYHJ )@@G@@ TO ANY PROGRAM WRITTEN USING PLUM. @E@@@'. THE PURPOSE OF THESE CONDIHK )@@G@@TIONS IS TO ALLOW ANY USER TO @F@@@'. EXPERIMENT WITH THE COMPILER AS HL )@@G@@LONG AS THE RESULTING PRODUCT @G@@@'. IS NOT SOLD AND AS LONG AS IT ISHM )@@G@@ KNOWN THAT THE PRODUCT DEVELOPED @#@@@'. FROM PLUM. @[@@@'. HN )@@G@@@[@@@'. @[@@@'. @[@@@'. @[@@@'. @[@@@'/. @]@@@9 HO )@@G@@ AXR$ @]@@@9 DCLRG@]@@@9 REGS @]@@@9 ALREG@ @@@9 HP )@@G@@ UNLIST .@#@@@9@ADD,P PLTVDS @#@@@9@ADD,P PLCGST HQ )@@G@@@#@@@9@ADD,P PLDSAW @]@@@9 CEND @#@@@9 LIST @#@@@9HR )@@G@@ PLWORD @]@@@9 PLCGD@]@@@9 PLSD @]@@@9 PLIG HS )@@G@@@A@@@9/GGKNST CSECT 3 . MY CONSTANTS @C@@@9K332S9 EQU DCVDTB HT )@@G@@ . LOG 10/LOG 2 * 2**14@G@@@9KKSCL EQU 14 . HOW FAR TO SHIFHU )@@G@@T CONVERSION CONSTANT (K332S9)@B@@@9KBXMXP EQU 35 . MAX PREC FOR BIHV )@@G@@N FIX @B@@@9KDXMXP EQU 18 . MAX PREC FOR DEC FIX @C@@@9KBFMXP EQU HW )@@G@@ 60 . MAX PREC FOR BIN FLOAT @C@@@9KSFTMX EQU 36 . SINGLE WOHX )@@G@@RD MAX SHIFT COUNT@B@@@9KINMXQ EQU 0400 . INTERNAL MAX SCALE @C@@@9HY )@@G@@KBXMXS EQU 72 . MAX DOUBLE WORD SHIFT @^@@@9IGPLUS EQU 02000HZ )@@G@@ . @^@@@9IGZERO EQU 01000 . . @I@@@9AGPTAA EQU 4 . USED FOR IA )@@G@@'AGPTA10'... HERE USED IN MULTIPLY/DIVIDE I-CODE. @ @@@9GGNEMS SQ IB )@@G@@ 0537 . TNE,U @]@@@9GGNHMS SQ @]@@@9GGNLMS SQ @D@@@9GGSHFT SAC IC )@@G@@ GGSHPR,GGSHMR . REAL MULT/DIVIDE ICODE @D@@@9FILL(1) SAC GGSHPC,GGSID )@@G@@HMC . COMPLEX MULT/DIV ICODE @^@@@'GGJNOI SFW 0 . @B@@@' IE )@@G@@ +0746400000003 . JNO 3 @^@@@'GGSBFB SFW 0 . @ @@@'IF )@@G@@ LINK RTFOFB . @^@@@9ERGG09 EQU 43 . @^@@@'ERGG55IG )@@G@@ EQU 55 . @^@@@9ERGG10 EQU 42 . @^@@@9ERGG08 EQU 41 IH )@@G@@. @^@@@9ERGGMAXP EQU 38 . @^@'@9ERGG06 EQU 39 . @^@@@'II )@@G@@ERGG06 EQU 18 . @^@'@9ERGG07 EQU 40 . @^@@@'ERGG07 EQUIJ )@@G@@ 19 . @#@@@9EXERGG12 EQU 44 .@]@@@9 CEND @ @@@9/. IK )@@G@@ ACTION TABLE @#@@@9XGACTB CSECT 3 . @#@@@9XGBPLT* LABEL . @ @@@9IL )@@G@@FILL(1) SAC GGTARI,GGSADS . @ @@@9FILL(1) SAC GGADFR,GGADFC . @ @@@9IM )@@G@@FILL(1) SAC GGADBR,GGADBC . @#@@@9XGBMNT* LABEL . @ @@@9FILL(1) SAC IN )@@G@@ GGTARI,GGSADS . @ @@@9FILL(1) SAC GGSUFR,GGSUFC . @ @@@9FILL(1) SAC IO )@@G@@ GGSUBR,GGSUBC . @#@@@9XGMLTB* LABEL . @ @@@9FILL(1) SAC GGTARI,GGSIP )@@G@@MU . @ @@@9FILL(1) SAC GGMUFR,GGMUFC . @ @@@9FILL(1) SAC GGMUBR,GGMIQ )@@G@@UBC . @#@@@9XGDVTB* LABEL . @ @@@9FILL(1) SAC GGTARI,GGSDV . @ @@@9IR )@@G@@FILL(1) SAC GGDVFR,GGMUFC . @ @@@9FILL(1) SAC GGDVBR,GGMUBC . @#@@@9IS )@@G@@XGUPLT* LABEL . @ @@@9FILL(1) SAC GGTNOP,GGSNOP . @^@@@9FILL(1) SAC IT )@@G@@ GGUPLS,0 .@#@@@9XGUMNT* LABEL . @ @@@9FILL(1) SAC GGTNEG,GGSNOP . IU )@@G@@@^@@@9FILL(1) SAC GGUPLS,0 .@#@@@9XGEXPN* LABEL . @ @@@9FILL(1) SAC IV )@@G@@ GGTNOP,GGSEPN . @^@@@9FILL(1) SAC GGEXPN,0 .@#@@@9XGBADD* LABEL . IW )@@G@@@ @@@9FILL(1) SAC GGTAMD,GGSADD . @ @@@9FILL(1) SAC GGADFR,GGADFC . IX )@@G@@@ @@@9FILL(1) SAC GGADBR,GGADBC . @#@@@9XGBMUL* LABEL . @ @@@9FILL(1IY )@@G@@) SAC GGTAMD,GGSMUL . @ @@@9FILL(1) SAC GGMUFR,GGMUFC . @ @@@9FILL(1IZ )@@G@@) SAC GGMUBR,GGMUBC . @#@@@9XGBDIV* LABEL . @ @@@9FILL(1) SAC GGTAJA )@@G@@MD,GGSDIV . @ @@@9FILL(1) SAC GGDVFR,GGMUFC . @ @@@9FILL(1) SAC GGDVJB )@@G@@BR,GGMUBC . @#@@@9XGBSUB* LABEL . @ @@@9FILL(1) SAC GGTAMD,GGSADD .JC )@@G@@@ @@@9FILL(1) SAC GGSUFR,GGSUFC .@ @@@9FILL(1) SAC GGSUBR,GGSUBC .JD )@@G@@@#@@@'XGRPTR* LABEL . @A@@@'FILL(1) SAC GGTNOP,GGRPTR . @ @@@'JE )@@G@@FILL(1) SAC PTRNOP,0 @F@@@9XGMK2A SFW 0 . TJF )@@G@@ARGETTING FOR HBND, HDIM, DIM @D@@@9 +SD0ART,SDDCBN,0,17 . FIXJG )@@G@@ED BINARY(17,0) @#@@@9 CEND . @D@@@9/. TARGETING FJH )@@G@@OR ARITHMETIC OPS (+,-,*,/) @#@@@9GGTARI* LABEL . @D@@@9 USINGJI )@@G@@ SGDSCT,X7 . AS USUAL, X7 -> TOP OF STACK @#@@@9 GNTR 2 @[@@@9JJ )@@G@@. @[@@@9. @D@@@9. I DON'T THINK THIS IS NECESSARY PRM 3/2JK )@@G@@1/74 @[@@@9. @D@@@9. SET IGITER,OFF,DGFLGZ . NO ITERATIOJL )@@G@@N @[@@@9. @[@@@9. @#@@@9GGTAR2* LABEL . @F@@@9 LOAJM )@@G@@D A7,0,I . CREATE ZERO FOR USE AS 0 SHIFT COUNT @ @@@9 LOAD JN )@@G@@ F,SGDCLS+DCGSLT @D@@@9 LOR F,SGDCLS . TARG TYPE = TYPEL OR TJO )@@G@@YPER @F@@@9 STORE F,DGGCLS . THIS CALCULATES THE IMPLIED TYPJP )@@G@@E @]@@@9GGTAR3 LABEL@E@@@9 SET SDVRCN++SDCCNC,OFF . CLEJQ )@@G@@AR CONSTANT BIT @F@@@9 STORE A7,DGGSCP . SET P, Q (=0 TO GETJR )@@G@@ IMPLIED P, Q) @I@@@9 CGCONV DGGSTK R,X7 . CONVERT ARGR TO JS )@@G@@REQUIRED TYPE (X2 POINTSO DGGID) @G@@@9 STORE A7,DGGSCP . IJT )@@G@@N TARGET SET P,Q=0 TO GET IMPLIED P,Q @C@@@9 LOADA X3,SGDAID+DJU )@@G@@CGSLT . POINT TO OP2 @E@@@9 CGCONV R,X2 R,X3 . CONVERT ARGJV )@@G@@L TO REQUIRED TYPE@F@'@9 MOVE DCGSV2+1,0,I . CLEAR FUTURE SAVEJW )@@G@@ AREA IN A7 [R0] @E@@@' MOVE DCGSV2+1,0,I . CLEAR FUTURE SAVEJX )@@G@@ AREA IN A7 @G@@@9 STORE F,DCGSV2+5 . TARGET CLASS SET FOR RETURJY )@@G@@N IN F-REGISTER @A@@@9 GOTO GGTRET . RETURN @I@@@9 . ---JZ )@@G@@------------------------------------------------------------------------KA )@@G@@-- @E@@@9 . *** TARGETING FOR 'ADD', 'MULTIPLY', AND 'DIVIDE' **** KB )@@G@@@I@@@9 . ---------------------------------------------------------------KC )@@G@@-------------- @#@@@9GGTAMD LABEL . @#@@@9 GNTR 2 .@ @@@9KD )@@G@@ USING SGDSCT,X7 . @H@@@9 LOAD F,SGDCLS+2*DCGSLT . KE )@@G@@ PREPARE TO CONVERT TO HIGHEST TYPE @D@@@9 MOVE DGGSCL,0,KF )@@G@@I . INITIAL SCALE IS ZERO @C@@@9 LOAD A2,60,I . ASSUME KG )@@G@@FLOAT CLASS @A@@@9 LOAD A3,DXGNAR . 3 ARGS?@F@'@9 IF KH )@@G@@ A3,EQ,3*DCGSLT,I . -. IF 3 ARGUMENTS, FLOAT @G@@@' IF KI )@@G@@ A3,EQ,3*DCGSLT,I THEN,GGTMD1 . IF 3 ARGUMENTS, FLOAT @B@@@9 KJ )@@G@@ LOAD A2,35,I . FIXED CLASS @I@@@9 AND,Q2 F,3*DCGSLT,X7 KK )@@G@@. 'OR' CLASS OF LEFT(1ST) ARG OF 4 ****** @D@@@9 LINKL )@@G@@K GTPR3A . ENSURE CLASS IS FIXED @F@'@9 LINK GTEVCN . KM )@@G@@ A9[R1]<-VALUE OF Q (SCALE DESIRED) @E@@@' LINK GTEVCN . KN )@@G@@ A9<-VALUE OF Q (SCALE DESIRED) @C@@@9 LOAD A10,A9 . PKO )@@G@@REPARE FOR GGSSTQ @C@@@9 LOADA X1,DGGSTK . POINT TO TARGET KP )@@G@@@E@@@9 LINK GGSSTQ . STORE QT CHECKING ITS SIZE @^@@@9KQ )@@G@@ GOTO GGTMD2 . @#@@@9GGTMD1 LABEL . @H@@@9 AND,Q2 F,KR )@@G@@DCGSLT,X7 . 'OR' CLASS OF MIDDLE (2ND) ARG OF 3 ******* @D@@@9 KS )@@G@@ LINK GTPR2A . ENSURE CLASS IS FLOAT @F@'@9GGTMD2 LABEL . KT )@@G@@ ERGE AFTER (P[,Q]) ARGS ARE POPPED @F@@@'GGTMD2 LABEL . KU )@@G@@ MERGE AFTER (P[,Q]) ARGS ARE POPPED @D@'@9 LINK GTEKV )@@G@@VCN . A9[R1] <- VALUE OF P @C@@@' LINK GTEVCN . AKW )@@G@@9 <- VALUE OF P @ @'@9 STORE A9,DGGPRE . @E@@@' STOKX )@@G@@RE A9,DGGPRE . SAVE FOR LATER (STAGING) @D@@@' LOAD AKY )@@G@@7,35,I . ASSUME FIXED BIN @D@'@9 IF SDDCBN,ON THEN,KZ )@@G@@GGTMD5 . -> IF BINARY @D@@@' IF SDDCBN,ON THEN,GGTMD5 . -> LA )@@G@@IF BINARY @G@@@9 LOAD A7,18,I . DECIMAL 8FIXED OR FLOAT) LB )@@G@@MAX PRECISION @F@@@9GGTMD5 LABEL . MERGE ONCE MAX PRECLC )@@G@@ISION IS KNOWN @E@@@9 IF A7,LT,A9 THEN,GGTMD3 . -> MAXP< 8LD )@@G@@(A2) [0(R3)]@F@@@9 IF A9,GE,1,I THEN,GGTMD4 . -> PRECISION WILE )@@G@@THIN RANGE @#@@@9GGTMD3 LABEL . @C@@@9 STORE A7,DGGPRE . RLF )@@G@@ESET TO MAX P @A@@@9 EXERR ERGGMAXP LEVEL,1 . @ @@@9 . 'SPLG )@@G@@ECIFIED P IMPROPER' @C@@@9GGTMD4 LABEL . MERGE TO FINILH )@@G@@SH UP @G@@@9 GENM . REMOVE BIF STACK ENTRY AND MOVE THE OTHER 2 LI )@@G@@ENTRIES @B@@@9 GMOVE 3,2 . COPY LEFT ARG@C@@@9 LJ )@@G@@ GMOVE 2,1 . COPY RIGHT ARG @^@@@9 GFIN 'POP' . LK )@@G@@@#@@@9 GRTN 2 .@I@@@9 . ---------------------------------------LL )@@G@@-------------------------------------- @ @@@9 . *** STAGING FOR 'ADD'LM )@@G@@ *** @I@@@9 . ---------------------------------------------------------LN )@@G@@-------------------- @#@@@9GGSADD LABEL . @#@@@9 GNTR 2 .LO )@@G@@@D@@@9 LOAD A7,DGGSCP . GET REQUESTED (Q,P) @D@@@9 LP )@@G@@ GOTO GGTAR3 . -> MERGE TO CONVERT ARGS @I@@@9 . ---------------LQ )@@G@@-------------------------------------------------------------- @B@@@9LR )@@G@@ . ** SUBROUTINE TO CHECK CLASS OF RESULT @I@@@9 . ---------------------LS )@@G@@-------------------------------------------------------- @B@@@9 . NOTLT )@@G@@E: FIXED ARG1'S MUST HAVE 3 ARGS @B@@@9 . FLOAT ARG1'S MUST HAVLU )@@G@@E 2 ARGS @B@@@9 . CORRECTION: NUMBER OF ARGUMENT RULES @E@@@9 . LV )@@G@@ SCALE OF RESULT DETERMINED BY NUMBER OF ARGUMENTS @#@@@9GTPR2A LLOLW )@@G@@C . @E@@@9 LOAD F,A6 . RESTORE CLASS TO F-REGISTER LX )@@G@@@C@@@9GGTPR2 LOCAL . SAVE RETURN ADDRESS@B@@@9 IF LY )@@G@@ SDFXFL,ON THEN,GGTPR4 . @A@@@9 EXERR ERGG06 LEVEL,2 . LZ )@@G@@@C@@@9 . 'RESULT OF PRECISION (X,P) SET TO FLOAT' @D@@@9GGTPR0 LABMA )@@G@@EL . MERGE TO MAKE CORRECTION @F@@@9 XOR,U F,SDFXFL MB )@@G@@. FLIP SCALE BIT ******** @E@@@9 LOAD F,A6 . MC )@@G@@ RESOTRE CLASS TO F-REGISTER @D@@@9 GOTO GGTPR4 . -MD )@@G@@> SET CLASS IN DGGCLS @#@@@9GTPR3A LLOC . @E@@@9 LOAD F,AME )@@G@@6 . RESOTRE CLASS TO F-REGISTER @C@@@9GGTPR3 LOCAL . MF )@@G@@ SAVE RETURN ADDRESS@F@@@9 IF SDFXFL,OFF THEN,GGTPR4 . ->MG )@@G@@ IF FIXED, GOT 3 ARGS @A@@@9 EXERR ERGG07 LEVEL,2 . @C@@@9MH )@@G@@ . 'RESULT OF PRECISION (X,P,Q) SET TO FIXED' @C@@@9 GOTO GGTMI )@@G@@PR0 . -> MAKE CORRECTION @#@@@9GGTPR4 LABEL . @C@@@9 STOMJ )@@G@@RE F,DGGCLS . SET CLASS IN DGGCLS@E@@@9 STORE F,DCGSV2+5 . SMK )@@G@@AVE F-REGISTER FOR RETURN @C@@@9 JMP . -> RETUML )@@G@@RN TO CALLER@I@@@9 . ---------------------------------------------------MM )@@G@@-------------------------- @D@@@9 . SUBROUTINE TO EVALUATE THE CONSTAMN )@@G@@NT AT TOP OF STACK@I@@@9 . ---------------------------------------------MO )@@G@@-------------------------------- @A@'@9 . VALUE IS RETURNED IN A9 [R1MP )@@G@@] @ @@@' . VALUE IS RETURNED IN A9 @B@'@9 . DESTROYED A10[R2], X1MQ )@@G@@ [R1], AND A8 @ @@@' . DESTROYED A10, X1 , AND A8 @#@@@9 . ERROR MESMR )@@G@@SAGES:@B@@@9 . ERGG08 ARGUMENT NOT A CONSTANT @C@@@9 . ERGMS )@@G@@G09 CONSTANT > 32767 IN MAGNITUDE @A@@@9 . ERGG10 CONSTANT NOT MT )@@G@@REAL @ @@@9 USING SGDSCT,X7 . @C@@@9GTEVCN LOCAL . MU )@@G@@ SAVE RETURN ADDRESS@E@@@9 IF SDVRCN,ON,SGDCLS THEN,GTEVCMV )@@G@@8 . -> IF CONSTANT@A@@@9 EXERR ERGG08 LEVEL,2 . @C@@@9 . 'ARMW )@@G@@GUMENT SHOULD BE CONSTANT. 10 IS USED' @F@@@9GTEVC6 LABEL . MX )@@G@@ MERGE TO RETURN REPLACEMENT VALUE @B@@@9 LOAD A9,10,I .MY )@@G@@ GET VALUE @D@@@9 GOTO GTEVC7 . -> FREE, POP, AND RMZ )@@G@@ETURN @A@@@9GTEVC8 LABEL . CONTINUE CHECKING @E@@@9 IF SDRNA )@@G@@LCX,OFF,SGDCLS THEN,GTEVC1 . -> IF REAL @A@@@9 EXERR ERGG10 LENB )@@G@@VEL,2 . @D@@@9 . 'ARGUMENT SHOULD BE REAL. IMAGINARY PART IS USED' NC )@@G@@@#@@@9 GEN . @D@@@9 GSET AGRL1,AGIM1 . SET IMAG PARTND )@@G@@ INTO REAL @#@@@9GTEVC1 LABEL . @E@@@9 LOAD X1,SGDRSD . GNE )@@G@@ET POINTER TO SD FOR CONSTANT @G@@@9 LOAD X1,SDLCOF,X1 . NF )@@G@@ GET LOCATION OF CONSTANT VALUE @F@@@' SUB X1,2,I . -NG )@@G@@> FIXED FORM OF DECIMAL CONSTANT @F@@@9 IF SDDCBN,ON,SGDCLNH )@@G@@S THEN,GTEVC3 . -> IF FIXED BINARY @ @@@' USING WORD,X1 . NI )@@G@@@F@'@9 ADD X1,2,I . -> FIXED FORM OF DECIMAL CONSTANT NJ )@@G@@@E@'@9 IF SGDSCL,NZERO THEN,GTEVC2 . -> IF NON-INTEGER @E@@@'NK )@@G@@ IF W1,NZERO THEN,GTEVC2 . -> IF NON-INTEGER @E@'@9 NL )@@G@@ LOADD A9,W1,X1 . PRESUMED FIXED POINT VALUE @E@@@' LOANM )@@G@@D A9,W1+1,X1 . PRESUMED FIXED POINT VALUE @F@'@9 IF A9,NN )@@G@@ZERO THEN,GTEVC4 . IF INPUT REALLY SUCCEEDED @E@@@' GOTO GNO )@@G@@TEVC4 . CONTINUE TESTING OF SIZE @#@@@9GTEVC5 LABEL . @A@@@9NP )@@G@@ EXERR ERGG09 LEVEL,2 . @B@@@9 . 'ABS (ARGUMENT) > 32767, 10NQ )@@G@@ IS USED' @^@@@9 GOTO GTEVC6 . @#@@@9GTEVC2 LABEL . @D@'@9NR )@@G@@ DFU A8,0,X1 . GET CONSTANT UNPACKED @D@@@' DFUNS )@@G@@ A8,2,X1 . GET CONSTANT UNPACKED @F@'@9 IF A10,GE,02NT )@@G@@017,I THEN,GTEVC5 . -> CONSTANT TOO BIG @F@@@' IF A8,GE,020NU )@@G@@17,I THEN,GTEVC5 . -> CONSTANT TOO BIG @H@'@9 IF A10,GE,02NV )@@G@@000,I THEN,GTEVC9 . -> CONSTANT NOT SMALL FRACTION @H@@@' IF NW )@@G@@ A8,GE,02000,I THEN,GTEVC9 . -> CONSTANT NOT SMALL FRACTION @E@'@9NX )@@G@@ MOVE A9,0,I . CONVERT SMALL FRACTION TO ZERO @E@@@' NY )@@G@@ LOAD A9,0,I . CONVERT SMALL FRACTION TO ZERO @^@@@9 GOTNZ )@@G@@O GTEVC4 . @#@@@9GTEVC9 LABEL . @B@'@9 STOREN A10,A3 . SOA )@@G@@ET TO SHIFT @B@@@' STOREN A8,A3 . SET TO SHIFT @D@'@9 OB )@@G@@ SSA A8,02074,A3 . RIGHT JUSTIFY CONSTANT @D@@@' SSA A9,OC )@@G@@02074,A3 . RIGHT JUSTIFY CONSTANT @E@@@' LOAD A9,A10 . OD )@@G@@ GET INTO CORRECT REG @^@@@9 GOTO GTEVC4 . @#@@@9GTEVC3OE )@@G@@ LABEL . @C@'@9 LOAD A9,W1,X1 . GET FIXED VALUE @C@@@'OF )@@G@@ LOAD A9,W1+1,X1 . GET FIXED VALUE @G@@@9 LOAD A3,OG )@@G@@SGDSCL,X7 . GET SCALE NOT LESS THEN ZERO @D@@@9 SSAOH )@@G@@ A9,0,A3 . SCALE FIXED BINARY NUMBER@#@@@9GTEVC4 LABEL . @E@'@9OI )@@G@@ IF A9,GE,32767 THEN,GTEVC5 . -> CONSTANT TOO BIG@F@@@' OJ )@@G@@ IF A9,GE,32767,I THEN,GTEVC5 . -> CONSTANT TOO BIG @F@@@9 OK )@@G@@ IF SGDSGN,OFF,SGDCLS THEN,GTEVC7 . -> SIGN IS POSITIVE@^@@@9 OL )@@G@@ LOADN A9,A9 . @#@@@9GTEVC7 LABEL . @#@@@9 GENM . @B@@@9OM )@@G@@ GFREE AGRL1 . FREE TEMPS @B@@@9 GFIN 'POP' . ON )@@G@@ EXIT AND POP@A@@@9 JMP . RETURN @I@@@9 . ---OO )@@G@@------------------------------------------------------------------------OP )@@G@@-- @C@@@9 . *** PERFORM TYPE CONVERSIONS IF NEEDED *** @I@@@9 . ---OQ )@@G@@------------------------------------------------------------------------OR )@@G@@-- @H@@@9GMDSCV LOCAL . ENTRY FROM 'MULTIPLY' AND 'DIVIOS )@@G@@DE' BIF STAGING @ @@@9 LOAD A8,DGGSCP . @F@'@9 MOVOT )@@G@@E DGGSCP,0,I . SET FOR INPLIED SCALE AND PRECISION @F@@@'. MOVOU )@@G@@E DGGSCP,0,I . SET FOR INPLIED SCALE AND PRECISION @C@@@9 LOAOV )@@G@@DA X2,DGGSTK . USE TARGET CLASS @D@@@9 LOADA X3,SGDAID . OW )@@G@@ CHANGE TOP STACK ITEM @D@@@9 CGCONV R,X2 R,X3 . PERFORM TYPE OX )@@G@@CONVERSION @G@'@9 MOVE DGGSCP,0,I . RESET FOR IMPLIED SCALEOY )@@G@@ AND PRECISION @G@@@'. MOVE DGGSCP,0,I . RESET FOR IMPLIEDOZ )@@G@@ SCALE AND PRECISION @F@@@9 LOADA X3,SGDAID+DCGSLT . POPA )@@G@@INT TO SECOND STACK ITEM@D@@@9 CGCONV R,X2 R,X3 . PERFORM TYPE PB )@@G@@CONVERSION @E@@@9 STORE X4,DCGSV2+9 . SAVE X4 TYPE POINTER FOR PC )@@G@@RETURN@C@@@9 JMP . -> RETURN TO CALLER@ @@@9/. PD )@@G@@ NOOP TARGETTING @#@@@9GGTNOP* LLOC . @B@@@9 LOAD X4,0,PE )@@G@@I . RETURN CODE=0 @B@@@9 MOVE DGFLGZ,0,I . IGEN FLGS=0 PF )@@G@@@]@@@9 LJMP @[@@@9. @A@@@9. UNARY MINUS TARGETING PG )@@G@@@#@@@9GGTNEG LLOC . @ @@@9 LOAD A3,SGDCLS . @E@@@9 PH )@@G@@ XOR,U A3,SGDSGN . ****** @ @@@9 STOPI )@@G@@RE A4,SGDCLS . @D@@@9 GOTO GGTNOP . RETURN TO XGEPJ )@@G@@N @B@@@9/. ------ STAGING ROUTINES ------- @B@@@9. PK )@@G@@ STAGING FOR + , - (BINARY) @C@@@9 . ON ENTRY: DGGSCL, DGGPRE HOLD LEFPL )@@G@@T (P,Q) @A@@@9 . RESULT (P,Q) DERIVED FROM STACK @C@@@9 . ARGS SCALPM )@@G@@ED ACCORDING TO DGGSCL AND SGDSCL @D@@@9 . ORRED CLASS OF TARGET IS INPN )@@G@@ F-REGISTER ON ENTRY @D@'@9 . USES REGISTERS A7 [R0], A9 [R1], A10 [RPO )@@G@@2], A2 [R15]@A@@@' . USES REGISTERS A7 , A9 , A10 , A2@#@@@9GGSADS* LABEPP )@@G@@L . @#@@@9 GNTR 2 @#@@@9GGSAD5* LABEL . @I@@@9 IF SPQ )@@G@@DFXFL,ON THEN,GGSFLT . ->OPERATION IS FLOAT (OR'D CLASS IS IN FREG PR )@@G@@@^@@@9 LOAD A9,SGDSCL .@H@@@9 IF A9,NE,DGGSCL THEN,GGPS )@@G@@SAD4 . IF DIFFERENT, SCALE SMALLER ARG @C@@@9 LOAD A9,SGDPRE+DPT )@@G@@CGSLT . PT <- PR @F@@@9 IF A9,GE,SGDPRE THEN,GGSAD3 . -> PU )@@G@@PL < PR, THUS LEAVE PL @D@@@9 LOAD A9,SGDPRE . USE PR AS THEPV )@@G@@ LARGER @A@@@9 STORE A9,DGGPRE . SAVE PT@ @@@9GGSAD3 LABPW )@@G@@EL .@D@@@9 ADD A9,1,I . ADD 1 TO RESULT PREPX )@@G@@CISION@D@@@9 LINK GGSPMX . FIND MAX PREC FOR TYPE IN A7@D@@@9PY )@@G@@ IF A7,GE,A9 THEN,GGSAD2 . ->OUR PREC IS OKAY@#@@@9GGSAD0 LABPZ )@@G@@EL . @ @@@9 LOAD A9,A7 . USE MAX @#@@@9GGSAD2 LABEL . @E@@@9QA )@@G@@ STORE A9,SGDPRE+DCGSLT . STORE RESULTANT PREC @A@@@9 QB )@@G@@ GOTO GGSRET . RETURN @]@@@9GGSFLT LABEL@^@@@9 LOAD A9,SGQC )@@G@@DPRE .@F@@@9 IF A9,LT,SGDPRE+DCGSLT THEN,GGSRET . -> PT ALREADY QD )@@G@@FOUND @F@@@9 STORE A9,SGDPRE+DCGSLT . I.E. PT <- MAX(PL,PR) = QE )@@G@@PR @A@@@9 GOTO GGSRET . RETURN @#@@@9GGSAD4 LABEL . QF )@@G@@@B@@@9 LOAD A9,SGDPRE . LOAD P1 @B@@@9 LOAD A2,QG )@@G@@SGDSCP . COMPUTE Q1 @H@@@9 SSA A2,9 . RIGHT JUSTIFYQH )@@G@@ R-SCALE WITH SIGN EXTENSION *******@C@@@9 SUB A9,A2 .QI )@@G@@ COMPUTE P1 - Q1 @C@@@9 LOAD A10,SGDPRE+DCGSLT . LOAD P2 QJ )@@G@@@C@@@9 LOAD A2,SGDSCP+DCGSLT . COMPUTE Q2 @H@@@9 SSAQK )@@G@@ A2,9 . RIGHT JUSTIFY L-SCALE WITH SIGN EXTENSION *******@C@@@9QL )@@G@@ SUB A10,A2 . COMPUTE P2 - Q2 @F@'@9 IF A10QM )@@G@@,GE,A9 THEN,GGSAD6 . COMPUTE MAX (P1-Q1,P2-Q2) @F@@@' IF A10QN )@@G@@,LT,A9 THEN,GGSAD6 . COMPUTE MAX (P1-Q1,P2-Q2) @E@@@9 LOAD A9,QO )@@G@@A10 . MAX (P1-Q1,P2-Q2) = P2 - Q2 @G@@@9GGSAD6 LABEL . QP )@@G@@ MERGE POINT WHEN MAX (P - Q) LOADED IN A9 @D@@@9 LINK GGSSCQQ )@@G@@L . SCALE SMALL Q UP TO LARGE @A@@@9 LOAD A10,DGGSCP . LQR )@@G@@OAD QT@D@@@9 STORE A10,SGDSCP+DCGSLT . SET QT IN STACK @E@@@9QS )@@G@@ SSA A10,9 . COMPUTE QT ******** @B@@@9 QT )@@G@@ ADD A9,A10 . MAX(PL-QL,PR-QR)+QT @C@@@9 GOTO GGSAD3 . -QU )@@G@@> SET PR,RETURN @C@'@9 . ROUTINE SETS A7 [R0] <- QR AND A10 [R2] <- QLQV )@@G@@@B@@@' . ROUTINE SETS A7 <- QR AND A10 <- QL @#@@@9GGSGQS LLOC . QW )@@G@@@A@@@9 LOAD A7,SGDSCP . QR @G@@@9 SSA A7,9 . QX )@@G@@ SHIFT RIGHT WITH SIGN EXTENSION ******* @B@@@9 LOAD A10QY )@@G@@,SGDSCP+DCGSLT . QL @H@@@9 SSA A10,9 . SHIFT RIGHTQZ )@@G@@ WITH SIGN EXTENSION ******* @C@@@9 LJMP . RRA )@@G@@ETURN TO CALLER @G@@@9 . SCALING, OP. WITH SMALLER Q TIMES BRB )@@G@@ASE(2/10)**ABS(QL-QR) @C@'@9 . USES REGISTERS A7 [R0], A8 [R5], X3 [R3RC )@@G@@] @B@@@' . USES REGISTERS A7 , A8 [R5], X3 [R3] @#@@@9GGSSCL* LOCARD )@@G@@L . @B@@@9 LOAD A8,SGDSCP . COMPUTE QR @E@@@9 SSARE )@@G@@ A8,9 . ****** @B@@@9 LOAD A7,RF )@@G@@DGGSCP . COMPUTE QL @F@@@9 SSA A7,9 . RG )@@G@@ ******* @G@@@9 IF A7,GE,A8 THEN,GGSSC1 . QL>QR,RH )@@G@@ SCALE OP ALREADY IN DGGSCT @C@@@9 STORE A7,SGDSCL+DCGSLT . RERI )@@G@@STORE Q2 @[@@@'. @C@'@9 STORE A8,DGGSCL . SET Q-TARGET RJ )@@G@@TO Q1 @C@@@'. STORE A8,DGGSCL . SET Q-TARGET TO Q1 @[@@@'. RK )@@G@@@F@@@' MOVE DGGSCP,SGDSCP . CONVERT LEFT TO LOOK LIKE RIGHTRL )@@G@@@F@@@9 LOADA X3,DCGSLT+SGDAID . POINT TO LEFT STACK ITEM RM )@@G@@@^@@@9 GOTO GGSSC2 . @]@@@9GGSSC1 LABEL@D@@@9 LOAD X3,RN )@@G@@W1U,X7 . POINT TO RIGHT STACK ITEM@#@@@9GGSSC2 LABEL . @C@@@9 RO )@@G@@ CGCONV DGGSTK R,X3 . DO CONVERSION @]@@@9 JMP .@F@@@9. RP )@@G@@ PUT MAX PRECISION FOR TYPE (BX/DX --> 35/18) IN A7 @]@@@9GGSPMXRQ )@@G@@* LLOC@B@@@9 LOAD A7,KBXMXP,I . ASSUME BIN FIX@C@@@9 IF SRR )@@G@@DDCBN,ON THEN,LJMP . GOOD ASSUMPT@B@@@9 LOAD A7,KDXMXP,I .RS )@@G@@ ITS DEC FIX@A@@@9. DOES NOTHING BUT RETURN@#@@@9GGSNOP* LABERT )@@G@@L . @]@@@9 LJMP @D@'@9 . SET VALUE OF Q TO MAX (VALUE IN A10[R2]RU )@@G@@,MAX Q) @C@@@' . SET VALUE OF Q TO MAX (VALUE IN A10,MAX Q) @H@@@9RV )@@G@@. STORE QT, FIRST ASSURING ITS WITHIN BOUNDS X1=WHERE TO STORRW )@@G@@E QT @]@@@9GGSSTQ LLOC @ @@@9 STORE A10,SGDSCL,X1 .@E@@@9 RX )@@G@@ IF A10,LT,KINMXQ,I THEN,GGSSQ1 . -> QT < MAX Q @E@@@9 SUBRY )@@G@@ A10,KINMXQ,I . BRING INTO RANGE @G@@@9 GOTO GGSRZ )@@G@@SQ2 . -> PRINT ERROR MESSAGE FOR SCALE TO LARGE @#@@@9GGSSQ1 LABELSA )@@G@@ . @E@@@9 IF A10,GE,1-KINMXQ,I THEN,LJMP . -> QT>MINQ SB )@@G@@@F@@@9 ADD A10,KINMXQ,I . BRING SCALE UP TO RANGE SC )@@G@@@#@@@9GGSSQ2 LOCAL . @G@@@9 EXERR EXERGG12 LEVEL,1 . 'RESULSD )@@G@@T SCAL FACTOR EXCEEDS 35...' @B@@@9 STORE A10,SGDSCL,X1 . STORESE )@@G@@ QT @]@@@9 JMP @A@@@9/. STAGING FOR MULTIPLY @#@@@9SF )@@G@@GGSMU LABEL . @E@'@9 . USES REGISTERS A7[R0], A9[R1], A10[R2], A2[R1SG )@@G@@5], A8[R5] @B@@@' . USES REGISTERS A7, A9, A10, A2, A8[R5] @ @'@9 . X3[SH )@@G@@R3], X1[R1], X4[R4] @^@@@' . X3[R3], X1, X4[R4] @#@@@9 GNTR SI )@@G@@ 2 @G@@@9 SET IGZERO++IGPLUS++IGBNFX++IGRLCX++IGDCFX,OFF,DGFLSJ )@@G@@GZ . CLEAR @^@@@9 USING SGDSCT,X7 .@H@@@9 IF SDFXFL,ON THSK )@@G@@EN,GGSMDM . ->RESULT IS FLOAT (CLASS IS IN F-REG) @A@@@9 . PT = PL +SL )@@G@@ PR + 1 , QT = QL + QR@C@@@9 LINK GGSGQS . A7 <- QR, A10SM )@@G@@ <- QL@C@@@9 ADD A10,A7 . A10 <- QR + QL @D@@@9 SN )@@G@@ LOADA X1,SGDAID+DCGSLT . WHERE TO STORE A10@F@@@9 LINK GGSSTSO )@@G@@Q . STORE QT AND CHECK FOR SCALE OVERFLOW @^@@@9 LOAD A9,SGSP )@@G@@DPRE .@ @@@9 ADD A9,SGDPRE+DCGSLT @B@@@9 ADD A9,1,I SQ )@@G@@. PT = PR+PL+1 @C@@@9 LINK GGSPMX . A7 <- MAXPRE FOR TYPE SR )@@G@@@C@@@9 IF A7,GE,A9 THEN,GGSMU1 . -> PT IS OK @A@@@9 LOAD SS )@@G@@ A9,A7 . PT <- PMAX @]@@@9GGSMU1 LABEL@E@@@9 STORE A9,SGDPRE+DST )@@G@@CGSLT . SET PT INTO STACK ITEM @B@@@9 MOVE A10,0,I . SSU )@@G@@HIFT <- 0 @]@@@9GGSMU3 LABEL@F@@@9 IF SDDCBN,OFF THEN,GGSMU2 SV )@@G@@ . ->ITS DECIMAL (FIXED) @D@@@9 LOADA X3,RCFXBM . MAY NEED TSW )@@G@@HIS FOR COMPLEX @D@@@9 SET IGBNFX,ON,DGFLGZ . SAY BIN FIXESX )@@G@@D @D@'@9 LOADN A10,A10 . A10[R2] <- Q - QL - QR @C@@@'SY )@@G@@ LOADN A10,A10 . A10 <- Q - QL - QR @]@@@9GGSMU4 LABEL@C@@@9SZ )@@G@@ LOAD A9,KBXMXS,I . MAX ALLOWED SHIFT @D@@@9 LINK GGSFLTA )@@G@@M . LIMIT A10 AND SAVE ITS SIGN @C@@@9GGSMU9 LABEL . MERGE POINT FTB )@@G@@OR DIV BIN FIXED @E@@@9 STORE A10,AGX0OF . SET UP BINARY SCALINGTC )@@G@@ (SHIFTING) @C@@@9 GOTO GGSMDS . DECIDE REAL/COMPLEX @]@@@9TD )@@G@@GGSMU2 LABEL@D@@@9 LOADA X3,RCFXDM . MAY NEED THIS FOR COMPLEX TE )@@G@@@C@@@9 LINK GGSTBS . SET UP DECIMAL SCALING@C@@@9 GOTO TF )@@G@@ GGSMDS . DECIDE REAL/COMPLEX @I@@@9 . ---------------------------TG )@@G@@-------------------------------------------------- @B@@@9 . *** STAGITH )@@G@@NG FOR 'MULTIPLY' BIF *** @I@@@9 . ---------------------------------TI )@@G@@-------------------------------------------- @F@@@9 . I DIFFER FROM ITJ )@@G@@BM CODE BY MAKING TYPE CONVERSIONS IF NECESSARY @#@@@9GGSMUL LABEL . TK )@@G@@@F@@@9 GNTR 2 . F-REGISTER ALREADY CONTAINS CLASS TL )@@G@@@G@@@9 SET IGZERO++IGPLUS++IGBNFX++IGRLCX++IGDCFX,OFF,DGFLGZ . CTM )@@G@@LEAR @F@@@9 LINK GMDSCV . PERFORM TYPE CONVERSIONS IF NEETN )@@G@@DED @E@@@9 IF SDFXFL,ON THEN,GGMDFC . -> CLASS IS FLOAT TO )@@G@@@E@'@9 LINK GGSGQS . A7[R0] <- QR, A10 [R2] <- QL @D@@@'TP )@@G@@ LINK GGSGQS . A7 <- QR, A10 <- QL @C@'@9 ADDTQ )@@G@@ A10,A7 . A10[R2] <- QL + QR @C@@@' ADD A10,A7 . ATR )@@G@@10 <- QL + QR @G@@@9 SSA A8,9 . A8 CONTAINS Q FROM TS )@@G@@GMDSCV ****** @D@'@9 SUB A10,A8 . A10 [R2] <- (TT )@@G@@QL + QR) - Q@D@@@' SUB A10,A8 . A10 <- (QL + QR) - Q TU )@@G@@@E@@@9 MOVE SGDSCP,DGGSCP . (QL,PL) <- (Q,P) @D@@@9TV )@@G@@ GOTO GGSMU3 . -> MERGE WITH '*' STAGING @I@@@9 . ---------TW )@@G@@-------------------------------------------------------------------- TX )@@G@@@E@@@9 . ** COMPUTE DECIMAL FIXED SCALING CONSTANT ADDRESS ** @I@@@9TY )@@G@@ . ---------------------------------------------------------------------TZ )@@G@@-------- @]@@@9GGSTBS LOCAL@E@@@9 LOAD A9,KFLTSZ,I . SIZE UA )@@G@@OF POWERS OF 10 TABLE @C@'@9 LOADN A10,A10 . A10 [R2] <- -UB )@@G@@A10 @B@@@' LOADN A10,A10 . A10 <- -A10 @D@@@9 LINK UC )@@G@@ GGSFLM . LIMIT A10 AND SAVE ITS SIGN @C@@@9 SLB A10,1 . TAUD )@@G@@BLE IS IN DOUBLE WORDS @H@@@9 ADD A10,KKPW10-2,I . DISPL INUE )@@G@@ TABLE + STARTING ADDR OF TABLE @A@@@9 STORE A10,AGX0OF . INTUF )@@G@@O AW @]@@@9 JMP @#@@@9GGSFLM LLOC . @F@'@9 . SAVE FLAGS IN DUG )@@G@@GFLGZ AS TO WHETHER THE SHIFT IN A10[R2] WAS @E@@@' . SAVE FLAGS IN DUH )@@G@@GFLGZ AS TO WHETHER THE SHIFT IN A10 WAS @E@@@9 . ZERO, POSITIVE, OR NEUI )@@G@@GATIVE. SET A10 TO ABSOLUTE VALUE @A@'@9 . USE A9[R1] TO LIMIT SHIFT SUJ )@@G@@IZE. @ @@@' . USE A9 TO LIMIT SHIFT SIZE.@F@@@9 . THIS ROUTINE TAKES THUK )@@G@@E PLACE OF STORING THE CC OF IBM CODE @C@@@9 . FOR USE IN A COMPUTEDUL )@@G@@ GOTO IN THE ICODE. @H@@@9 STORE A10,DGGSCP . SAVE SHIFT FOUM )@@G@@R SCALING IN COMPLEX SUBROUTINES @B@@@9 SET IGPLUS++IGZERO,UN )@@G@@ON,DGFLGZ . @E@@@9 IF A10,NZERO THEN,GGSFL1 . -> NON-ZERO SHIUO )@@G@@FT @F@@@9 LOAD A10,0,I . -> INSURE SHIFT IS A POSITIVE ZUP )@@G@@ERO @B@@@9 LJMP . -> RETURN @C@@@9GGSFL1 LABUQ )@@G@@EL . NON-ZERO SHIFT @A@@@9 SET IGZERO,OFF,DGFLUR )@@G@@GZ . @E@@@9 IF A10,GE,0,I THEN,GGSFL2 . -> POSITIVE SHIFT US )@@G@@@E@'@9 SET IGPLUS,OFF,DGFLGZ . A10[R2] WAS NEGATIVE @E@@@'UT )@@G@@ SET IGPLUS,OFF,DGFLGZ . A10 WAS NEGATIVE @D@@@9 UU )@@G@@ LOADM A10,A10 . SET A10 TO ABSOLUTE VALUE@#@@@9GGSFL2 LABEL . UV )@@G@@@E@@@9 IF A9,GE,A10 THEN,LJMP . -> SHIFT SIZE IS OK @E@@@9UW )@@G@@ LOAD A10,A9 . USE MAXIMUM POSSIBLE VALUE @B@@@9 UX )@@G@@ LJMP . -> RETURN @I@@@9/ . --------------------------UY )@@G@@-------------------------------------------------- @A@@@9 . *** STAGIUZ )@@G@@NG FOR 'DIVIDE' BIF *** @I@@@9 . ---------------------------------------VA )@@G@@-------------------------------------- @#@@@9GGSDIV LABEL . @D@@@9VB )@@G@@ GNTR 2 . F-REGISTER CONTAINS CLASS @G@@@9 SETVC )@@G@@ IGZERO++IGPLUS++IGBNFX++IGRLCX++IGDCFX,OFF,DGFLGZ . CLEAR @F@@@9 VD )@@G@@ LINK GMDSCV . PERFORM TYPE CONVERSIONS IF NEEDED @E@@@9 VE )@@G@@ IF SDFXFL,ON THEN,GGMDFC . -> CLASS IS FLOAT @G@'@9 LINVF )@@G@@K GGSDVS . A10[R2] <- QL - QR + PMAX, QL <- QL - QR @F@@@' VG )@@G@@ LINK GGSDVS . A10 <- QL - QR + PMAX, QL <- QL - QR @C@@@9 VH )@@G@@ STORE A8,DGGSCP . (QL,PL) <- (Q,P) @D@@@9 SSA A8,9 . VI )@@G@@ A8 [R4] <- Q FROM GMDSCV @^@@@9 SUB A10,A8 . @B@@@9 VJ )@@G@@ STORE A10,DGGPRE . P <- FAKE P @D@@@9 GOTO GGSDV2 . -VK )@@G@@> MERGE WITH '/' STAGING@I@@@9 . ---------------------------------------VL )@@G@@-------------------------------------- @A@@@9 . *** STAGING FOR DIVISVM )@@G@@ION *** @I@@@9 . ---------------------------------------------------VN )@@G@@-------------------------- @#@@@9GGSDV LABEL . @#@@@9 GNTR VO )@@G@@ 2 @G@@@9 SET IGZERO++IGPLUS++IGBNFX++IGRLCX++IGDCFX,OFF,DGFLVP )@@G@@GZ . CLEAR @H@@@9 IF SDFXFL,ON THEN,GGSMDM . ->RESULT IS FLOAT VQ )@@G@@(CLASS IS IN F-REG) @]@@@9GGSDV1 LABEL@E@@@9 LINK GGSDVS VR )@@G@@. A7<-PMAX+QL-QR , QL <- QL-QR @E@'@9 STORE A7,SGDPRE+DCGSLT VS )@@G@@ . PT <- PMAX = A7[R0] @D@@@' STORE A7,SGDPRE+DCGSLT . VT )@@G@@PT <- PMAX = A7 @E@@@9 LOAD X4,DGGPRE . PL (COMPUTED DURING TAVU )@@G@@RGETTING) @B@@@9 SUB A10,X4 . MAXP+QL-QR-PL @D@@@9 VV )@@G@@ LOADA X1,SGDAID+DCGSLT . WHERE TO STORE @G@@@' IF AVW )@@G@@10,GE,0,I THEN,GGSDV1A . POSITIVE SCALE FOR RESULT @G@@@' EXEVX )@@G@@RR ERGG55 LEVEL,0 . WARN. RIGHTMOST DIGITS MAY BE LOST @#@@@'GGSDV1VY )@@G@@A LABEL . @F@@@9 LINK GGSSTQ . STORE QT AND CHECK FOR SCALEVZ )@@G@@ OVERFLOW @C@'@9 LOAD A10,X4 . A10[R2] <- P @B@@@'WA )@@G@@ LOAD A10,X4 . A10 <- P @#@@@9GGSDV2 LABEL . @E@@@9WB )@@G@@ IF SDDCBN,ON THEN,GGSDV3 . ->ITS BINARY (FIXED)@D@@@9 WC )@@G@@ LOADA X3,RCFXDD . MAY NEED THIS FOR COMPLEX @E@'@9 SUB A10WD )@@G@@,A7 . A10[R2] <- -(P-PL) (= -SHIFT) @D@@@' SUB A10,A7 . WE )@@G@@ A10 <- -(P-PL) (= -SHIFT)@C@@@9 LINK GGSTBS . SET UP DECWF )@@G@@IMAL SCALING@E@@@9. DETERMINE WHICH DIRECTION TO SCALE AND DOWG )@@G@@IT @E@@@9 IF IGZERO,ON,DGFLGZ THEN,GGSMDS . NOTHING TO GENWH )@@G@@@B@@@9 LOADA X1,GGSHFT . ASSUME REAL @F@@@9 ADD X1,WI )@@G@@DCGSV2+9 . ADD IN REAL/COMPLEX FACTOR (0 OR 1) @^@@@9 USING WORWJ )@@G@@D,X1 .@E@@@9 LOAD X2,W1H1,X1 . ASSUME LEFT (+) SHIFT (MULT) WK )@@G@@@F@@@9 IF IGPLUS,ON,DGFLGZ THEN,GGSDV6 . -> GOOD ASSUMPTION WL )@@G@@@F@@@9 LOAD X2,W1H2,X1 . ACTUALLY RIGHT (-) SHIFT (DIVIDE) WM )@@G@@@#@@@9GGSDV6 LABEL . @^@@@9 GENMR R,X2 . @H@@@9 SETWN )@@G@@ IGPLUS++IGZERO,ON,DGFLGZ . SET FOR TRUNCATION AFTER DIVISION @C@@@9WO )@@G@@ GOTO GGSMDS . CHECK COMPLEX/REAL @^@@@9 GMODE 'M'WP )@@G@@ . @]@@@9GGSHPC GLBL @G@@@9 GIFR GGSPCA,AGIM2 . SEEWQ )@@G@@ IF IMAG PART IS IN REGISTER @E@@@9 GLOAD AGIM2,2 . IF NOT,WR )@@G@@ PUT IT IN REGISTER @C@@@9GGSPCA GLBL . MERGE POINT WHEN IN REGISTWS )@@G@@ER @G@@@9 GFLOAT OPDFM,AGIM2,AGXR0 . LEFT (+) DECIMAL FIXED SHIWT )@@G@@FT IMAG PART@]@@@9GGSHPR GLBL @F@@@9 GIFR GGSPRA,AGRL2 . SEE IFWU )@@G@@ REAL PART IS IN REGISTER @E@@@9 GLOAD AGRL2,2 . IF NOT,WV )@@G@@ PUT IT IN REGISTER @#@@@9GGSPRA GLBL . @G@@@9 GFLOAT OPDFWW )@@G@@M,AGRL2,AGXR0 . LEFT (+) DECIMAL FIXED SHIFT REAL PART@F@@@9 GFIWX )@@G@@N . -> SCALING DONE, READY TO DIVIDE FIXED DECIMAL @]@@@9GGSHMC GLBL WY )@@G@@@F@@@9 GIFR GGSMCA,AGIM2 . SEE IF IMAG PART IS IN REGISTER WZ )@@G@@@D@@@9 GLOAD AGIM2,2 . IF NOT, PUT IT IN REGISTER @D@@@9GGSMCAXA )@@G@@ GLBL . MERGE POINT WHEN IMAG PART IN REGISTER@H@@@9 GFLOAT OPDFXB )@@G@@D,AGIM2,AGXR0 . RIGHT (-) DECIMAL FIXED SHIFT IMAG PART @]@@@9GGSHMRXC )@@G@@ GLBL @G@@@9 GIFR GGSMRA,AGRL2 . SEE IF REAL PART IS XD )@@G@@IN REGISTER @E@@@9 GLOAD AGRL2,2 . IF NOT, PUT IT IN REGISTXE )@@G@@ER @G@@@9GGSMRA GLBL . MERGE POINT WHEN REAL PART IS XF )@@G@@IN REGISTER @H@@@9 GFLOAT OPDFD,AGRL2,AGXR0 . RIGHT (-) DECIMAL FIXG )@@G@@XED SHIFT REAL PART @F@@@9 GFIN . -> SCALING DONE,READY TO XH )@@G@@DIVIDE FIXED DECIMAL @]@@@9GGSDV3 LABEL@D@@@9 LOADA X3,RCFXBD XI )@@G@@. MAY NEED THIS FOR COMPLEX @D@@@9 SET IGBNFX,ON,DGFLGZ . XJ )@@G@@SAY BIN FIXED @G@@@9 STORE A10,DGGSCP . SAVE PRECISION FOR XK )@@G@@USE IN COMPLEX CASE @E@@@9 SUB A10,A7 . A10 = -(PMAX XL )@@G@@- PL) = -SHIFT @F@@@9 SET IGPLUS++IGZERO,OFF,DGFLGZ . SIGNAXM )@@G@@L RIGHT (-) SHIFT @ @@@9 JN A10,GGSDV5 . @E@@@9 IF XN )@@G@@A10,NZERO THEN,GGSDV4 . ->NOT ZERO,SET TO SCALE @F@@@9 SET IXO )@@G@@GPLUS++IGZERO,ON,DGFLGZ . TELL ICODE NO SCALEING@D@@@9 GOTO GXP )@@G@@GSMU9 . ->MERGE WITH MULT @#@@@9GGSDV4 LABEL . @I@@@9 XQ )@@G@@ ADD A10,36,I . COMPUTE RIGHT JUSTIFICATION AMOUNT FOR DIVISION WITHXR )@@G@@ S @E@@@9 GOTO GGSDV7 . -> CHECK FOR SHIFT OVERFLOW XS )@@G@@@#@@@9GGSDV5 LABEL . @A@@@9 SET IGPLUS,ON,DGFLGZ . @^@@@9XT )@@G@@ LOADM A10,A10 .@F@@@9GGSDV7 LABEL . MERGE TO CHECXU )@@G@@K FOR MAXIMUM SHIFT @B@@@9 IF A10,LT,72,I THEN,GGSMU9 . XV )@@G@@@ @@@9 LOAD A10,72,I . @D@@@9 GOTO GGSMU9 . -> MERXW )@@G@@GE WITH MULT PROCESSING @]@@@9GGSDVS LOCAL@E@'@9 LINK GGSGQS . XX )@@G@@ A7[R0] <- QR , A10[R2] <- QL @D@@@' LINK GGSGQS . AXY )@@G@@7 <- QR , A10 <- QL @A@@@9 SUB A10,A7 . QL - QR@C@@@9XZ )@@G@@ STORE A10,SGDSCL+DCGSLT . SET QL @C@@@9 LINK GGSPMYA )@@G@@X . A7 <- MAXPRE FOR TYPE @C@@@9 ADD A10,A7 . A10 <- PMYB )@@G@@AX+QL-QR @#@@@9 JMP . @G@@@9GGMDFC LABEL . OYC )@@G@@P IS FLOAT 'MULTIPLY' OR 'DIVIDE' BIF @E@@@9 GOTO GGSMDE . YD )@@G@@ -> CONTINUE FLOATING STAGING @E@@@9. MULT/DIV...COME HYE )@@G@@ERE TO SEE IF YOU QUIT YET @]@@@9GGSMDM LABEL@^@@@9 LOAD A7,SGYF )@@G@@DPRE .@C@@@9 IF A7,LT,SGDPRE+DCGSLT THEN,GGSMDE . @E@@@9 YG )@@G@@ STORE A7,SGDPRE+DCGSLT . I.E. PT <- MAX(PL,PR) @#@@@9GGSMDE LABELYH )@@G@@ . @C@@@9 LOAD X3,DXGARG . FLOAT ROUTINE OFFSET @F@@@9 YI )@@G@@ SET IGZERO,ON,DGFLGZ . SIGNAL FLOAT TO ICODE BY @I@@@9 YJ )@@G@@ SET IGPLUS,OFF,DGFLGZ . SETTING AN OVERFLOW SHIFT INDICATOR (CC*2=6YK )@@G@@) @#@@@9GGSMDS LABEL . @G@@@9 IF SDRLCX,OFF THEN,GGSRET YL )@@G@@ . -> REAL, YOU'RE DONE ELSE @C@@@9. DROP THROUGH TO HANDLE YM )@@G@@COMPLEX-ITIES @H@@@9/. ICODE TO GENERATE CALLING SEQUENC FYN )@@G@@OR OPERATORS IMPLEMENTED AS @F@@@9. SUBROUTINES. THESE AREYO )@@G@@ COMPLEX * AND /, AND ALL ** @[@@@9. @G@@@9IGEXPN EQU 040 . YP )@@G@@ FLAG TO SAY EXPONENTATION ***** @[@@@9. @[@@@9. YQ )@@G@@@#@@@9GGSCB1 LABEL . @A@@@9 STORE X3,DXGARG . A(SUBR) @G@@@9YR )@@G@@ GASGN 'TEMP' R,X7 'ATTR',R,X7 'COND','IFREG' . ARGL IN TEMP YS )@@G@@@D@@@9 LOADA X2,SGDAID+DCGSLT . POINT TO LEDT ARG @G@@@9 YT )@@G@@ GASGN 'TEMP' R,X2 'ATTR',R,X2 'COND','IFREG' . ARGR IN TEMP @C@@@9YU )@@G@@ SET IGRLCX,ON,DGFLGZ . ITS COMPLEX @E@@@9 SET IGEPNYV )@@G@@I++IGEXPN,OFF,DGFLGZ . NOT EXPONENTIATION @^@@@9 GOTO GGSCB4 . YW )@@G@@@#@@@9GGSCB3 LABEL . @E@@@9 STORE X3,DXGARG . ADDR OF PARTICULYX )@@G@@AR RUNTIME CODE @D@@@9 SET IGEXPN,ON,DGFLGZ . SAY IT IS EXYY )@@G@@PON @ @@@9 USING SGDSCT,X7 . @#@@@9GGSCB4 LABEL . @D@@@9YZ )@@G@@ LOAD A7,SGDSCP+DCGSLT . GET SCALE AND PRE @F@@@9 STOZA )@@G@@RE A7,AGX0OF . PUT IT WHERE IT CAN BE REACHED @#@@@9 GENM ZB )@@G@@. @C@@@9 GINST OPLA,AGRA1,AGRL2,U . A(ARGL) @B@@@9 ZC )@@G@@ GBOFF GGSCB2,IGRLCX . -> ITS REAL@G@@@9 GFREE AGIM2 . FZD )@@G@@REE ANY TEMPS ASSOCIATE WITH IMAG PART @E@@@9GGSCB2 GLBL . ZE )@@G@@ OBTAIN SPACE FOR THE RESULT @C@@@9 GINST OPLA,AGRA2,AGRL1,ZF )@@G@@U . A(ARGR) @C@@@9 GBOFF GGSCB7,IGRLCX . -> ITS REAL, OR ZG )@@G@@@D@@@9 GBON GGSCB7,IGEPNI . -> ITS COMPLEX**INT @^@@@9 ZH )@@G@@ GFREE AGIM1 . @#@@@9GGSCB7 GLBL . @E@@@9 GBON GGSCB6,ZI )@@G@@IGEXPN . IS THIS COMPLEX * OR / ? @E@@@9 GINST OPLA,AGRA3,AGZJ )@@G@@XR0,U . GET SCALE AND PRE @#@@@9GGSCB6 GLBL . @^@@@9 GSUB ZK )@@G@@ 'BILTN' . @D@@@9 GBON GGSCB5,IGBNFX . IS THIS BIN FIXED? ZL )@@G@@@E@@@9 GGETGR AGRL2,2 . GET A REG FOR RESULT @D@@@9ZM )@@G@@ GDBLE OPDL,AGRL2,AGRA3 . GET REAL PART @C@@@9 GBOZN )@@G@@FF GGSCB8,IGRLCX . IS IT REAL? @E@@@9 GGETGR AGIM2,2 . ZO )@@G@@ GET REGS FOR IMAG PART @D@@@9 GDBLE OPDL,AGIM2,AGRA1 . ZP )@@G@@GET IMAG PART @E@@@9 GGOTO GGSCB8 . GO FZQ )@@G@@INISH UP @D@@@9GGSCB5 GLBL . IT IS BIN FIXED ZR )@@G@@@E@@@9 GGETGR AGRL2,1 . GET A REG FOR RESULT @D@@@9ZS )@@G@@ GINST OPLA,AGRL2,AGRA3 . GET REAL PART @D@@@9 GBOZT )@@G@@FF GGSCB8,IGRLCX . IS IT COMPLEX? @E@@@9 GGETGR AGIM2,1ZU )@@G@@ . GET REG FOR IMAG PART @D@@@9 GINST OPLA,AGIM2,AGZV )@@G@@RA1 . GET IMAG PART @C@@@9GGSCB8 GLBL . MERGE HZW )@@G@@ERE @C@@@9 GFIN . END OF ICODE @B@@@9 ZX )@@G@@ GOTO GGSRET . RETURN @B@@@9/. STAGING FOR EXPONZY )@@G@@ENTIATION @[@@@9. @[@@@9. @#@@@9GGSEPN LABEL . @D@@@9 ZZ )@@G@@ GNTR 2 . SAVE REGISTERS @G@@@9 SET IGRLCAA )@@G@@X+IGEPNI,OFF,DGFLGZ . ASSUME REAL A ND EXP NOT INT @D@@@9 MOVAB )@@G@@E DGGSTK,0,I . CLEAR THE WORKSPACE@E@@@9 MOVE DGGID,SAC )@@G@@D0ART,I . SET TO BE TYPE ARITH. @^@@@9 LOAD F,SGDCLS @G@@@9AD )@@G@@ IF SDRLCX+SDFXFL,ON THEN,GGSEX1 . -> ITS FLOAT OR COMPLEX AE )@@G@@@F@@@9 IF SGDSCL,ZERO THEN,GGSEX3 . ->QR=0, AGR IS REAL FIX AF )@@G@@@[@@@9. @D@@@9. CONVERT TO FLOAT HERE... AND DO FLT**FLT AG )@@G@@@[@@@9. @E@@@9GGSEX1 LABEL . EXPONENT NOT INTEGEAH )@@G@@R @ @@@9 LOR F,SGDCLS+DCGSLT .@C@@@9 SET SDFXFL,ON AI )@@G@@. TYPER+TYPEL+FLOAT @E@@@9 STORE F,DGGCLS . SET THEAJ )@@G@@ CLASSIN WORKSPACE@D@@@9 LOADA X2,DGGSTK . POINT TO WORKAK )@@G@@SPACE @G@@@9 GASGN 'TEMP' R,X7 'ATTR',R,X2 'COND','IFREG' . ARAL )@@G@@GR IN TEMP @I@@@9 GASGN 'TEMP' SGDAID+DCGSLT 'ATTR',R,X2 'CONAM )@@G@@D','IFREG' . ARG IN TEMP @B@@@9 LOADA X3,REXG . REALFLT**RAN )@@G@@EALFLT@D@@@9 IF SDRLCX,OFF,SGDCLS THEN,GGSEX2 . ->REAL @ @@@9AO )@@G@@ SET IGRLCX,ON,DGFLGZ @B@@@9 LOADA X3,RECXG . COMPFLT**CAP )@@G@@OMPFLT@#@@@9GGSEX2 LABEL . @^@@@9 LOAD A7,SGDPRE .@C@@@9 AQ )@@G@@ IF A7,LT,SGDPRE+DCGSLT THEN,GGSCB3 . @E@@@9 STORE A7,SGDPRE+DAR )@@G@@CGSLT . PL <- MAX(PL,PR) @^@@@9 GOTO GGSCB3 . @D@@@9AS )@@G@@GGSEX3 LABEL . . HERE, ARGR IS (QR=0 , REAL , FIX)@E@@@9 SET AT )@@G@@ IGEPNI,ON,DGFLGZ EXPONENT IS AN INTEGER @F@@@9 IF SDFXFL,AU )@@G@@ON,SGDCLS+DCGSLT THEN,GGSEX8 . ->LEFT FLOAT @F@@@9 IF SDVRCN,AV )@@G@@OFF THEN,GGSEX5 . ->RIGHT NOT CONSTANT @F@@@9 IF SGDEXP,AW )@@G@@ON,SGDID THEN,GGSEX5 . ->RIGHT IS SIGNED @C@@@9 LSDP X2,SGAX )@@G@@DRDS . LOC OF DF CONSTANT @E@@@9 SUB X2,2,I . PAY )@@G@@OINT TO DX CONSTANT @F@@@9 IF SDDCBN,ON THEN,GGSEX4 . CONST AZ )@@G@@IS BX (C(F)=SGDCLS) @^@@@9 USING WORD,X2 . @F@@@9 IF BA )@@G@@ W1,NZERO THEN,GGSEX5 . CONSTANT IS NOT BIN FIXED @F@@@9 SETBB )@@G@@ SDDCBN,ON . SET FIXED BINARY CONSTANT @#@@@9GGSEX4 LABELBC )@@G@@ . @D@@@9 ADD X2,1,I . POINT PAST DX TO BX VALUE @E@@@9BD )@@G@@ IF W1,ZERO THEN,GGSEX5 . -> IT IS A CONST ZERO @B@@@9 BE )@@G@@ LOAD A8,SGDPRE+DCGSLT . PL @F@@@9 IF SDDCBN,ON,SGDCLBF )@@G@@S+DCGSLT THEN,GGSEX99 . -> BIN BASE @G@@@9 MPYS A8,DCVDTB . BG )@@G@@ DEC PREC TO BIN PREC (MPY BY 3.32) @D@@@9 SRB A8,14 . BH )@@G@@ (3.32*16384)/16384 @#@@@9GGSEX99 LABEL . @ @@@9 ADD BI )@@G@@ A8,1,I . PL+1@C@@@9 MPY A8,W1,X2 . A8,A9 <- ARGR*(PL+1) BJ )@@G@@@F@@@9 SLBD A8,1 . SHIFT SIGN BIT TO OTHER REG (FOR OVFLW CHECK)BK )@@G@@@D@@@9 IF A8,NE,0,I THEN,GGSEX5 . P OVFLWS ONE WORD @^@@@9 BL )@@G@@ SRB A9,1 . @C@@@9 SUB A9,1,I . PT = ARGR*(PL+1)-1 BM )@@G@@@A@@@' LOAD A3,F . SAVE FLAGS @F@@@' LOAD F,SGDCLS+BN )@@G@@DCGSLT . GET DATA TYPE OF LEFT ARGUMENT @C@@@9 LINK GGSPMX BO )@@G@@. A7<-MAX PREC FOR TYPE @C@@@' LOAD F,A3 . RESET RIGHT DATBP )@@G@@A TYPE@C@@@9 IF A7,GE,A9 THEN,GGSX11 . ->PT IS OKAY@[@@@9. BQ )@@G@@@F@@@9GGSEX5 LABEL . . NOW COVVERT ARGL TO FLOAT, PT = MAX(PR,PL) BR )@@G@@@ @@@9 LOR F,SGDCLS+DCGSLT .@C@@@9 SET SDFXFL,ON . TYPEBS )@@G@@R+TYPEL+FLOAT @A@@@9 STORE F,DGGCLS . RESULT CLASS@D@@@9 BT )@@G@@ LOADA X2,DGGSTK . POINT TO WORKSPACE @H@@@9 GASGN 'TEMBU )@@G@@P' SGDAID+DCGSLT 'ATTR',R,X2 'COND','IFREG' . AR IN TEMP@E@@@9 BV )@@G@@ IF SDDCBN,ON,SGDCLS THEN,GGSEX7 . -> ARGR IS BIN@E@@@9 MOVE BW )@@G@@ DGGSCL,0,I . IF HERE, ARGL IS BIN, ARGR IS DEC @C@@@9 SET SDDCBBX )@@G@@N,ON,DGGCLS . TYPE=REAL BX@C@@@9 CGCONV R,X2 R,X7 . CONV ABY )@@G@@RGR: DX->BX @#@@@9GGSEX7 LABEL . @^@@@9 LOAD A7,SGDPRE .@C@@@9BZ )@@G@@ IF A7,LT,SGDPRE+DCGSLT THEN,GGSEX6 . @E@@@9 STORE A7,SGCA )@@G@@DPRE+DCGSLT . PL <- MAX(PL,PR) @^@@@9 GOTO GGSEX6 . CB )@@G@@@#@@@9GGSEX8 LABEL . @I@@@9 GASGN 'TEMP' SGDAID+DCGSLT 'ATTRCC )@@G@@',SGDAID+DCGSLT 'COND','IFREG' . ARGL @#@@@9GGSEX6 LABEL . @^@@@9CD )@@G@@ LOADA X2,SFK170 .@G@@@9 GASGN 'TEMP' R,X7 'ATTR',R,X2 'CE )@@G@@COND','IFREG' . ARGR IN TEMP @A@@@9 SET IGBNFX,OFF,DGFLGZ . CF )@@G@@@#@@@9GGSEX9 LABEL . @B@@@9 LOADA X3,REXFLT . REALFLT**INT CG )@@G@@@H@@@9 IF SDRLCX,OFF,SGDCLS+DCGSLT THEN,GGSCB3 . -> ARGL IS REALCH )@@G@@LY REAL @E@@@9 SET IGRLCX,ON,DGFLGZ . TELL ICODE TIS COMPCI )@@G@@LEX @B@@@9 LOADA X3,RCXFLT . COMPFLT**INT @^@@@9 GOTO CJ )@@G@@ GGSCB3 . @#@@@9GGSX11 LABEL . @D@@@9 LOAD A7,SGDSCP+DCGSLT CK )@@G@@. PICK UP SCALE,PRE @D@@@9 SSA A7,9 . RIGHT JCL )@@G@@USTIFY SCALE@B@@@9 MPY A7,0,X2 . QT = ARGR*QL @F@@@9 CM )@@G@@ SLBD A7,1 . SHIFT SIGN BIT TO OTHER REG (FOR OVFLW CHECK)@D@@@9 CN )@@G@@ IF A7,NE,0,I THEN,GGSEX5 . QT OVFLWED WORD @E@@@9 SRBD ACO )@@G@@7,1 . RESTORE A8 TO BE SCA @E@'@9 IF A8,GE,KINMXQ+CP )@@G@@1,I THEN,GGSEX5 . ->QT TOO LARGE@E@@@'. IF A8,GE,KINMXQ+1,I TCQ )@@G@@HEN,GGSEX5 . ->QT TOO LARGE@E@'@9 IF A8,LE,-KINMXQ-1,I THEN,GCR )@@G@@GSEX5 . ->QT TOO SMALL@E@@@'. IF A8,LE,-KINMXQ-1,I THEN,GGSEX5 CS )@@G@@ . ->QT TOO SMALL@E@@@' IF A8,NE,0,I THEN,GGSEX5 . -> NON STCT )@@G@@ANDARD PL/1 @B@@@'. IF Q ^=0 THEN ASSUME FLOAT RESULT@[@@@'. CU )@@G@@@A@'@9 STORE A8,SGDSCL+DCGSLT . @D@'@9 STORE A9,SGDPRE+DCV )@@G@@CGSLT . SAVED FROM ABOVE @^@@@9 LOADA X2,SFK170 .@G@@@9 CW )@@G@@ GASGN 'TEMP' R,X7 'ATTR',R,X2 'COND','IFREG' . ARGR IN TEMP @I@@@9CX )@@G@@ GASGN 'TEMP' SGDAID+DCGSLT 'ATTR',SGDAID+DCGSLT 'COND','IFREGCY )@@G@@' . ARGL @C@@@' STORE A9,SGDPRE+DCGSLT . SET RESULT P@E@@@'CZ )@@G@@. RESULTING Q ALREADY 0 @I@@@9 DA )@@G@@ IF SDDCBN,OFF,SGDCLS+DCGSLT THEN,GGSEX9X . ->ITS DX, USE FLOAT ROUTINDB )@@G@@E @F@'@9 SET SDDCBN,ON,SGDCLS+DCGSLT . SET FIXED BINARY REDC )@@G@@SULT @B@@@9 LOADA X3,REXFXB . REALBIN**INT @F@@@9 IF SDD )@@G@@DRLCX,OFF,SGDCLS+DCGSLT THEN,GGSCB3 . RESULT IS REAL @D@@@9 SET DE )@@G@@IGRLCX,ON,DGFLGZ . TELL ICODE ITS REAL @B@@@9 LOADA X3,RCXFXB DF )@@G@@. COMPBIN**INT @^@@@9 GOTO GGSCB3 . @#@@@9GGSEX9X LABEL . DG )@@G@@@F@@@9 SET IGDCFX,ON,DGFLGZ . SET FIXED DECIMAL (SCALE) DH )@@G@@@D@@@9 LOAD A10,SGDSCP+DCGSLT . GET RESULTING Q @^@@@9 DI )@@G@@ SSA A10,9 . @D@@@9 LINK GGSTBS . SET SCALINDJ )@@G@@G @E@'@9 IF SGDSCL+DCGSLT,ZERO THEN,GGSEX9 . -> CALL FCN DK )@@G@@@E@@@'. IF SGDSCL+DCGSLT,ZERO THEN,GGSEX9 . -> CALL FCN @C@@@'DL )@@G@@ GOTO GGSEX9 . -> QL ^=0 FROM BEFORE @A@@@'. NOTE - NODM )@@G@@N STANDARD PL/1 @[@@@9. @#@@@9. NOTE @#@@@9. NOTDN )@@G@@E @E@@@9. THE FOLLOWING IS NOT ANSI STANDARD FOR NOW DO )@@G@@@E@@@9. ANY FIXED DECIMAL**POWER WHERE SCALE FACTOR @D@@@9DP )@@G@@. IS NOT ZERO WILL BE A FLOAT RESULT @[@@@9. @[@@@9DQ )@@G@@. @A@'@9 SET IGDCFX,OFF,DGFLGZ . @B@'@9 SET SDFXFDR )@@G@@L,ON,SGDCLS+DCGSLT . @A@'@9 MOVE SGDSCL+DCGSLT,0,I . @D@'@9DS )@@G@@ GOTO GGSEX9 . -> CALL FCN. @B@@@9/. DT )@@G@@ ICODE FOR FLOAT OPERATIONS @A@@@9. ADDITION -- COMPLEX DU )@@G@@@C@@@9 GMODE 'M' . SET BIT FOR PACKING ICODE @[@@@9. @[@@@9DV )@@G@@. @#@@@9GGADFC GLBL . @C@@@9 GIFR GGADF1,AGIM2 . -> IMDW )@@G@@2 IN REG@F@@@9 GIFR GGADF4,AGIM1 . SEE IF IMAG PART IS IN RDX )@@G@@EGISTER @D@@@9 GLOAD AGIM1,2 . IF NOT, PUT IT THERE DY )@@G@@@F@@@9GGADF4 GLBL . MERGE POINT WHEN AGIM1 IS IN REGISTERDZ )@@G@@@F@@@9 GFLOAT OPDFA,AGIM1,AGIM2 . ADD LEFT TO RIGHT IMAG PART EA )@@G@@@E@@@9 GSET AGIM2,AGIM1 . CHANGE RIGHT TO LEFT AS RESULT @^@@@9EB )@@G@@ GGOTO GGADF5 . @F@@@9GGADF1 GLBL . MERGE POINT WHEN LEFT IMAEC )@@G@@G PART IN IN REGISTER @F@@@9 GFLOAT OPDFA,AGIM2,AGIM1 . ADD RIGHED )@@G@@T TO LEFT IMAG PART @F@@@9GGADF5 GLBL . MERGE POINT AFTER IMAG PAEE )@@G@@RT ADDITIONS GENERATED @G@@@9 GBOFF GGADFR,IGDCFX . IF DEC X, FEF )@@G@@ALL THROUGH FOR OVFLW CHECK @D@@@9 GBAL GOVIM2 . DEC FIXED OVEG )@@G@@ERFLOW CHECKING @[@@@9. @ @@@9. ADDITION -- REAL @[@@@9EH )@@G@@. @#@@@9GGADFR GLBL . @F@@@9 GIFR GGADF2,AGRL2 . -> LEEI )@@G@@FT REAL PART IS IN REGISTER @E@@@9 GIFR GGADF6,AGRL1 . RIGHT EJ )@@G@@REAL PART IS IN REGISTER@F@@@9 GLOAD AGRL1,2 . OTHERWISE PUTEK )@@G@@ RIGHT PART IN REGISTER @F@@@9GGADF6 GLBL . MERGE POINT WEL )@@G@@HEN AGRL2 IS IN REGISTER@F@@@9 GFLOAT OPDFA,AGRL1,AGRL2 . ADD LEEM )@@G@@FT TO RIGHT REAL PART @E@@@9 GSET AGRL2,AGRL1 . CHANGE RIGHT EN )@@G@@TO LEFT REAL PART @^@@@9 GGOTO GGADF7 . @F@@@9GGADF2 GLBL . MEO )@@G@@ERGE POINT WHEN LEFT REAL PART IS IN REGISTER @F@@@9 GFLOAT OPDFEP )@@G@@A,AGRL2,AGRL1 . ADD RIGHT TO LEFT REAL PART @E@@@9GGADF7 GLBL . MEQ )@@G@@ERGE WHEN REAL PART ADDITION IN GENERATED @G@@@9 GBOFF GGADF3,IGDCER )@@G@@FX . IF DEC X, FALL THROUGH FOR OVFLW CH+CK @D@@@9 GBAL GOVES )@@G@@RL2 . DEC FIXED REAL OVERFLOW CHECK @#@@@9GGADF3 GLBL . @C@@@9. ET )@@G@@ GAPPN GGLPCL . RESTORE REGS IF BIF @#@@@9 GFIN 'POP'@[@@@9EU )@@G@@. @A@@@9. SUBTRACTION -- COMPLEX @[@@@9. @#@@@9GGSUFCEV )@@G@@ GLBL . @C@@@9 GIFR GGSUF1,AGIM2 . -> IM2 IN REG @^@@@9EW )@@G@@ GLOAD AGIM2,2 @#@@@9GGSUF1 GLBL . @G@@@9 GFLOAT OPDFEX )@@G@@AN,AGIM2,AGIM1 . SUBTRACT RIGHT FROM LEFT IMAG PART @G@@@9 GBOFFEY )@@G@@ GGSUFR,IGDCFX . FALL THROUGH FOR DEC FIX OVERFLOW CHECK @F@@@9 EZ )@@G@@ GBAL GOVIM2 . IMAG FUNNY FLOAT OVERFLOW CHECKING @[@@@9. FA )@@G@@@A@@@9. SUBTRACTION -- REAL @[@@@9. @#@@@9GGSUFR GLBL FB )@@G@@. @C@@@9 GIFR GGSUF4,AGRL2 . -> REAL2 IN REG@D@@@9 FC )@@G@@ GLOAD AGRL2,2 . OTHERWISE PUT REAL2 IN REG @#@@@9GGSUF4 GLBL . FD )@@G@@@G@@@9 GFLOAT OPDFAN,AGRL2,AGRL1 . SUBTRACT RIGHT FROM LEFT REAL FE )@@G@@PART @G@@@9 GBOFF GGSUF7,IGDCFX . FALL THROUGH FOR DEC FIX OVERFLFF )@@G@@OW CHECK @E@@@9 GBAL GOVRL2 . DECIMAL FIXED OVERFLOW CFG )@@G@@HECKER@]@@@9GGSUF7 GLBL @#@@@9 GFIN 'POP'@G@@@9GOVRL2 GLBL . DEFH )@@G@@CIMAL FIXED REAL OVERFLOW CHECKING ROUTINE GENERATION @E@@@9 GSUFI )@@G@@B RTOVCH . REAL DEC FIX OVERFLOW CHECKER @G@@@9 GINST 00,FJ )@@G@@AGRA3,AGRL2 'NO' . LOAD RESULT FOR OVERFLOW CHECKING @^@@@9 GGOFK )@@G@@TO GGOVER . @F@@@9GOVIM2 GLBL . DECIMAL FIXED IMAGINARY PART OVERFLOW FL )@@G@@CHECKING @E@@@9 GSUB RTOVCH . IMAG DEC FIX OVERFLOW CHFM )@@G@@ECKER @A@@@9 GINST 00,AGRA3,AGIM2 'NO' .@#@@@9GGOVER GLBL . FN )@@G@@@^@@@9 GAPPN GGOVR2 . @C@@@9 GRTRN . -> RETUFO )@@G@@RN TO CALLER@E@@@9GGOVR2 LLOC . SEE IF OVERFLOW CHECKING FP )@@G@@NEEDED@G@'@9 IF OOPTD,ON,DGOPT3 THEN,GGOVR3 . -> CHECK NEEDEDFQ )@@G@@ ***** @F@@@' IF DCONFO,ON,DCGONF THEN,GGOVR3 . =>FOFFR )@@G@@L ENABLED @F@@@9 SUB X10,2,I . ERASE CODE WHEN CHECK NOTFS )@@G@@ NEEDED @C@@@9 LJMP . -> END SUBROUTINE @C@@@9FT )@@G@@GGOVR3 LABEL . CHECK IS NEEDED @^@@@9 SUB X10FU )@@G@@,1,I .@E@@@9 LOAD A6,SGDPRE+DCGSLT,X7 . PRECISION OF RESULT FV )@@G@@@B@@@9 SLB A6,1 . PRECISION * 2@H@@@9 STORE A6,FW )@@G@@W1Q1,*X10 . SET INTO Q1 OF WORD FOLLOWING CALL @B@@@9 FX )@@G@@ LJMP . -> RETURN @B@@@9/. ICODE FOR FIXED OFY )@@G@@PERATORE @A@@@9. ADDITION -- COMPLEX @[@@@9. @#@@@9FZ )@@G@@GGADBC GLBL . @C@@@9 GIFR GGADB1,AGIM2 . -> IM2 IN REGGA )@@G@@@ @@@9 GIFR GGADB3,AGIM1 . @^@@@9 GLOAD AGIM1 . @#@@@9GB )@@G@@GGADB3 GLBL . @A@@@9 GINST OPAA,AGIM1,AGIM2 . @D@@@' GC )@@G@@ GAPPN GGFOFL . CHECK FOFL ENABLED @C@@@' GBOFF GGD )@@G@@GADB5,IGFOFL . FOFL ENABLED?@E@@@' GINST OPSA,AGRA3,AGIM1 . GE )@@G@@STORE RESULT FROM RTFOFB@#@@@'GGADB5 GLBL . @ @@@9 GSET AGIGF )@@G@@M2,AGIM1 . @^@@@9 GGOTO GGADBR . @#@@@9GGADB1 GLBL . @A@@@9GG )@@G@@ GINST OPAA,AGIM2,AGIM1 . @ @@@' GAPPN GGFOFL . GH )@@G@@@A@@@' GBOFF GGADB6,IGFOFL . @A@@@' GINST OPSA,AGGI )@@G@@RA3,AGIM2 . @#@@@'GGADB6 GLBL . @[@@@9. @ @@@9. ADDITGJ )@@G@@ION -- REAL @[@@@9. @#@@@9GGADBR GLBL . @ @@@9 GIFR GGADBGK )@@G@@2,AGRL2 @ @@@9 GIFR GGADB4,AGRL1 . @^@@@9 GLOAD AGRGL )@@G@@L1 . @#@@@9GGADB4 GLBL . @A@@@9 GINST OPAA,AGRL1,AGRL2 . GM )@@G@@@ @@@' GAPPN GGFOFL . @A@@@' GBOFF GGADB7,IGFOFLGN )@@G@@ . @A@@@' GINST OPSA,AGRA3,AGRL1 . @#@@@'GGADB7 GLBL . GO )@@G@@@ @@@9 GSET AGRL2,AGRL1 . @^@@@9 GGOTO GGSUF7 . @#@@@9GP )@@G@@GGADB2 GLBL . @ @@@9 GINST OPAA,AGRL2,AGRL1 @ @@@' GAPGQ )@@G@@PN GGFOFL . @A@@@' GBOFF GGADB8,IGFOFL . @A@@@' GR )@@G@@ GINST OPSA,AGRA3,AGRL2 . @#@@@'GGADB8 GLBL . @#@@@9 GFIN GS )@@G@@ 'POP'@[@@@9. @A@@@9. SUBTRACTION -- COMPLEX @[@@@9. GT )@@G@@@#@@@9GGSUBC GLBL . @C@@@9 GIFR GGSUB1,AGIM2 . -> IM2 IN RGU )@@G@@EG @F@@@9 GLOAD AGIM2 . IF NOT,PUT IMAG PART IN REGISTEGV )@@G@@R @E@@@9GGSUB1 GLBL . MERGE WHEN LEFT IMAG PART IS IN REGISTER GW )@@G@@@G@@@9 GINST OPANA,AGIM2,AGIM1 . SUBTRACT RIGHT FROM LEFT IMAG PARGX )@@G@@T @ @@@' GAPPN GGFOFL . @A@@@' GBOFF GGSUB5,GY )@@G@@IGFOFL . @A@.@' GINST OPSA,AGRA3,AGIM1 . @A@@@. GINGZ )@@G@@ST OPSA,AGRA3,AGIM2 . @#@@@'GGSUB5 GLBL . @[@@@9. @A@@@9. HA )@@G@@ SUBTRACTION -- REAL @[@@@9. @#@@@9GGSUBR GLBL . @C@@@9HB )@@G@@ GIFR GGSUB3,AGRL2 . -> REAL2 IN REG@F@@@9 GLOAD AGRHC )@@G@@L2 . IF NOT,PUT REAL LEFT PART IN REGISTER@E@@@9GGSUB3 GLBL . MHD )@@G@@ERGE POINT WHEN REAL LEFT PART IN REGISTER@G@@@9 GINST OPANA,AGRL2HE )@@G@@,AGRL1 . SUBTRACT RIGHT FROM LEFT REAL PART @ @@@' GAPPN GHF )@@G@@GFOFL . @A@@@' GBOFF GGSUB6,IGFOFL . @A@@@' GINHG )@@G@@ST OPSA,AGRA3,AGRL2 . @#@@@'GGSUB6 GLBL . @^@@@9 GFIN 'POP'HH )@@G@@ . @[@@@9. @A@@@9. UNARY PLUS I-CODE @[@@@9. HI )@@G@@@#@@@9GGUPLS GLBL . @F@@@9 GAPPN GGUPL1 . SET TO HJ )@@G@@RETURN TO CORRECT PLACE @#@@@9 GFIN . @F@@@9GGUPL1 GLBL . HK )@@G@@ HERE TO FUDGE RETURN STACK @G@@@9 LOAD AHL )@@G@@3,A0 . GET STACK ADDR ***** @F@'@9 SUBHM )@@G@@ A3,2,I . POINT TO PROPER PLACE IN STACK @F@@@' SUBHN )@@G@@ A3,1,I . POINT TO PROPER PLACE IN STACK @G@@@9 LOAHO )@@G@@DA A6,XGCNRT . DON'T TURN OFF CONST. FLAG ON RETURN @E@@@9 HP )@@G@@ STORE A6,W1H2,A3 . SET NEW RETURN ADDRESS @#@@@9 LJMHQ )@@G@@P . @B@@@'GGFOFL GLBL . ROUTINE TO FIX UP FOFL @D@@@' SETHR )@@G@@ IGFOFL,OFF,DGFLGZ . TURN FOFL OFF @H@@@' IF DCONFO,HS )@@G@@OFF,DCGONF THEN,LJMP . FOFL DISABLED=>NO CHECK CODE @C@@@' SETHT )@@G@@ IGFOFL,ON,DGFLGZ . FOFL ENABLED@E@@@' LOAD A3,0,I . HU )@@G@@ CLEAR REG TO BUILD INSTR @E@@@' LOADXM A3,X10 . GHV )@@G@@ET NEXT WORD FOR CODE @E@;@' ADD A3,GGJNOI,I . CREATE HW )@@G@@JNO $+3 INSTR @E@@@; ADD A3,GGJNOI . CREATE JNO $HX )@@G@@+3 INSTR @D@@@' STORE A3,0,*X10 . STORE USER INSTR HY )@@G@@@D@@@' LOAD A3,GGSBFB . GET RTFOFB SUB CALL@ @@@' HZ )@@G@@ STORE A3,0,*X10 . @#@@@' LJMP . @I@@@9/. EXPONIA )@@G@@ENTIATION I-CODE CLEANUP. MOST WORK DONE IN RUNTIME ROUTINES @[@@@9IB )@@G@@. @[@@@9. @#@@@9GGEXPN GLBL . @C@@@9 GBOFF GGMUBC,IGDIC )@@G@@CFX . ->NOT DEC FIX @H@@@9 GBOFF GGMUF2,IGRLCX . -> ITS REALID )@@G@@. ELSE, FALL THRU FOR COMPLEX @[@@@9. @I@@@9. I-CODIE )@@G@@E FOR MULT/DIV. SOME DIVS USE SAME CODE AS MULTS (SEE ACTION @I@@@9IF )@@G@@. TABLE. THE FLAGS IN DCGSV4+1 (A7) WERE SET IN SUBR GGSFLM IG )@@G@@IN STAGN @A@@@9. ALL FLOAT COMPLEX MULT/DIV @#@@@9GGMUFC GLBL IH )@@G@@. @[@@@9. @D@@@9 GBOFF GGMUF3,IGZERO . -> SOME SHIFT IS II )@@G@@NEEDED@B@@@9 GBOFF GGMUF8,IGPLUS . -> DONE @F@@@9 GIFIJ )@@G@@R GGMFCZ,AGIM2 . SEE IF IMAG PART IS IN REGISTER @D@@@9 GLOIK )@@G@@AD AGIM2,2 . IF NOT, PUT IT THERE @D@@@9 GGOTO GGMFCZ . IL )@@G@@ -> NORMALIZE IMAG PART @#@@@9GGMUF3 GLBL . @F@@@9 GIFIM )@@G@@R GGMUF4,AGIM2 . SEE IF IMAG PART IS IN REGISTER @C@@@9 GLOIN )@@G@@AD AGIM2,2 . IF NOT,PUT IT THERE@G@@@9GGMUF4 GLBL . MERGE POINT FIO )@@G@@OR SHIFTING WHEN IMAG PART IS IN REGISTER @E@@@9 GBON GGMFCP,IGIP )@@G@@PLUS . -> POSITIVE SHIFT NEEDED @H@@@9 GFLOAT OPDFD,AGIM2,AGXRIQ )@@G@@0 . PERFORM (-) (DIVIDE) SHIFT OF IMAG PART @^@@@9 GGOTO GGMFCIR )@@G@@Z . @#@@@9GGMFCP GLBL . @G@@@9 GFLOAT OPDFM,AGIM2,AGXR0 . PEIS )@@G@@RFORM (+) (MULT) SHIFT OF IMAG PART @#@@@9GGMFCZ GLBL . @I@@@9 IT )@@G@@ GFLOAT OPDFA,AGIM2,AGXUNZ . NORMALIZE RESULT BY ADDING UNNORMALIZED ZEIU )@@G@@RO @E@@@9 GBAL GOVIM2 . CHECK FOR DEC FIX IMAG OVERFLOWIV )@@G@@@D@@@9 GGOTO GGMUF2 . DO SAME TO REAL PART @[@@@9. IW )@@G@@@C@@@9. FLOATING REAL MULTIPLICATION ICODE @[@@@9. @#@@@9IX )@@G@@GGMUFR GLBL . @E@@@9 GIFR GGMUF1,AGRL2 . -> LEFT SIDE IS IN IY )@@G@@REGISTER @E@@@9 GIFR GGMUF5,AGRL1 . -> RIGHT SIDE IS IN REGIIZ )@@G@@STER @F@@@9 GLOAD AGRL1,2 . OTHERWISE PUT RIGHT SIDE IN REGJA )@@G@@ISTER @D@@@9GGMUF5 GLBL . MERGE WHEN RIGHT SIDE IS IN REGISTER @I@@@9JB )@@G@@ GFLOAT OPDFM,AGRL1,AGRL2 . PERFORM THE MULTIPLICATION ON THE RIJC )@@G@@GHT OPER @F@@@9 GSET AGRL2,AGRL1 . PUT THE AW IN THE LEFT STJD )@@G@@ACK ITEM @^@@@9 GGOTO GGMUF2 . @#@@@9GGMUF1 GLBL . @G@@@9JE )@@G@@ GFLOAT OPDFM,AGRL2,AGRL1 . MULTIPLY THE LEFT TIMES THE RIGHT JF )@@G@@@[@@@9. @C@@@9. FLOATING REAL MULTIPLICATION AND DIVISION @[@@@9JG )@@G@@. @#@@@9GGMUF2 GLBL . @F@@@9 GBOFF GGMUF6,IGZERO . -> SOJH )@@G@@ME NORMALIZING SHIFT IS NEEDED@E@@@9 GBOFF GGMUF8,IGPLUS . -> NOJI )@@G@@T DEC FIXED SO FINISH UP@E@@@9 GIFR GGMFRZ,AGRL2 . MAKE SURE OPJJ )@@G@@ND IS IN REGISTER @^@@@9 GLOAD AGRL2,2 .@B@@@9 GGOTO GGMJK )@@G@@FRZ . -> NORMALIZE @F@@@9GGMUF6 GLBL . PERFORM A DECJL )@@G@@IMAL SHIFT ON RESULT @E@@@9 GIFR GGMUF7,AGRL2 . INSURE OPERAJM )@@G@@ND IS IN REGISTER @^@@@9 GLOAD AGRL2,2 .@#@@@9GGMUF7 GLBL . JN )@@G@@@G@@@9 GBON GGMFCP,IGPLUS . -> SHIFT RESULT (+) (MULT) TO THE LJO )@@G@@EFT @G@@@9 GFLOAT OPDFD,AGRL2,AGXR0 . SHIFT RESULT (-) (DIV) TO JP )@@G@@THE RIGHT @^@@@9 GGOTO GGMFRZ . @#@@@9GGMFRP GLBL . @A@@@9JQ )@@G@@ GFLOAT OPDFM,AGRL2,AGXR0 . @F@@@9GGMFRZ GLBL . MERGE AFTER AJR )@@G@@NY SHIFTING AND OPND IS IN REGISTER @I@@@9 GFLOAT OPDFA,AGRL2,AGXUJS )@@G@@NZ . NORMALIZE DEC FIXED BY ADDING UNNORMALIZED Z @E@@@9 GBAJT )@@G@@L GOVRL2 . REAL DEC FIX OVERFLOW CHECKING @H@@@9GGMUBC GLBL . MULTJU )@@G@@IPLY/DIVIDE BIN FIX COMPLEX SHIFT HANDLED BY SUBROUTINE @#@@@9GGMUF8JV )@@G@@ GLBL . @^@@@9. GAPPN GGLPCL . @^@@@9 GFIN 'POP' . JW )@@G@@@[@@@9. @A@@@9. FIXED BINARY REAL MULTIPLICATION @[@@@9. @#@@@9JX )@@G@@GGMUBR GLBL . @D@@@9 GIFR GGMUB2,AGRL2 . -> LEFT IS IN REGISTJY )@@G@@ER @E@@@9 GSET AGIM1,AGRL2 . SWITCH LEFT AND RIGHT OPERAND JZ )@@G@@@ @@@9 GSET AGRL2,AGRL1 . @ @@@9 GSET AGRL1,AGIM1 . KA )@@G@@@G@@@9 GIFR GGMUB2,AGRL2 . MAKE SURE NEW LEFT SIDE IS IN REGISTKB )@@G@@ER @^@@@9 GLOAD AGRL2,1 .@F@@@9GGMUB2 GLBL . MKC )@@G@@ERGE WHEN LEFT SIDE IS IN REGISTER @G@@@9 GBON GGMUB3,IGZERO .KD )@@G@@ -> WHEN NOT SHIFTING MSI MAY BE USED @G@@@9 GIFO GGMUB1,AGKE )@@G@@RL2 .MAKE SURE RESULT GOES TO ODD-EVEN PAIR @E@@@9 GSHIFT AGKF )@@G@@RL2 . IF NOT PUT IT IN ODD-EVEN PAIR @A@@@9 GSHIN OPLDSL,AGKG )@@G@@RL2,36,I . @#@@@9GGMUB1 GLBL . @D@/@' GSET AGIM1,AGRL2 .KH )@@G@@ SAVE ODD REG A.W. @F@@@9 GINST OPMI,AGRL2,AGRL1 . MULTIPLY TKI )@@G@@HE LEFT BY THE RIGHT @E@@@9 GBON GGMBRP,IGPLUS . -> A RIGHT (KJ )@@G@@+) SHIFT IS NEEDED@B@@@9 GSHIN OPDSA,AGRL2,AGXR0 . MINUS @^@@@9KK )@@G@@ GGOTO GGMUB4 . @#@@@9GGMBRP GLBL . @B@@@9 GSHIN OPLDSKL )@@G@@C,AGRL2,AGXR0 . PLUS @D@@@9GGMUB4 GLBL . MERGE AFTER SKM )@@G@@HIFTING @E@/@9 GSHIFT AGRL2 . RESULT IS IN EVEN REGISTEKN )@@G@@R @ @@@' GAPPN GGFOF1 . @A@@@' GBOFF GGMUB9,KO )@@G@@IGFOFL . @F@/@' GCJMP OPJNZ,AGIM1,AGTMP1 . ODD REG NOT=0 =>KP )@@G@@OVERFLOW @F@@@/ GCJMP OPJZ,AGRL2,AGTMP1 . ODD REG NOT=0 =>OKQ )@@G@@VERFLOW @ @@@' GSUB RTFOFB . @A@@@' GINST OKR )@@G@@PSA,AGRA3,AGRL2 . @C@@@' GLABEL AGTMP1 . FILL IN JUMP KS )@@G@@@#@@@'GGMUB9 GLBL . @E@@@/ GSHIFT AGRL2 . RESULT IS IN KT )@@G@@EVEN REGISTER @#@@@9GGMBRZ GLBL . @^@@@9 GFIN 'POP' . KU )@@G@@@#@@@9GGMUB3 GLBL . @G@@@9 GINST OPMSI,AGRL2,AGRL1 . NO SHIFKV )@@G@@T NEEDED AFTER MULTIPLICATION @E@@@. GAPPN GGFOFL . CKW )@@G@@HECK FOR FIXEDOVFLOW @A@@@. GBOFF GGMUB8,IGFOFL . @D@@@.KX )@@G@@ GINST OPSA,AGRA3,AGRL2 . STORE DEFAULT @#@@@.GGMUB8 GLBKY )@@G@@L . @^@@@9 GGOTO GGMBRZ . @[@@@9. @ @@@9. FLOATKZ )@@G@@ REAL DIV @[@@@9. @#@@@9GGDVFR GLBL . @D@@@9 GIFR GGDVFLA )@@G@@1,AGRL2 . -> LEFT IS IN REGISTER @E@@@9 GLOAD AGRL2,2 . OLB )@@G@@THERWISE, PUT IT IN A REGISTER@E@@@9GGDVF1 GLBL . MERGE WLC )@@G@@HEN LEFT IS IN REGISTER @D@@@9 GFLOAT OPDFD,AGRL2,AGRL1 . DIVIDE LLD )@@G@@EFT BY RIGHT@F@@@9 GGOTO GGMUF2 . -> MERGE WITH MULTIPLICATLE )@@G@@ION CLEANUP @[@@@9. @ @@@9. FIXED BINARY REAL DIVISION@[@@@9. LF )@@G@@@#@@@9GGDVBR GLBL . @E@@@9 GIFR GGDVB1,AGRL2 . INSURE LEFTLG )@@G@@ OP IS IN REGISTER@^@@@9 GLOAD AGRL2,1 . @ @@@9 GGOTO GLH )@@G@@GDVB2 . @#@@@9GGDVB1 GLBL . @G@@@9 GIFO GGDVB2,AGRL2 . LI )@@G@@ INSURE LEFT OP IS FIRST IN ODD REGISTER @^@@@9 GSHIFT AGRL2 . LJ )@@G@@@A@@@9 GSHIN OPLDSL,AGRL2,36,I . @H@@@9GGDVB2 GLBL . LK )@@G@@ SHIFT RIGHT WITH SIGN EXTENSION BEFORE DIVISION @D@@@9 GBOLL )@@G@@FF GGDVB3,IGPLUS . -> SHIFT RIGHT > 36 @C@@@9 GSHIN OPDSA,AGRLM )@@G@@L2,36,I . EXTEND SIGN @F@@@9 GBON GGDVB4,IGZERO . -> NO LEFT LN )@@G@@SHIFT NEEDED FOR SCALING@G@@@9 GSHIN OPLDSC,AGRL2,AGXR0 . SHIFT LO )@@G@@LEFT (+) TO GET SIGN BITS @^@@@9 GGOTO GGDVB4 . @#@@@9GGDVB3LP )@@G@@ GLBL . @G@@@9 GSHIN OPDSA,AGRL2,AGXR0 . SHIFT RIGHT > 36 WLQ )@@G@@ITH SIGN EXTENSION@#@@@9GGDVB4 GLBL . @C@@@' GAPPN GGZDIV LR )@@G@@. FIX ZDIV FLAG@D@@@' GBOFF GGDVB7,IGZDIV . SEE IF LS )@@G@@ZDIV ENABLED@E@@@/ GIFR GGDVB6,AGRL1 . SEE IF DIVISOR IN RLT )@@G@@EG @C@@@/ GLOAD AGRL1,1 . GET IT IN ONE@#@@@/GGDVB6LU )@@G@@ GLBL . @D@@@' GSUB RTZDIV . CHECK DIVISOR=0 LV )@@G@@@B@@@' GINST 00,AGRA3,AGRL1 'NO' . @G@@@. GAPPN GLW )@@G@@GZDV1 . PUT IN SCALE FOR ZDIVCHECK ROUTINE @#@@@'GGDVB7 GLBLX )@@G@@L . @D@@@9 GINST OPDI,AGRL2,AGRL1 . DIVIDE LEFT BY RIGHT @^@@@9LY )@@G@@ GFIN 'POP' . @#@@@9GGLPCL LLOC . @[@@@9. @[@@@9. LZ )@@G@@@D@@@9. I DON'T THINK THIS IS NECESSARY . PRM 3/21/74@[@@@9. MA )@@G@@@G@@@9. IF IGITER,OFF,DGFLGZ THEN,LJMP . -> NO ITERATION, QUMB )@@G@@IT @[@@@9. @[@@@9. @B@@@9. MORE TO BE INSERTED HERMC )@@G@@E @[@@@9. @#@@@9 LJMP . @B@@@'GGZDIV GLBL . HERE TOMD )@@G@@ FIX ZDIV FLAG @C@@@' SET IGZDIV,OFF,DGFLGZ . CLEAR FLAG ME )@@G@@@F@@@' IF DCONZD,OFF,DCGONF THEN,LJMP . ZDIV IS DISABLED MF )@@G@@@C@@@' SET IGZDIV,ON,DGFLGZ . ZDIV ENABLED@#@@@' LJMMG )@@G@@P . @F@@@.GGZDV1 GLBL . HERE TO PUT IN SCALE FOR MH )@@G@@ZDIV @D@@@. SUB X10,1,I . GET INSTR TO CHANGE@D@@@.MI )@@G@@ LOAD A6,SGDSCP,X7 . GET SIGNED SCALE @^@@@. SSAMJ )@@G@@ A6,9 . @C@@@. STORE A6,W1Q1,*X10 . STORE SCALE @B@@@.MK )@@G@@ LJMP . RETURN @B@@@'GGFOF1 GLBL . HERE TOML )@@G@@ FIX FOFL FLAG @C@@@' SET IGFOFL,OFF,DGFLGZ . CLEAR FLAG MM )@@G@@@F@@@' IF DCONFO,OFF,DCGONF THEN,LJMP . FOFL DISABLED MN )@@G@@@C@@@' SET IGFOFL,ON,DGFLGZ . FOFL ENABLED@#@@@' LJMMO )@@G@@P . @A@@@'GGRPTR LABEL . STAGING FOR POINTER@D@@@' SET SGDPTMP )@@G@@R,ON,SGDID . INDICATE PTR IS PRESENT@#@@@' LJMP . @#@@@'PTRNOPMQ )@@G@@ LABEL @#@@@' GFIN . @]@@@9 END . ___DE BIN FIX COMPMR )@@G@@LEX SHIFT HANDLED BY SUBROUTINE @#@@@9GGMUF8 GLBL . @^@@@9. MS )@@G@@ GAPPN GGLPCL . @^@@@9 GFIN 'POP' . *[S@@@*SDFF*@C@@@Y. COMT )@@G@@PYRIGHT 1975 BY UNIVERSITY OF MARYLAND @[@@@Y. @D@@@Y. QUESTIONMU )@@G@@S CONCERNING THIS SHOULD BE DIRECTED TO: @[@@@Y. @ @@@Y. MARMV )@@G@@VIN V. ZELKOWITZ @B@@@Y. DEPARTMENT OF COMPUTER SCIENCE @A@@@YMW )@@G@@. UNIVERSITY OF MARYLAND @B@@@Y. COLLEGE PARK, MARYLANMX )@@G@@D 20742 @[@@@Y. @G@@@Y. PERMISSION TO USE THESE LISTINGS MY )@@G@@AND THE COMPUTER PROGRAMS THEY@E@@@Y. REPRESENT IS GRANTED UNDER THE FMZ )@@G@@OLLOWING CONDITIONS: @[@@@Y. @G@@@Y. 1. UNLIMITED USE MAY NA )@@G@@BE MADE OF THE PROGRAMS REPRESENTED BY @G@@@Y. THESE LISTINGS PROVINB )@@G@@DED THAT THE NAME PLUM OR UNIVERSITY OF MARYLAND@E@@@Y. PL/1 COMPILER NC )@@G@@REMAINS ASSOCIATED WITH THESE PROGRAMS. @[@@@Y. @F@@@Y. 2. ND )@@G@@MODIFICATIONS MAY BE MADE TO THE LISTINGS PROVIDED: @[@@@Y. @G@@@YNE )@@G@@. (A) ANY RESULTING PROGRAM, OR REPORT, PAPER OR DOCUMENTATION NF )@@G@@@G@@@Y. DESCRIBING SUCH PROGRAM WILL CLEARLY INDICATE THAT THE PRNG )@@G@@OGRAM @E@@@Y. IS A DIALECT OF PLUM OR IS DERIVED FROM PLUM, AND NH )@@G@@@[@@@Y. @G@@@Y. (B) ALL SUCH MODIFICATIONS, OTHER THAN TRIVIANI )@@G@@L CORRECTIONS @F@@@Y. OF ERRORS IN THE SOURCE PROGRAMS, SHALLNJ )@@G@@ BE REPORTED AND @G@@@Y. A BRIEF DESCRIPTION OF THE FEATURE ADDENK )@@G@@D SHALL BE SUBMITTED @C@@@Y. TO THE UNIVERSITY OF MARYLAND, ANNL )@@G@@D @[@@@Y. @F@@@Y. (C) NO PROGRAMS DERIVED FROM THESE LISTNM )@@G@@INGS SHALL BE SOLD@G@@@Y. WITHOUT WRITTEN APPROVAL FROM THE UNIVENN )@@G@@RSITY OF MARYLAND, AND @[@@@Y. @F@@@Y. (D) COPIES OF THESE PNO )@@G@@ROGRAMS MAY BE TRANSMITTED TO OTHER @G@@@Y. LOCATIONS PROVIDED THNP )@@G@@AT SUCH TRANSMITTALS CLEARLY INDICATE @G@@@Y. WHETHER THE PRONQ )@@G@@GRAMS ARE EXACT COPIES OF THE UNIVERSITY OF @E@@@Y. MARYLAND NR )@@G@@PLUM COMPILER OR ARE MODIFICATIONS TO IT. @[@@@Y. @G@@@Y. 3. NS )@@G@@THESE CONDITIONS ONLY APPLY TO THE PLUM COMPILER ITSELF, @F@@@Y. ANNT )@@G@@D ARE NOT MEANT TO APPLY TO ANY PROGRAM WRITTEN USING PLUM. @E@@@Y. THNU )@@G@@E PURPOSE OF THESE CONDITIONS IS TO ALLOW ANY USER TO @F@@@Y. EXPERIMENV )@@G@@NT WITH THE COMPILER AS LONG AS THE RESULTING PRODUCT @G@@@Y. IS NOT SNW )@@G@@OLD AND AS LONG AS IT IS KNOWN THAT THE PRODUCT DEVELOPED @#@@@Y. FRNX )@@G@@OM PLUM. @[@@@Y. @[@@@Y. @[@@@Y. @[@@@Y. @[@@@Y. NY )@@G@@@[@@@Y/. @#@@@Y AXR$ . @#@@@Y DCLRG . @^@@@YGPATCHNZ )@@G@@* PROC *1,1 . @D@@@Y STORE GPATCH(1,1),GPATCH(1,2),GPATCH(1,OA )@@G@@3) . @]@@@Y END@[@@@Y . @^@@@Y . SETUP DSECTS @B@@@YOB )@@G@@ . ADD PLTVDS,PLCGST,PLDSAW,PLCSAW @#@@@Y UNLIST . @]@@@YOC )@@G@@@ADD PLTVDS @#@@@Y LIST . @]@@@Y@ADD PLCGST @#@@@Y@ADD PLDSAW OD )@@G@@. @#@@@Y PLAC . @#@@@Y PLAR . @#@@@Y PLSOE )@@G@@D . @#@@@Y PLCGD . @#@@@Y PLWORD .@#@@@Y PLIOF )@@G@@G . @#@@@Y CEND . @^@@@Y/CGDRVR CSECT 3 . @ @@@Y . <<>> @#@@@Y . <<< END >>> @^@@@Y . <<< RETURN FLAGOH )@@G@@ >>> @F@@@YICRTEX EQU 0001 . EXPRESSION FOLLOWS (IN 'RETURN' M-CODOI )@@G@@E) @D@@@YONEONE +1,-1 . CONSTANT NEEDED IN DO@D@@@YOJ )@@G@@SGDCS EQU 0400 . CASE STACK TYPE @E@@@YSGDFST EQUOK )@@G@@ SDVRCN . NOT FIRST \N\ PREFIX @E@@@YSGDELF EQU SDFOL )@@G@@XFL . ELSE PRESENT IN CASE @D@@@YAGPTA7 EQU 1 . OM )@@G@@ PTR TO AW IN A7 @[@@@Y . @#@@@Y. =============== @E@@@YON )@@G@@ LIT . SUBSEQUENT LITERALS ARE UNDER L.C. 3 @ @@@Y OO )@@G@@ USING SGDSCT,X7 . @^@@@Y . ------------------- @ @@@Y . SET ADDROP )@@G@@ESS WORD DISPLAY @^@@@Y . ------------------- @ @@@Y USING WOQ )@@G@@ORD,X4 . @#@@@YBGDSPY* LOCAL . @D@@@Y LOAD X6,X9 . OR )@@G@@ X6->CURRENT BLOCK @H@@@Y LOAD A8,3,I . DO 4 LEOS )@@G@@VELS OF ADDRESSING IN REGS X10-X7 @H@@@Z LOAD R1,4,I . OT )@@G@@ MAKE SURE WE SET 5 BLOCKS IF THAT MANY @E@@@Y LOAD XOU )@@G@@4,SDBKAW,X9 . PTR TO CURRENT A.R. BASE @E@@@Y MOVE W1,AGRXOV )@@G@@10 . CURRENT LEVEL USES X10 @D@@@Y LOAD X11,DCGBPT . OW )@@G@@ OUTER BLOCK SD @D@@@Y LOADA A2,AGRX9 . SET INDOX )@@G@@EX THRU AW'S@ @@@Y USING SDSECT,X6 . @#@@@YBGDSP1 LABEL . OY )@@G@@@C@@@Z LOOP R1,BGDSP5 . DECREMENT R1 @#@@@ZBGDSP5 LABOZ )@@G@@EL . @G@@@Y LOOP A8,BGDSP2 . LOOP THRU 3 LEVELS OF ADDPA )@@G@@RESSING @#@@@ZBGDSP0 LABEL . @A@@@Y LOAD X4,SDBKAW,X11PB )@@G@@ . @E@@@Y MOVE W1H1,AGRX10,I . CREATE CORE ADDRESS WORD PC )@@G@@@D@Z@Y LOAD X11,SDBSLD,X11 . GET STATIC DEPTH @D@@@Z PD )@@G@@ LOAD A8,SDBSLD,X11 . GET STATIC DEPTH @F@Z@Y SUB XPE )@@G@@11,1,I . ZELK SAYS IT'S ONE TOO MANY @F@@@Z SUB APF )@@G@@8,1,I . ZELK SAYS IT'S ONE TOO MANY @E@Z@Y STORE XPG )@@G@@11,W1H2,X4 . SAVEAWAY IN CORE AW @D@@@Z STORE A8,W1H2PH )@@G@@,X4 . SAVEAWAY IN CORE AW@ @@@Z LOOP R1,BGDSP6 . @#@@@ZPI )@@G@@ JMP . @#@@@ZBGDSP6 LABEL . @D@@@Z LOAD X11,SDBPJ )@@G@@KLK,X11 . GO OUT 1 LEVEL @D@@@Z IF X11,ZERO THEN,JMP PK )@@G@@ ELSE,BGDSP0 . @#@Z@Y JMP . @#@@@YBGDSP2 LABEL . @I@Z@YPL )@@G@@ IF SD3OBK,ON,SDCLS3 THEN,BGDSP3 . ON UNIT BLOCK. SKIP THIPM )@@G@@S LEVEL @H@@@Z IF SD3OBK,OFF,SDCLS3 THEN,BGDSP4 . NOT PN )@@G@@UNIT BLOCK. DON'T SKIP @D@@@Z SUB A2,1,I . SKIP THPO )@@G@@IS A.W. @ @@@Z LOOP A8,BGDSP4 . @C@@@Z GOTO BPP )@@G@@GDSP0 . FINISH UP @#@@@ZBGDSP4 LABEL . @A@@@Y LOAPQ )@@G@@D X4,SDBKAW,X11 . @E@@@Y LOAD A6,W1,A2 . MOVE AWPR )@@G@@ FOR THIS LEVEL @ @@@Y STORE A6,W1,X4 . @#@@@YBGDSP3 LABPS )@@G@@EL . @ @@@Y LOAD X6,X11 . @C@@@Y SUB A2,1,I PT )@@G@@. GET NEXT AW @D@@@Y LOAD X11,SDBKLK,X11 . GO OUPU )@@G@@T ONE LEVEL @F@@@Y. IF ZERO THEN LEVEL 0 REACHED AND WE'RE DONE, OTHERWIPV )@@G@@SE CONTINUE @#@@@Y. WITH NEXT LEVEL.@D@@@Y IF X11,ZERO THEPW )@@G@@N,JMP ELSE,BGDSP1 . @ @@@Y . ------------------------ @A@@@Y . GENPX )@@G@@ERATE BRANCH WORD AROUND BLOCK@ @@@Y . ------------------------- @#@@@YPY )@@G@@DGBRCH* LLOC . @ @@@Y LOADA X4,DCGLBL . @D@@@Y. N.B: PUT PZ )@@G@@SOMETHING INTO X4 BEFORE LINKING TO HERE @H@@@Y IF CGFRMT+CGRCHB,QA )@@G@@OFF,DCGFL2 THEN,LJMP . -> BOTH OFF, NO BRANCH NEEDED @#@@@Y LOCQB )@@G@@AL . @^@@@Y GFIX DBGWC1 . @G@@@Y GEN . GQC )@@G@@ENERATE BRANCH AROUND PROC/BLOCK/FORMAT @A@@@Y GJUMP AGPTX4 . QD )@@G@@UNCOND JUMP @F@@@Y SET CGFRMT,OFF,DCGFL2 . NOTE ONE BRANCH HAS BQE )@@G@@EEN GENNED @]@@@Y JMP .@#@@@Y. ============= @A@@@YDGNTRY* LLOCQF )@@G@@ . DEFINE ENTRY POINTS@E@@@Y LOAD X3,DCGELB . START OF ENTRQG )@@G@@Y LABEL CHAIN @ @@@Y MOVE DCGELB,0,I . @#@@@YDGNTR1 LABELQH )@@G@@ . @C@@@Y IF X3,ZERO THEN,LJMP . -> END OF CHAIN @G@@@Y QI )@@G@@ LOAD A3,SDENAD,X3 . NOT YET TO END, GET ADDR OF NEXT ENTRY SD @H@@@YQJ )@@G@@ STORE X10,SDENAD,X3 . STORE CODE ADDR IN CURRENT PROC SQK )@@G@@D @D@@@Y LOAD X3,A3 . POINT TO NEXT PROC SD @D@@@YQL )@@G@@ GOTO DGNTR1 . CONTINUE TO END OF CHAIN @^@@@Y/ . PREFIXQM )@@G@@ PROCESSOR @#@@@YPGNCDE LABEL . @G@@@Y IF DCGCDE,ON,DCGFLG TQN )@@G@@HEN,PGNXTS . -> USEABLE CODE WAS GENED @D@@@Y GFIX DBGWC1 . QO )@@G@@ BACKUP TO LAST USEABLE CODE@^@@@Y GOTO PGNXT0 . @[@@@Y . QP )@@G@@@ @@@Y . WHICH STMT TO PROCESS @[@@@Y . @#@@@YPGSPLT LABEL . QQ )@@G@@@B@@@Y. STATIC LANGUAGE ANALYSIS FIRST .@D@@@Y LOAD A3QR )@@G@@,A8 . STATEMENT TYPE @D@@@Y SRB A3,9 . QS )@@G@@ UPPER 9 BITS ONLY @B@@@Y L,H2 A6,DSRCGL-(ACBGIN/IC),A3 . QT )@@G@@@^@@@Y ADD A6,1,I . @B@@@Y S,H2 A6,DSRCGL-(ACBGIN/IC),QU )@@G@@A3 . @E@@@Y LOAD F,A8 . SAVE FLAGS FROM STATEMENT TYPE QV )@@G@@@B@@@Y SRBD A8,10 . IN HALFWORDS @^@@@Y LOAD X2,QW )@@G@@A8 . @C@@@Y LOAD X3,PGSTBL-(ACBGIN/IC)/2+FH1,X2 . @E@@@Y QX )@@G@@ IF A9,GE,0,I THEN,PGSPL1 . -> KEEP FIRST HALFWORD@E@@@Y LOAD QY )@@G@@ X3,PGSTBL-(ACBGIN/IC)/2+FH2,X2 . GET HALF2 @#@@@YPGSPL1 LABEL . QZ )@@G@@@C@@@Y LINK 0,X3 . PROCESS THIS STMT @#@@@YPGNXTS LABELRA )@@G@@ . @E@@@Y LOAD R11,DCGSNO . REMEMBER LAST STATEMENT CODED RB )@@G@@@ @@@Y STORE R11,DCGLST . @F@@@YPGNXT0* LABEL . ERC )@@G@@NTRY POINT FROM BLOCK INITIALIZATION@E@@@Y LINK BCKPGC . PREPARRD )@@G@@E TO LOOK AT B-CODE AGAIN @F@@@Y IF 0400,OFF,LIMALX THEN,PGSRE )@@G@@TRT . ->SUPRESS DEBUG LIST @E@@@Y LOAD X4,DPGSLC . START LRF )@@G@@OCATION FOR DISASSEMBLY @C@@@Y LOAD X5,W1U,X10 . END OF CODE TORG )@@G@@ LIST @F@@@Y SUB X5,1,I . MOVE END POINTER BACK FROM FREERH )@@G@@ WORD @D@@@Y LINK LSTBGN . -> CALL DISASSEMBLER @#@@@YRI )@@G@@PGSTRT LABEL . @C@@@Y GETC . SKIP TO NEXT START STATEMENT RJ )@@G@@@#@@@YPGNXT1 LABEL . @E@@@Y IF A8,LT,ACSTMT,I THEN,PGSTRT RK )@@G@@. -> NOT FOUND YET@D@@@Y GMARK DPGSLC . PROTECT BETACODE FOR THISRL )@@G@@ STMT @E@@@Y LOAD A3,X1 . ESTABLISH BUFFER AREA FOR CODERRM )@@G@@@C@@@Y SUB A3,10,I . BOUND ON CODE TO GEN @^@@@Y STORERN )@@G@@ A3,DCGGNB .@E@@@Y MOVE DCGINT,RGCORS,ARGSIZ . FREE ALL REGISTRO )@@G@@ERS @E@@@Y MOVE DCGFLG,0,I . NO CODE GENERATED YET RP )@@G@@@D@@@Y LOAD F,A8 . SAVE FLAGS FOR STATEMENT @F@@@Y RQ )@@G@@ GETC . ADVANCE TO STATEMENT NUMBER@E@@@Y RR )@@G@@ IF ICTSSF,ON THEN,PGXX1 . STATEMENT WAS SUPPLIED@D@@@Y STORS )@@G@@RE A8,DCGSNO . SET NEW STATEMENT NUMBER @^@@@Y STORE A8,R11 . RT )@@G@@@#@@@YPGXX1 LABEL . @G@@@Y IF ICTELF+ICTCNF,OFF THEN,PGCNRU )@@G@@99 . NO ELSE PREFIX OR CONT @F@@@Y MOVE DCGLST,0177777,I . THRV )@@G@@IS IS POSSIBLE ENTRY POINT @D@@@Y LOAD A10,DCGGNB . GRW )@@G@@ET ADDR OF STMT-10@G@@@Y ADD A10,10,I . THEY SUBTRACTRX )@@G@@ED 10 BEFORE STORING @G@@@Y SUB A10,ADPBCM-FH2+FXH2 . REMRY )@@G@@OVE OFSET FOR MOVING BCODE . @E@@@Y SLB A10,1 . MRZ )@@G@@AKE A BCODE PTR IN A10 @E@@@Y IF ICTCNF,ON THEN,PGCNT1 . A CSA )@@G@@ONT STATEMENT @^@@@Y . PROCESS ELSE PREFIX @E@@@Y IF SGDSB )@@G@@CS,OFF,SGDID THEN,PGXX4 . ->NOT CASE ELSE @D@@@Y LINK PGCSEL . SC )@@G@@ SET JUMP TO EXIT @D@@@Y GMARK X10 . GSD )@@G@@ET PTR TO ELSE @ @@@Y LOAD A3,SGDEOL . @ @@@Y STOSE )@@G@@RE X10,W1H2,A3 . @D@@@Y SET SGDELF,ON,SGDCLS . ELSE PRESENT SF )@@G@@FLAG @B@@@Y GOTO PGCN99 . ->MERGE@[@@@Y. @[@@@YSG )@@G@@. @#@@@YPGCSEL LOCAL . @E@@@Y SET DCGCDE,ON,DCGFLG . SSH )@@G@@ET VALID CODE GENNED @F@@@Y IF SGDFST,OFF,SGDCLS THEN,PGCSSI )@@G@@EX . ->FIRST PREFIX @]@@@Y GEN@^@@@Y GJUMP SGDDOL . SJ )@@G@@@#@@@YPGCSEX LABEL . @A@@@Y SET SGDFST,ON,SGDCLS . @#@@@YSK )@@G@@ JMP . @#@@@YPGXX4 LABEL . @D@@@Y LOAD A11,X7 . SL )@@G@@SAVE CURRENT TOP OF STACK @#@@@YPGXX2 LABEL . @F@@@Y IF SM )@@G@@ A10,EQ,SGDEPT THEN,PGXX3 . LOOP TO FIND STACK ENTRY@G@@@Y ADDSN )@@G@@ X7,DCGSLT,I . NEXT STACK ENTRY, FOR THIS ELSE CLAUSE @C@@@Y SO )@@G@@ GOTO PGXX2 . -> TRY NEXT STACK ENTRY @B@@@YPGXX3 LABEL . FOUSP )@@G@@ND ELSE CLAUSE @D@@@Y MOVE SGDIFD,0,I . CLEAR REACHABLE FLAGSQ )@@G@@S @G@@@Y IF CGRCHB,OFF,DCGFL2 THEN,PGELS1 . CAN'T FALL THSR )@@G@@RU FROM THEN@#@@@Y GEN . @D@@@Y GJUMP SGDELS . GEN BRSS )@@G@@ANCH AROUND ELSE CLAUSE @A@@@Y MOVE SGDIFD,CGRCHB,I . @C@@@YST )@@G@@ SET DCGCDE,ON . CODE IS NOW GENERATED@#@@@YPGELS1 LABEL SU )@@G@@@F@@@Y SET CGRCHB,ON,DCGFL2 . ELSE CLAUSE IS ALWAYS REACHABLE SV )@@G@@@#@@@Y GEN . @D@@@Y GLABEL SGDCNT . MARK TARGET OF IFSW )@@G@@ BRANCH @F@@@Y MOVE SGDCNT,SGDELS . MOVE LABEL AW TO CORRECSX )@@G@@T FIELD @D@@@Y STORE A11,X7 . RESTORE TOP OF STACK POINTER SY )@@G@@@[@@@Y. @B@@@Y. I THINK THAT THIS IS WRONG... @[@@@Y. SZ )@@G@@@C@@@Y. STORE F,DCGFLG . RESTORE CODEGEN FLAGS@[@@@Y. @E@@@YTA )@@G@@ GOTO PGCN99 . -> TEST FOR LABELS ON STATEMENT @[@@@Y . TB )@@G@@@C@@@Y . PROCESS CONTINUING STATEMENT (FOLLOWS IF) @[@@@Y . @#@@@YTC )@@G@@PGCNT1 LABEL @ @@@Y LOAD A13,SGDID . @G@@@Y IF TD )@@G@@ A13,NE,SGDIF,I THEN,PGCN99 . NOT AN IF STACK ELEMENT @G@@@Y TE )@@G@@ IF A10,NE,SGDCPT THEN,PGCN99 . -> CONTINUE PTRS DON'T MATCH @#@@@YTF )@@G@@PGCNT3 LABEL . @G@@@Y LOAD A3,DCGFL2 . FOLLOWING IF IS REACHTG )@@G@@ABLE IS ELSE, *******@F@@@Y OR,Q2 A3,SGDIFD-(IN 9,Q2,0,0),TH )@@G@@X7 . OR THEN CLAUSE WILL@G@@@Y STORE A4,DCGFL2 . FALL THROUGH TI )@@G@@ *******@[@@@Y . @#@@@Y GEN . @E@@@YTJ )@@G@@ GLABEL SGDCNT . DEFINE LOCATION OF CONTINUE BRANCH @D@@@Y TK )@@G@@ XGPOP 'SIZE',DCGSLT . ERASE STACK ELEMENT @[@@@Y . @^@@@Y TL )@@G@@ GOTO PGCNT1 . @[@@@Y . @#@@@YPGCN99 LABEL . @F@@@Y GMATM )@@G@@RK DBGWC1 . MARK LOCATION OF STATEMENT START @E@@@Y LOATN )@@G@@DXM X1,DCGGNB . RELOAD ADDRESS OF ACSTMT - 10 @E@@@Y ADD X1,TO )@@G@@10,I . COMPUTE ADDRESS OF ACSTMT + 1 @ @@@Y LOAD A1,KLCH2WTP )@@G@@ . @#@@@Y GETC . @B@@@Y LOAD F,A8 . SAVE FLTQ )@@G@@AGS @^@@@Y USING WORD,X1 .@F@@@Y SET CGFRMT,ON,DCGFLTR )@@G@@2 . FORMAT LABEL NOT ENCOUNTERED @F@@@Y IF ICTLBF,OFF THENTS )@@G@@,PGSKLB . -> SKIP STATEMENT NUMBER @ @@@Y . LOOP FOR LABEL PREFIXES TT )@@G@@@#@@@YPGLABL LABEL . @B@@@Y GETC . NEXT META-CODE SYLLABLE TU )@@G@@@E@@@Y IF A8,LT,ACBSLH,I THEN,PGLABL . SCAN NEXT M-CODE@C@@@YTV )@@G@@ AND,U A8,0777000 . GET RID OF FLAGS @G@@@Y IF A9,TW )@@G@@EQ,ACLABS,I THEN,PGLBLC . SUBSCRIPTED LABEL FOUND @F@@@Y IF TX )@@G@@ A9,EQ,ACLABC,I THEN,PGLBLC . LABEL CONSTANT FOUND @E@@@Y IF TY )@@G@@ A9,EQ,ACBSLH,I THEN,PGCAPF . -> \N\ PREFIX @G@@@Y IF A9,TZ )@@G@@LT,(ACBGIN/IC)*IC,I THEN,PGLABL . -> SCAN NEXT M-CODE @D@@@Y GOTUA )@@G@@O PGSTYP . -> PROCESS STATEMENT TYPE @^@+@Y/. CASE PREFIX \N\UB )@@G@@@#@@@+/. \N\ @#@@@YPGCAPF LABEL. @E@+@Y LINK PGCUC )@@G@@SEL . SET BRANCH TO END OF CASE@^@@@+ EXERR 0 LEVEL,3UD )@@G@@@#@@@YPGCAPF2 LABEL . @E@+@Y LOAD X4,SGDLOP . NEXT PTUE )@@G@@R IN ARG LIST @D@+@Y LOAD A9,SGDLUL . NUM. ARGS SEEUF )@@G@@N @C@+@Y LOAD X3,SGDEOL . ELSE PTR @D@+@Y UG )@@G@@ LOAD A7,1,I . ASSUME + SIGN @C@+@Y GETC . UH )@@G@@ GET BCD PTR @C@+@Y IF A8,EQ,ACBPL,I THEN,PGCAUI )@@G@@Q1 . ->+ @E@+@Y IF A8,NE,ACBMN,I THEN,PGCAQ2 . ->NOT -, BCUJ )@@G@@D PTR @C@+@Y LOADN A7,A7 . MULTIPLIER OF -1 @#@+@YPGCAQ1UK )@@G@@ LABEL . @#@+@Y GETC . @#@+@YPGCAQ2 LABEL . @^@+@Y UL )@@G@@ LOAD X11,A8 . @E@+@Y IF A7,EQ,1,I THEN,PGCAQ3 . ->POSITIVUM )@@G@@E PREFIX @^@+@Y LOADN A8,A8 . @D@+@Y SLB A8,18 . UN )@@G@@ SET UPPER PART TO 0 @^@+@Y SRB A8,18 . @#@+@YPGCAQ3UO )@@G@@ LABEL . @D@+@Y LOAD X5,SDBDLK,X11. SD PTR OF CONSTANT UP )@@G@@@ @+@Y USING SDSECT,X5 . @F@+@Y IF SDARST,ON,SDCLSUQ )@@G@@1 THEN,PGCAP1 . ->STRING PREFIX @D@+@Y LOAD A10,SDFXPT+1,X5UR )@@G@@ . GET VALUE OF \N\ @D@+@Y MPYS A10,A7 . SCALE TUS )@@G@@O + OR -1 @F@+@YPGCAP3 LABEL . COMMON POINT FOR STUT )@@G@@RING PREFIX @D@+@Y GMARK A7 . CURRENT ADDRESS UU )@@G@@@B@+@Y SLB A7,18 . ADDR,0 @B@+@Y LOAD A6,UV )@@G@@A8 . BCD PTR@C@+@Y SRBD A6,18 . A7=BCD,UW )@@G@@ADDR @ @+@Y STORE A10,0,X4 . @D@+@Y STORE A7,1,X4 .UX )@@G@@ SET VALUE, BCD-ADDR@^@+@Y ADD X4,2,I . @C@+@Y UY )@@G@@ STORE X4,SGDLOP . SAVE NEW ADDR@C@+@Y LOAD R1,A9 . UZ )@@G@@ SAVE COUNT @^@+@Y ADD A9,1,I . @ @+@Y STOVA )@@G@@RE A9,SGDLUL . @^@+@Y LOADXI X3,2,I .@D@+@Y SE,H1 A8,VB )@@G@@2,*X3 . SEE IF BCD IN LIST @A@+@Y GOTO PGCAP2 . ->OK SVC )@@G@@O FAR @A@+@Y EXERR ERDUPL LEVEL,2 . @#@+@YPGCAP2 LABEL . VD )@@G@@@#@+@Y GETC . @E@+@Y IF A8,EQ,ACCOMA,I THEN,PGCAVE )@@G@@PF2 . DO NEXT ONE@E@+@Y IF SDARST,OFF,SDCLS1 THEN,PGLABL . -VF )@@G@@>ARITH \N\ @G@+@Y LOAD A9,SDBCNT,X11 . IF STRING OF LENGTHVG )@@G@@ 1. OK ALREADY @A@+@Y IF A9,LT,2,I THEN,PGLABL@#@+@Y VH )@@G@@ GEN . @#@+@Y GLIT 1 @ @+@Y LMJ A1,EXCASESC . VI )@@G@@@ @+@Y GOTO PGLABL . @ @+@Y USING SDSECT,X5 . VJ )@@G@@@C@+@YPGCAP1 LABEL . STRING PREFIX@D@+@Y LOAVK )@@G@@D A10,SDSTML . LENGTH F STRING @^@+@Y SLB A10,18 . VL )@@G@@@C@+@Y ADD A10,W1Q1+2,X11 . FIRST CHAR@B@+@Y GOTVM )@@G@@O PGCAP3 . MERGE .@^@@@Y/ . LABEL PREFIX @D@@@Y . CVN )@@G@@OME HERE FOR SIMPLE OR SUBSCRIPTED LABEL PREFIX @#@@@YPGLBLC LABEL . VO )@@G@@@C@@@Y GETC . READ THE LABEL'S SD@A@@@Y LSDVP )@@G@@P X5,A8 . LABEL'S SD @ @@@Y LOAD F,SDCLS4,X5 . @E@@@Y VQ )@@G@@ IF SD4FLB,ON THEN,PGFLAB . -> FORMAT LABEL @F@@@Y SETVR )@@G@@ CGRCHB,ON,DCGFL2 . LABELED STATEMENTS ARE REACHABLE@D@@@Y IF VS )@@G@@ SD4ENT,ON THEN,PGNTRY . -> ENTRY LABEL@G@@@Y MOVE DCGLST,017VT )@@G@@7777,I . WITH TARGET OF GOTOS, FORCE STMT NO. @ @@@Y USING SDSVU )@@G@@ECT,X5 . @#@@@YPGLAB1 LABEL . @D@@@Y MOVE SDLCHN,ADPCLC . AVV )@@G@@DD LABEL TO LABEL CHAIN @E@@@Y STORE A8,ADPCLC . CURRENT SD BEVW )@@G@@COMES CHAIN HEAD @E@@@Y GMARK SDADD . DEFINE LABEL AS CURRENTVX )@@G@@ LOCATION @F@@@Y IF SDCHCK,OFF,SDCLS3 THEN,PGLAB3 . -> LABEL NVY )@@G@@OT CHACKED @#@@@Y GENM . @E@Z@Y GSUB EXCHK . GVZ )@@G@@ENERATE CALL TO CHECK ROUTINE @E@@@Z GSUB ONCHK . GENERATWA )@@G@@E CALL TO CHECK ROUTINE @B@@@Y GLITRG A8 . SD PTR INTO CODE WB )@@G@@@#@@@Y GFIN . @E@@@Y SET DCGCDE,ON,DCGFLG . CODE HWC )@@G@@AS BEEN GENERATED @#@@@YPGLAB3 LABEL . @F@@@Y MOVE SDLLIM-FH1,WD )@@G@@DCGLLL-FH1,2 . INITIALIZE LIMITS, ETC @F@@@Y STORE R11,SDDCNWE )@@G@@M,X5 . SET SOURCE STATEMENT NUMBER@D@@@Y GOTO PGLABL . WF )@@G@@ -> SCAN FOR MORE LABELS @#@@@YPGFLAB LABEL . @A@@@Y LOADAWG )@@G@@ X4,DAGFMT-AGRX0+AGAW . @C@@@Y LINK DGBRCH+1 . GEN BR AROUNWH )@@G@@D FMT @D@@@Y GMARK DBGWC1 . MARK LOC OF LAST FMT LABEL@^@@@YWI )@@G@@ GOTO PGLAB1 . @ @@@Y USING SDSECT,X5 . @C@@@YPGNTRYWJ )@@G@@ LABEL . PROCESS ENTRY LABEL@E@@@Y MOVE SDENAD,DCGEWK )@@G@@LB . LIFO CHAIN OF ENTRY SD'S @ @@@Y STORE X5,DCGELB . WL )@@G@@@^@@@Y GOTO PGLABL . @[@@@Y . @#@@@YPGSKLB LABEL . @]@@@YWM )@@G@@ GETC @#@@@YPGSKLP LABEL . @]@@@Y GETC @G@@@Y IF AWN )@@G@@8,LT,(ACBGIN/IC)*IC,I THEN,PGSKLP . -> SCAN NEXT META-CODE@#@@@YPGSTYPWO )@@G@@ LABEL . @C@@@Y STORE A8,DCGSRS . SAVE STMT TYPE @E@@@YWP )@@G@@ LOADA X11,PGSPLT . USE THIS BELOW TO RETURN @G@@@YPGMVISWQ )@@G@@* LLOC . GENERATE CODE TO IDENTIFY STMT DURING EXECUTION @^@@@YWR )@@G@@ LOAD A2,R11 . @F@@@Y IF A2,EQ,DCGLST THEN,LJMP . ->NWS )@@G@@O CHANGE ->NO NEW CODE @C@@@YPGMVBT LOCAL . CALLED FROM DWT )@@G@@GDOSP @H@@@Y LOAD A3,DGOPT3 . PUT OPTIONS WHERE IGEWU )@@G@@N CAN GET THEM @B@@@Y OR,Q3 A3,DGOXRF-(IN 63,Q3,1,0) @ @@@YWV )@@G@@ STORE A4,DGFLGZ . @E@@@Y IF A2,LT,DHNUM,I THEN,PGMWW )@@G@@V2 . ROOM IN HISTOGRAM? @B@@@Y SET 0200,OFF,DGFLGZ . NOPE WX )@@G@@@ @@@YPGMV2 LABEL . ->MERGE HERE @F@@@Y STORE R11,AGX0OF . WY )@@G@@SET STATEMENT NUMBER FOR GENERATION @F@@@Y GENM . WZ )@@G@@ FIX THE STATEMENT NUMBER @G@@@Y GINST OPLR,AGRX11,AGXXA )@@G@@R0,U 'NO' . FAKE LR R11 WITH STMT NUMBER @B@@@Y GBOFF PGMV3,000XB )@@G@@1 . -> NO TRACE @D@@@Y GSUB EXTRAC CALL TRACE ROUTINXC )@@G@@E @#@@@YPGMV3 GLBL . @D@@@Y GBOFF PGMV1,0200 . -> NO HIXD )@@G@@STOGRAM REQUIRED @E@@@Y GBOFF PGMV4,0020 . -> NO STAT LANG ANALXE )@@G@@. HIST ONLY @C@@@Y GAPPN PGSTLA . GET LMJ INST SET UP @^@@@YXF )@@G@@ GLITRG A7 . @C@@@Y GGOTO PGMV1 . -> FINISH ICOXG )@@G@@DES @#@@@YPGMV4 GLBL . @G@@@Y GSUB EXHIST . ADD TO XH )@@G@@HISTORIOGRAM COUNT FOR STATEMENT @C@@@YPGMV1 GLBL . MXI )@@G@@ERGE TO FINISH @#@@@Y GFIN . @A@@@Y JMP . -> RETURNXJ )@@G@@ TO CALLER @E@@@YPGSTLA GLBL . GET STATIC LANG ANAL ADDXK )@@G@@R. @C@@@Y LOAD A3,DCGSRS . STATEMENT TYPE @C@@@Y XL )@@G@@ SRB A3,9 . LOWER 9 BITS ONLY @B@@@Y SUB A3,ACBGINXM )@@G@@/IC,I . 0-30 @B@@@Y SLB A3,1 . 0-60 @C@@@YXN )@@G@@ AA A3,DSRLMJ . SET LMJ INST @E@@@Y STORE A3,XO )@@G@@DCGSV4+1 . SET AS A7 IN SAVE AREA @#@@@Y LJMP . @D@@@YXP )@@G@@DSRLMJ LMJ X11,EXMETR . CALL METRIC ROUTINE .@A@@@-/. UNXQ )@@G@@IMPLEMENTED FEATURES @#@@@-DGLEAV* LABEL @#@@@-DGWRIT* LABEL XR )@@G@@@#@@@-DGREAD* LABEL @^@@@- EXERR 0 LEVEL,3@ @@@Y/ . ALXS )@@G@@LOCATE AND FREE @[@@@Y. @[@@@Y. @#@@@YDGALLC LLOC . @ @@@YXT )@@G@@ USING WORD,X5 . @#@@@YDGALNX LABEL . @F@@@Y LOAXU )@@G@@D X5,X1 . SAVE PTR TO BEGIN OF B CODE @E@@@Z LOAXV )@@G@@D A3,W1H2+2 . GET SD OF THING TO ALLOC @D@@@Z USING SXW )@@G@@DSECT,A3 . SEE IF IT HAS A DV @B@@@Z IF SDDVA,NZERO THEN,DXX )@@G@@GALLC1 . @E@@@Z LOAD F,SDCLS4 . SET TO SEE IF STRUCXY )@@G@@T @D@@@Z IF SDSTRU,OFF THEN,DGALL0 . -> IF NOT STRUCT @#@@@ZXZ )@@G@@DGALLC1 LABEL . @ @@@Z STORE A3,AGX0OF . @#@@@Z GENYA )@@G@@M . @D@@@Z GINST OPLA,AGRA1,AGXR0,U . LOAD SD OF THING@B@@@ZYB )@@G@@ GSUB EXADVF . GO FILLIN DV @#@@@Z GFIN . @#@@@YYC )@@G@@DGALL0 LABEL . @E@@@Y IF W1H2+1,ZERO THEN,DGALL1 . NO SYD )@@G@@ET PHRASE @E@@@Y LMCP R,W1H2+1 . GET PTR TO SET PHRAYE )@@G@@SE @D@@@Y XGEN R,2 . EVALUATE SET PHRASE@ @@@YYF )@@G@@ GOTO DGALL2 . @#@@@YDGALL1 LABEL . @B@@@Y LOAYG )@@G@@D A3,W1H2+2 . SD ADDR@D@@@Y LOAD A8,SDBPTR,A3 . GYH )@@G@@ET IMPLIED PTR @ @@@Y XGEN I 'SINGLE' . @#@@@YDGALL2 LABYI )@@G@@EL . @#@@@Y GENM . @B@@@Y GINST OPLA,AGRA3,AGRL1,U YJ )@@G@@'NO' .@ @@@Y GSUB PTRUNL . @#@@@Y GFIN . @B@@@YYK )@@G@@ LOAD A7,W1H2+2 . SD ADDR@D@@@Y OR A7,LAFUYL )@@G@@DG . LA,U A1,SD ADDR @#@@@Y GEN . @^@@@Y GLIYM )@@G@@TRG A8 . @E@@@Y IF W1H1+1,ZERO THEN,DGALL3 . NO IN PHRAYN )@@G@@SE @E@@@Y LMCP R,W1H1+1 . GET PTR TO IN PHRASE YO )@@G@@@D@@@Y XGEN R,2 . EVALUATE IN PHRASE @#@@@Y YP )@@G@@ GEN . @D@@@Y GINST OPLA,AGRA3,AGRL1,U . LA,U A3,AREA ADDRYQ )@@G@@@A@@@Y XGPOP . POP LATEST ENTRY @ @@@Y GOTO DGALL4 YR )@@G@@. @#@@@YDGALL3 LABEL . @#@@@Y GEN . @^@@@Y GLIYS )@@G@@T 1 . @D@@@Y LOAD A3,SYSARE,I . USE SYSTEM AREA YT )@@G@@@#@@@YDGALL4 LABEL . @#@@@Y GENM . @D@@@Y GINST OYU )@@G@@PLA,AGRA2,AGRL1,U . LA,U A2,PTR ADDR@ @@@Y GSUB EXALLC . YV )@@G@@@[@@@Y. @^@@@Y. INITIALIZE? @[@@@Y. @#@@@Y GFIYW )@@G@@N . @C@@@Y XGPOP . CLEAR STACK @F@@@Y YX )@@G@@ IF W1H2,ZERO THEN,PGNXTS . NOTHING MORE TO ALLOCATE@^@@@Y YY )@@G@@ LMCP W1H2 . @E@@@Y GOTO DGALNX . PROCESS NEXT YZ )@@G@@VARIABLE @]@@@Z/. FREE STMT@[@@@Z. @^@@@YDGFREE LABEL . ZA )@@G@@@ @Z@Y EXERR 0 LEVEL,3@F@@@Z LOAD X5,X1 . ZB )@@G@@ SAVE PTR TO BEGIN OF BCODE @E@@@Z LOAD X6,W1H1+2 . GZC )@@G@@ET SD AT START OF FREE EXPR @D@@@Z LOAD F,SDCLS0,X6 . SZD )@@G@@EE IF BSD OR PTR @F@@@Z IF SD0BSD++SD0CNT,OFF THEN,DGFRE3 . -> ZE )@@G@@IF IT IS A PTR @D@@@Z LOAD A8,SDBPTR,X6 . GET IMPLIED PZF )@@G@@TR @ @@@Z GOTO DGFRE9 . @E@@@ZDGFRE3 LABEL . ZG )@@G@@ SEE IF SCALER PTR USED @ @@@Z LOAD F,SDCLS2,X6 .ZH )@@G@@@E@@@Z IF SDARRY,ON THEN,DGFRE4 . -> IF ARRAY REFRENCE @E@@@ZZI )@@G@@ LOAD A8,X6 . SET THE PTR FOR XGEN @G@@@Z ZJ )@@G@@ LOAD X6,W1H2+2,X5 . GET THE SD OF THE VAR FOR RESOLVING @ @@@ZZK )@@G@@ GOTO DGFRE9 . @G@@@ZDGFRE4 LABEL . PTR ARRAY REFERENCEZL )@@G@@, FIND END BY COUNTING LFT & RGT @E@@@Z. PARENS AND INSERT -! ZM )@@G@@ SO IT CAN BE PASSED TO XGEN @[@@@Z. @G@@@Z LOAD A3,1,I ZN )@@G@@. START COUNT AT ONE FOR LFT PAREN @D@@@Z SETGC 2ZO )@@G@@,W1+3,X5 . START AFTER '(' @#@@@ZDGFRE5 LABEL . @#@@@Z ZP )@@G@@ GETC . @D@@@Z IF A8,NE,ACLBRK,I THEN,DGFRE6 . -> IF NOT '('ZQ )@@G@@@D@@@Z ADD A3,1,I . POP ONE FOR '(' @ @@@Z ZR )@@G@@ GOTO DGFRE5 . @^@@@ZDGFRE6 LABEL . NOT '('@D@@@Z IF ZS )@@G@@A8,NE,ACRBRK,I THEN,DGFRE5 . -> NOT ')' @ @@@Z SUB A3,1,I ZT )@@G@@. @G@@@Z IF A3,NE,0,I THEN,DGFRE5 . -> IF COUNT HASNT GONE TZU )@@G@@O 0 YET @[@@@Z. @F@@@Z GETC . GET THE SD AFTER THE ARRAZV )@@G@@Y EXP END FOR RESOLVE @^@@@Z STORE A8,X6 .@H@@@Z LOAZW )@@G@@D A3,ACENEX,I . GET AN -! FOR STORING OVER SPOT JUST READ @F@@@ZZX )@@G@@ TE A1,KLCH2W . IF = THEN GETC IS SET FOR H1 @ @@@ZZY )@@G@@ GOTO DGFRE7 . @G@@@Z SUB X1,1,I . BZZ )@@G@@CODE IS ) SD WITH X1 -> NEXT WORD @ @@@Z STORE A3,W1H2,X1 . AA )@@G@@@ @@@Z GOTO DGFRE8 . @#@@@ZDGFRE7 LABEL . @I@@@Z AB )@@G@@ STORE A3,W1H1,X1 . BCDE IS * ) SD -> WITH X1 -> TO WD WITH AC )@@G@@SD @#@@@ZDGFRE8 LABEL @G@@@Z SETGC 2,W1+1,X5 . AD )@@G@@SET TO READ ARRAY REFERNCE FOR XGEN @^@@@Z XGEN R,2 . @ @@@ZAE )@@G@@ GOTO DGFR10 . @[@@@Z. @[@@@Z. @C@@@ZDGFRE9 LABAF )@@G@@EL . MERGE FROM SIMPLE PTR CASE @C@@@Z XGEN I 'SINGLE' . AG )@@G@@PUT PTR ON STK @#@@@ZDGFR10 LABEL . @E@@@Z STORE X6,AGX0AH )@@G@@OF . STORE SD FOR RESOLVE @#@@@Z GENM . @D@@@Z AI )@@G@@ GINST OPLA,AGRA3,AGRL1,U . LA,U A3,PTRADDR @D@@@Z GINST OAJ )@@G@@PLA,AGRA2,AGXR0,U . LA,U A2,SDADDR @D@@@Z GSUB PTRVER . AK )@@G@@ LMJ X11,RESOLVE @#@@@Z GFIN . @D@@@Z IF W1H1+1AL )@@G@@,NZERO THEN,DGFRE2 . -> IF IN PHRASE@A@@@Z GEN . USE SYSTEM ARAM )@@G@@EA @#@@@Z GLIT 1 . @ @@@Z LOAD A1,SYSARE,I .@ @@@ZAN )@@G@@ GOTO DGFR11 . @A@@@ZDGFRE2 LABEL . AREA SPECIFIED AO )@@G@@@E@@@Z LMCP R,W1H1+1 . GET PTR TO IN PHRASE @F@@@ZAP )@@G@@ XGEN R,2 . PUT AREA PHRASE ON TOP OF STK @#@@@ZAQ )@@G@@ GEN . @F@@@Z GINST OPLA,AGRA1,AGRL1,U . LA,U A1,ARAR )@@G@@EA TO FREE IN @#@@@Z XGPOP . @#@@@ZDGFR11 LABEL . @#@@@ZAS )@@G@@ GENM . @H@@@Z GINST OPLA,AGRA3,AGRL1,U . LA,U A3,VEAT )@@G@@RIFIED PTR (PTRADDR IS ON STK)@C@@@Z GSUB EXFREE . LAU )@@G@@MJ X11,FREE @^@@@Z GFIN 'POP' . @G@@@Z IF W1H2,ZERO THAV )@@G@@EN,PGNXTS . -> IF NO OTHER VAR ON FREE STMT @F@@@Z LMCP RAW )@@G@@,W1H2 . START ALL OVER WITH NEXT PHRASE@ @@@Z GOTO DAX )@@G@@GFREE . @A@@@Y/. ON AND REVERT STATEMENTS @B@@@YDGRVRT LLOAY )@@G@@C . REVERT STMT ENTRY PT @F@@@Y LOAD X5,X1 . SAZ )@@G@@AVE PTR TO BEGIN OF B CODE @D@Z@Y MOVE DCGSV7,0,I . CBA )@@G@@LEAR FLAG AREA @D@@@Z MOVE DCGSVF1,1,I . SET REVERT FBB )@@G@@LAG @F@Z@Y SET 01,ON,DCGSVF1 . SET FLAG INDICATING REVERBC )@@G@@T @D@@@Z LOAD A9,W1Q2 . GET FLAGS+# IN LIST@F@@@ZBD )@@G@@ SRBD A9,7 . SEPARATE FLAGS FROM # IN LIST @^@@@YBE )@@G@@ GOTO DGON1 .@A@@@YDGON LLOC . ON STMT ENTRY PT @D@@@YBF )@@G@@ LOAD X5,X1 . SAVE PTR TO B CODE @D@@@Y MOVBG )@@G@@E DCGSV7,0,I . CLEAR FLAG AREA @E@@@Z LOAD A9,W1Q2BH )@@G@@ . GET FLAGS + # IN LIST @F@@@Z SRBD A9,7 . BI )@@G@@ SEPARATE FLAGS FROM # IN LIST @G@@@Z LOAD A7,ADBK0S . BJ )@@G@@ USE BLOCK 0 SD AS DUMMY IF SYSTEM @F@@@Z IF ONSYST,BK )@@G@@ON,A9 THEN,DGON0 . SYSTEM=>NO BLOCK SD @D@Z@Y LOAD A7,W1H1+1 BL )@@G@@. GET SD OF BLOCK @D@@@Z LOAD A7,W1H2 . GBM )@@G@@ET SD OF BLOCK @#@@@ZDGON0 LABEL . @C@@@Z LOAD X5,A7 .BN )@@G@@ SAVE BLOCK SD@ @@@Z GETC . SKIP BLOCK SD@F@@@Y BO )@@G@@ OR A7,LXFUDG . CREATE LX,U X5,BLOCK SD ADDR @#@@@Y BP )@@G@@ GEN . @C@@@Y GLITRG A8 . GEN INSTR @^@@@YBQ )@@G@@DGON1 LABEL . MERGE @E@Z@Y LOAD A3,W1H2 . GET FLABR )@@G@@GS + # IN LIST @F@Z@Y SRBD A3,16 . SEPARATE FLAGBS )@@G@@S FROM # IN LIST @C@Z@Y STORE A3,DCGSVF2 . SAVE FLAGS BT )@@G@@@C@@@Z STORE A9,DCGSVF2 . SAVE FLAGS @C@Z@Y SRBBU )@@G@@ A4,20 . GET # IN LIST@D@@@Z SRB A10,29 . BV )@@G@@ GET # IN LIST @E@Z@Y LOAD A10,A4 . SAVE # BW )@@G@@FOR LOOP COUNT @^@Z@Y LOAD A7,A4 .@ @@@Z LOAD ABX )@@G@@7,A10 . @F@Z@Y OR A7,LACOND . CREATE LA,U A15,# OBY )@@G@@F CONDITIONS@F@@@Z OR A7,LAFUDG . CREATE LA,U A1,# OFBZ )@@G@@ CONDITIONS @#@@@Y GEN . @^@@@Y GLITRG A8 . @C@@@YCA )@@G@@ IF 01,ON,DCGSVF1 THEN,DGON2 . @#@@@Y GEN . CB )@@G@@@D@@@Y GSUB ONSTMT . LMJ X11,ON STMT @C@Z@Y CC )@@G@@ GETC . ALIGN GETC REGS TO SD OF BLOCK @ @@@Y GOTO DGONLP CD )@@G@@. @#@@@YDGON2 LABEL . @#@@@Y GEN . @D@@@Y GSUCE )@@G@@B REVRT . LMJ X11,REVERT @C@@@YDGONLP LABEL . LOOP THCF )@@G@@ROUGH LIST OF CONDITIONS@ @@@Y LOOP A10,DGON3 . @E@@@Z CG )@@G@@ LINK BCKPGC . BACKUP GETC ONE TOKEN @F@@@Z IF CH )@@G@@ 01,ON,DCGSVF1 THEN,PGNXTS . REVERT=>NO BLOCK SD @ @@@Z LOACI )@@G@@D A3,ADBK0S . @G@@@Z IF A3,EQ,X5 THEN,PGNXTS . WAS SYSCJ )@@G@@TEM=>NO ON UNIT BLOCK @D@@@Z LOADA X5,SDONAW,X5 . GET ADDCK )@@G@@RESS OF AW @F@@@Z GEN . GEN JUMP AROUND ON CL )@@G@@UNIT BLOCK @ @@@Z GJUMP AGPTX5 . @C@@@Y GOTO PCM )@@G@@GNXTS . FINISHED @B@@@YDGON3 LABEL . PROCESS NEXT CONDITCN )@@G@@ION @H@Z@Y GETC . ALIGN GETC REGS TO CONDITION(SKIP , OR BLOCCO )@@G@@K SD OR # IN LIST)@B@@@Y GETC . GET AC CONDITION CODE @^@Z@YCP )@@G@@ SLBD A8,27 .@^@@@Z SRBD A8,9 .@G@@@Z SRBCQ )@@G@@ A9,27 . GET HAVE COND. # IN A9 IF NOT CHECK @C@Z@Y CR )@@G@@ LOAD A9,025,I . ASSUME CHECK @F@Z@Y IF A7,GE,0CS )@@G@@332,I THEN,DGON5 . IT'S CHECK ALRIGHT @D@@@Z IF A8,LE,0CT )@@G@@331,I THEN,DGON5 . NOT CHECK @C@@@Z LOAD A9,025,I . SCU )@@G@@ET CHECK @E@Z@Y SRB A8,27 . JUST HAVE COND. # ICV )@@G@@N A8 @H@Z@Y LOAD A9,A8 . A9 WILL COONTAIN LITERAL CW )@@G@@IN CALLING LIST @#@@@YDGON5 LABEL . @^@@@Z LOAD A7,A9 .CX )@@G@@@C@@@Y SLB A9,9 . 0,CODE #,0 @D@@@Y ADDCY )@@G@@ A9,DCGSVF2 . 0,CODE #,FLAGS @D@@@Y SLB A9,18 .CZ )@@G@@ CODE #,FLAGS,0 @E@Z@Y IF A8,LT,015,I THEN,DDA )@@G@@GON4 . NOT COND(REF) @E@@@Z IF A7,LT,015,I THEN,DGON4 .DB )@@G@@ NOT COND(REF) @E@Z@Y XGEN R,2 . EVALUATE NAMEDC )@@G@@ IN EXPR @F@@@Z ADD X1,1,I . GET TO SD OF NAME ODD )@@G@@F VARIABLE @B@@@Z GETC . GET SD @E@Z@Y DE )@@G@@ ADD A9,SGDRSD . CODE #,FLAGS,SD ADDR @D@@@Z ADDDF )@@G@@ A9,A8 . CODE #,FLAGS,SD ADDR @A@Z@Y XGPOP . POP ENTDG )@@G@@RY OFF STACK@F@@@Z ADD X1,1,I . SKIP TO COMMA IF LIDH )@@G@@ST OF CONDS @#@@@YDGON4 LABEL . @A@@@Y GEN . PUT LITERAL IDI )@@G@@N CODE@^@@@Y GLITRG A9 . @D@@@Z GETC . DJ )@@G@@ SKIP COMMA IF ANY @B@@@Y GOTO DGONLP . NEXT? DK )@@G@@@ @@@Y/. SIGNAL STATEMENT @[@@@Y. @A@@@YDGSIGN LABEL . EDL )@@G@@NTRY FOR SIGNAL @E@@@Y GETC . GET ACODE OF DM )@@G@@CONDITION @C@Z@Y LOAD A7,A8 . SAVE ACODE @C@@@ZDN )@@G@@ STORE A8,DCGSV7 . SAVE ACODE @F@Z@Y SLBD ADO )@@G@@7,27 . SHIFT OUT FIRST HALF OF CODE @E@@@Z SRBD ADP )@@G@@8,9 . SHIFT OUT CONDITION # @D@Z@Y SRB A7,27 .DQ )@@G@@ GET CONDITION # @D@@@Z SRB A9,27 . GDR )@@G@@ET CONDITION # @D@@@Z IF A8,LT,0332,I THEN,DGSGN0 . NOTDS )@@G@@ CHECK@E@@@Z LOAD A9,025,I . SET CHECK COND NUMBER DT )@@G@@@#@@@ZDGSGN0 LABEL . @E@Z@Y IF A7,LT,015,I THEN,DGSGN1 DU )@@G@@. NO SD NEEDED @E@@@Z IF A9,LT,015,I THEN,DGSGN1 . NO SDV )@@G@@D NEEDED @G@Z@Y IF A6,GE,0332,I THEN,DGSGN1 . CHECK - ADW )@@G@@LSO NO SD NEEDED @E@Z@Y XGEN R,2 . EVALUATE EXPRDX )@@G@@ FOR SD @D@@@Z ADD X1,1,I . GET TO SD OF NAME DY )@@G@@@B@@@Z GETC . GET SD @D@Z@Y LOAD ADZ )@@G@@9,SGDRSD . GET SD OF NAME @C@@@Z LOAD A9,A8 . EA )@@G@@ GET SD OF NAME @ @Z@Y OR A9,LA9FDG . @ @@@Z OR EB )@@G@@ A9,LXFUDG . @#@@@Y GEN . @D@Z@Y GLITRG A10 . EC )@@G@@ GEN LA,U A9,SD @D@@@Z GLITRG A10 . GED )@@G@@EN LA,U X5,SD @#@Z@Y XGPOP . @#@@@YDGSGN1 LABEL . @#@@@YEE )@@G@@ GEN . @D@@@Y GSUB ONMNGR . CALL ON UNIT EF )@@G@@MNGR @C@@@Z LOAD A9,86,I . SIGNAL MSG # @C@@@Z EG )@@G@@ SLB A9,9 . 0,MSG #,0 @D@Z@Y LOAD A9,2,I EH )@@G@@. MSG # = 0,LEVEL=2 @B@@@Z ADD A9,2,I . LEI )@@G@@EVEL=2@C@@@Y SLB A9,18 . MSG #,LEVEL,0@D@Z@Y EJ )@@G@@ ADD A9,A8 . MSG #,LEVEL,ACODE @D@@@Z ADD AEK )@@G@@9,DCGSV7 . MSG #,LEVEL,ACODE @#@@@Y GENM . @^@@@Y EL )@@G@@ GLITRG A9 . @^@@@Y GLIT 2 . @#@@@Y +0,0 . EM )@@G@@@#@@@Y +0,0 . @#@@@Y GFIN . @E@@@Y LOAD AEN )@@G@@9,5,I . SET SIGNAL+RETURN FLAGS @^@@@Y SLB A9,27 .EO )@@G@@@F@@@Y LOADXM X5,X10 . GET CURRENT ADDR IN GEN CODE EP )@@G@@@ @@@Z LOADXI X5,0,I . @F@Z@Y A,H2 A9,X5 . EQ )@@G@@ PUT IN CURRENT POS. IN CODE @F@@@Z ADD A9,X5 . ER )@@G@@ PUT IN CURRENT POS. IN CODE @E@@@Y ADD A9,3,I . ES )@@G@@ RETURN ADDR FROM ONUNIT @#@@@Y GENM . @E@@@Y GLIET )@@G@@TRG A9 . GEN. FLAGS,0,RETURN ADDR @B@@@Y GLITRG AEU )@@G@@9 . DITTO @B@@@Y GLITRG A9 . DITTO EV )@@G@@@#@@@Y GFIN . @B@@@Y GOTO PGNXTS . DONE EW )@@G@@@[@@@Z. @C@@@Z. FUDGE FOR IGNORING SYSTEM STATEMENT @[@@@ZEX )@@G@@. @E@@@ZDGSYST LABEL . HERE TO SKIP SYSTEM STMT EY )@@G@@@G@@@Z GETC . HAVE TO GET A TOKEN TO AVOID LOEZ )@@G@@OP @B@@@Z GOTO PGNXTS . DONE @ @@@Y/ . PROCFA )@@G@@ STATEMENT DRIVER @#@@@YDGPROC LABEL . @B@@@Y GETC . FB )@@G@@BLOCK SD PTR. @D@@@Y LOAD X4,X9 . ENCLOSING BLOCK'S SFC )@@G@@D @E@@@Y GFIX DBGWC1 . BACKUP TO ERASE STMT IDENT FD )@@G@@@^@@@Y USING SDSECT,X4. @#@@@YDGPRCL LABEL . @A@@@Y FE )@@G@@ .@F@@@Y. IF THE CODE IS CHANGED TO NOT REQUIRE A FF )@@G@@LABEL ON EVERY PROC @D@@@Y. THIS IS ONE OF THE PLACES THAT A CHANGE FG )@@G@@MUST BE MADE@A@@@Y .@F@@@Y LSDP FH )@@G@@ X4,SDNXDC,X4 . FOLLOW CHAIN OF VBLES IN BLOCK @F@@@Y IF SFI )@@G@@D4ENT,OFF,SDCLS4 THEN,DGPRCL . -> NOT AN ENTRY @G@@@Y IF AFJ )@@G@@8,NE,SDENBK THEN,DGPRCL . -> NOT AN ENTRY TO THIS PROC.@D@@@Y FK )@@G@@ MOVE SDENUM,0,I . FIRST ENTRY GETS NUMBER 0@E@@@Y LOAD A7,FL )@@G@@1,I . SECOND OFFSET (ENTRY NUMBER) @^@@@Y MOVE SDENCH,0,I .FM )@@G@@@#@@@YDGPRC0 LABEL . @D@@@Y LOAD X2,X4 . X2=STARTOF ENTRFN )@@G@@IES CHAIN @#@@@YDGPRC1 LABEL . @E@@@Y LSDP X4,SDNXDC,X4 . FO )@@G@@ CONTINUE FOLLOWING CHAIN @G@@@Y IF X4,ZERO THEN,DGBLCK . ->FP )@@G@@ END OF CHAIN, ALLOCATE STORAGE @E@@@Y IF SD4ENT,OFF,SDCLS4 FQ )@@G@@THEN,DGPRC1 . -> NOT AN ENTRY@G@@@Y IF A8,NE,SDENBK THEN,DGPRC1FR )@@G@@ . -> NOT AN ENTRY TO THIS BLOCK@C@@@Y LOAD X3,X2 . SFS )@@G@@EARCH ENTRY LIST @#@@@YDGPRC4 LABEL . @G@@@Y LOAD A3,SD2SP,X3FT )@@G@@ . COMPARE 1 1/2 WORDS AT SDSCAL ******* @ @@@Y USING SDSFU )@@G@@ECT,X4 . @E@@@Y IF A3,NE,SD2SP THEN,DGPRC3 . -> NOT RIGHT OFV )@@G@@NE @A@@@Y LOAD A3,SDCLS1-FQ1,X3 . @G@@@Y IF A3,FW )@@G@@NE,SDCLS1-FQ1 THEN,DGPRC3 . -> NOT THIS ONE TRY NEXT @ @@@Y LOAD FX )@@G@@ A3,SDENUM,X3 . @E@@@Y STORE A3,SDENUM,X4 . RETURNS SAME TYPE AFY )@@G@@S ANOTHER @D@@@Y GOTO DGPRC1 . -> LOOK FOR MORE ENTRIES FZ )@@G@@@#@@@YDGPRC3 LABEL . @E@@@Y LSDP X3,SDENCH,X3 . CONTINUE ALONGA )@@G@@G ENTRY CHAIN @F@@@Y IF X3,NZERO THEN,DGPRC4 . COMPARE TYPE GB )@@G@@RETURNED WITH REST@C@@@Y STORE A7,SDENUM . SET ENTRY NUMBER GC )@@G@@@D@@@Y ADD A7,1,I . ADVANCE ENTRY COUNTER @D@@@Y GD )@@G@@ STORE X2,SDENCH,X4 . LINK ENTRY NAME TO CHAIN @E@@@Y GOTO DGPRC0GE )@@G@@ . -> LOOK FOR MORE ENTRY NAMES @A@@@Y . [R2] X2 = HEAD OF ENTGF )@@G@@RY CHAIN @ @@@Y . [R1] A7 = NUMBER OF ENTRIES@^@@@Y USING SDSECGG )@@G@@T,X9 .@]@@@Y . NOTE: @B@@@Y . X2 [R2] = HEAD OF ENTRY CHAIN GH )@@G@@@A@@@Y . X3 [R1] = NUMBER OF ENTRIES@ @@@Y/ . END STATEMENT DRIVGI )@@G@@ER @^@@@Y USING WORD,X1 .@#@@@YDGEND LABEL . @G@@@Y GJ )@@G@@ IF ICENBF+ICENPF,OFF THEN,DGNDD1 . -> NOT A BEGIN OR PROC @[@@@YGK )@@G@@ . @B@@@Y . END FOR PROCEDURE OR BEGIN BLOCK @F@Z@Y IF CGL )@@G@@GRCHB,OFF,DCGFL2 THEN,DGEND1 . -> NOT REACHABLE @E@@@Z IF CGM )@@G@@GRCHB,ON,DCGFL2 THEN,DGEND1X . -> REACHABLE @E@@@Z GFIX DGN )@@G@@BGWC1 . BACKUP TO ERASE MOVES @ @@@Z GOTO DGEND1 GO )@@G@@. @#@@@ZDGEND1X LABEL . @#@@@Y GENM . @^@@@Y GSUB GP )@@G@@EXEXIT . @#@@@Y GLIT 1 . @F@@@Y + 0 . FGQ )@@G@@LAGS INDICATE THIS IS A BLOCK EXIT @#@@@Y GFIN . @A@@@Y GR )@@G@@ SET CGRCHB,OFF,DCGFL2 . @#@@@ZDGEND1 LABEL . @G@@@Z IF GS )@@G@@ SD3OBK,OFF,SDCLS3 THEN,DGEND3 . NOT ON UNIT BLOCK @E@@@Z GT )@@G@@ LOADA X3,SDONAW,X9 . GET ADDR OF AW IN SD @#@@@Z GENGU )@@G@@ . @F@@@Z GLABEL AGPTX3 . FILL IN JUMP AROUND ON UNGV )@@G@@IT @A@Z@Y GOTO DGEND3 . SKIP BACKUP@#@Z@YDGEND1 LABEL . GW )@@G@@@C@Z@Y GFIX DBGWC1 . BACKUP TO ERASE MOVES. @#@@@YDGEND3 LABELGX )@@G@@ . @^@@@Y LOAD X8,DCGTSK@C@@@Y STORE X8,DCGTLV . GY )@@G@@ POP TEMP STACK @C@@@Y LOAD A6,DTGMAX . MAXIMUM TEMP LOC. GZ )@@G@@@D@@@Y STORE A6,SDFXLN,X9 . SET IT INTO BLOCK SD @F@@@Y HA )@@G@@ LSDP A7,SDCHLD,X9 . GET 1ST VBLE OF CHECK/NOCHECK LIST @D@@@Y HB )@@G@@ LOAD X9,DCGBPT . RESTORE BLOCK POINTER @E@@@Z MOVE DHC )@@G@@CGONF,SDSTON . RESTORE CONDITION FLAGS @D@@@Y LOAD X7,DCGSTLHD )@@G@@ . RESET STACK POINTER@^@@@Y USING WORD,X7 . @A@@@Y HE )@@G@@ MOVE DCGBPT-FH1,W1,DCGBSZ . @ @@@Y XGPOP 'SIZE',DCGBSZ . @A@@@YHF )@@G@@ MOVE AGDOST+FH2,DCGLOF . @E@@@Y IF DCGLBL,ZERO THEN,DHG )@@G@@GEND2 . -> NOT GENERATED @C@@@Y SET CGRCHB,ON,DCGFL2 . ITHH )@@G@@S REACHABLE @B@@@Y LOADA X3,DCGLBL . LABEL A.W. @]@@@Y HI )@@G@@ GEN @^@@@Y GLABEL AGPTX3 . @E@@@Y MOVE DCGLBL,0,I . CLHJ )@@G@@EAR LABEL A.W. FOR NEXT PROC @#@@@YDGEND2 LABEL . @^@@@Y LINK HK )@@G@@ BGDSPY . @D@@@Y LOAD A9,SDFXLN,X9 . STACK LEVEL OF OUTER BLKHL )@@G@@@G@)@Z IF SDBKDP,ZER0 THEN,DGEND6 . BLOCK 0 => NO CHECK LIHM )@@G@@ST @G@@@) IF SDBKDP,ZERO THEN,DGEND6 . BLOCK 0 => NO CHHN )@@G@@ECK LIST @F@@@Y LSDP A10,SDCHLD,X9 . A10 = 1SR SD ON CHK/HO )@@G@@NOCHK LIST @#@@@YDGEND4 LABEL . @D@@@Y IF A7,EQ,0,I THEN,DGEHP )@@G@@ND6 . END OF CHECK LIST@D@@@Y STOREM A7,X5 . SOME POINTERS HQ )@@G@@ARE < 0 @^@@@Y USING WORD,X5 .@^@@@Y USING SDSECT,X5 .HR )@@G@@@E@@@Y IF A10,NE,W1U THEN,DGEND5 . -> RESET CHECK BIT @^@@@YHS )@@G@@ USING WORD,X7 .@G@@@Y IF A9,EQ,W1U THEN,DGEND6 . ->CHECHT )@@G@@K STATUS OF ENCLOSING BLOCK @G@@@Y LOAD A3,SDCLS3,X5 . FLIP CHU )@@G@@HECK BIT ******* @F@@@Y XOR,U A3,SDCHCK . HV )@@G@@ ********@ @@@Y STORE A4,SDCLS3,X5 . HW )@@G@@@#@@@YDGEND5 LABEL . @ @@@Y LSDP A7,SDCHLT,X5 . @A@@@Y HX )@@G@@ IF A7,LT,0,I THEN,DGEND7 . @E@@@Y SET SDCHK2,OFF,SDCLS3 . HY )@@G@@ VBLE NOT ON CHECKLIST @^@@@Y GOTO DGEND4 . @[@@@Y . @#@@@YHZ )@@G@@DGEND7 LABEL . @^@Z@Y SUB X7,1,I . @^@@@Z ADD X7,1,IA )@@G@@I . @E@@@Y LOAD A6,W1,X7 . MOVE SD TO PREV LIST ENTRY IB )@@G@@@ @@@Y STORE A6,SDCHLT,X5 . @^@@@Y GOTO DGEND4 . @[@@@YIC )@@G@@ . @[@@@Y . @^@@@Y USING SDSECT,X9 .@#@@@YDGNDD1 LABEL . ID )@@G@@@E@@@Y IF ICENDF,ON THEN,PGNCDE . IS THIS A SIMPLE DO ?@D@@@YIE )@@G@@ IF ICENCF,OFF THEN,DGEND8 . ->NOT CASE @E@@@Y IF IF )@@G@@ SGDELF,ON,SGDCLS THEN,DGEN50 . ->ELSE PRESENT@^@@@Y GMARK X10IG )@@G@@ . @C@@@Y LOAD A3,SGDEOL . PTR TO ELSE @ @@@Y IH )@@G@@ STORE X10,W1H2,A3 . @#@@@YDGEN50 LABEL . @]@@@Y GEN@E@@@YII )@@G@@ GLABEL SGDDOL . LINK UP FORWARD BRANCHES @#@@@Y IJ )@@G@@ XGPOP . @A@@@Y GOTO PGNXT0 . ->NEXT STMT @D@@@YDGEND8 LABIK )@@G@@EL . END ITERATIVE DO @^@@@Y LINK DGNDDO . IL )@@G@@@#@@@YDGEND6 LABEL . @D@@@Y MOVE DCGLST,0177777,I . FORCE IM )@@G@@NEW LINE # @^@@@Y GOTO PGNXT0 . @[@@@Y . @[@@@Y . @A@@@YIN )@@G@@DGENDO* LLOC . ENTRY FROM CGIO @#@@@YDGNDDO LOCAL . @E@@@Y IO )@@G@@ LOAD X5,DCGTLV . GET POINTER TO TEMP STACK@^@@@Y USINGIP )@@G@@ WORD,X5 . @E@@@Y MOVE W1H2,SGDTFS . FREE 'TO' AND 'BY' IQ )@@G@@TEMPS @E@@@Y MOVE DCGLLL-FH1,SGDLLL . RESET TEMP LEVEL . IR )@@G@@@F@@@Y MOVE AGDOST+FH2,DCGLOF . SET PROPER DISPLACEMENT IS )@@G@@@#@@@Y GENM . @F@@@Y GINST OPLX,AGRX11,AGDOST,H1 . RETUIT )@@G@@RN THROUGH DO STACK @#@@@Y GLIT 1 . @A@@@Y J TVEXSIU )@@G@@T-(IN 63,0,1,0) . @^@@@Y GLABEL SGDEOL . @G@@@Y GINST OPSZ,IV )@@G@@AGRX0,AGDOST . ZERO DO STACK WORD => INACTIVE DO @H@@@Y. IW )@@G@@ THE AGRX0 IS TO HOLD THE PLACE FOR CGIG @^@@@YIX )@@G@@ GFIN 'POP' . @ @@@Y LOAD A7,DCGLOF-FH1 . @E@@@Y IY )@@G@@ ANH A7,ONEONE . SUB 1 FROM W1H1, ADD 1 TO W1H2 @ @@@Y STOREIZ )@@G@@ A7,DCGLOF-FH1 . @ @@@Y SET CGRCHB,ON,DCGFL2 @]@@@Y JMP .JA )@@G@@@ @@@Y/ . GOTO STATEMENT DRIVER @#@@@YDGGOTO LABEL . @ @@@Y JB )@@G@@ USING SDSECT,X9 . @B@@@Y XGEN R,1 . EVALUATE THE LABEL JC )@@G@@@G@@@Y SET CGRCHB,OFF,DCGFL2 . STATEMENT AFTER THE GOTO IS NOTJD )@@G@@ REABL@G@@@Y IF SDVRCN,ON,SGDCLS THEN,DGGCON . GOTO A LABEL CJE )@@G@@ONSTANT @ @@@Y . GO TO A LABEL VARIABLE @#@@@Y GENM . JF )@@G@@@F@@@Y GDBLE OPDL,AGRA1,AGRL1 . LOAD FIELDS OF LABEL VARIABLE JG )@@G@@@#@@@YDGGLCN GLBL . @C@@@Y GSUB EXGOTO . CALL SERVICE ROUTIJH )@@G@@NE @^@@@Y GFIN 'POP' . @F@@@Y GOTO PGNXTS . -> PROJI )@@G@@CESS NEXT META-CODE INSTRUCTION @ @@@Y . GO TO A LABEL CONSTANT JJ )@@G@@@#@@@YDGGCON LABEL . @#@@@Y GENM . @F@@@Y GINST OPLJK )@@G@@A,AGRA1,AGRL1 . LOAD INV CNT FROM LABEL'S AR @F@@@Y GINST OPLJL )@@G@@A,AGRA2,AGIM1,U . LOAD ADDRESS OF LABEL'A SD @G@@@Y GMODE 'S'JM )@@G@@ . ENSURE LAST BYTES OF IGEN CODE ARE PUT OUT @^@@@Y GGOTOJN )@@G@@ DGGLCN . @^@@@Y. ------------------- @ @@@Y . DO WHILE STMT DRIVEJO )@@G@@R @^@@@Y. ------------------- @#@@@YDGDOWL LABEL . @F@@@Y JP )@@G@@ GMARK A3 . WHERE ARE GENNING CODE NOW? @E@@@Y JQ )@@G@@ ADD A3,2,I . SKIP STMTS NOW GENERATING@D@@@Y STOJR )@@G@@RE A3,AGX0OF . PUT WHERE REACHABLE@#@@@Y GENM . @F@@@YJS )@@G@@ GINST OPLA,AGRA3,AGXR0,U . POINT TO TOP OF DO LOOP @A@@@YJT )@@G@@ GINST OPSA,AGRA3,AGDOST,H1 . @#@@@Y GFIN . @E@@@Y JU )@@G@@ GMARK DCGLLL . SET LABEL UPPER LIMITS @E@@@Y GMAJV )@@G@@RK DCGLUL . SET LABEL UPPER LIMITS @F@@@Y LINK PJW )@@G@@GMVBT . GENERATE HISTOGRAM & STMT # @#@@@YDGDOW1 LABEL . JX )@@G@@@E@@@Y LOAD X5,DCGTLV . CURRENT TEMP STACK LEVEL. @^@@@YJY )@@G@@ USING WORD,X5 . @E@@@Y MOVE SGDTFS,W1H2 . SAVE TEJZ )@@G@@MP STACK POINTER @F@@@Y ADD X1,1,I . IGNORE ACWHILKA )@@G@@ AND ( TOKENS. @D@@@Y. NEXT GETC IS KB )@@G@@!- @^@@@Y GOTO DGIF0 . @^@@@Y/ . IF STMT DRIVER @#@@@YKC )@@G@@DGIF LOCAL . @#@@@Y XGPUSH . @ @@@Y MOVE SGDID,SGDIFKD )@@G@@,I . @F@@@Y MOVE SGDIFD,CGRCHB,I . IF NO ELSE, STMT IS REACHABLKE )@@G@@E @#@@@Y GETC . @D@@@Y STORE A8,SGDCPT . SKF )@@G@@AVE CONTINUE PTR @#@@@Y GETC . @D@@@Y STORE A8,SGDEPT .KG )@@G@@ SAVE ELSE METACODE PTR @#@@@YDGIF0 LABEL . @#@@@Y GETC KH )@@G@@. @C@@@Y XGEN A8 . EVALUATE RELATIONAL EXPR.@D@@@Y KI )@@G@@ LOAD A3,SGDID . PICK UP ID BITS @G@@@Y XOR,U AKJ )@@G@@3,SGDCC . SEE IF THE ID BITS SAY COND CODE @F@@@Y IF KK )@@G@@ A4,EQ,0,I THEN,DGIF1 . MAKE SURE PROPER BITS ARE ON @[@@@Y. @B@@@YKL )@@G@@. NOT COND CODE, MUST BE BIT STRING@[@@@Y. @#@@@Y GENM KM )@@G@@. @F@@@Y GINST OPLA,AGRA3,AGRL1,U . LOAD THE DOPE VETCOR ADDRKN )@@G@@ESS @^@@@Y GSUB IFTEST . @E@@@Y GJUMP SGDCNT+DCGSLT .KO )@@G@@ RETURN 'HERE' IF FALSE @^@@@Y GFIN 'POP' . @E@@@Y KP )@@G@@ JMP . RETURN TO MAIN DRIVER @#@@@YDGIF1 LABEL KQ )@@G@@. @E@@@Y LOAD A7,SGDAID+FQ4 . GET TEST OPCODE SET IN STAGING KR )@@G@@@E@@@Y SLB A7,26 . PUT IN PLACE FOR J FIELD @#@@@YKS )@@G@@DGIF3 LABEL . @#@@@YDGIF5 LABEL . @]@@@Y GENM .@#@@@YDGIF2 KT )@@G@@ GLBL . @F@@@Y GCJMP OPJZ,AGRL1,SGDCNT+DCGSLT . DO A JUMP & 'KU )@@G@@FAKE' IT @G@@@Y GAPPN KLUGIT . GET CORRECT J FIELDKV )@@G@@ FOR THE JUMP @^@@@Y GFIN 'POP' . @]@@@Y JMP .@D@@@YKW )@@G@@KLUGIT GLBL . FIX OPCODE-J FIELD FOR 'TEST' JUMP @F@@@Y LOAD KX )@@G@@ A3,X10 . GET ADDR OF LAST INSTRUCTION @E@@@Y SUB KY )@@G@@ A3,1,I . POINT TO RIGHT PLACE @E@@@Y LOAD A7,DCKZ )@@G@@GSV4+1 . PICK UP WHAT WAS IN A7 @E@@@Y OR A7,0,A3 . LA )@@G@@ CORRECT J FIELD PROBLEM @F@@@Y STORE A8,0,A3 . LB )@@G@@ PUT AWAY 'FIXED' INSTRUCTION @A@@@Y LJMP . GO ON BACK TOLC )@@G@@ GFIN @[@@@Y . @^@@@Y . -------------------- @ @@@Y . DO SPECIFICATILD )@@G@@ON DRIVER @^@@@Y . -------------------- @A@@@YDGDOS* LLOC . ENTRLE )@@G@@Y FROM CGIO @C@@@Y MOVE DCGDST,1,I . SET CGIO ENTRY @A@@@YLF )@@G@@ GOTO DGDOPX . ->MERGE @D@@@YDGDOCS LLOC . LG )@@G@@ ENTRY FOR CASE DO @#@@@YDGDOSP LLOC . @D@@@Y MOVE DCGLH )@@G@@DST,0,I . .NEED ENTRY FOR I/0 @C@@@YDGDOPX LOCAL . LI )@@G@@ APPARENT ENTRY @#@@@Y XGPUSH . @E@@@Y LOAD A3,A5 .LJ )@@G@@ GET STMT TYPE FROM A5 @D@@@Y SRB A3,9 . LK )@@G@@ GET RID OF FLAGS @H@@@Y IF A3,EQ,ACDOCS*/-9,I THEN,DLL )@@G@@GDOC1 . IS THIS A DO CASE STMT? @D@@@Y MOVE SGDLLL,DCGLLL-FH1LM )@@G@@ . SAVE LABEL LIMITS @D@@@Y SET DCGLLS,OFF,DCGFLG . LABEL LILN )@@G@@MITS NOT SET@ @@@Y LOAD A11,DCGLOF-FH1 .@D@@@Y AH ALO )@@G@@11,ONEONE . ADD 1 H1, SUB 1 H2 @F@@@Y STORE A11,DCGLOF-FH1 .LP )@@G@@ GET OFFSET OF DO WRD IN AREC @^@@@Y SRB A11,18 . @E@@@YLQ )@@G@@ STORE A11,AGDOST+FH2 . STORE OFFSET INTO AW @E@@@Y LR )@@G@@ IF A8,EQ,ACDOW*/-10,I THEN,DGDOWL . -> DO-WHILE @#@@@Y . ---------LS )@@G@@--- @#@@@Y . DO SPECIAL @[@@@Y . @F@@@Y . DSPEC = ACDSPC;->NEXLT )@@G@@T DOSPEC ! ->ACTO;->ACBY ! ->ACWHIL;0 ! @[@@@Y . @F@@@Y . (POINTERSLU )@@G@@(->) MAY ALSO BE =0, ACDSPC IS ALIGNED AT FULLWORD!! @#@@@Y . ---------LV )@@G@@--- @D@@@Y XGEN R,3 . EVALUATE INDEX @D@@@YLW )@@G@@ LOADA A11,SGDRAB-FH1 . TWO LEVEL ADDRESSING????@B@@@Y IF ALX )@@G@@11,NE,SGDRBS THEN,DGDO20 . @#@@@YDGDOS1 LABEL . @#@@@Y GENM LY )@@G@@. @^@@@Y GGETT AGXTMP . @ @@@Y GINST OPLA,AGRA1,AGRR1 LZ )@@G@@@A@@@Y GINST OPSA,AGRA1,AGXTMP .@^@@@Y GFREE AGRR1 . MA )@@G@@@ @@@Y GSET AGRR1,AGXTMP . @#@@@Y GFIN . @#@@@Y MB )@@G@@ GOTO DGDO21@#@@@YDGDO20 LABEL . @B@@@Y MOVE SGDRAB-FH1,AGRX5-AMC )@@G@@GRX0+AGAW . @#@@@YDGDO21 LABEL . @F@@@Y IF SDRLCX,OFF,SGMD )@@G@@DID THEN,DGDO23 . ->NOT COMPLEX @ @@@Y LOADA A11,SGDIAB . ME )@@G@@@E@@@Y IF A11,NE,SGDIBS THEN,DGDO22 . ->NO AUX BASE . @#@@@YMF )@@G@@ GENM . @#@@@YDGDOS2 GLBL . @^@@@Y GGETT AGXTMP . MG )@@G@@@A@@@Y GINST OPLA,AGRA1,AGRI1 . @A@@@Y GINST OPSA,AGMH )@@G@@RA1,AGXTMP .@^@@@Y GFREE AGRI1 . @ @@@Y GSET AGRI1,AGXTMPMI )@@G@@ . @#@@@Y GFIN . @ @@@Y GOTO DGDO23 . MERGE @#@@@YMJ )@@G@@DGDO22 LABEL . @B@@@Y MOVE SGDIAB,AGRX5-AGRX0+AGAW . @#@@@YMK )@@G@@DGDO23 LABEL . @^@@@Y LOAD A8,0,I . @^@@@Y GTMP R,A8 ML )@@G@@. @E@@@Y STORE A8,SGDTBT+DCGSLT. ORIGINAL TEMP STACK LEVEL MM )@@G@@@^@@@Y STORE A8,DTGMDO .@F@@@Y LOAD F,DCGFLG . HOLD IT, ITMN )@@G@@S USED A LOT. RESTORED AT RET @G@@@Y IF A8,GE,DCGMED THEN,DGDO14MO )@@G@@X . ->CURRENT LAVEL USED IN FORMATS @^@@@Y FTMP R,A8 . @^@@@YMP )@@G@@ STORE A8,DCGMED .@^@@@Y GTMP R,A8 . @E@@@YDGDO14X LABMQ )@@G@@EL . FIND DO SPEC FIRST TIME@#@@@Y GETC . MR )@@G@@@E@@@Y IF A8,NE,ACDSPC,I THEN,DGDO14X . LOOK FOR DO SPEC @E@@@YMS )@@G@@ LOAD X5,W1U,X1 . GET ADDRESS OF DOSPEC @^@@@Y MT )@@G@@ GOTO DGDO14 . @#@@@YDGDO13 LABEL . @F@@@Y LOAD A8,SGDTFS+DMU )@@G@@CGSLT . FREE NULL TEMP ABOVE 'TO' AND 'BY'@^@@@Y FTMP R,A8 . MV )@@G@@@E@@@Y SRB A10,1 . CHANGE MCPTR TO REAL PTR @E@@@YMW )@@G@@ ADD A10,ADPBCM-FH2+FXH2 . ADD IN DISPLACEMENT @F@@@Y MX )@@G@@ LOAD X5,A10 . GET PTR TO ACDSPEC INTO X5 @^@@@Y MY )@@G@@ USING WORD,X5@[@@@Y. @B@@@Y. THIS LINE DOESN'T MAKE ANY MZ )@@G@@SENCE @[@@@Y. @C@@@Y. MOVE DLXDOP,DCGDOP . RESET OPTION FLAGSNA )@@G@@@[@@@Y. @E@@@YDGDO14 LABEL . START PROCESSING SPNB )@@G@@ECS @D@@@Y SET DCGDTO+DCGDBY+DCGDBX+DCGDBN,OFF . RESET @E@@@YNC )@@G@@ SETGC 2,W1H2+2 . SETUP TO READ 'FROM' EXPR@[@@@Y. ND )@@G@@@D@@@Y. NOTE: SETGC ALWAYS ALIGNS ON WORD BOUNDRY @[@@@Y. NE )@@G@@@#@@@Y XGEN R,2 @E@@@Y IF W1H1+1,ZERO THEN,DGDOS3 . -> NF )@@G@@NO 'TO' CLAUSE @C@@@Y LMCP R,W1H1+1 . PTR TO ACTO .NG )@@G@@@^@@@Y SET DCGDTO,ON . @E@@@Y XGEN R,2 . GNH )@@G@@EN CODE FOR 'TO' EXPR @F@@@Y IF SDVRCN,OFF,SGDCLS THEN,DGDO15 NI )@@G@@. ->ITS NOT A CONSTANT .@G@@@Y IF SGDSGN,OFF,SGDCLS THEN,DGDOS4 NJ )@@G@@. ->ITS A POSITIVE CONSTANT @#@@@YDGDO15 LABEL . @[@@@Y. @F@@@YNK )@@G@@. MATCH 'TO' EXPR TO INDEX, AND FORCE INTO TEMP @[@@@YNL )@@G@@. @F@@@Y SET SGDEXP,ON,SGDID . FORCE THE 'TO' EXPR INTO NM )@@G@@TEMP @D@@@Y GASGN 'TEMP' R,X7 'ATTR',SGDAID+2*DCGSLT . @B@@@YNN )@@G@@ GOTO DGDOS4 . -> TEST FOR 'BY' @#@@@YDGDOS3 LABEL . @G@@@YNO )@@G@@ XGPUSH . FAKE ACTO STACK IF NONE SUPPLIED NP )@@G@@@G@@@YDGDOS4 LABEL . 'TO' IS EVALUATED NOW AND IS INNQ )@@G@@ TEMP @D@@@Y IF W1H2+1,ZERO THEN,DGDOS5 . ->NO 'BY' CLAUSE@C@@@YNR )@@G@@ LMCP R,W1H2+1 . POINT TO ACBY@A@@@Y GMARK A12 NS )@@G@@. SAVE LOC CTR @D@@@Y XGEN R,2 . EVALUATE 'BY'NT )@@G@@ EXPR @F@@@Y IF SDVRCN,ON,SGDCLS THEN,DGDO16 . ->BY CLAUSE IS CONU )@@G@@NSTANT@ @@@Y GASGN 'TEMP' R,X7 . @ @@@Y SET DCGDBY+DCGDBXNV )@@G@@,ON @ @@@Y GOTO DGDOS6 . MERGE @#@@@YDGDOS5 LABEL . @H@@@YNW )@@G@@ XGPUSH . FAKE 'BY' STACK ELEMENT IF NONE SUPPLNX )@@G@@IED @E@@@Y IF DCGDTO,OFF THEN,DGDOS6 . NO 'TO' OR 'BY' CLAUSE NY )@@G@@@G@@@Y ADD X7,6,I . POP OFF THAT WHICH WAS JUST PUSNZ )@@G@@HED @F@@@Y LOADA A8,SDA1 . USE THE SUPPLIED CONSTANOA )@@G@@T 1 @E@@@Y XGEN I 'SINGLE' . CREATE THE SGD THINGY OB )@@G@@@^@@@Y GOTO DGDO17 . @#@@@YDGDO16 LABEL . @C@@@Y GFIX OC )@@G@@A12 . ERASE ANY CODE JUST GENED @F@@@Y IF SGDSGN,OFF,SGDCLS OD )@@G@@THEN,DGDO17 . ->POSITIVE BY CONSTANT@D@@@Y SET DCGDBN,ON . MOE )@@G@@ARK NEGATIVE 'BY' CON @F@@@YDGDO17 LABEL . 'BY' EXOF )@@G@@PR IS REALLY A CONSTANT @^@@@Y SET DCGDBY,ON .@#@@@YDGDOS6 LABELOG )@@G@@ . @F@@@Y LINK DGDOSI . COPY INDEX TO TOP OF STACK FOR REFEOH )@@G@@RENCE @F@@@Y GASGN R,X2 SGDAID+2*DCGSLT . ASSIGN 'FROM' TO 'INDEOI )@@G@@X' @[@@@Y. @B@@@Y. THIS LINE DOESN'T MAKE ANY SENCE @[@@@YOJ )@@G@@. @F@@@Y. SET 010,ON,DLXDOP . TURN OFF TEST FOR UNDEFINED VBOK )@@G@@LE @[@@@Y. @[@@@Y. @B@@@Y. KEEP TRACK OF THE TEMP STACOL )@@G@@K... @E@@@Y. THE 'TO' AND THE 'BY' TEMPS WILL BE FREED BY CGIG. OM )@@G@@@[@@@Y. @^@@@Y LOAD A8,0,I . @^@@@Y GTMP R,A8 . ON )@@G@@@C@@@Y STORE A8,SGDTFS+4*DCGSLT . SAVE OFFSET @B@@@Y IF AOO )@@G@@8,LE,DTGMDO THEN,DGDO18 . @C@@@Y STORE A8,DTGMDO . SAVE MAX(DOP )@@G@@TGMDO,A8) @#@@@YDGDO18 LABEL . @A@@@Y AND,U F,DCGDTO+DCGDBXOQ )@@G@@ . @F@@@Y IF F+1,NE,DCGDTO+DCGDBX,I THEN,DGDOS8 . CONSTANOR )@@G@@T 'BY'@#@@@Y GENM . @#@@@Y GLIT 1 . @C@@@Y LA,OS )@@G@@U A3,1 . POSITIVE SIGN@E@@@Y GINST OPTP,AGRX0,AGOT )@@G@@RL1 'NO' . SEE IF 'BY' IS POS @E@@@Y GINST OPLNA,AGRA3,AGRA3 . A3OU )@@G@@=-1 FOR NEGATIVE BY @D@@@Y GINST OPSA,AGRA3,AGDOST,H2 . SAVE IOV )@@G@@N DOSTK @#@@@Y GFIN . @B@@@Y GOTO DGDOS7 . OW )@@G@@ ->MERGE@C@@@YDGDOS8 LABEL . NOT 'TO',AND 'EXPR' FOR 'BY' @G@@@YOX )@@G@@ IF DCGDTO,OFF THEN,DGDOS7 . IF NO 'TO','BY' SIGN TEST NOT NECCOY )@@G@@@E@@@Y IF DCGDBN,ON THEN,DGDOS0 . CONSTANT POS OR NEG? @[@@@YOZ )@@G@@. @A@@@Y. POS CONSTANT HERE @[@@@Y. @#@@@Y PA )@@G@@ GEN . @F@@@Y GINST OPSR,AGRR12,AGDOST,H2 . SET A + SIGN PB )@@G@@IN DOSTACK @ @@@Y GOTO DGDOS7 . @A@@@YDGDOS0 LABEL . NPC )@@G@@EG CONSTANT HERE @#@@@Y GENM . @#@@@Y GLIT 1 . @D@@@YPD )@@G@@ LA,XU A3,-1 . GET A 'NEG' SIGN @E@@@Y GINPE )@@G@@ST OPSA,AGRA3,AGDOST,H2 . NEG 'BY' CONSTANT @#@@@Y GFIN . PF )@@G@@@#@@@YDGDOS7 LABEL . @C@@@Y IF DCGDTO+DCGDBY,OFF THEN,DGDOS9 PG )@@G@@. @G@@@Y MOVE AGTMP2,0,I . JUMP AROUND INCREMENT FIRPH )@@G@@ST TIME*** @F@@@Y GMARK A3 . WHERE ARE WE GENNINPI )@@G@@G CODE? @F@@@Y ADD A3,3,I . POINT PAST INST WE PJ )@@G@@WILL GEN @E@@@Y STORE A3,AGX0OF . SAVE WHERE WE CAN GPK )@@G@@ET IT @#@@@Y GENM . @#@@@YDGDOSA GLBL . @E@@@Y GINPL )@@G@@ST OPLA,AGRA3,AGXR0,U . POINT TO TOP OF LOOP @B@@@Y GINST OPSPM )@@G@@A,AGRA3,AGDOST,H1 . @G@@@Y GJUMP AGTMP2 . JUMP ARPN )@@G@@OUND CODE TO INCREMENT*** @#@@@Y GFIN . @^@@@Y LINK PO )@@G@@DGDOSL . @D@@@Y IF DCGDST,NZERO THEN,DGDO19 . -> I/O LIST PP )@@G@@@^@@@Y LOAD A2,R11 . @^@@@Y LINK PGMVBT . @#@@@YDGDO19PQ )@@G@@ LABEL . @ @@@Y SUB X7,DCGSLT,I . @^@@@Y LOAD A8,ACPR )@@G@@BPL,I @D@@@Y XGEN I 'SINGLE' . ADD 'BY' TO INDEX @^@@@YPS )@@G@@ LINK DGDOSI . @C@@@Y GASGN R,X2 R,X7 . ASSIGN TO INDEPT )@@G@@X @ @@@Y XGPOP 'SIZE',3*DCGSLT .@#@@@Y GEN . @G@@@YPU )@@G@@ GLABEL AGTMP2 . FILL IN JUMP AROUND INCREMENT CODE PV )@@G@@@C@Z@Y IF DCGDTO,OFF THEN,DGDO25 . ->NO 'TO' @E@@@Z IF DPW )@@G@@CGDTO,OFF THEN,DGDO26 . ->NO 'TO', 'BY' ONLY @D@@@Y SUB X7,3*PX )@@G@@DCGSLT,I . RECOVER TO EXPR ENTRY @E@@@Y MOVE SGDAID,SGDAID+3*DPY )@@G@@CGSLT,DCGSLT . COPY INDEX @]@@@Y . ------- @G@@@Y . WARNING: THESE PZ )@@G@@LINES ARE AN ATTEMPT TO GENERATE OPTIMAL CODE,AND AS @A@@@Y . SUCH MAY QA )@@G@@BE IN(CORRECT/COMPLETE) @]@@@Y . ------- @E@@@Y LOAD A8,ACBMQB )@@G@@N,I . LOAD A BINARY MINUS ON STACK @C@@@Y XGEN I 'SINGLE' . QC )@@G@@ GEN TO - INDEX @#@@@Y GENM . @G@@@Y GINST OPMSI,AGRL1QD )@@G@@,AGDOST,XH2 . TIMES (+-)1 FOR (POS/NEG) 'BY' @^@@@Y GFREE AQE )@@G@@GRL1 .@#@@@Y GFIN . @[@@@Y. @G@@@Y. QF )@@G@@ NOW DECIDE ON THE TYPE OF JUMP TO USE@[@@@Y. @E@@@Y QG )@@G@@ IF W1H1+2,NZERO THEN,DGDO32 . IS THERE A WHILE? @[@@@Y. @F@@@YQH )@@G@@. NO WHILE WITH THIS DO, JUMP TO START OF USER'S DO GROUP @G@@@YQI )@@G@@. IF THE 'TO' IN NOT REACHED,ELSE FALL THROUGH TO NEXT DOSPEC QJ )@@G@@@[@@@Y. @#@@@Y GEN . @G@@@Y GCJMP OPJP,AGRL1,SGDLOPQK )@@G@@+3*DCGSLT 'NO' . JUMP TO USER'S DO GROUP @G@@@Y IF DCGDBX++DCGDQL )@@G@@BN,OFF THEN,DGDO11 . TEST FOR POS. BY CONST @#@@@Y GEN . QM )@@G@@@G@@@Y GCJMP OPJZ,AGRL1,SGDLOP+3*DCGSLT . INSURE TEST OF +/- ZEQN )@@G@@RO @#@@@YDGDO11 LABEL . @E@@@Y XGPOP 'SIZE',2*DCGSLT . PQO )@@G@@OP OFF 'TO' AND 'INDEX' @E@@@Y GOTO DGDO10 . -> NO WQP )@@G@@HILE TO PROCESS @F@@@YDGDO32 LABEL . REVERSE JUMPSQQ )@@G@@ WITH WHILE HERE @[@@@Y. @F@@@Y. IF THE 'TO' LIMIT IS REACHEQR )@@G@@D,JUMP AROUND 'WHILE',ELSE @C@@@Y. FALL THROUGH AND TEST THE WQS )@@G@@HILE CLAUSE @[@@@Y. @E@@@Y MOVE SGDDOL+3*DCGSLT,0,I . CLEQT )@@G@@AR AW FOR JUMP @G@@@Y IF DCGDBX++DCGDBN,OFF THEN,DGDO12 . TESQU )@@G@@T FOR POS. BY CONST @G@@@Y GEN . NOT A KQV )@@G@@NOWN POSITIVE CONST FOR THE BY@E@@@Y GINST OPTZ,AGRX0,AGRL1 'NQW )@@G@@O' . TEST FOR +/- ZERO @#@@@YDGDO12 LABEL . @#@@@Y GEN . QX )@@G@@@C@@@Y GCJMP OPJN,AGRL1,SGDDOL+3*DCGSLT . @G@@@Y XGPQY )@@G@@OP 'SIZE',2*DCGSLT . POP OFF 'TO' AND COPY OF 'INDEX' @D@@@Y QZ )@@G@@ GOTO DGDO33 . ->PROCESS WHILE @B@@@ZDGDO26 LABEL . RA )@@G@@ NO TO, BY ONLY@^@@@Z USING WORD,X5 @E@@@Z IF RB )@@G@@ W1H1+2,NZERO THEN,DGDO33 . -> WHILE PHRASE @D@@@Z GEN . RC )@@G@@ NO TO, NO WHILE, BUT BY @C@@@Z GJUMP SGDLOP+DCGSLT .RD )@@G@@ JUMP TO CODE @B@@@Z GOTO DGDO10 . NEXT OPTION@#@@@YRE )@@G@@DGDOS9 LABEL . @F@@@Y XGPOP 'SIZE',3*DCGSLT . CLEAR 'TO'RF )@@G@@ AND 'BY' ENTRIES @^@@@Y USING WORD,X5 .@H@@@Y IF W1HRG )@@G@@1+2,NZERO THEN,DGDO35 . THERE IS A WHILE PRESENT @[@@@Y. RH )@@G@@@^@@@Y. NO WHILE HERE @[@@@Y. @E@@@Y GMARK A3 . RI )@@G@@ POINT TO WHERE WE ARE @F@@@Y ADD A3,3,I . RJ )@@G@@ POINT PAST INST TO BE GENNED @F@@@Y STORE A3,AGX0OF . RK )@@G@@ PUT WHERE IT CAN BE GOTTEN @#@@@Y GENM . @E@@@Y RL )@@G@@ GINST OPLA,AGRA3,AGXR0,U . POINT PAST TOP OF LOOP@B@@@Y GINRM )@@G@@ST OPSA,AGRA3,AGDOST,H1 . @D@@@Y GJUMP SGDLOP+DCGSLT . JUMP RN )@@G@@TO USERS DO GROUP @#@@@Y GFIN . @G@@@Y IF W1H2,ZERORO )@@G@@ THEN,DGDEND . NO FURTHER DO SPECS -> THEN EXIT@ @@@Y LOAD A10RP )@@G@@,W1H2 . @ @@@Y LOADA X11,DGDO13 . @B@@@Y IF DCGRQ )@@G@@DST,NZERO THEN,DGDO13 . @^@@@Y LOAD A2,R11 . @^@@@Y GOTRR )@@G@@O PGMVBT . @#@@@YDGDO35 LABEL . @D@@@Y MOVE AGTMP2,0,I . RS )@@G@@ CLEAR FOR LABEL @E@@@Y GMARK A3 . POINT TRT )@@G@@O WHERE WE ARE @E@Z@Y ADD A3,3,I . POINT PAST TORU )@@G@@P OF LOOP @E@@@Z ADD A3,2,I . POINT PAST TOP OF LRV )@@G@@OOP @D@@@Y STORE A3,AGX0OF . SAVE WHERE EXPECTED@^@Z@YRW )@@G@@ GENMR DGDOSA . @#@@@Z GENM @A@@@Z GINST OPLRX )@@G@@A,AGRA3,AGXR0,U . @E@@@Z GINST OPSA,AGRA3,AGDOST,H1 . NO TO, NO RY )@@G@@BY, WHILE @#@@@Z GFIN @D@@@Y MOVE SGDDOL+DCGSLT,0RZ )@@G@@,I . CLEAR FOR JUMP @#@Z@Y GENM . @D@Z@Y GJUMP SGDSA )@@G@@DOL+DCGSLT . JUMP AROUND THE WHILE @^@Z@Y GLABEL AGTMP2 .@#@Z@YSB )@@G@@ GFIN . @]@@@Y . ------- @ @@@Y . PROCESS 'WHILE' CLAUSE SC )@@G@@@]@@@Y . ------- @#@@@YDGDO25 LABEL . @^@@@Y USING WORD,X5 . SD )@@G@@@E@@@Y IF W1H1+2,ZERO THEN,DGDO10 . ->NO WHILE CLAUSE @D@@@YSE )@@G@@DGDO33 LABEL . PROCESS WHILE HERE @[@@@Y. @B@@@YSF )@@G@@. THIS LINE DOESN'T MAKE ANY SENCE @[@@@Y. @ @@@Y. MOVESG )@@G@@ DLXDOP,DCGDOP . @[@@@Y. @E@@@Y LMCP W1H1+2 . PSH )@@G@@OINT TO 'WHILE' EXPR @E@@@Y XGEN R,2 . PROCESSSI )@@G@@ RELATIONAL EXPR @F@@@Y LOAD A3,SGDID . PICK UP ID BISJ )@@G@@TS FORM STACK @E@@@Y XOR,U A3,SGDCC . SEE IF TYPE CSK )@@G@@OND CODE @E@@@Y IF A4,EQ,0,I THEN,DGDO34 . -> IT IS COND COSL )@@G@@DE @[@@@Y. @A@@@Y. BIT STRING TEST NEEDED . @[@@@Y. SM )@@G@@@#@@@Y GENM . @F@@@Y GINST OPLA,AGRA3,AGRL1,U . LOADSN )@@G@@ THE ADDR OF THE DV @D@@@Y GSUB DOTEST . CALL DOSO )@@G@@TESTER . @F@@@Y GJUMP SGDLOP+2*DCGSLT . RETURN TRUE HERE,GOSP )@@G@@TO DO GROUP @E@@@Y GLABEL SGDDOL+2*DCGSLT . FILL IN JUMP AROUNDSQ )@@G@@ WHILE@^@@@Y GFIN 'POP' .@E@@@Y GOTO DGDO10 . SR )@@G@@ -> PROCESS NEXT DOSPEC @A@@@YDGDO34 LABEL . TYPE COND CODE HERESS )@@G@@@F@@@Y LOAD A7,SGDAID+FQ3 . GET 'DO' J-FIELD SET IN STAGINGST )@@G@@@E@@@Y SLB A7,26 . PUT IN J-FIELD POSITION @#@@@YSU )@@G@@ GENM . @G@@@Y GCJMP OPJZ,AGRL1,SGDLOP+2*DCGSLT . IFSV )@@G@@ TRUE JUMP TO DO GROUP @F@@@Y GAPPN KLUGIT . PUT IN SW )@@G@@PROPER J-FIELD FOR JUMP @F@@@Y GLABEL SGDDOL+2*DCGSLT . FILL INSX )@@G@@ JUMP AROUND 'WHILE' @^@@@Y GFIN 'POP' .@B@@@YDGDO10 LABSY )@@G@@EL . LOOK FOR MORE DOSPECS @^@@@Y USING WORD,X5 .@E@@@Y SZ )@@G@@ IF W1H2,ZERO THEN,DGDEND . -> NO MORE DO SPECS @E@@@Y LOATA )@@G@@D A10,W1H2 . LOAD THE META CODE PTR @E@@@Y GOTO DTB )@@G@@GDO13 . -> PROCESS NEXT DO SPEC .@#@@@YDGDEND LABEL . @[@@@YTC )@@G@@. @B@@@Y. THIS LINE DOESN'T MAKE ANY SENCE @[@@@Y. @ @@@YTD )@@G@@. MOVE DLXDOP,DCGDOP . @[@@@Y. @#@@@Y GENM . @G@@@YTE )@@G@@ GJUMP SGDEOL+DCGSLT . ALL DOSPECS DONE,JUMP TO END OF LOOP TF )@@G@@@D@@@Y GLABEL SGDLOP+DCGSLT . START OF USERS CODE @[@@@Y. TG )@@G@@@G@@@Y. I DON'T THINK THAT THIS GOES HERE CORRTH )@@G@@ECTLY @^@@@Y. GFREE AGRI1 . @^@@@Y. GFREE AGRR1 . @[@@@YTI )@@G@@. @[@@@Y. @^@@@Y GFIN 'POP' . @D@@@Y LOAD A8,SGTJ )@@G@@DTFS . RELEASE 'TO' AND 'BY' TEMPS @^@@@Y FTMP R,A8 . @D@@@YTK )@@G@@ LOAD A8,SGDTBT . '' INDEX '' @^@@@Y FTMP TL )@@G@@ R,A8 . @C@@@Y LOAD X5,DCGTLV . CURRENT STACK LEVEL . @^@@@YTM )@@G@@ USING WORD,X5 . @E@@@Y MOVE SGDTFS,W1H2 . SAVE CURRENT OFTN )@@G@@FSET (H2=TGFSET) @G@@@Y MOVE W1H2,DTGMDO . FAKE TEMP STACK BTO )@@G@@Y CHANGING LAST OFFSET @C@@@Y STORE F,DCGFLG . RESTORE, AFTER LOTP )@@G@@NG USE@]@@@Y JMP .@^@@@Y . ---------------- @#@@@Y . DO SUBRUOTQ )@@G@@TINES @^@@@Y . ---------------- @#@@@YDGDOSI LOCAL . @E@@@Y TR )@@G@@ LOAD X2,X7 . ADD ONE STACK ELEMENT @ @@@Y SUB TS )@@G@@ X2,DCGSLT,I . @^@@@Y USING WORD,X2 . @D@@@Y MOVE W1,SGTT )@@G@@DAID+3*DCGSLT,DCGSLT . COPY INDEX @]@@@Y JMP .@[@@@Y . @#@@@YTU )@@G@@DGDOSL LLOC . @^@@@Y GMARK DCGLUL . @E@@@Y IF DCGLLS,TV )@@G@@ON THEN,LJMP . ->LOWER LIMIT ALREADY SET @ @@@Y GMARK DCGLLL . STW )@@G@@ET IT @A@@@Y SET DCGLLS,ON . SET FLAG @#@@@Y LJMP . TX )@@G@@@[@@@Y. @^@@@Y. --------------------- @]@-@Y. DO CASE @^@@@Y. ----TY )@@G@@----------------- @#@@@YDGDOC1 LABEL . @^@@@- EXERR 0 LEVEL,3TZ )@@G@@@C@-@Y SET SGDCS,ON,SGDID . SET CASE @B@-@Y NONUA )@@G@@PL1 XGCASF,DDGNCS,DGDOC99 @#@-@YDGDOC99 LABEL . @D@-@Y GETUB )@@G@@C . POINT TO ACCASE @^@-@Y LOAD A9,0,I . UC )@@G@@@C@-@Y SRBD A8,9 . CASENUMBERS,0@ @-@Y STOUD )@@G@@RE A9,SGDLLL . @A@-@Y GETC . (@B@-@Y UE )@@G@@ GETC . !- @B@-@Y XGEN I . UF )@@G@@ EXPR @E@-@Y IF SDARST,ON,SGDCLS THEN,DGDOC2 . ->STRINGUG )@@G@@ CASE @F@-@Y CGCONV SFK170 R,X7 . SET FIXED BINARY CAE NUMBUH )@@G@@ER @#@-@Y GENM . @A@-@Y GINST OPLA,AGRA3,AGRL1 . UI )@@G@@@^@-@Y GSUB EXCASEAR .@^@-@Y GFIN 'POP' . @#@-@YDGDOC3UJ )@@G@@ LABEL . @E@-@Y GMARK SGDEOL . SET PTR TO ELSE WORUK )@@G@@D @ @-@Y LOAD A9,SGDLLL . @#@-@Y GEN . @^@-@YUL )@@G@@ GLITRG A9 . @E@-@Y GMARK SGDLOP . PTR TO UM )@@G@@NEXT ARG IN LLIST @D@-@Y LOAD A3,SGDLLL . GET NUMBER OFUN )@@G@@ CASES@D@-@Y SRB A3,26 . 2*NUMBER OF CASS @E@-@YUO )@@G@@ ADD X10,A3 . SET NEW CODE ADDRESS . @F@-@Y. UP )@@G@@ CHECK FOR SPACE -----------------------------------@^@-@Y UQ )@@G@@ JMP . RETURN . @C@-@YDGDOC2 LABEL . STRING CAS UR )@@G@@@A@-@Y SET SDARST,ON,SGDCLS . @#@-@Y GENM . @A@-@YUS )@@G@@ GINST OPLA,AGRA2,AGRL1,U . @ @-@Y GSUB EXCASEST . UT )@@G@@@^@-@Y GFIN 'POP' @^@-@Y GOTO DGDOC3 . @^@-@Y/ . LEUU )@@G@@AVE STATEMENT @#@-@YDGLEAV LABEL . @A@-@Y NONPL1 XGLEAF,DUV )@@G@@DGNLV,DGLV99@#@-@YDGLV99 LABEL . @E@-@Y SET CGRCHB,OFF,DCGFUW )@@G@@L2 . NEXT STMT NOT REACHABLE @E@-@Y LOAD A9,F . SUX )@@G@@AVE COUNT OF BLOCKS @C@-@Y GETC . GET SD UY )@@G@@OR 0 @D@-@Y LOAD X4,X7 . SAVE STACK TOP @E@-@YUZ )@@G@@ IF A8,NE,ACNULL,I THEN,DGLV01 . ->NONLOCAL LEAVE@G@-@Y VA )@@G@@ LINK DGLVBK . GET NEXT ITERATIVE DO BLOCK TO LEAVE @F@-@YVB )@@G@@ LOADA A7,SGDEOL,X4 . POINT TO EXIT LOC IN STACK @#@-@YVC )@@G@@ GEN . @^@-@Y GJUMP AGPTA7 . @B@-@Y GOTO PGNVD )@@G@@XTS . ->NEXT STATEMENT @#@-@YDGLV01 LABEL . @^@-@Y SLB A9,VE )@@G@@27 . @H@-@Y SRB A9,27 . NUMBER OF ITERATIVE DO BLVF )@@G@@OCKS TO LEAVE @D@-@Y LOAD A10,DCGLOF . CURRENT DOSTAVG )@@G@@CK @#@-@YDGLV02 LABEL . @E@-@Y LOOP A9,DGLV04 . NVH )@@G@@EXT ITERATIVE DO BLOCK @D@-@Y LINK DGLVBK . GET LASVI )@@G@@T BLOCK @ @-@Y LOADA A7,SGDEOL,X4 . @#@-@Y GEN . VJ )@@G@@@^@-@Y GJUMP AGPTA7 . @^@-@Y GOTO PGNXTS . @#@-@YDGLV04VK )@@G@@ LABEL . @D@-@Y LINK DGLVBK . GO OUT ONE LEVEL VL )@@G@@@A@-@Y STORE A10,AGDOST+FH2 . @^@-@Y SUB A10,1,I .VM )@@G@@@#@-@Y GEN . @E@-@Y GINST OPSZ,AGRX0,AGDOST . CLEAR TVN )@@G@@HIS DO STACK ELT @D@-@Y ADD X4,DCGSLT,I . GO OUT 1 LEVEVO )@@G@@L @D@-@Y GOTO DGLV02 . OUT ONE MORE LEVEL @[@-@YVP )@@G@@. @E@-@YDGLVBK LLOC . LOOK FOR ITERATIVE DO VQ )@@G@@@^@-@Y USING WORD,X4 .@#@-@YDGLVB2 LABEL . @D@-@Y IF VR )@@G@@ SGDIF,ON,W1Q1 THEN,DGLVB1 . ->IF BLOCK @G@-@Y IF SGDCS,OFFVS )@@G@@,W1Q1 THEN,LJMP . ->NOT CASE, SO ITERATIVE DO @#@-@YDGLVB1 LABEL . VT )@@G@@@ @-@Y ADD X4,DCGSLT,I . @^@-@Y GOTO DGLVB2 . @#@@@YVU )@@G@@/ . ------------- @A@@@Y . ASSIGNMENT STATEMENT DRIVER @#@@@Y . --VV )@@G@@----------- @#@@@YDGASGN LABEL . @^@@@Y LOAD A7,DCGTLV .@C@@@YVW )@@G@@ MOVE DXGLHS,0,I . LHS COUNT=0 @#@@@Y GETC . VX )@@G@@@#@@@Y XGEN A8 . @^@@@Y STORE A7,DCGTLV .@^@@@Y GOTO VY )@@G@@PGNXTS . @#@@@Y . ---------- @ @@@Y . BEGIN STATEMENT DRIVER VZ )@@G@@@#@@@Y . ---------- @#@@@YDGBGN1 LABEL . @#@@@Y GETC . WA )@@G@@@#@@@Y GENM . @C@@@Y GSUB EXNTRY . BLK ENTRY SERVICE ROWB )@@G@@UTINE @#@@@Y GLITRG A8 .@#@@@Y GFIN . @B@@@Y GMARKWC )@@G@@ DBGWC1 . SAVE BLOCK CALL @D@@@Y LOAD X2,0,I . SET TO WD )@@G@@NO PARAMETER LIST @A@@@Y GOTO DGBLCK . ALLOCATE VBLES@#@@@Y . ---WE )@@G@@------- @^@@@Y . STOP, EXIT DRIVER @#@@@Y . ---------- @#@@@YWF )@@G@@DGSTOP LABEL . @]@@@Y GEN .@B@@@Y GSUB EXSTOP . DO WORWG )@@G@@K AT RUNTIME@F@@@Y SET CGRCHB,OFF,DCGFL2 . STMTS AFTER THIS NOTWH )@@G@@ REACHABLE @^@@@Y GOTO PGNXTS . @^@@@Y . ------------------ WI )@@G@@@^@@@Y . CALL STMT DRIVER @^@@@Y . ------------------ @#@@@YDGCALLWJ )@@G@@* LOCAL . @D@@@Y LOAD A7,DCGTLV . TEMP LEV MIGHT GET CHANGED WK )@@G@@@#@@@Y GETC . @#@@@Y XGEN A8 . @^@@@Y STORE A7,DCWL )@@G@@GTLV .@D@@@Y LOAD X2,SGDRAB-FH1 . POINTR TO CALL FLG BYTE@^@@@YWM )@@G@@ USING WORD,X2 . @E@@@Y SET ARFNRN,OFF,W1Q2 . INDICATE CALLWN )@@G@@ TYPE PROCEDURE @#@@@Y XGPOP . @]@@@Y JMP .@[@@@Y. WO )@@G@@@#@@@Y. ----------------@^@@@Y. DEBUGGING DRIVERS @#@@@Y. ----------WP )@@G@@------@D@@@YDGFLOW LABEL . FLOW STATEMENT @^@@@YWQ )@@G@@ LOAD A7,1,I . @D@@@Y IF F,NZERO THEN,DGFLO1 . -> WR )@@G@@FLOW STMT @^@@@Y LOAD A7,2,I . @E@@@YDGFLO1 LABEL . WS )@@G@@ FLOW STMT MERGES HERE @A@@@Y NONPL1 XGFFLW,DDGFLW,WT )@@G@@DGFCMN@#@@@YDGFCMN LABEL . @H@@@Y GETC . IWU )@@G@@F SIGNAL,IGNORE ERROR,IF FLOW SEE IF PROC @D@@@Y IF A8,NE,ACFPRCWV )@@G@@,I THEN,DGSIG2 . IF NOT PROC @E@@@Y ADD A7,3,I . SWW )@@G@@AY FLOW OR NOFLOW PROC @D@@@YDGSIG2 LABEL . MERGE TWX )@@G@@O SET CALL @D@@@Y GENM . GENERATE SUB CALL WY )@@G@@@^@@@Y GSUB EXFLOW . @^@@@Y GLITRG A7 . @#@@@Y WZ )@@G@@ GFIN . @D@@@Y GOTO PGNXTS . ->NEXT STATEMENT XA )@@G@@@^@@@Y . ------------------ @ @@@Y . DRIVERS FOR I/O STMTS @A@@@YXB )@@G@@ . GET, PUT, OPEN, CLOSE, FORMAT @^@@@Y . ------------------ @#@-@YXC )@@G@@DGREAD LABEL . @^@-@Y LINK RGREAD @^@-@Y GOTO PGNXD )@@G@@XTS @[@-@Y. @#@-@YDGWRIT LABEL . @^@-@Y LINK RGWRIT XE )@@G@@@^@-@Y GOTO PGNXTS @#@@@YDGGET LABEL . @^@@@Y LINK XF )@@G@@ PLGIOG . @#@@@Y GOTO PGNXTS@#@@@YDGPUT LABEL . @^@@@Y XG )@@G@@ LINK PLGIOP . @^@@@Y GOTO PGNXTS . @#@@@YDGOPEN LABEL . XH )@@G@@@#@@@Y LINK PLGIOO@^@@@Y GOTO PGNXTS . @#@@@YDGCLSE LABELXI )@@G@@ . @^@@@Y LINK PLGIOC . @^@@@Y GOTO PGNXTS . @#@@@YXJ )@@G@@DGFRMT LABEL . @^@@@Y GFIX DBGWC1 . @^@@@Y LINK PLGIOXK )@@G@@F . @]@@@Y GEN .@^@@@Y GLABEL DAGFMT . @^@@@Y GOTO XL )@@G@@PGNXTS . @^@@@Y/ . RETURN STMT DRIVER @#@@@YDGRTRN LABEL . @^@@@YXM )@@G@@ USING WORD,X1 .@F@@@Y SET CGRCHB,OFF,DCGFL2 . FOLLOWIXN )@@G@@NG STMTS NOT RCHBLE @D@@@Y IF ICRTEX,OFF THEN,DGRTNO . NO VALXO )@@G@@UE TO RETURN@^@@@Y LOAD X5,X9 . @[@@@Y . @A@@@Y . IF HERXP )@@G@@E, MUST RETURN A VALUE @#@@@YDGRTN1 LABEL . @^@@@Y USING SDSECXQ )@@G@@T,X5 .@E@@@Y IF SDBGPR,ON,SDCLS1 THEN,DGRTN2 . -> ITS A PROC XR )@@G@@@E@@@Y LSDP X5,SDBKLK,X5 . FOLLOW LINK TO OUTER BLOCK @B@@@YXS )@@G@@ GOTO DGRTN1 . LOOK AT IT @[@@@Y . @#@@@YDGRTN2 LABELXT )@@G@@ . @#@@@Y XGPUSH . @C@@@Y XGEN R,1 . EVALUATXU )@@G@@E EXPRESSION@D@@@Y LOAD X2,SDBKAW,X5 . BLOCK'S AR BASE AW OFFSETXV )@@G@@@F@@@Y STORE X2,AGARTN+FH1 . ATTRIBUTE CODE BASE POINTERXW )@@G@@@G@@@Y ADD X2,1,I . OFSET OF RETURNED VALUE MCMP01/7XX )@@G@@4 @A@@@Y STORE X2,SGDRBS+DCGSLT,X7 . @A@@@Y STORE X2,SGXY )@@G@@DIBS+DCGSLT,X7 . @F@@@Y LSDP X4,SDECHN,X5 . GET ENTRY CHAXZ )@@G@@IN FROM BLOCK SD @^@@@Y LOAD A10,1,I . @G@@@Y IF A10,EQ,YA )@@G@@SDNMEN THEN,DGRTN3 . -> NORMAL CASE, ONLY ONE ENTRY @#@@@Y GENM YB )@@G@@. @^@@@Y GKEEP AGRL1 . @^@@@Y GKEEP AGIM1 . @F@@@YYC )@@G@@ GINST OPLA,AGRA1,AGARTN,H1 'NO' . GET ENTRY NUMBER CODE @#@@@YYD )@@G@@ GLIT 1 . @G@@@Y GOTO *0,A1 . WHERE TO BRANCH IN YE )@@G@@COMPUTED GOTO TABLE @#@@@Y GFIN . @A@@@Y MOVE DDGDOYF )@@G@@S,SGDAID,DCGSLT . @ @@@Y LOAD A8,SDNMEN,X5 . @F@@@Y LOAYG )@@G@@D X5,X10 . GET CURRENT LOCATION AND INCREMENTOR @E@@@Y SUBYH )@@G@@ X5,1,I . POINT TO JUMP JUST GENERATED @E@@@Y LOAD A10YI )@@G@@,W1,X5 . FETCH THE JUMP INSTRUCTION @C@@@Y AU,U A10,0,X10YJ )@@G@@ . COMPUTE U-FIELD @D@@@Y STORE A11,W1,*X5 . RESTORE JUMP YK )@@G@@INSTRUCTION @C@@@Y ANA,U A10,0200000 . REMOVE INDIRECT BIT@^@@@YYL )@@G@@ GCORE R,A8 . @^@@@Y USING SDSECT,X4 @#@@@YDGRTN8 LABELYM )@@G@@ . @D@@@Y AU,U A10,0,X10 . CREATE A GOTO FOR TABLE @E@@@YYN )@@G@@ LOAD A3,SDENUM,X4 . COMPUTE TABLE ADDRESS@ @@@Y YO )@@G@@ ADD A3,W1U,X5 . @C@@@Y STORE A11,W1,A3 . SET GOTO INTOYP )@@G@@ TABLE@F@@@Y MOVE SGDAID,DDGDOS,DCGSLT . SET INITIAL STATE OF VYQ )@@G@@ALUE @F@@@YDGRTN3 LABEL . ENTER HERE IF ONLY ONE ENTRY POYR )@@G@@INT @B@@@Y LOAD F,SDCLS1 . SAVE AN INSTR. @F@@@Y STOREYS )@@G@@ F,SGDCLS+DCGSLT . FORM STACK EL FROM ENTRY NAME SD@D@@@Y MOVE YT )@@G@@ SGDSCP+DCGSLT,SD2SP . CONTINUE '' ' @E@@@Y IF SDARST,OFF THYU )@@G@@EN,DGRTN4 . -> RETURNS ARITH. VALUE@F@@@Y MOVE SGDID+DCGSLT,SD0SYV )@@G@@TR,I . ENTRY HAS STRING ATTR. @I@@@Y IF SDARST,ON,SGDCLS THYW )@@G@@EN,DGRTN5 . OK MATCH BETWEEN EXPECTED AND ARRIVING @[@@@Y . @G@@@YYX )@@G@@ . HERE, THERES A MISMATCH BETWEEN VALUE RETURNED AND VALUE EXPECTEDYY )@@G@@@C@@@Y . COMPILE WARNING, MAYBE ERROR AT RUNTIME @#@@@YDGRTN6 LABELYZ )@@G@@ . @#@@@Y GENM . @^@@@Y GSUB EXRTRN . @#@@@Y ZA )@@G@@ GLIT 1 . @E@@@Y + ARFNRN+ARNOCV,0 . FLAGS, DATA FOR ROZB )@@G@@UTINE @#@@@Y GFIN . @H@@@Y EXERR ERCGRT LEVEL,0 . ' ATTRZC )@@G@@S OF VALUE RETURNED IMCOMPATIBLE WITH @D@@@Y . 'VALUE IN RETURN HAS ZD )@@G@@ATTRIBUTES INCOMPATIBLE WITH' @ @@@Y . 'ONE OR MORE ENTRY POINTS.'@^@@@YZE )@@G@@ GOTO DGRTN7 . @[@@@Y . @[@@@Y . @#@@@YDGRTN4 LABEL . ZF )@@G@@@F@@@Y IF SDARST,ON,SGDCLS THEN,DGRTN6 . -> ERROR, GIVE WARNING ZG )@@G@@@F@@@Y MOVE SGDID+DCGSLT,SD0ART,I . ENTRY HAS ARITH ATTR. ZH )@@G@@@D@@@Y LOAD A7,SDRTC . WORDS NEEDED FOR RETURN @^@@@Y ZI )@@G@@ SRB A7,1 . @E@@@Y STORE A7,SGDIDS+DCGSLT . IMAGINARY PARZJ )@@G@@T DISPL. @#@@@YDGRTN5 LABEL . @C@@@Y GASGN SGDAID+DCGSLT R,ZK )@@G@@X7 . !!!SYNTAX @#@@@Y GENM . @^@@@Y GSUB EXRTRN . ZL )@@G@@@#@@@Y GLIT 1 . @D@@@Y +ARFNRN,0 . FLAG FOR VALUE BEINGZM )@@G@@ RETURNED @#@@@Y GFIN . @#@@@YDGRTN7 LABEL . @G@@@Y ZN )@@G@@ LSDP X4,SDENCH,X4 . FOLLOW CHAIN OF PROC'S IN BLOCK @G@@@YZO )@@G@@ IF X4,NZERO THEN,DGRTN8 . -> NOT TO OUTERMOST, KEEP CONVERTING ZP )@@G@@@C@@@Y XGPOP 'SIZE',DCGSLT*2 . POP STACK TWICE@^@@@Y GOTO ZQ )@@G@@ PGNXTS . @#@@@YDGRTNO LABEL . @F@@@Y GENM . ZR )@@G@@ TURN ON THE CODE GENERATOR @^@@@Y GSUB EXRTRN . @#@@@YZS )@@G@@ GLIT 1 . @F@@@Y +0 . NO FLAGS FOR SERVICE ROUTINE => ZT )@@G@@NO VALUE RETURNED @#@@@Y GFIN . @^@@@Y GOTO PGNXTS . ZU )@@G@@@A@@@Y/ . DELETED STATEMENT DRIVER @#@@@YDGDLET LOCAL . @]@@@YZV )@@G@@ GEN .@^@@@Y GLIT DGDL2-$-1 .@F@Z@Y EXERR ERCGDL LEVZW )@@G@@EL,1 . ' DELETED STATEMENT ENCOUNTERED' @F@@@Z EXERR ERCGDL ZX )@@G@@ LEVEL,2 . 'DELETED STATEMENT ENCOUNTERED'@#@@@YDGDL2 LABEL . @]@@@YZY )@@G@@ JMP .@ @@@Y . -------------------------- @ @@@Y . END OF GAMMA ZZ )@@G@@CODE DRIVER @ @@@Y . -------------------------- @#@@@YDGEAC LLOC . AA )@@G@@@^@@@Y USING SDSECT,X9 .@D@@@Y STORE R11,DHSTMT . SAB )@@G@@AVE MAX # OF STMTS@F@@@Y MOVE SDBDLK,DPGSLC . PUT END OF COAC )@@G@@DE INTO BLOCK ZERO@F@@@Y MOVE SDFXLN,DTGMAX . SET AR SIAD )@@G@@ZE FOR BLOCK 1 @G@@@Y IF CGABRT,OFF,DCGFL2 THEN,DGEAC1 . -> CAE )@@G@@OMPLIATION SUCESSFUL @E@@@Y EXERR ERCGABORT LEVEL,3 . ' COMPLIAF )@@G@@ATION ABORTED' @#@@@YDGEAC1 LABEL . @E@@@Y SZ,H2 DSRCGL+ACAG )@@G@@EAC/IC-ACBGIN/IC . CLEAR EAC COUNT @E@@@Y SUB X10,2,I . AH )@@G@@ GO TO LAST INST GENERATED @B@@@Y STORE X10,DCGLCG . SAI )@@G@@AVE IT@H@@@Y MOVE ADPEND,ADPCND . SET REAL END OF CORE FOR AJ )@@G@@EXECUTION TIME @G@@@Y IF 04,OFF,LIMALX THEN,PLCGND . ->NO LIAK )@@G@@ST REQUESTED, RETURN @C@@@Y MOVE DGOLCT,DZZPZ . FORCE PAGE EJAL )@@G@@ECT @^@@@Y LOAD X4,ADPCSE .@#@@@Y GMARK X5 . @G@@@Y AM )@@G@@ LOADA X11,PLCGND . SO LISTER RETURNS TO EXIT ********* @B@@@YAN )@@G@@ GOTO LSTBGN . GIVE ASSEM. LISTING@[@@@Y. @[@@@Y. @^@@@YAO )@@G@@/ . FLAGS AND DATA @^@@@Y. ERROR NUMBERS @ @@@YERCGRT EQU AP )@@G@@ 45 . RETURN ERROR@F@@@YERDUPL EQU 40 . DUPLICATE CASE PREFIX. AQ )@@G@@SECOND ONE IGNORED@A@@@YERCGDL EQU 48 . DELETED STATEMENT @B@@@YERCGABAR )@@G@@ORT EQU 46 . COMPILATION ABORTED @E@@@YERXGRN EQU 52 . AS )@@G@@ NON-STANDARD PL/1 USED @#@@@Y . ===============@D@@@YDGDODT CSECTAT )@@G@@ 3 . DATA AREA (MAINLY FOR DO-DRIVER) @[@@@Y . @F@@@YDDGDOS EQUAU )@@G@@ DCVSV . SAVE AREA FILLED IN RETURN DRIVER @B@@@YAGRR1 EQU AV )@@G@@SGDRAB-( IN 0,H1,0,0) . AW FOR@C@@@YAGRI1 EQU SGDIAB-( IN 0,H1,0,0) . AW )@@G@@ " @C@@@YDGMSK1 SFW 0 . FAKE A STACK ENTRY FOR '1' @^@@@YAX )@@G@@FILL(1) SQ SD0ART . @^@@@YFILL(1) SQ SDVRCN . @#@@@YFILL(1) SH AY )@@G@@01 . @D@@@YFILL(1) SAC AGRX0-AGRX0+AGAW,KKF1-(IN 63,0,1,0) . @^@@@YAZ )@@G@@LAFUDG LA,U A1,0 . @^@@@YLXFUDG LX,U X5,0 . @^@Z@YLACOND LA,BA )@@G@@U A15,0 .@C@@@YDGLR11 SF 0237260000000 . LR,U R11,0 @B@@@YBB )@@G@@DGLTZ SF 0507000000001 . TZ,U 1 @]@@@Y . ---- @C@@@YDGTLE BC )@@G@@ SH 0557400 . H1 OF A ' TLE,U ' INSTR.@[@@@Y . @#@@@Y CEND BD )@@G@@. @^@@@Y/CGDRVR CSECT 3 . @A@@@YDDGFLW INSERT 4,'FLO','W BE )@@G@@' . @ @@@YDDGNCS INSERT 4,'CAS','E '@ @@@YDDGNLV INSERT 5,'LEA',BF )@@G@@'VE '@A@@@YDDGSGN INSERT 6,'SIG','NAL ' . @#@@@YPGSTBL SFW 0 . BG )@@G@@@G@@@YFILL(1) SAC DGBGN1,DGCALL . FIRST BEGIN STATEMENT, CALL STATEMENBH )@@G@@T @D@@@YFILL(1) SAC DGCLSE,PGNCDE . CLOSE, DECLARE (IGNORE) @B@@@YBI )@@G@@FILL(1) SAC DGEND,DGNTRY . END, ENTRY @B@@@YFILL(1) SAC DGFRMT,DGGBJ )@@G@@ET . FORMAT, GET @A@@@YFILL(1) SAC DGGOTO,DGIF . GOTO, IF@B@@@YFILL(1BK )@@G@@) SAC DGOPEN,DGPROC . OPEN, PROC @B@@@YFILL(1) SAC DGPUT,DGRTRN . BL )@@G@@PUT, RETURN @C@@@YFILL(1) SAC DGSTOP,PGNCDE . STOP, NULL STMT @H@@@YBM )@@G@@FILL(1) SAC PGNCDE,DGDOSP . DO, DO WHILE PHRASE (SAME AS FOR SO SPECIABN )@@G@@L) @D@@@YFILL(1) SAC DGDOSP,DGDOCS . SPECIAL DO, DO CASE @B@@@YBO )@@G@@FILL(1) SAC DGASGN,DGASGN . ASSIGNMENT, @D@@@YFILL(1) SAC DGASGN,DGEBP )@@G@@AC . END ALPHA CODE @F@@@YFILL(1) SAC DGFLOW,DGSTOP . EBQ )@@G@@XIT (SAME CODE AS FOR STOP) @B@@@YFILL(1) SAC DGON,DGRVRT . ON , REVBR )@@G@@ERT @C@@@YFILL(1) SAC DGSIGN,DGDLET . SIGNAL, 0 @D@@@YFILL(1BS )@@G@@) SAC DGALLC,DGFREE . ALLOCATE, FREE @C@@@YFILL(1) SAC DGLEBT )@@G@@AV,DGREAD . LEAVE,READ @B@@@YFILL(1) SAC DGWRIT,0 . WBU )@@G@@RITE, @C@Z@YFILL(1) SAC PGNCDE,0 . SYSTEM , @C@@@ZFILL(1BV )@@G@@) SAC DGSYST,0 . SYSTEM , @#@@@Y CEND . @]@@@YBW )@@G@@ END .___ GSUB EXRTRN . @#@@@Y GLIT 1 . @E@@@Y BX )@@G@@ + ARFNRN+ARNOCV,0 . FLAGS, DATA FOR RO*[S@@@*SDFF*@C@@@@. COBY )@@G@@PYRIGHT 1975 BY UNIVERSITY OF MARYLAND @[@@@@. @D@@@@. QUESTIONBZ )@@G@@S CONCERNING THIS SHOULD BE DIRECTED TO: @[@@@@. @ @@@@. MARCA )@@G@@VIN V. ZELKOWITZ @B@@@@. DEPARTMENT OF COMPUTER SCIENCE @A@@@@CB )@@G@@. UNIVERSITY OF MARYLAND @B@@@@. COLLEGE PARK, MARYLANCC )@@G@@D 20742 @[@@@@. @G@@@@. PERMISSION TO USE THESE LISTINGS CD )@@G@@AND THE COMPUTER PROGRAMS THEY@E@@@@. REPRESENT IS GRANTED UNDER THE FCE )@@G@@OLLOWING CONDITIONS: @[@@@@. @G@@@@. 1. UNLIMITED USE MAY CF )@@G@@BE MADE OF THE PROGRAMS REPRESENTED BY @G@@@@. THESE LISTINGS PROVICG )@@G@@DED THAT THE NAME PLUM OR UNIVERSITY OF MARYLAND@E@@@@. PL/1 COMPILER CH )@@G@@REMAINS ASSOCIATED WITH THESE PROGRAMS. @[@@@@. @F@@@@. 2. CI )@@G@@MODIFICATIONS MAY BE MADE TO THE LISTINGS PROVIDED: @[@@@@. @G@@@@CJ )@@G@@. (A) ANY RESULTING PROGRAM, OR REPORT, PAPER OR DOCUMENTATION CK )@@G@@@G@@@@. DESCRIBING SUCH PROGRAM WILL CLEARLY INDICATE THAT THE PRCL )@@G@@OGRAM @E@@@@. IS A DIALECT OF PLUM OR IS DERIVED FROM PLUM, AND CM )@@G@@@[@@@@. @G@@@@. (B) ALL SUCH MODIFICATIONS, OTHER THAN TRIVIACN )@@G@@L CORRECTIONS @F@@@@. OF ERRORS IN THE SOURCE PROGRAMS, SHALLCO )@@G@@ BE REPORTED AND @G@@@@. A BRIEF DESCRIPTION OF THE FEATURE ADDECP )@@G@@D SHALL BE SUBMITTED @C@@@@. TO THE UNIVERSITY OF MARYLAND, ANCQ )@@G@@D @[@@@@. @F@@@@. (C) NO PROGRAMS DERIVED FROM THESE LISTCR )@@G@@INGS SHALL BE SOLD@G@@@@. WITHOUT WRITTEN APPROVAL FROM THE UNIVECS )@@G@@RSITY OF MARYLAND, AND @[@@@@. @F@@@@. (D) COPIES OF THESE PCT )@@G@@ROGRAMS MAY BE TRANSMITTED TO OTHER @G@@@@. LOCATIONS PROVIDED THCU )@@G@@AT SUCH TRANSMITTALS CLEARLY INDICATE @G@@@@. WHETHER THE PROCV )@@G@@GRAMS ARE EXACT COPIES OF THE UNIVERSITY OF @E@@@@. MARYLAND CW )@@G@@PLUM COMPILER OR ARE MODIFICATIONS TO IT. @[@@@@. @G@@@@. 3. CX )@@G@@THESE CONDITIONS ONLY APPLY TO THE PLUM COMPILER ITSELF, @F@@@@. ANCY )@@G@@D ARE NOT MEANT TO APPLY TO ANY PROGRAM WRITTEN USING PLUM. @E@@@@. THCZ )@@G@@E PURPOSE OF THESE CONDITIONS IS TO ALLOW ANY USER TO @F@@@@. EXPERIMEDA )@@G@@NT WITH THE COMPILER AS LONG AS THE RESULTING PRODUCT @G@@@@. IS NOT SDB )@@G@@OLD AND AS LONG AS IT IS KNOWN THAT THE PRODUCT DEVELOPED @#@@@@. FRDC )@@G@@OM PLUM. @[@@@@. @[@@@@. @[@@@@. @[@@@@. @[@@@@. DD )@@G@@@[@@@@/. @B@@@@/. PLUM CODE GENERATOR - I/O DRIVER @^@@@@. DE )@@G@@ ENTRY POINTS @D@@@@. PLGIOC CLOSE STATEMEDF )@@G@@NT @D@@@@. PLGIOF FORMAT STATEMENT @C@@@@DG )@@G@@. PLGIOG GET STATEMENT@D@@@@. PLGIOL DH )@@G@@ XGEN COROUTINE @C@@@@. PLGIOP DI )@@G@@ PUT STATEMENT@D@@@@. PLGIOO OPEN STATEMENDJ )@@G@@T @#@@@@. ON ENTRY @^@@@@. X9=BLOCK SD @^@@@@. DK )@@G@@ X7=TOP OF STACK@A@@@@. A8=STATEMENT TYPE B CODE @B@@@@. DL )@@G@@ X5 WILL CONTAIN LOC OF 'GET' @E@@@@. X8 WILL CONTAIN STMT DM )@@G@@TYPE (0=GET, 1=PUT 2=FORMAT) @#@@@@ AXR$ . @#@@@@ DCLDN )@@G@@RG . @#@@@@ UNLIST . @]@@@@@ADD PLTVDS @#@@@@@ADD PLCGST . DO )@@G@@@]@@@@@ADD PLDSAW @#@@@@ LIST . @#@@@@ PLWORD . @#@@@@DP )@@G@@ PLSD . @#@@@@ PLAR . @ @@@@ USING AREC,X1DQ )@@G@@0 . @#@@@@ PLAC . @#@@@@ PLIG . @#@@@@ PLCDR )@@G@@GD . @F@@@@GBRLA* PROC . CHANGE JUMP TO LX,U X11 IDS )@@G@@NST @^@@@@ LOAD A3,X10 . @^@@@@ SUB A3,1,I . @^@@@@DT )@@G@@ USING WORD,A3 .@A@@@@ MOVE W1H1,EGFJMP+FH1 . @#@@@@DU )@@G@@ END . @C@@@@BACKUP* PROC *0,2 . BACKUP ONE GETC. DV )@@G@@@^@@@@ SUB X1,1,I . @#@@@@ GETC . @#@@@@ ENDDW )@@G@@ . @^@@@@CGFIX* PROC *1 . @F@@@@ CGCONV EGF17 R,X7 .DX )@@G@@ CONVERT TO FIXED BIN(17,0) @#@@@@ END . @#@@@@CGIO DY )@@G@@ CSECT 3 .@G@@@@/. ...................................................DZ )@@G@@..................@G@@@@. ENTRY POINTS FOR GET AND PUT STATEMENTSEA )@@G@@ .@G@@@@. ........................................EB )@@G@@..............................@C@@@@PLGIOG* LABEL . GEC )@@G@@ET ENTRY @C@@@@ LOAD X8,0,I . SET GET STMT @D@@@@ED )@@G@@ GOTO EGGTCT . -> MERGE WITH PUT @C@@@@PLGIOP* LABEE )@@G@@EL . PUT ENTRY @C@@@@ LOAD X8,1,I . EF )@@G@@ SET PUT STMT @D@@@@EGGTCT LOCAL . APPARENT ENTREG )@@G@@Y @C@@@@ STORE X8,DGIOTS . SAVE I/O TYPE@D@@@@ EH )@@G@@ LOAD X5,X1 . SAVE PTR TO 'GET' @G@@@@. ................EI )@@G@@......................................................@G@@@@. PROEJ )@@G@@CESS SKIP(EXPR) OR (LINE(EXPR)) .@G@@@@. ....EK )@@G@@..................................................................@^@@@@EL )@@G@@ USING WORD,X5 .@D@@@@ IF W1H2+1,ZERO THEN,EGGT0A . -EM )@@G@@> DEFAULT @C@@@@ LMCP R,W1H2+1 . SET XGENENTRY@C@@@@EN )@@G@@ XGEN R,2 . SKIP SKIP( @E@@@@ CGFIX . EO )@@G@@ CONVERT TO FIXED (17) @#@@@@ GEN . @C@@@@EP )@@G@@ GINST OPLX,AGRX1,AGRL1 . X1=NO LINES @D@@@@ XGPOP . EQ )@@G@@ POP STACK OF ENTRY @D@@@@ GOTO EGGT01 . ER )@@G@@ -> DO FILE NAME @E@@@@EGGT0A LABEL . NO LINEES )@@G@@, USE DEFAULT @^@@@@ USING WORD,X5 .@E@@@@ IF ICGET )@@G@@TSF,OFF,W1Q2 THEN,EGGT01 . -> NO SKIP @C@@@@ GEN . EU )@@G@@ SET SKIP OF 1*[@@@[*SDFF*:@@@[=@#@@@@ 0)C[HE(GE-KDS)^@):@@@[,EV )@@G@@@[@@@@ 0)^@):@@@[8@L@@@@ 0)CT-I--H-\G93^[-^[!GD3IS)IT4H92GD$G*)G1(H->^[(EW )@@G@@H0)I-*G*)H(-IT4G(2^[&HD?G*)G-(IL>GT4H92JC)I9(I-*H95I)):@@@]]@K@@@@ 0)GD3EX )@@G@@IT(G9,HD,G8)HD4^[4H8)GC)IL5H0,^[OH[(IS)G1(H->^[!GD9^[+G*)IT0IL>GD=^[\I1>EY )@@G@@IK)H(5H-4HD0H->^@):@@@]G@L@@@@ 0)IL>H(\I1-GL?G*)G-(IT:^[0GDIT3H92^[GD=^[\G0)C[#CDO^@):@@@]Q@[@@@@FA )@@G@@ 0)^@):@@@])@[@@@@ 0)^@):@@@]%@^@@@@ 0)EL>IT4IL(GT4HD\H13BK):@@@]4@[@@@@FB )@@G@@ 0)^@):@@@]"@K@@@@ 0)FD\I*)H(5IT4^[*GD6G*)ETTES= L^D-JCS=^[-IT3HD$H1>G))FC )@@G@@I-\^[9H95IK)IL5H0)I-\^[5IT>^[HE(GE-KDS)^@):@@@#C@[@@@@ 0)^@):@@@#M@[@@@@FD )@@G@@ 0)^@):@@@#W@#@@@@ 0)C1\IL!GD4BK)^@):@@@#&@[@@@@ 0)^@):@@@#0@J@@@@ 0)C[HFE )@@G@@E(GE-KDTV -\I[4HD\H13F*)G1(H->H1-H(> -4JD0G*?FT$IL-H15H->F*?FT!GD8^[3HD'FF )@@G@@G(X -VGD^@):@@@^^@[@@@@ 0)^@):@@@^I@[@@@@ 0)^@):@@@^S@#@@@@ 0)D90I-(H9,FH )@@G@@IS'^@):@@@^+@[@@@@ 0)^@):@@@^?@G@@@@ 0)E1-H-(G))H90I-(H9,IS)GD2G*)CK?^[BFI )@@G@@ ))E@?^[M ))ES?^[Q ))E8)GD,G))FK)^@):@@@^6@H@@@@ 0)ET>G*)C[[ETB^[=H9H1-H(>^@)^@)E-*G*)G1(H->^[4H8)GL>^[GD4G(=:@@@ 2@[@@@@FM )@@G@@ 0)^@):@@@ /@M@@@@ 0)I-9I[>^@)^@)^@)^@)C9(I1>IS)I-*G*)GD=G-2G(3IT(H1$^[!FN )@@G@@H9=G*)H9&^[4H[>^[&HD?G*)GD,G))I-*G*)G(1I((I[!G(,I))^@):@@@AA@L@@@@ 0)^@)FO )@@G@@^@)^@)^@)^@)^@)I-9I[>^[2G(1I((IL>G))G1\IK)I-*G*)G1(H-> 0)E-*G*)GD=G-2G(3FP )@@G@@IT(H1$^[!H9=G*)H(-JC)GL>:@@@AK@L@@@@ 0)^@)^@)^@)^@)^@)^@)G((I-*G(2^[^^@*FQ )@@G@@I9\IL=^[-G-=IL>IT3GD+H-> C)H92^[A^@*IT>GT4H92^[-G-=IL>IT3GD+H-> C,:@@@AUFR )@@G@@@L@@@@ 0)^@)^@)^@)^@)^@)^@)E-*G*)I1-H-(G))G(1I((I[!G(,I))I-9I[>IS)H(-JC)FS )@@G@@GL>^[&H95H1=^[(H0)E(K *1AC5A03 0)^@):@@@A=@H@@@@ 0)^@)^@)^@)^@)^@)^@)DD&FT )@@G@@^[9H95^[\H((I))I-9I[>^[HE(GE-KDS)I9(H-?^[>IL2H92 0)^@):@@@A,@[@@@@ 0)^@)FU )@@G@@:@@@A8@L@@@@ 0)G92GD,I(?G*)^@)^@)ET0G(IS)I-*G*)G92GD,I(?G*)IT(JL>FV )@@G@@ 0)C92GD,I(?GD2HD4JC)H(-JC)GL>^[>HD4H[>IK):@@@B]@L@@@@ 0)^@)^@)^@)^@)^@)FW )@@G@@^@)E-MDS) @1A89AK)I9\IL=IS(^[\IK)E[JES) @6A))I-2GDG),^@)FY )@@G@@:@@@BQ@[@@@@ 0)^@):@@@B)@M@@@@ 0)H(-J@)IT(JL>^@)^@)FD\I*)H(-JC)H90I-(H9,FZ )@@G@@GD?H-9^[$HD6G*)I-*G*)H(-J[(H(5H*)H15H(+G(2^[\G0)G92GD,I(?G(3 ))^@):@@@B%GA )@@G@@@M@@@@ 0)^@)^@)^@)^@)^@)^@)H92^[7H92G-3 ))JD\I*)I9(IT*^[4H[(IS)G1(H->^[4GB )@@G@@H8)G(8I[-H1=^[4H8,^[[H19^[>J[0GD,IT(H9,^@):@@@B4@L@@@@ 0)^@)^@)^@)^@)^@)GC )@@G@@^@)I9(H-?^[3I--IL4^[\H0)I-*G*)H--IT4^[0GDJ[4^[4H8)H--IT4^[0GD^[(IS)H-(IT4G(= ))^@):@@@CM@L@@@@ 0)^@)^@)^@)^@)^@)^@)I-*G*)IT5GH )@@G@@H*)H9&^[4H[>^[-H(\I(,I))G1(G(?G))H9,^[4H[>^[ME[[CTF^[^[5IT>G),^@):@@@C&@[@@@@ 0)^@):@@@C0GJ )@@G@@@K@@@@ 0)GD2GS)^@)^@)^@)^@)D-(IT4IS)I-*G*)GDIT3^[:@@@C'@K@@@@ 0)^@)^@)^@)^@)^@)^@) [(G0)G1(GL )@@G@@H->^[\I9,G(2IT*HD0^[(IS)I-5IL,G(=^[\H0( 0)FD\I*)H(5IT4^[*GD6G*)^@):@@@D^GM )@@G@@@K@@@@ 0)^@)^@)^@)^@)^@)^@)GD?IL>GD=JC)GT2G(-I->G))I-*HD3^[-GT2^[7HD4H@)GN )@@G@@ETDD([D0,^[NG(>^[PE@!AC1A*6AS):@@@DI@B@@@@ 0)^@)^@)^@)^@)^@)^@)G1\IK)H(\GO )@@G@@IL>^[(H1&H8,:@@@DS@[@@@@ 0)^@):@@@D+@H@@@@ 0)ELKCD#DS)^@)^@)^@)DD=G(,I-(GP )@@G@@G1(G(3^[-^[HE(GE-KDS)I[-IL-H(>I->IK)GT-IL= 0)^@):@@@D?@[@@@@ 0)^@):@@@D6GQ )@@G@@@M@@@@ 0)I[-GT:^[(G))^@)^@)ET0G(IS)I-*G*)IL>H(\I1-GL?G*)G-(IT:^[0GR )@@G@@GD^@):@@@E@@L@@@@ 0)^@)^@)^@)^@)^@)GS )@@G@@^@)IT0GD^[\G0)I-*G*)IT-H(>^[4JD0G*)GD3^[?HD3I->GT )@@G@@G))H9,^[4H[>:@@@EE@L@@@@ 0)^@)^@)^@)^@)^@)^@)GT-H-?^[?HD,G*?^[-H1=^[!GD9GU )@@G@@^[,H94^[-I[0G(-IK)H(\IL>^[4H[-H0)H9,GT> 0)DD&^[4H[>^@):@@@EO@L@@@@ 0)^@)GV )@@G@@^@)^@)^@)^@)^@)I[-GT:^[(G))HD3^[?G(3IS)I-*GD,^@6^[GX )@@G@@IL3 0):@@@E*@[@@@@ 0)^@):@@@E2@L@@@@ 0)DDIDDO^@)^@)^@)^@)D(5IT4^[3I--IL4GY )@@G@@^[(H0)GT\H-5H(,^@1A),^[AH92GT>IS)GD!H95H14^[4H8)IT4GD2I))H9,^[-^@):@@@E/GZ )@@G@@@B@@@@ 0)^@)^@)^@)^@)^@)^@)I9\IL=^[+H95H1=GD2JC,:@@@FA@[@@@@ 0)^@):@@@FKHA )@@G@@@M@@@@ 0)GD!H95H14^@)^@)^@)E-*G*)GD!H95H14^[\G0)G92GD,I(?G(3 ))H92^[7H92HB )@@G@@G-3 ))JD\I*)I9(IT*^[4H8)HD,HD4HD-H-(JL>^@):@@@FU@L@@@@ 0)^@)^@)^@)^@)^@)HC )@@G@@^@)H9,^[4H[(IS)IL>H(\I1-GL?G*)I[-GT: 0)FD\I*)H(-JC)I9(IT*^[4H8)G(,I->IK)HD )@@G@@JL>IL\^[\H0):@@@F=@L@@@@ 0)^@)^@)^@)^@)^@)^@)I-*G*)H--IT4^[0GDH14G(2G(=^[&H92^[7H92HG )@@G@@G))GD=G-2G(3IT-GL?G*)^@):@@@F8@K@@@@ 0)^@)^@)^@)^@)^@)^@)G1(H->IS)GD2G*)HH )@@G@@IL\I(,G->G))I(0^[4H8)I-*G*)H1>J[4^[!I(?I-(I[?G*)H9&^@1A89AK,_@@@@@ . SEHI )@@G@@T TOTAL TO 0:@@[J+@E@@@@CNVLP2 LA A1,CNVTBL,X3 . LOAD TABHJ )@@G@@LE ENTRY :@@[J?@E@@@@ ANA,U A1,060 . CONVERT HK )@@G@@*[@@@[*SDFF*:@@@[=@F@@@@ 0)^@)^@)^@)^@)^@)^@)^@)D(PD-OE[F^[DH13I--H-?GD4HL )@@G@@HD\H0)C95HD=G*)^@):@@@[,@[@@@@ 0)^@):@@@[8@K@@@@ 0)E-*G*)IL>H->GD3G*)I--HM )@@G@@I[>^[^[7HD4H@)IT>I1>H0)^@)HN )@@G@@:@@@]]@J@@@@ 0)G(?G(!G(,I-3 0)E-*HD3^[&HD?G*)IT*H95H-=^[+G*)GT\I[(G(=^[(HO )@@G@@H14H8)GC)H(-IT3^[3I-\IL-G9>^@):@@@]G@G@@@@ 0)G1(H->^[NFDN^-GDD]^)%D(PD-OHP )@@G@@E[F 0)E-*G*)IT>I1>H0)G(?G(!G(,I-3^[-IL>BK):@@@]Q@[@@@@ 0)^@):@@@])@J@@@@HQ )@@G@@ 0)CD]ES)^[HE(GE-KDS)^@)^@)^@)^@)^[OH[>^[3JD3I->H*)G(8G(^[^[HCDND*)IT\I(2GT>^[HU )@@G@@IS)GD,^[>J[-H(0H->:@@@#M@H@@@@ 0)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^[\G0)H[\HV )@@G@@I8)I-*G*)I[2H9:@@@#0@I@@@@ 0)^@)^@)^@)^@)^@)^@)^@)^@)^@)^@)^[HE(GE-KDS)G12H9!^[NHY )@@G@@FDN^-GDD]^)%D(PD-OE[F^[(H14H8):@@@#'@E@@@@ 0)^@)^@)^@)^@)^@)^@)^@)^@)^@)HZ )@@G@@^@)^[NFDN^-GDD]^)%D(PD-OE[F 0):@@@^^@[@@@@ 0)^@):@@@^I@I@@@@ 0)C(GE))^[#IA )@@G@@D9HE(N^-NC9N^@)^@)^@)^[OH[>^[#D9HE(N^[?H9^[HIC )@@G@@E(GE-KDS)I(3G(2^[=H9^@):@@@ @IE )@@G@@@[@@@@ 0)^@):@@@ E@[@@@@ 0)^@):@@@ O@ @@@@ 0)E-\^[(H13I--H-?^[HE(GE-KDS'IF )@@G@@:@@@ Y@[@@@@ 0)^@):@@@ *@C@@@@ 0)AC,^[NHD$H0)H9,^[4H8)CTJD(PES)H1\IL!GD?IG )@@G@@H-9^@):@@@ 2@[@@@@ 0)^@):@@@ /@H@@@@ 0)AK,^[ H14G(2^[DD1NE-[D-G^[GD9#CDGIH )@@G@@B(NFDN^-GDD]^)%D(PD-OE[F 1#D9HE(N^-NC9N^@):@@@AA@[@@@@ 0)^@):@@@AK@I@@@@II )@@G@@ 0)AS,^[[H13I9>IK)I-*G*)IL>IT4^[\G0)I-*G*)CTJD(PES)ID5G(3I-(H9,IS)I-*G*)IJ )@@G@@I9-JC)JD\I*):@@@AU@^@@@@ 0)^@)^[5IT5GD?H-9^[=H8,:@@@A=@[@@@@ 0)^@):@@@A,IK )@@G@@@E@@@@ 0)A),^[NI--IL4^[4H[>^[$G(,G(2GD4G(=^[(H13I--H-?^[3I-2G(-H*):@@@A8IL )@@G@@@[@@@@ 0)^@):@@@B]@[@@@@ 0)^@):@@@BG@J@@@@ 0)E-*G*)G(?G(!G(,I))C- D(J^[J[-H(0H->^[\G0)H[\I8)D(PD-OE[F^[7H92HT3 0):@@@BQ@J@@@@IN )@@G@@ 0)CD&I->IK)JD\I*)HD,IT4GD?H))D(PD-OE[F^[9H95^[!I(3I))H(-HT>^[4H[>^[&H9?IO )@@G@@H-\I9(H1$^[3HD4G*):@@@B)@I@@@@ 0)G->I[>H1=GD,I))GT\IL2G(G1\IL>^[(I))I9(H-?^[7H92HS,:@@@B%@[@@@@ 0)^@):@@@B4@A@@@@IQ )@@G@@ 0)AC,^[#H[-H1$G*)I-*G*)ELPD0)GT-IL=:@@@B"@[@@@@ 0)^@):@@@CC@G@@@@ 0)AK,IR )@@G@@^[DH13G(2I))GD,^[-IT3HD$H0)H9&^[NFDN^)%C-GD9#^))I9*G(2G*)H1\I->G)):@@@CMIS )@@G@@@[@@@@ 0)^@):@@@CW@E@@@@ 0)AS,^[#H[-H1$G*)G->I1(GT>^[4JD0G*)H9,^[@D(PE-GIT )@@G@@E[F^[?HD,G*):@@@C&@[@@@@ 0)^@):@@@C0@E@@@@ 0)A),^[#H[-H1$G*)G->I1(GT>^[,IU )@@G@@GD!G(3^[\H0)DDIDDO^[]@#@@@@ +100 :@@@>G@#@@@@ +1000 :@@@>QPX )@@G@@@#@@@@ +10000 :@@@>)@#@@@@ +100000 :@@@>%@#@@@@ PY )@@G@@ +1000000:@@@>4@^@@@@ +10000000 :@@@>"@^@@@@ +1PZ )@@G@@00000000 :@@@&C@]@@@@ +0:@@@&M@]@@@@ +0:@@@&W@]@@@@QA )@@G@@ +0:@@@&&@#@@@@CNVOM +01 :@@@&0@#@@@@ +010 QB )@@G@@:@@@&'@#@@@@ +0100 :@@@$^@#@@@@ +01000 :@@@$I@#@@@@QC )@@G@@ +010000 :@@@$S@#@@@@ +0100000:@@@$+@^@@@@ +0QD )@@G@@1000000 :@@@$?@^@@@@ +010000000 :@@@$6@^@@@@ +0QE )@@G@@100000000 :@@@*@@]@@@@ +0:@@@*E@]@@@@ +0:@@@*O@]@@@@QF )@@G@@ +0:@@@*Y@[@@@@. :@@@**@F@@@@. - - - - - - - - - - - - - - QG )@@G@@- - - - - - - - - - - - - - - - - :@@@*2@[@@@@. :@@@*/@E@@@@$(1),SQH )@@G@@TART . BEGINNING OF PROGRAM:@@@(A@F@@@@ QI )@@G@@ LA A4,CSFASG . LOAD 1ST WORD OF ASSIGN :@@@(K@E@@@@QJ )@@G@@ SA A4,CSFBF1 . STORE IN BUFFER :@@@(U@B@@@@QK )@@G@@ LA,U A4,1 . :@@@(=@F@@@@ SA QL )@@G@@ A4,CSFWD1 . START STORE IN SECOND WORD:@@@(,@E@@@@ SAQM )@@G@@ A4,CSFCH1 . FIRST CHARACTER :@@@(8@[@@@@. :@@@%]QN )@@G@@@E@@@@ LA A4,CSFUSE . LOAD 1ST WORD OF USE:@@@%GQO )@@G@@@E@@@@ SA A4,CSFBF2 . STORE IN BUFFER :@@@%QQP )@@G@@@^@@@@ LA,U A4,0:@@@%)@F@@@@ SA A4,CSFWD2 QQ )@@G@@ . START STORE IN FIRST WORD :@@@%%@B@@@@ LA,U A4,6QR )@@G@@ . :@@@%4@D@@@@ SA A4,CSFCH2 . LAQS )@@G@@ST CHARACTER:@@@%"@E@@@@ L,U X2,0 . WORD OF QT )@@G@@UNAM TO MOVE:@@@:C@F@@@@MOVUNM L,S1 A4,UNAM,X2 . LOAD 1STQU )@@G@@ CHAR OF UNAM :@@@:M@E@@@@ TNE,U A4,05 . ISQV )@@G@@ CHARACTER A BLANK:@@@:W@E@@@@ J MOVUSC . DOQW )@@G@@NE MOVING USE NAME:@@@:&@F@@@@ LMJ X11,MVCSF2 . MOQX )@@G@@VE CHARACTER TO CSF @USE:@@@:0@F@@@@ L,S2 A4,UNAM,X2 QY )@@G@@ . LOAD 2ND CHAR OF UNAM :@@@:'@E@@@@ TNE,U A4,05 QZ )@@G@@ . IS CHARACTER A BLANK:@@@?^@E@@@@ J MOVUSC RA )@@G@@ . DONE MOVING USE NAME:@@@?I@F@@@@ LMJ X11,MVCSF2RB )@@G@@ . MOVE CHARACTER TO CSF @USE:@@@?S@F@@@@ L,S3 A4,URC )@@G@@NAM,X2 . LOAD 3RD CHAR OF UNAM :@@@?+@E@@@@ TNE,U RD )@@G@@ A4,05 . IS CHARACTER A BLANK:@@@??@E@@@@ J RE )@@G@@ MOVUSC . DONE MOVING USE NAME:@@@?6@F@@@@ LMJ RF )@@G@@ X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@@!@@F@@@@ L,RG )@@G@@S4 A4,UNAM,X2 . LOAD 4TH CHAR OF UNAM :@@@!E@E@@@@ RH )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@@!O@E@@@@ RI )@@G@@ J MOVUSC . DONE MOVING USE NAME:@@@!Y@F@@@@ RJ )@@G@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@@!*@F@@@@RK )@@G@@ L,S5 A4,UNAM,X2 . LOAD 5TH CHAR OF UNAM :@@@!2RL )@@G@@@E@@@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@@!/RM )@@G@@@E@@@@ J MOVUSC . DONE MOVING USE NAME:@@@,ARN )@@G@@@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USERO )@@G@@:@@@,K@F@@@@ L,S6 A4,UNAM,X2 . LOAD 6TH CHAR OF UNARP )@@G@@M :@@@,U@E@@@@ TNE,U A4,05 . IS CHARACTER ARQ )@@G@@ BLANK:@@@,=@E@@@@ J MOVUSC . DONE MOVING USRR )@@G@@E NAME:@@@,,@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTERRS )@@G@@ TO CSF @USE:@@@,8@E@@@@ AX,U X2,1 . ADD 1 TORT )@@G@@ MODIFIER :@@@\]@ @@@@ LA A4,X2 :@@@\G@F@@@@ RU )@@G@@ TE A4,TWO . HAVE WE MOVED 2 WORDS ? :@@@\Q@D@@@@RV )@@G@@ J MOVUNM . NO KEEP GOING :@@@\)@ @@@@MOVUSCRW )@@G@@ LA A4,PERIOD :@@@\%@F@@@@ LMJ X11,MVCSF2 RX )@@G@@ . MOVE CHARACTER TO CSF @USE:@@@\4@ @@@@ LA A4,COMMA RY )@@G@@:@@@\"@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSRZ )@@G@@F @USE:@@@0C@[@@@@. :@@@0M@D@@@@ LA A4,CSFFRE SA )@@G@@ . LOAD @FREE :@@@0W@E@@@@ SA A4,CSFBF3 . STSB )@@G@@ORE IN BUFFER :@@@0&@G@@@@ LA A4,UNAM . LOSC )@@G@@AD FIRST WORD OF USE NAME :@@@00@E@@@@ SA A4,CSFBF3+SD )@@G@@1 . STORE IN BUFFER :@@@0'@G@@@@ LA A4,UNAM+1 SE )@@G@@ . LOAD SECOND WORD OF USE NAME :@@@1^@E@@@@ SA SF )@@G@@ A4,CSFBF3+2 . STORE IN BUFFER :@@@1I@[@@@@. :@@@1S@B@@@@SG )@@G@@. READ PROCESSOR CALL INSTRUCTION AREA :@@@1+@[@@@@. :@@@1?@G@@@@SH )@@G@@ I$NFOR 'RINF$',INFOWC,INFOTA . READ PROCESSOR CALL LINE SI )@@G@@:@@@16@F@@@@ J ERREOF . ERROR RETURN FROM RESJ )@@G@@AD :@@@2@@F@@@@ LA A6,INFOTA . LOAD FIRST WORSK )@@G@@D OF TABLE :@@@2E@ @@@@ SA A6,RAWBIT :@@@2O@F@@@@ SL )@@G@@ AND A6,ALPMSK . MASK OUT BAD PARAMETERS :@@@2Y@G@@@@SM )@@G@@ SA A7,ANDBIT . AND PUT GOOD PARAMETERS IN A7 SN )@@G@@:@@@2*@D@@@@ JNB A7,$+3 . CHECK Z BIT :@@@22SO )@@G@@@D@@@@ LA A4,1 . Z BIT WAS SET :@@@2/@E@@@@SP )@@G@@ SA A4,ZBIT . TURN ON ZBIT FLAG :@@@3A@E@@@@SQ )@@G@@ LX X2,ALPENT . 26 BITS TO CHECK :@@@3K@D@@@@SR )@@G@@ JNB A7,$+3 . JUMP TO SHIFT :@@@3U@E@@@@ SS )@@G@@ LA A4,ALPTBL,X2 . LOAD OPTION LETTER :@@@3=@F@@@@ ST )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@@3,@E@@@@SU )@@G@@ SSC A7,1 . MOVE TO NEXT BIT :@@@38@D@@@@SV )@@G@@ JGD X2,$-4 . TEST NEXT BIT :@@@4]@D@@@@ SW )@@G@@ LA,U A4,005 . LOAD SPACE :@@@4G@F@@@@ LMSX )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@@4Q@]@@@@. - - SY )@@G@@- - - :@@@4)@G@@@@ LA,U A0,010101 . ASK FOR QUALIFSZ )@@G@@IER OF 1ST FLD :@@@4%@ @@@@ I$NFOR 'SINF$' :@@@44@ @@@@TA )@@G@@ J QALNFD :@@@4"@F@@@@ SA A0,FQUAL TB )@@G@@ . STORE WD 1 OF QUALIFIER :@@@5C@F@@@@ SA A1,FTC )@@G@@QUAL+1 . STORE WD 2 OF QUALIFIER :@@@5M@ @@@@ J TD )@@G@@ QALFND :@@@5W@ @@@@QALNFD L A0,SPACES :@@@5&@F@@@@ TE )@@G@@ S A0,FSPLAT . DO NOT USE A QUALIFIER :@@@50@F@@@@TF )@@G@@ S A0,FQUAL . STORE WD 1 OF QUALIFIER :@@@5'TG )@@G@@@F@@@@ S A0,FQUAL+1 . STORE WD 2 OF QUALIFIER TH )@@G@@:@@@6^@G@@@@QALFND LA,U A0,010102 . ASK FOR FILE NAME OFTI )@@G@@ 1ST FLD :@@@6I@ @@@@ I$NFOR 'SINF$' :@@@6S@F@@@@ TJ )@@G@@ J FATAL1 . FATAL ERROR MESSAGE 1 :@@@6+@F@@@@TK )@@G@@ SA A0,FNAM . STORE WD 1 OF FILE NAME :@@@6?TL )@@G@@@F@@@@ SA A1,FNAM+1 . STORE WD 2 OF FILE NAME TM )@@G@@:@@@66@G@@@@ LA,U A0,010103 . ASK FOR FILE CYCLE OTN )@@G@@F 1ST FLD :@@@7@@ @@@@ I$NFOR 'SINF$' :@@@7E@ @@@@ TO )@@G@@ J NOCYCLE :@@@7O@E@@@@ SA A0,FCYC TP )@@G@@ . STORE FILE CYCLE :@@@7Y@G@@@@NOCYCLE LA,U A0,010104 TQ )@@G@@ . ASK FOR READ KEY OF 1ST FLD :@@@7*@ @@@@ I$NFOR 'SINTR )@@G@@F$' :@@@72@ @@@@ J NORKEY :@@@7/@D@@@@ SATS )@@G@@ A0,FRKEY . STORE READ KEY:@@@8A@G@@@@NORKEY LA,U TT )@@G@@ A0,010105 . ASK FOR WRITE KEY OF 1ST FLD :@@@8K@ @@@@ TU )@@G@@ I$NFOR 'SINF$' :@@@8U@ @@@@ J NOWKEY :@@@8=TV )@@G@@@E@@@@ SA A0,FWKEY . STORE WRITE KEY :@@@8,TW )@@G@@@F@@@@NOWKEY LA,U A0,010206 . ASK FOR TYPE OF 2ND FLD TX )@@G@@:@@@88@ @@@@ I$NFOR 'SINF$' :@@@9]@G@@@@ J TY )@@G@@ FATAL2 . JUMP TO FATAL ERROR MESSAGE 2 :@@@9G@E@@@@ TZ )@@G@@ SA A0,DEVTYP . STORE DEVICE TYPE :@@@9Q@G@@@@ UA )@@G@@ LA,S1 A0,DEVTYP . LOAD SECTOR / WORD INDICATOR :@@@9)UB )@@G@@@G@@@@ TNE,S6 A0,SECADD . IS THIS FILE SECTOR ADDRESUC )@@G@@SABLE :@@@9%@F@@@@ J MOVGRN . YES, MOVE GRANUD )@@G@@ULARITY :@@@94@G@@@@ TNE,S6 A0,WRDADD . IS THIS UE )@@G@@FILE WORD ADDRESSABLE :@@@9"@F@@@@ J MOVGRN UF )@@G@@ . YES, MOVE GRANULARITY :@@@'C@G@@@@ J FATAL7 UG )@@G@@ . JUMP TO FATALE ERROR MESSAGE 7 :@@@'M@G@@@@MOVGRN LA,U UH )@@G@@ A0,010306 . ASK FOR GRANULARITY OF 3RD FLD :@@@'W@ @@@@ UI )@@G@@ I$NFOR 'SINF$' :@@@'&@ @@@@ J NOGRAN :@@@'0UJ )@@G@@@E@@@@ TNE A0,TRK . IS GRANULARITY = TRK:@@@''UK )@@G@@@E@@@@ J STRGRN . STORE GRANULARITY :@@@;^UL )@@G@@@E@@@@ TE A0,POS . IS GRANULARITY = POS:@@@;IUM )@@G@@@G@@@@ J FATAL3 . JUMP TO FATALE ERROR MESSAUN )@@G@@GE 3 :@@@;S@F@@@@STRGRN SA A0,FGRAN . STORE FILE GRAUO )@@G@@NULARITY :@@@;+@E@@@@ J RDMAX . READ MAXUP )@@G@@ FILE SIZE :@@@;?@G@@@@NOGRAN LA A0,TRK . LOAD DEFUQ )@@G@@AULT (TRK) GRANULARITY :@@@;6@F@@@@ SA A0,FGRAN UR )@@G@@ . STORE FILE GRANULARITY :@@@/@@G@@@@RDMAX LA,U A0,010406 US )@@G@@ . ASK FOR MAX FILE SIZE, 4TH FLD :@@@/E@ @@@@ I$NFOR UT )@@G@@ 'SINF$' :@@@/O@ @@@@ J NOMAX :@@@/Y@E@@@@ UU )@@G@@ SA A0,FMAX . STORE FILE MAX SIZE :@@@/*@E@@@@ UV )@@G@@ SA A1,FMAX+1 . STORE FILE MAX SIZE :@@@/2@G@@@@NOMAX UW )@@G@@ LA,U A0,010506 . ASK FOR ACCESS CONTROL RECORD :@@@//UX )@@G@@@ @@@@ I$NFOR 'SINF$' :@@@.A@ @@@@ J NOACUY )@@G@@R :@@@.K@G@@@@ SA A0,ACRNAM . STORE ACCESS CUZ )@@G@@ONTROL RECORD :@@@.U@G@@@@ SA A0,ACRNAM+1 . STVA )@@G@@ORE ACCESS CONTROL RECORD :@@@.=@[@@@@. :@@@.,@F@@@@. - - - - - VB )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - - - :@@@.8@[@@@@. VC )@@G@@:@@@"]@^@@@@. READ PARAMETER CARDS :@@@"G@[@@@@. :@@@"Q@D@@@@. X2 PVD )@@G@@OINTS TO THE POSITION IN THE DISC PACK TABLE :@@@")@B@@@@. X3 IS USEDVE )@@G@@ WHEN SPACE FILLING THE BUFFER:@@@"%@E@@@@. POINTS TO THE POSITION WIVF )@@G@@THIN THE CONVERSION TABLE :@@@"4@E@@@@. X4 IS USED TO POINT TO THE WVG )@@G@@ORD WITHIN THE READ BUFFER :@@@""@E@@@@NOACR LX,U X2,0 VH )@@G@@ . WORKING ON 0TH READ :@@@_C@B@@@@REDCRD LA A0,SPACES VI )@@G@@ . :@@@_M@E@@@@ LX,U X3,12 . 13 WORDSVJ )@@G@@ IN BUFFER :@@@_W@E@@@@ SA A0,REDBUF,X3 . SPACE FIVK )@@G@@LL BUFFER :@@@_&@ @@@@ JGD X3,$-1 :@@@_0@E@@@@ VL )@@G@@ LA A0,REDPKT . LOAD READ PACKET :@@@_'@E@@@@ VM )@@G@@ ER READ$ . READ PARAMETER CARD :@@[@^@E@@@@ VN )@@G@@ SA A0,REDSTA . STORE READ STATUS :@@[@I@G@@@@ VO )@@G@@ SSC A0,35 . SHIFT TO ABNORMAL RETURN BIT :@@[@SVP )@@G@@@F@@@@ JB A0,ERREOF . ABNORMAL RETURN ABORT VQ )@@G@@:@@[@+@ @@@@ LA,U A0,14 :@@[@?@F@@@@ TLE VR )@@G@@ A0,X2 . HAVE WE ACCEPTED 15 CARDS :@@[@6@F@@@@ J VS )@@G@@ INVLD7 . YES, SEND ERROR MESSAGE :@@[[@@F@@@@ VT )@@G@@ LA,H2 A6,REDSTA . LOAD LENGTH OF READ BUFFER:@@[[E@G@@@@VU )@@G@@ TLE,U A6,04 . DID I READ MORE THAN 3 WRDS VV )@@G@@:@@[[O@E@@@@ J INVLD1 . JUMP TO INVALID VW )@@G@@:@@[[Y@E@@@@ LA A6,REDBUF . LOAD FIRST WORD VX )@@G@@:@@[[*@F@@@@ TE A6,RPKTAG . IS THIS A RPACK CARDVY )@@G@@? :@@[[2@E@@@@ J INVLD2 . NO JUMP TO INVVZ )@@G@@ALID :@@[[/@E@@@@ LA A6,REDBUF+2 . LOAD THIRD WORWA )@@G@@D :@@[]A@G@@@@ TE A6,INTTAG . IS WORD 3 LOADWB )@@G@@ED WITH " INIT " :@@[]K@E@@@@ J INVLD3 . NOWC )@@G@@ JUMP TO INVALID :@@[]U@D@@@@ LA A6,REDBUF+1 . LOWD )@@G@@AD PACK ID :@@[]=@E@@@@ SA A6,PKNAM,X2 . STORE INWE )@@G@@ PACK TABLE :@@[],@[@@@@. :@@[]8@ @@@@. BEGIN NUMBER CONVERSION WF )@@G@@:@@[#]@[@@@@. :@@[#G@F@@@@ LX,U X3,0 . SEWG )@@G@@T TABLE POINTER TO 0 :@@[#Q@F@@@@ LX,U X4,4 WH )@@G@@ . SET BUFFER POINTER TO 4 :@@[#)@G@@@@NUMCNV L,S6 A0,REDBUF,WI )@@G@@X4 . LOAD POSSIBLE 12TH OR 6TH CHAR :@@[#%@F@@@@ TE,S6 WJ )@@G@@ A0,SPACES . IS IT NOT EQUAL TO SPACES?:@@[#4@E@@@@ J WK )@@G@@ CNV6 . YES, STORE IN TABLE :@@[#"@G@@@@ L,WL )@@G@@S5 A0,REDBUF,X4 . LOAD POSSIBLE 11TH OR 5TH CHAR :@@[^C@F@@@@WM )@@G@@ TE,S6 A0,SPACES . IS IT NOT EQUAL TO SPACES?:@@[^MWN )@@G@@@E@@@@ J CNV5 . YES, STORE IN TABLE :@@[^WWO )@@G@@@G@@@@ L,S4 A0,REDBUF,X4 . LOAD POSSIBLE 10TH OR 4TH WP )@@G@@CHAR :@@[^&@F@@@@ TE,S6 A0,SPACES . IS IT NOT EQUAWQ )@@G@@L TO SPACES?:@@[^0@E@@@@ J CNV4 . YES, STOWR )@@G@@RE IN TABLE :@@[^'@G@@@@ L,S3 A0,REDBUF,X4 . LOAD POSWS )@@G@@SIBLE 9TH OR 3RD CHAR :@@[ ^@F@@@@ TE,S6 A0,SPACES WT )@@G@@ . IS IT NOT EQUAL TO SPACES?:@@[ I@E@@@@ J CNV3 WU )@@G@@ . YES, STORE IN TABLE :@@[ S@G@@@@ L,S2 A0,REDBUF,WV )@@G@@X4 . LOAD POSSIBLE 8TH OR 2ND CHAR :@@[ +@F@@@@ TE,S6 WW )@@G@@ A0,SPACES . IS IT NOT EQUAL TO SPACES?:@@[ ?@E@@@@ J WX )@@G@@ CNV2 . YES, STORE IN TABLE :@@[ 6@G@@@@ L,WY )@@G@@S1 A0,REDBUF,X4 . LOAD POSSIBLE 7TH OR 1ST CHAR :@@[A@@F@@@@WZ )@@G@@ TE,S6 A0,SPACES . IS IT NOT EQUAL TO SPACES?:@@[AEXA )@@G@@@E@@@@ J CNV1 . YES, STORE IN TABLE :@@[AOXB )@@G@@@ @@@@ LA A0,X4 :@@[AY@F@@@@ TE A0,FXC )@@G@@OUR . ARE WE ON FIRST PASS? :@@[A*@F@@@@ J XD )@@G@@ INVLD4 . NO, NO NUMBER ENTERED :@@[A2@F@@@@ ANXE )@@G@@X,U X4,1 . PREPARE FOR SECOND PASS :@@[A/@E@@@@ XF )@@G@@ J NUMCNV . EXECUTE SECOND PASS :@@[BA@[@@@@. XG )@@G@@:@@[BK@B@@@@. HAVE FOUND END OF NUMBER, START TRANSFER:@@[BU@[@@@@. XH )@@G@@:@@[B=@F@@@@CNVLOP ANX,U X4,1 . CONVERT WORD 1 (REDBXI )@@G@@UF+3) :@@[B,@G@@@@ L,S6 A0,REDBUF,X4 . LOAD POSSIBLE XJ )@@G@@12TH OR 6TH CHAR :@@[B8@F@@@@ TNE,S6 A0,SPACES . ISXK )@@G@@ IT EQUAL TO SPACES? :@@[C]@F@@@@ J CNVEND XL )@@G@@ . JUMP TO END OF CONVERSION :@@[CG@F@@@@CNV6 S A0,CNVTBL,XM )@@G@@X3 . STORE IN CONVERSION TABLE :@@[CQ@F@@@@ AX,U X3,0XN )@@G@@1 . ADD 1 TO TABLE POINTER :@@[C)@G@@@@ L,S5 XO )@@G@@ A0,REDBUF,X4 . LOAD POSSIBLE 11TH OR 5TH CHAR :@@[C%@F@@@@ XP )@@G@@ TNE,S6 A0,SPACES . IS IT EQUAL TO SPACES? :@@[C4@F@@@@XQ )@@G@@ J CNVEND . JUMP TO END OF CONVERSION :@@[C"XR )@@G@@@F@@@@CNV5 S A0,CNVTBL,X3 . STORE IN CONVERSION TABLE XS )@@G@@:@@[DC@F@@@@ AX,U X3,01 . ADD 1 TO TABLE POINTXT )@@G@@ER :@@[DM@G@@@@ L,S4 A0,REDBUF,X4 . LOAD POSSIBLE XU )@@G@@10TH OR 4TH CHAR :@@[DW@F@@@@ TNE,S6 A0,SPACES . ISXV )@@G@@ IT EQUAL TO SPACES? :@@[D&@F@@@@ J CNVEND XW )@@G@@ . JUMP TO END OF CONVERSION :@@[D0@F@@@@CNV4 S A0,CNVTBL,XX )@@G@@X3 . STORE IN CONVERSION TABLE :@@[D'@F@@@@ AX,U X3,0XY )@@G@@1 . ADD 1 TO TABLE POINTER :@@[E^@G@@@@ L,S3 XZ )@@G@@ A0,REDBUF,X4 . LOAD POSSIBLE 9TH OR 3RD CHAR :@@[EI@F@@@@ YA )@@G@@ TNE,S6 A0,SPACES . IS IT EQUAL TO SPACES? :@@[ES@F@@@@YB )@@G@@ J CNVEND . JUMP TO END OF CONVERSION :@@[E+YC )@@G@@@F@@@@CNV3 S A0,CNVTBL,X3 . STORE IN CONVERSION TABLE YD )@@G@@:@@[E?@F@@@@ AX,U X3,01 . ADD 1 TO TABLE POINTYE )@@G@@ER :@@[E6@G@@@@ L,S2 A0,REDBUF,X4 . LOAD POSSIBLE YF )@@G@@8TH OR 2ND CHAR :@@[F@@F@@@@ TNE,S6 A0,SPACES . ISYG )@@G@@ IT EQUAL TO SPACES? :@@[FE@F@@@@ J CNVEND YH )@@G@@ . JUMP TO END OF CONVERSION :@@[FO@F@@@@CNV2 S A0,CNVTBL,YI )@@G@@X3 . STORE IN CONVERSION TABLE :@@[FY@F@@@@ AX,U X3,0YJ )@@G@@1 . ADD 1 TO TABLE POINTER :@@[F*@G@@@@ L,S1 YK )@@G@@ A0,REDBUF,X4 . LOAD POSSIBLE 7TH OR 1ST CHAR :@@[F2@F@@@@ YL )@@G@@ TNE,S6 A0,SPACES . IS IT EQUAL TO SPACES? :@@[F/@F@@@@YM )@@G@@ J CNVEND . JUMP TO END OF CONVERSION :@@[GAYN )@@G@@@F@@@@CNV1 S A0,CNVTBL,X3 . STORE IN CONVERSION TABLE YO )@@G@@:@@[GK@F@@@@ AX,U X3,01 . ADD 1 TO TABLE POINTYP )@@G@@ER :@@[GU@ @@@@ LA A0,X4 :@@[G=@G@@@@ TNYQ )@@G@@E A0,FOUR . ARE WE ON WORD 2 OF THE INPUT :@@[G,@E@@@@YR )@@G@@ J CNVLOP . YES, CONVERT WORD 1 :@@[G8@ @@@@YS )@@G@@CNVEND ANX,U X3,01 :@@[H]@F@@@@ LA A0,CNVTBL,YT )@@G@@X3 . LOAD LAST ENTRY IN TABLE :@@[HG@F@@@@ TNE,U A0,0YU )@@G@@60 . IS THIS NUMBER IN OCTAL? :@@[HQ@F@@@@ J YV )@@G@@ CNVOCT . YES CONVERT OCTAL ENTRY :@@[H)@D@@@@ LAYW )@@G@@,U A0,0 . SET TOTAL TO 0:@@[H%@E@@@@CNVLP1 LA YX )@@G@@ A1,CNVTBL,X3 . LOAD TABLE ENTRY :@@[H4@E@@@@ ANA,U YY )@@G@@ A1,060 . CONVERT TO NUMBER :@@[H"@F@@@@ TG,U YZ )@@G@@ A1,10 . IS RESULT GREATER THAN 9 :@@[IC@F@@@@ J ZA )@@G@@ INVLD5 . YES, INVALID CHARACTER :@@[IM@F@@@@ ZB )@@G@@ TP A1 . IS RESULT POSITIVE ( >=0 ):@@[IW@F@@@@ZC )@@G@@ J INVLD5 . NO, INVALID CHARACTER :@@[I&ZD )@@G@@@G@@@@ MSI A1,CNVDM,X3 . MULTIPLY BY DECIMAL MULTIPZE )@@G@@LIER :@@[I0@E@@@@ AA A0,A1 . ADD RESULT TO ZF )@@G@@TOTAL :@@[I'@E@@@@ JGD X3,CNVLP1 . GO TO NEXT ENTZG )@@G@@RY :@@[J^@E@@@@ SA A0,PKSIZ,X2 . STORE IN PACK ZH )@@G@@SIZE :@@[JI@F@@@@ J CNVNXT . END CONVERSIONZI )@@G@@ ROUTINE :@@[JS@D@@@@CNVOCT LA,U A0,0 . SET TOTAZJ )@@G@@L TO 0:@@[J+@E@@@@CNVLP2 LA A1,CNVTBL,X3 . LOAD TABLE ENTZK )@@G@@RY :@@[J?@E@@@@ ANA,U A1,060 . CONVERT TO NUMZL )@@G@@BER :@@[J6@F@@@@ TG,U A1,010 . IS RESULT GREAZM )@@G@@TER THAN 007:@@[K@@F@@@@ J INVLD6 . YES, INVZN )@@G@@ALID CHARACTER :@@[KE@F@@@@ TP A1 . ISZO )@@G@@ RESULT POSITIVE ( >=0 ):@@[KO@F@@@@ J INVLD6 ZP )@@G@@ . NO, INVALID CHARACTER :@@[KY@G@@@@ MSI A1,CNVOM,XZQ )@@G@@3 . MULTIPLY BY OCTAL MULTIPLIER :@@[K*@E@@@@ AA ZR )@@G@@ A0,A1 . ADD RESULT TO TOTAL :@@[K2@E@@@@ JGD ZS )@@G@@ X3,CNVLP2 . GO TO NEXT ENTRY :@@[K/@E@@@@ SA ZT )@@G@@ A0,PKSIZ,X2 . STORE IN PACK SIZE :@@[LA@G@@@@CNVNXT AX,U ZU )@@G@@ X2,1 . INCREMENT PACK TABLE POINTER :@@[LK@E@@@@ ZV )@@G@@ P$RINT (PF 1,13,REDBUF) . PRINT INPUT CARD :@@[LU@F@@@@ ZW )@@G@@ P$RINT (PF 1,9,VALPR1) . PRINT VALID CARD MESSAGE :@@[L=@D@@@@ZX )@@G@@ J REDCRD . READ NEXT CARD:@@[L,@F@@@@EOF ZY )@@G@@ SX X2,PKNUM . STORE NUMBER OF PACKS :@@[L8@F@@@@ZZ )@@G@@. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - :@@[M]AA )@@G@@@[@@@@. :@@[MG@B@@@@. END OF INPUT, BEGINNING OF PROCESSING :@@[MQAB )@@G@@@[@@@@. :@@[M)@F@@@@. - - - - - - - - - - - - - - - - - - - - - - - AC )@@G@@- - - - - - - - :@@[M%@D@@@@ L,U X2,0 . WOAD )@@G@@RD TO MOVE :@@[M4@F@@@@MOVQAL L,S1 A4,FQUAL,X2 . LOAD 1STAE )@@G@@ CHAR OF FQUAL :@@[M"@E@@@@ TNE,U A4,05 . ISAF )@@G@@ CHARACTER A BLANK:@@[NC@F@@@@ J MOVSPL . DOAG )@@G@@NE MOVING QUALIFIER :@@[NM@F@@@@ LMJ X11,MVCSF1 AH )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[NW@F@@@@ LMJ X11,MVCSF2AI )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[N&@F@@@@ L,S2 A4,FAJ )@@G@@QUAL,X2 . LOAD 2ND CHAR OF FQUAL :@@[N0@E@@@@ TNE,U AK )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[N'@F@@@@ J AL )@@G@@ MOVSPL . DONE MOVING QUALIFIER :@@[O^@F@@@@ LMAM )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[OI@F@@@@ AN )@@G@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[OS@F@@@@AO )@@G@@ L,S3 A4,FQUAL,X2 . LOAD 3RD CHAR OF FQUAL :@@[O+AP )@@G@@@E@@@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[O?AQ )@@G@@@F@@@@ J MOVSPL . DONE MOVING QUALIFIER AR )@@G@@:@@[O6@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSAS )@@G@@F @ASG:@@[P@@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTERAT )@@G@@ TO CSF @USE:@@[PE@F@@@@ L,S4 A4,FQUAL,X2 . LOAD 4THAU )@@G@@ CHAR OF FQUAL :@@[PO@E@@@@ TNE,U A4,05 . ISAV )@@G@@ CHARACTER A BLANK:@@[PY@F@@@@ J MOVSPL . DOAW )@@G@@NE MOVING QUALIFIER :@@[P*@F@@@@ LMJ X11,MVCSF1 AX )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[P2@F@@@@ LMJ X11,MVCSF2AY )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[P/@F@@@@ L,S5 A4,FAZ )@@G@@QUAL,X2 . LOAD 5TH CHAR OF FQUAL :@@[QA@E@@@@ TNE,U BA )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[QK@F@@@@ J BB )@@G@@ MOVSPL . DONE MOVING QUALIFIER :@@[QU@F@@@@ LMBC )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[Q=@F@@@@ BD )@@G@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[Q,@F@@@@BE )@@G@@ L,S6 A4,FQUAL,X2 . LOAD 6TH CHAR OF FQUAL :@@[Q8BF )@@G@@@E@@@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[R]BG )@@G@@@F@@@@ J MOVSPL . DONE MOVING QUALIFIER BH )@@G@@:@@[RG@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSBI )@@G@@F @ASG:@@[RQ@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTERBJ )@@G@@ TO CSF @USE:@@[R)@E@@@@ AX,U X2,1 . ADD 1 TOBK )@@G@@ MODIFIER :@@[R%@ @@@@ LA A4,X2 :@@[R4@F@@@@ BL )@@G@@ TE A4,TWO . HAVE WE MOVED 2 WORDS ? :@@[R"@D@@@@BM )@@G@@ J MOVQAL . NO KEEP GOING :@@[SC@E@@@@MOVSPLBN )@@G@@ L,S6 A4,FSPLAT . LOAD FILE SPLAT :@@[SM@E@@@@ BO )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[SW@E@@@@ BP )@@G@@ J STRTNM . START MOVING NAME :@@[S&@F@@@@ BQ )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[S0@F@@@@BR )@@G@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[S'BS )@@G@@@D@@@@STRTNM L,U X2,0 . WORD TO MOVE :@@[T^@F@@@@BT )@@G@@MOVNAM L,S1 A4,FNAM,X2 . LOAD 1ST CHAR OF FNAM :@@[TIBU )@@G@@@E@@@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[TSBV )@@G@@@E@@@@ J MOVCYC . DONE MOVING NAME :@@[T+BW )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGBX )@@G@@:@@[T?@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSBY )@@G@@F @USE:@@[T6@F@@@@ L,S2 A4,FNAM,X2 . LOAD 2ND CHAR BZ )@@G@@OF FNAM :@@[U@@E@@@@ TNE,U A4,05 . IS CHARACA )@@G@@CTER A BLANK:@@[UE@E@@@@ J MOVCYC . DONE MOVCB )@@G@@ING NAME :@@[UO@F@@@@ LMJ X11,MVCSF1 . MOVE CHACC )@@G@@RACTER TO CSF @ASG:@@[UY@F@@@@ LMJ X11,MVCSF2 . MOCD )@@G@@VE CHARACTER TO CSF @USE:@@[U*@F@@@@ L,S3 A4,FNAM,X2 CE )@@G@@ . LOAD 3RD CHAR OF FNAM :@@[U2@E@@@@ TNE,U A4,05 CF )@@G@@ . IS CHARACTER A BLANK:@@[U/@E@@@@ J MOVCYC CG )@@G@@ . DONE MOVING NAME :@@[VA@F@@@@ LMJ X11,MVCSF1CH )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[VK@F@@@@ LMJ X11,CI )@@G@@MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[VU@F@@@@ L,S4 CJ )@@G@@ A4,FNAM,X2 . LOAD 4TH CHAR OF FNAM :@@[V=@E@@@@ TNCK )@@G@@E,U A4,05 . IS CHARACTER A BLANK:@@[V,@E@@@@ J CL )@@G@@ MOVCYC . DONE MOVING NAME :@@[V8@F@@@@ LMCM )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[W]@F@@@@ CN )@@G@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[WG@F@@@@CO )@@G@@ L,S5 A4,FNAM,X2 . LOAD 5TH CHAR OF FNAM :@@[WQCP )@@G@@@E@@@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[W)CQ )@@G@@@E@@@@ J MOVCYC . DONE MOVING NAME :@@[W%CR )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGCS )@@G@@:@@[W4@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSCT )@@G@@F @USE:@@[W"@F@@@@ L,S6 A4,FNAM,X2 . LOAD 6TH CHAR CU )@@G@@OF FNAM :@@[XC@E@@@@ TNE,U A4,05 . IS CHARACV )@@G@@CTER A BLANK:@@[XM@E@@@@ J MOVCYC . DONE MOVCW )@@G@@ING NAME :@@[XW@F@@@@ LMJ X11,MVCSF1 . MOVE CHACX )@@G@@RACTER TO CSF @ASG:@@[X&@F@@@@ LMJ X11,MVCSF2 . MOCY )@@G@@VE CHARACTER TO CSF @USE:@@[X0@E@@@@ AX,U X2,1 CZ )@@G@@ . ADD 1 TO MODIFIER :@@[X'@ @@@@ LA A4,X2 :@@[Y^DA )@@G@@@F@@@@ TE A4,TWO . HAVE WE MOVED 2 WORDS ? DB )@@G@@:@@[YI@D@@@@ J MOVNAM . NO KEEP GOING :@@[YSDC )@@G@@@A@@@@. MOVE IN CYCLE NUMBER IF IT EXISTS :@@[Y+@G@@@@MOVCYC L,S1 DD )@@G@@ A4,FCYC . LOAD FIRST CHARACTER OF CYCLE # :@@[Y?@F@@@@ DE )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK ? :@@[Y6@E@@@@DF )@@G@@ J MOVRKY . YES, MOVE READ KEY :@@[Z@@F@@@@DG )@@G@@ LA A4,LPER . LOAD LEFT PEREN IN A4 :@@[ZEDH )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGDI )@@G@@:@@[ZO@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSDJ )@@G@@F @USE:@@[ZY@F@@@@ L,S1 A4,FCYC . LOAD 1ST CHAR DK )@@G@@OF FCYC :@@[Z*@E@@@@ TNE,U A4,05 . IS CHARADL )@@G@@CTER A BLANK:@@[Z2@F@@@@ J MOVRPR . DONE MOVDM )@@G@@ING FILE CYCLE :@@[Z/@F@@@@ LMJ X11,MVCSF1 . MODN )@@G@@VE CHARACTER TO CSF @ASG:@@[)A@F@@@@ LMJ X11,MVCSF2 DO )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[)K@F@@@@ L,S2 A4,FCYC DP )@@G@@ . LOAD 2ND CHAR OF FCYC :@@[)U@E@@@@ TNE,U A4,0DQ )@@G@@5 . IS CHARACTER A BLANK:@@[)=@F@@@@ J MOVRDR )@@G@@PR . DONE MOVING FILE CYCLE :@@[),@F@@@@ LMJ DS )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[)8@F@@@@ LMDT )@@G@@J X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[-]@F@@@@ DU )@@G@@ L,S3 A4,FCYC . LOAD 3RD CHAR OF FCYC :@@[-G@E@@@@DV )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[-Q@F@@@@DW )@@G@@ J MOVRPR . DONE MOVING FILE CYCLE :@@[-)DX )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGDY )@@G@@:@@[-%@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSDZ )@@G@@F @USE:@@[-4@F@@@@ L,S4 A4,FCYC . LOAD 4TH CHAR EA )@@G@@OF FCYC :@@[-"@E@@@@ TNE,U A4,05 . IS CHARAEB )@@G@@CTER A BLANK:@@[+C@F@@@@ J MOVRPR . DONE MOVEC )@@G@@ING FILE CYCLE :@@[+M@F@@@@ LMJ X11,MVCSF1 . MOED )@@G@@VE CHARACTER TO CSF @ASG:@@[+W@F@@@@ LMJ X11,MVCSF2 EE )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[+&@F@@@@ L,S5 A4,FCYC EF )@@G@@ . LOAD 5TH CHAR OF FCYC :@@[+0@E@@@@ TNE,U A4,0EG )@@G@@5 . IS CHARACTER A BLANK:@@[+'@F@@@@ J MOVREH )@@G@@PR . DONE MOVING FILE CYCLE :@@[<^@F@@@@ LMJ EI )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[A@G@@@@ J MOVWNR . YES, MOVEW )@@G@@E WRITE? NO READ KEY :@@[>K@E@@@@ LA A4,SLASH EX )@@G@@ . LOAD SLASH IN A4 :@@[>U@F@@@@ LMJ X11,MVCSF1 EY )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[>=@F@@@@ LMJ X11,MVCSF2EZ )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[>,@F@@@@ L,S1 A4,FFA )@@G@@RKEY . LOAD 1ST CHAR OF FRKEY :@@[>8@E@@@@ TNE,U FB )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[&]@E@@@@ J FC )@@G@@ MOVWKY . DONE MOVING READ KEY:@@[&G@F@@@@ LMJ FD )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[&Q@F@@@@ LMFE )@@G@@J X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[&)@F@@@@ FF )@@G@@ L,S2 A4,FRKEY . LOAD 2ND CHAR OF FRKEY :@@[&%@E@@@@FG )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[&4@E@@@@FH )@@G@@ J MOVWKY . DONE MOVING READ KEY:@@[&"@F@@@@FI )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[$CFJ )@@G@@@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USEFK )@@G@@:@@[$M@F@@@@ L,S3 A4,FRKEY . LOAD 3RD CHAR OF FRKFL )@@G@@EY :@@[$W@E@@@@ TNE,U A4,05 . IS CHARACTER AFM )@@G@@ BLANK:@@[$&@E@@@@ J MOVWKY . DONE MOVING REFN )@@G@@AD KEY:@@[$0@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTERFO )@@G@@ TO CSF @ASG:@@[$'@F@@@@ LMJ X11,MVCSF2 . MOVE CHAFP )@@G@@RACTER TO CSF @USE:@@[*^@F@@@@ L,S4 A4,FRKEY . LOFQ )@@G@@AD 4TH CHAR OF FRKEY :@@[*I@E@@@@ TNE,U A4,05 FR )@@G@@ . IS CHARACTER A BLANK:@@[*S@E@@@@ J MOVWKY FS )@@G@@ . DONE MOVING READ KEY:@@[*+@F@@@@ LMJ X11,MVCSF1 FT )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[*?@F@@@@ LMJ X11,MVCSF2FU )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[*6@F@@@@ L,S5 A4,FFV )@@G@@RKEY . LOAD 5TH CHAR OF FRKEY :@@[(@@E@@@@ TNE,U FW )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[(E@E@@@@ J FX )@@G@@ MOVWKY . DONE MOVING READ KEY:@@[(O@F@@@@ LMJ FY )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[(Y@F@@@@ LMFZ )@@G@@J X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[(*@F@@@@ GA )@@G@@ L,S6 A4,FRKEY . LOAD 6TH CHAR OF FRKEY :@@[(2@E@@@@GB )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[(/@E@@@@GC )@@G@@ J MOVWKY . DONE MOVING READ KEY:@@[%A@F@@@@GD )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[%KGE )@@G@@@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSF @USEGF )@@G@@:@@[%U@E@@@@ J MOVWKY . DONE MOVING READ KEYGG )@@G@@:@@[%=@ @@@@. MOVE WRITE KEY IF IT EXISTS :@@[%,@H@@@@MOVWNR L,S1 GH )@@G@@ A4,FWKEY . LOAD FIRST CHARACTER OF WRITE KEY :@@[%8@F@@@@GI )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK ? :@@[:]GJ )@@G@@@F@@@@ J MOVDOT . YES, MOVE PERIOD COMMA GK )@@G@@:@@[:G@E@@@@ LA A4,SLASH . LOAD SLASH IN A4 GL )@@G@@:@@[:Q@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSGM )@@G@@F @ASG:@@[:)@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTERGN )@@G@@ TO CSF @USE:@@[:%@E@@@@ J MOVWSL . MOVE SECGO )@@G@@OND SLASH :@@[:4@H@@@@MOVWKY L,S1 A4,FWKEY . LOAD FIRGP )@@G@@ST CHARACTER OF WRITE KEY :@@[:"@F@@@@ TNE,U A4,05 GQ )@@G@@ . IS CHARACTER A BLANK ? :@@[?C@F@@@@ J MOVDGR )@@G@@OT . YES, MOVE PERIOD COMMA :@@[?M@E@@@@MOVWSL LA GS )@@G@@ A4,SLASH . LOAD SLASH IN A4 :@@[?W@F@@@@ LMJ GT )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[?&@F@@@@ LMGU )@@G@@J X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[?0@F@@@@ GV )@@G@@ L,S1 A4,FWKEY . LOAD 1ST CHAR OF FWKEY :@@[?'@E@@@@GW )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[!^@F@@@@GX )@@G@@ J MOVDOT . DONE MOVING WRITE KEY :@@[!IGY )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGGZ )@@G@@:@@[!S@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSHA )@@G@@F @USE:@@[!+@F@@@@ L,S2 A4,FWKEY . LOAD 2ND CHAR HB )@@G@@OF FWKEY :@@[!?@E@@@@ TNE,U A4,05 . IS CHARAHC )@@G@@CTER A BLANK:@@[!6@F@@@@ J MOVDOT . DONE MOVHD )@@G@@ING WRITE KEY :@@[,@@F@@@@ LMJ X11,MVCSF1 . MOHE )@@G@@VE CHARACTER TO CSF @ASG:@@[,E@F@@@@ LMJ X11,MVCSF2 HF )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[,O@F@@@@ L,S3 A4,FWKEY HG )@@G@@ . LOAD 3RD CHAR OF FWKEY :@@[,Y@E@@@@ TNE,U A4,0HH )@@G@@5 . IS CHARACTER A BLANK:@@[,*@F@@@@ J MOVDHI )@@G@@OT . DONE MOVING WRITE KEY :@@[,2@F@@@@ LMJ HJ )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[,/@F@@@@ LMHK )@@G@@J X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[\A@F@@@@ HL )@@G@@ L,S4 A4,FWKEY . LOAD 4TH CHAR OF FWKEY :@@[\K@E@@@@HM )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[\U@F@@@@HN )@@G@@ J MOVDOT . DONE MOVING WRITE KEY :@@[\=HO )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGHP )@@G@@:@@[\,@F@@@@ LMJ X11,MVCSF2 . MOVE CHARACTER TO CSHQ )@@G@@F @USE:@@[\8@F@@@@ L,S5 A4,FWKEY . LOAD 5TH CHAR HR )@@G@@OF FWKEY :@@[0]@E@@@@ TNE,U A4,05 . IS CHARAHS )@@G@@CTER A BLANK:@@[0G@F@@@@ J MOVDOT . DONE MOVHT )@@G@@ING WRITE KEY :@@[0Q@F@@@@ LMJ X11,MVCSF1 . MOHU )@@G@@VE CHARACTER TO CSF @ASG:@@[0)@F@@@@ LMJ X11,MVCSF2 HV )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[0%@F@@@@ L,S6 A4,FWKEY HW )@@G@@ . LOAD 6TH CHAR OF FWKEY :@@[04@E@@@@ TNE,U A4,0HX )@@G@@5 . IS CHARACTER A BLANK:@@[0"@F@@@@ J MOVDHY )@@G@@OT . DONE MOVING WRITE KEY :@@[1C@F@@@@ LMJ HZ )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[1M@F@@@@ LMIA )@@G@@J X11,MVCSF2 . MOVE CHARACTER TO CSF @USE:@@[1W@ @@@@. MOVEIB )@@G@@ IN PERIOD AND COMMA :@@[1&@E@@@@MOVDOT L A4,PERIOD IC )@@G@@ . LOAD PERIOD IN A4 :@@[10@F@@@@ LMJ X11,MVCSF1 ID )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[1'@F@@@@ LMJ X11,MVCSF2IE )@@G@@ . MOVE CHARACTER TO CSF @USE:@@[2^@E@@@@ LA A4,CIF )@@G@@OMMA . LOAD COMMA IN A4 :@@[2I@F@@@@ LMJ X11,IG )@@G@@MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[2S@A@@@@. MOVE DEVICE TYPEIH )@@G@@ TO ASIGN CARD :@@[2+@F@@@@ L,S1 A4,DEVTYP . LOII )@@G@@AD 1ST CHAR OF DEVTYP :@@[2?@E@@@@ TNE,U A4,05 IJ )@@G@@ . IS CHARACTER A BLANK:@@[26@F@@@@ J MOVSL1 IK )@@G@@ . DONE MOVING DEVICE TYPE :@@[3@@F@@@@ LMJ X11,MVCSF1IL )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[3E@F@@@@ L,S2 A4,DIM )@@G@@EVTYP . LOAD 2ND CHAR OF DEVTYP :@@[3O@E@@@@ TNE,U IN )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[3Y@F@@@@ J IO )@@G@@ MOVSL1 . DONE MOVING DEVICE TYPE :@@[3*@F@@@@ LMIP )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[32@F@@@@ IQ )@@G@@ L,S3 A4,DEVTYP . LOAD 3RD CHAR OF DEVTYP :@@[3/@E@@@@IR )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@[4A@F@@@@IS )@@G@@ J MOVSL1 . DONE MOVING DEVICE TYPE :@@[4KIT )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGIU )@@G@@:@@[4U@F@@@@ L,S4 A4,DEVTYP . LOAD 4TH CHAR OF DEVIV )@@G@@TYP :@@[4=@E@@@@ TNE,U A4,05 . IS CHARACTER AIW )@@G@@ BLANK:@@[4,@F@@@@ J MOVSL1 . DONE MOVING DEIX )@@G@@VICE TYPE :@@[48@F@@@@ LMJ X11,MVCSF1 . MOVE CHAIY )@@G@@RACTER TO CSF @ASG:@@[5]@F@@@@ L,S5 A4,DEVTYP . LOIZ )@@G@@AD 5TH CHAR OF DEVTYP :@@[5G@E@@@@ TNE,U A4,05 JA )@@G@@ . IS CHARACTER A BLANK:@@[5Q@F@@@@ J MOVSL1 JB )@@G@@ . DONE MOVING DEVICE TYPE :@@[5)@F@@@@ LMJ X11,MVCSF1JC )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[5%@F@@@@ L,S6 A4,DJD )@@G@@EVTYP . LOAD 6TH CHAR OF DEVTYP :@@[54@E@@@@ TNE,U JE )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[5"@F@@@@ J JF )@@G@@ MOVSL1 . DONE MOVING DEVICE TYPE :@@[6C@F@@@@ LMJG )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[6M@E@@@@MOVSL1JH )@@G@@ LA A4,SLASH . LOAD SLASH IN A4 :@@[6W@F@@@@ JI )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[6&@E@@@@JJ )@@G@@ LA A4,SLASH . LOAD SLASH IN A4 :@@[60@F@@@@JK )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[6'JL )@@G@@@C@@@@. MOVE FILE GRANULARITY (GARANTEED 3 CHARACTERS):@@[7^@F@@@@ JM )@@G@@ L,S1 A4,FGRAN . LOAD 1ST CHAR OF FGRAN :@@[7I@F@@@@JN )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[7SJO )@@G@@@F@@@@ L,S2 A4,FGRAN . LOAD 2ND CHAR OF FGRAN JP )@@G@@:@@[7+@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSJQ )@@G@@F @ASG:@@[7?@F@@@@ L,S3 A4,FGRAN . LOAD 3RD CHAR JR )@@G@@OF FGRAN :@@[76@F@@@@ LMJ X11,MVCSF1 . MOVE CHAJS )@@G@@RACTER TO CSF @ASG:@@[8@@E@@@@ LA A4,SLASH . LOJT )@@G@@AD SLASH IN A4 :@@[8E@F@@@@ LMJ X11,MVCSF1 . MOJU )@@G@@VE CHARACTER TO CSF @ASG:@@[8O@A@@@@. MOVE FILE MAX SIZE IF IT EXISTS JV )@@G@@:@@[8Y@F@@@@ L,S1 A4,FMAX . LOAD 1ST CHAR OF FMAJW )@@G@@X :@@[8*@E@@@@ TNE,U A4,05 . IS CHARACTER AJX )@@G@@ BLANK:@@[82@G@@@@ J CALCMX . NONE ENTERED, JY )@@G@@CALCULATE MAX :@@[8/@E@@@@ L,U X2,0 . WOJZ )@@G@@RD OF FMAX TO MOVE:@@[9A@F@@@@MOVMAX L,S1 A4,FMAX,X2 . LOKA )@@G@@AD 1ST CHAR OF FMAX :@@[9K@E@@@@ TNE,U A4,05 KB )@@G@@ . IS CHARACTER A BLANK:@@[9U@F@@@@ J MOVCOM KC )@@G@@ . DONE MOVING FILE MAX SIZE :@@[9=@F@@@@ LMJ X11,MVCSF1KD )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[9,@F@@@@ L,S2 A4,FKE )@@G@@MAX,X2 . LOAD 2ND CHAR OF FMAX :@@[98@E@@@@ TNE,U KF )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[']@F@@@@ J KG )@@G@@ MOVCOM . DONE MOVING FILE MAX SIZE :@@['G@F@@@@ LMKH )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@['Q@F@@@@ KI )@@G@@ L,S3 A4,FMAX,X2 . LOAD 3RD CHAR OF FMAX :@@[')@E@@@@KJ )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@['%@F@@@@KK )@@G@@ J MOVCOM . DONE MOVING FILE MAX SIZE :@@['4KL )@@G@@@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASGKM )@@G@@:@@['"@F@@@@ L,S4 A4,FMAX,X2 . LOAD 4TH CHAR OF FMAKN )@@G@@X :@@[;C@E@@@@ TNE,U A4,05 . IS CHARACTER AKO )@@G@@ BLANK:@@[;M@F@@@@ J MOVCOM . DONE MOVING FIKP )@@G@@LE MAX SIZE :@@[;W@F@@@@ LMJ X11,MVCSF1 . MOVE CHAKQ )@@G@@RACTER TO CSF @ASG:@@[;&@F@@@@ L,S5 A4,FMAX,X2 . LOKR )@@G@@AD 5TH CHAR OF FMAX :@@[;0@E@@@@ TNE,U A4,05 KS )@@G@@ . IS CHARACTER A BLANK:@@[;'@F@@@@ J MOVCOM KT )@@G@@ . DONE MOVING FILE MAX SIZE :@@[/^@F@@@@ LMJ X11,MVCSF1KU )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@[/I@F@@@@ L,S6 A4,FKV )@@G@@MAX,X2 . LOAD 6TH CHAR OF FMAX :@@[/S@E@@@@ TNE,U KW )@@G@@ A4,05 . IS CHARACTER A BLANK:@@[/+@F@@@@ J KX )@@G@@ MOVCOM . DONE MOVING FILE MAX SIZE :@@[/?@F@@@@ LMKY )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@[/6@E@@@@ KZ )@@G@@ AX,U X2,1 . ADD 1 TO MODIFIER :@@[.@@ @@@@ LA )@@G@@ LA A4,X2 :@@[.E@F@@@@ TE A4,TWO LB )@@G@@ . HAVE WE MOVED 2 WORDS ? :@@[.O@D@@@@ J MOVMAX LC )@@G@@ . NO KEEP GOING :@@[.Y@E@@@@ J MOVCOM LD )@@G@@ . DONE MOVING MAX SIZE:@@[.*@^@@@@CALCMX L,U A4,0:@@[.2@ @@@@LE )@@G@@ L X2,PKNUM :@@[./@ @@@@ LA,S1 A0,DEVTYP LF )@@G@@:@@["A@G@@@@ TE,S6 A0,SECADD . IS THIS FILE SECTOR LG )@@G@@ADDRESSABLE :@@["K@G@@@@ J CALCWD . NO, ROUNLH )@@G@@D UP TO EVEN 1792'S :@@["U@F@@@@ ANX,U X2,1 LI )@@G@@ . COMPENSATE FOR 0 THRU N-1 :@@["=@E@@@@ AA A4,PKSIZ,XLJ )@@G@@2 . ADD IN PACK SIZE :@@[",@E@@@@ JGD X2,$-1 LK )@@G@@ . PROCESS ENTIRE TABLE:@@["8@F@@@@ J CALCPR LL )@@G@@ . PROCESS CALCULATED SIZE :@@[_]@[@@@@. :@@[_G@F@@@@CALCWDLM )@@G@@ ANX,U X2,1 . COMPENSATE FOR 0 THRU N-1 :@@[_Q@E@@@@LN )@@G@@CALCLP LA A1,PKSIZ,X2 . LOAD SIZE IN WORDS :@@[_)@B@@@@LO )@@G@@ LA,U A0,0 . :@@[_%@E@@@@ DI,U LP )@@G@@ A0,1792 . CONVERT TO TRACKS :@@[_4@F@@@@ TNZ LQ )@@G@@ A1 . IS THE REMAINDER ZERO :@@[_"@E@@@@ J LR )@@G@@ CALCNR . YES, DONT ROUND UP :@@]@C@C@@@@ AALS )@@G@@,U A0,1 . ROUND UP:@@]@M@F@@@@CALCNR MSI,U A0,1LT )@@G@@792 . CONVERT BACK TO WORDS :@@]@W@F@@@@ SA LU )@@G@@ A0,PKSIZ,X2 . REPLACE SIZE (IN WORDS) :@@]@&@E@@@@ AALV )@@G@@ A4,PKSIZ,X2 . ADD IN PACK SIZE :@@]@0@E@@@@ JGLW )@@G@@D X2,CALCLP . PROCESS ENTIRE TABLE:@@]@'@[@@@@. :@@][^LX )@@G@@@E@@@@CALCPR SA A4,TOTSIZ . STORE TOTAL SIZE :@@][ILY )@@G@@@D@@@@ LA,U A4,060 . LEADING ZERO :@@][S@ @@@@LZ )@@G@@ LMJ X11,MVCSF1:@@][+@F@@@@ LA,S1 A1,TOTSIZ MA )@@G@@ . 1ST & 2ND DIGIT OF SIZE :@@][?@E@@@@ TZ A1 MB )@@G@@ . ARE THEY BOTH ZERO? :@@][6@F@@@@ J TRNSMC )@@G@@1 . NO, START TRANSLATION :@@]]@@F@@@@ LA,S2 MD )@@G@@ A1,TOTSIZ . 3RD & 4TH DIGIT OF SIZE :@@]]E@E@@@@ TZME )@@G@@ A1 . ARE THEY BOTH ZERO? :@@]]O@F@@@@ J MF )@@G@@ TRNS2 . NO, START TRANSLATION :@@]]Y@F@@@@ MG )@@G@@ LA,S3 A1,TOTSIZ . 5TH & 6TH DIGIT OF SIZE :@@]]*@E@@@@MH )@@G@@ TZ A1 . ARE THEY BOTH ZERO? :@@]]2@F@@@@MI )@@G@@ J TRNS3 . NO, START TRANSLATION :@@]]/MJ )@@G@@@F@@@@ LA,S4 A1,TOTSIZ . 7TH & 8TH DIGIT OF SIZE MK )@@G@@:@@]#A@E@@@@ TZ A1 . ARE THEY BOTH ZERO? ML )@@G@@:@@]#K@F@@@@ J TRNS4 . NO, START TRANSLATIOMM )@@G@@N :@@]#U@F@@@@ LA,S5 A1,TOTSIZ . 9TH & 10TH DIGMN )@@G@@IT OF SIZE :@@]#=@E@@@@ TZ A1 . ARE THEYMO )@@G@@ BOTH ZERO? :@@]#,@F@@@@ J TRNS5 . NO, STARMP )@@G@@T TRANSLATION :@@]#8@F@@@@ LA,S6 A1,TOTSIZ . 11MQ )@@G@@TH & 12TH DIGIT OF SIZE :@@]^]@E@@@@ TZ A1 MR )@@G@@ . ARE THEY BOTH ZERO? :@@]^G@F@@@@ J TRNS6 MS )@@G@@ . NO, START TRANSLATION :@@]^Q@G@@@@ J FATAL4 MT )@@G@@ . JUMP TO FATAL ERROR MESSAGE 4 :@@]^)@E@@@@TRNS1 LMJ MU )@@G@@ X10,FLDCON . CONVERT TO FIELDATA :@@]^%@ @@@@ LA,S2 MV )@@G@@ A1,TOTSIZ :@@]^4@E@@@@TRNS2 LMJ X10,FLDCON . CONVERT MW )@@G@@TO FIELDATA :@@]^"@ @@@@ LA,S3 A1,TOTSIZ :@@] C@E@@@@TRNS3 MX )@@G@@ LMJ X10,FLDCON . CONVERT TO FIELDATA :@@] M@ @@@@ MY )@@G@@ LA,S4 A1,TOTSIZ :@@] W@E@@@@TRNS4 LMJ X10,FLDCON MZ )@@G@@ . CONVERT TO FIELDATA :@@] &@ @@@@ LA,S5 A1,TOTSIZ :@@] 0NA )@@G@@@E@@@@TRNS5 LMJ X10,FLDCON . CONVERT TO FIELDATA :@@] 'NB )@@G@@@ @@@@ LA,S6 A1,TOTSIZ :@@]A^@E@@@@TRNS6 LMJ X10,NC )@@G@@FLDCON . CONVERT TO FIELDATA :@@]AI@E@@@@MOVCOM LA A4,CND )@@G@@OMMA . LOAD COMMA IN A4 :@@]AS@F@@@@ LMJ X11,NE )@@G@@MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]A+@^@@@@. COPY DEVICE NAMENF )@@G@@S :@@]A?@ @@@@ L X2,PKNUM :@@]A6@F@@@@ ANNG )@@G@@X,U X2,1 . COMPENSATE FOR 0 THRU N-1 :@@]B@@ @@@@ NH )@@G@@ J MOVDNM :@@]BE@E@@@@MOVDS LA A4,SLASH NI )@@G@@ . LOAD SLASH IN A4 :@@]BO@F@@@@ LMJ X11,MVCSF1 NJ )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@]BY@F@@@@MOVDNM L,S1 A4,PKNAM,XNK )@@G@@2 . LOAD 1ST CHAR OF PACK NAME:@@]B*@E@@@@ TNE,U A4,0NL )@@G@@5 . IS CHARACTER A BLANK:@@]B2@E@@@@ J MOVJNM )@@G@@GD . DONE WITH THIS ENTRY:@@]B/@F@@@@ LMJ X11,NN )@@G@@MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]CA@F@@@@ L,S2 NO )@@G@@ A4,PKNAM,X2 . LOAD 2ND CHAR OF PACK NAME:@@]CK@E@@@@ TNNP )@@G@@E,U A4,05 . IS CHARACTER A BLANK:@@]CU@E@@@@ J NQ )@@G@@ MOVJGD . DONE WITH THIS ENTRY:@@]C=@F@@@@ LMNR )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]C,@F@@@@ NS )@@G@@ L,S3 A4,PKNAM,X2 . LOAD 3RD CHAR OF PACK NAME:@@]C8@E@@@@NT )@@G@@ TNE,U A4,05 . IS CHARACTER A BLANK:@@]D]@E@@@@NU )@@G@@ J MOVJGD . DONE WITH THIS ENTRY:@@]DG@F@@@@NV )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]DQNW )@@G@@@F@@@@ L,S4 A4,PKNAM,X2 . LOAD 4TH CHAR OF PACK NAMENX )@@G@@:@@]D)@E@@@@ TNE,U A4,05 . IS CHARACTER A BLANKNY )@@G@@:@@]D%@E@@@@ J MOVJGD . DONE WITH THIS ENTRYNZ )@@G@@:@@]D4@F@@@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSOA )@@G@@F @ASG:@@]D"@F@@@@ L,S5 A4,PKNAM,X2 . LOAD 5TH CHAR OB )@@G@@OF PACK NAME:@@]EC@E@@@@ TNE,U A4,05 . IS CHARAOC )@@G@@CTER A BLANK:@@]EM@E@@@@ J MOVJGD . DONE WITOD )@@G@@H THIS ENTRY:@@]EW@F@@@@ LMJ X11,MVCSF1 . MOVE CHAOE )@@G@@RACTER TO CSF @ASG:@@]E&@F@@@@ L,S6 A4,PKNAM,X2 . LOOF )@@G@@AD 6TH CHAR OF PACK NAME:@@]E0@E@@@@ TNE,U A4,05 OG )@@G@@ . IS CHARACTER A BLANK:@@]E'@E@@@@ J MOVJGD OH )@@G@@ . DONE WITH THIS ENTRY:@@]F^@F@@@@ LMJ X11,MVCSF1 OI )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@]FI@E@@@@MOVJGD JGD X2,MOVDS OJ )@@G@@ . PROCESS ENTIRE TABLE:@@]FS@E@@@@ L,S1 A4,ACRNAM OK )@@G@@ . LOAD 1ST CHAR OF ACR:@@]F+@E@@@@ TNE,U A4,05 OL )@@G@@ . IS CHARACTER A BLANK:@@]F?@E@@@@ J CSFDON OM )@@G@@ . DONE MOVING ACR :@@]F6@ @@@@ LA A4,COMMA ON )@@G@@:@@]G@@F@@@@ LMJ X11,MVCSF1 . MOVE COMMA TO ASG LIOO )@@G@@NE :@@]GE@F@@@@ LMJ X11,MVCSF1 . MOVE COMMA TO OP )@@G@@ASG LINE :@@]GO@F@@@@ LMJ X11,MVCSF1 . MOVE COMOQ )@@G@@MA TO ASG LINE :@@]GY@F@@@@ LMJ X11,MVCSF1 . MOOR )@@G@@VE COMMA TO ASG LINE :@@]G*@D@@@@ L,U X2,0 OS )@@G@@ . WORD TO MOVE :@@]G2@E@@@@MOVACR L,S1 A4,ACRNAM,X2 . LOOT )@@G@@AD 1ST CHAR OF ACR:@@]G/@E@@@@ TNE,U A4,05 . ISOU )@@G@@ CHARACTER A BLANK:@@]HA@E@@@@ J CSFDON . DOOV )@@G@@NE MOVING ACR :@@]HK@F@@@@ LMJ X11,MVCSF1 . MOOW )@@G@@VE CHARACTER TO CSF @ASG:@@]HU@E@@@@ L,S2 A4,ACRNAM,X2 OX )@@G@@ . LOAD 2ND CHAR OF ACR:@@]H=@E@@@@ TNE,U A4,05 OY )@@G@@ . IS CHARACTER A BLANK:@@]H,@E@@@@ J CSFDON OZ )@@G@@ . DONE MOVING ACR :@@]H8@F@@@@ LMJ X11,MVCSF1 PA )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@]I]@E@@@@ L,S3 A4,ACRNAM,PB )@@G@@X2 . LOAD 3RD CHAR OF ACR:@@]IG@E@@@@ TNE,U A4,05 PC )@@G@@ . IS CHARACTER A BLANK:@@]IQ@E@@@@ J CSFDON PD )@@G@@ . DONE MOVING ACR :@@]I)@F@@@@ LMJ X11,MVCSF1PE )@@G@@ . MOVE CHARACTER TO CSF @ASG:@@]I%@E@@@@ L,S4 A4,APF )@@G@@CRNAM,X2 . LOAD 4TH CHAR OF ACR:@@]I4@E@@@@ TNE,U A4,0PG )@@G@@5 . IS CHARACTER A BLANK:@@]I"@E@@@@ J CSFDPH )@@G@@ON . DONE MOVING ACR :@@]JC@F@@@@ LMJ X11,PI )@@G@@MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]JM@E@@@@ L,S5 PJ )@@G@@ A4,ACRNAM,X2 . LOAD 5TH CHAR OF ACR:@@]JW@E@@@@ TNE,U PK )@@G@@ A4,05 . IS CHARACTER A BLANK:@@]J&@E@@@@ J PL )@@G@@ CSFDON . DONE MOVING ACR :@@]J0@F@@@@ LMJ PM )@@G@@ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]J'@E@@@@ L,PN )@@G@@S6 A4,ACRNAM,X2 . LOAD 6TH CHAR OF ACR:@@]K^@E@@@@ TNPO )@@G@@E,U A4,05 . IS CHARACTER A BLANK:@@]KI@E@@@@ J PP )@@G@@ CSFDON . DONE MOVING ACR :@@]KS@F@@@@ LMPQ )@@G@@J X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@]K+@E@@@@ PR )@@G@@ AX,U X2,1 . ADD 1 TO MODIFIER :@@]K?@ @@@@ PS )@@G@@ LA A4,X2 :@@]K6@F@@@@ TE A4,TWO PT )@@G@@ . HAVE WE MOVED 2 WORDS ? :@@]L@@D@@@@ J MOVACR PU )@@G@@ . NO KEEP GOING :@@]LE@[@@@@. :@@]LO@F@@@@. - - - - - - - - PV )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - :@@]LY@[@@@@. :@@]L*PW )@@G@@@#@@@@. ASSIGN THE FILE :@@]L2@[@@@@. :@@]L/@F@@@@. - - - - - - - - PX )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - :@@]MA@[@@@@. :@@]MKPY )@@G@@@F@@@@CSFDON L A0,CSFPK1 . LENGTH AND BUFF ADDRESS PZ )@@G@@:@@]MU@D@@@@ ER CSF$ . ASSIGN FILE :@@]M=QA )@@G@@@G@@@@ LA A1,ZBIT . LOAD ZBIT FLAG (1=Z OPTIONQB )@@G@@) :@@]M,@^@@@@ TNZ A1 :@@]M8@E@@@@ J QC )@@G@@ NOZBIT . Z OPTION IS NOT SET :@@]N]@^@@@@ TZ QD )@@G@@ A0 :@@]NG@ @@@@ J INVLD8 :@@]NQ@E@@@@ J QE )@@G@@ ERCUSE . PUT ON USE NAME :@@]N)@^@@@@NOZBIT TZQF )@@G@@ A0 :@@]N%@G@@@@ J FATAL5 . ABORT IFQG )@@G@@ ASG IS UNSUCCESSFUL :@@]N4@F@@@@ERCUSE L A0,CSFPK2 QH )@@G@@ . LENGTH AND BUFF ADDRESS :@@]N"@E@@@@ ER CSF$ QI )@@G@@ . PUT USE NAME ON FILE:@@]OC@^@@@@ TZ A0 :@@]OMQJ )@@G@@@G@@@@ J FATAL6 . ABORT IF USE IS UNSUCCESSFQK )@@G@@UL :@@]OW@[@@@@. :@@]O&@G@@@@. - - - - - - - - - - - - - - - - - QL )@@G@@- - - - - - - - - - - - - - - - :@@]O0@[@@@@. :@@]O'@A@@@@. AQUIQM )@@G@@RE SPACE ON INDIVIDUAL PACKS :@@]P^@[@@@@. :@@]PI@G@@@@. - - - - - QN )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - - - - - :@@]PS@[@@@@QO )@@G@@. :@@]P+@ @@@@AQUSPC L X1,PKNUM :@@]P?@F@@@@ ANQP )@@G@@X,U X1,1 . COMPENSATE FOR 0 THRU N-1 :@@]P6@F@@@@BLDBUFQQ )@@G@@ LA A4,UNAM . WORD 1 OF FILE USE NAME :@@]Q@@B@@@@QR )@@G@@ SA A4,PACKET . :@@]QE@F@@@@ LA QS )@@G@@ A4,UNAM+1 . WORD 2 OF FILE USE NAME :@@]QO@B@@@@ SAQT )@@G@@ A4,PACKET+1 . :@@]QY@^@@@@ L,U A4,0:@@]Q*QU )@@G@@@G@@@@ SA A4,PACKET+2 . INTERUPT ADDRESS (NOT USEDQV )@@G@@) :@@]Q2@^@@@@ LA,U A4,0:@@]Q/@A@@@@ SA QW )@@G@@ A4,PACKET+3 :@@]RA@E@@@@ LA,U A4,017 . EXQX )@@G@@TENDED ACQUIRE :@@]RK@A@@@@ SA,S2 A4,PACKET+3 :@@]RUQY )@@G@@@E@@@@ LA A4,PKSIZ,X1 . TRACKS TO AQUIRE :@@]R=QZ )@@G@@@F@@@@ TNZ A4 . ARE THERE TRACKS TO AQUIRERA )@@G@@:@@]R,@G@@@@ J BUFJGD . NO, THIS IS AN EXPASRB )@@G@@ION PACK :@@]R8@[@@@@. :@@]S]@ @@@@ LA,S1 A0,DEVTYP RC )@@G@@:@@]SG@G@@@@ TNE,S6 A0,SECADD . IS THIS FILE SECTOR RD )@@G@@ADDRESSABLE :@@]SQ@G@@@@ J TSTTP1 . YES, TESRE )@@G@@T FOR TRACK / POSITION :@@]S)@H@@@@ L,U A3,0 RF )@@G@@ . NO, THIS FILE IS WORD ADDRESSABLE :@@]S%@E@@@@ DI,U RG )@@G@@ A3,1792 . DIVIDE PKSIZ BY 1792:@@]S4@E@@@@ TZ RH )@@G@@ A4 . IS THERE A REMAINDER:@@]S"@E@@@@ AA,U RI )@@G@@ A3,1 . YES, ROUND UP :@@]TC@E@@@@ LA RJ )@@G@@ A4,A3 . MOVE RESULT TO A4 :@@]TM@E@@@@ J RK )@@G@@ WRTTPK . WRITE TO PACKET :@@]TW@E@@@@TSTTP1 LA RL )@@G@@ A0,FGRAN . LOAD GRANULARITY :@@]T&@F@@@@ TE RM )@@G@@ A0,TRK . IS THIS TRACK GRANULARITY :@@]T0@F@@@@ MSRN )@@G@@I,U A4,64 . NO, POSITION * 64 = TRACKS:@@]T'@A@@@@WRTTPKRO )@@G@@ SA,H1 A4,PACKET+4 :@@]U^@[@@@@. :@@]UI@D@@@@ LARP )@@G@@ A0,NXTADD . START ADDRESS :@@]US@A@@@@ SA RQ )@@G@@ A0,PACKET+5 :@@]U+@ @@@@ LA,S1 A0,DEVTYP :@@]U?@G@@@@RR )@@G@@ TNE,S6 A0,SECADD . IS THIS FILE SECTOR ADDRESSABLE RS )@@G@@:@@]U6@E@@@@ J TSTTP2 . TEST FOR TRACK/POS RT )@@G@@:@@]V@@F@@@@ MSI,U A4,1792 . CONVERT BACK TO WORDRU )@@G@@S :@@]VE@E@@@@ J STRNAD . STORE NEXT ADDRV )@@G@@RESS :@@]VO@G@@@@TSTTP2 MSI,U A4,64 . CONVERT FROM TRW )@@G@@RACKS TO SECTORS :@@]VY@G@@@@STRNAD AA A4,NXTADD . ADRX )@@G@@D TO CURRENT START ADDRESS :@@]V*@F@@@@ SA A4,NXTADD RY )@@G@@ . STORE NEXT START ADDRESS :@@]V2@^@@@@ LA,U A4,0RZ )@@G@@:@@]V/@A@@@@ SA A4,PACKET+6 :@@]WA@D@@@@ LASA )@@G@@,U A4,010 . PACK ID CODE :@@]WK@A@@@@ SA,H1 SB )@@G@@ A4,PACKET+6 :@@]WU@E@@@@ LA A4,PKNAM,X1 . PASC )@@G@@CK ID FROM TABLE :@@]W=@A@@@@ SA A4,PACKET+7 :@@]W,SD )@@G@@@^@@@@ LA,U A4,0:@@]W8@A@@@@ SA A4,PACKET+SE )@@G@@8 :@@]X]@E@@@@ LA,U A0,PACKET . LOAD PACKET ADSF )@@G@@DRESS :@@]XG@D@@@@ ER IOW$ . PERFORM WRITE SG )@@G@@:@@]XQ@ @@@@ TZ,S1 PACKET+3 :@@]X)@F@@@@ ER SH )@@G@@ EABT$ . ABORT IF UNSUCCESFULL :@@]X%@ @@@@BUFJGD JGSI )@@G@@D X1,BLDBUF :@@]X4@F@@@@ L A0,CSFPK3 . LESJ )@@G@@NGTH AND BUFF ADDRESS :@@]X"@F@@@@ ER CSF$ SK )@@G@@ . PUT @FREE USE NAME & FILE :@@]YC@^@@@@ TZ A0 :@@]YMSL )@@G@@@G@@@@ J FATAL8 . ABORT IF FREE IS UNSUCCESSSM )@@G@@FUL :@@]YW@ @@@@ J NORMEND :@@]Y&@G@@@@. - - - - - SN )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - - - - . :@@]Y0@[@@@@SO )@@G@@. :@@]Y'@F@@@@. THIS ROUTINE CONVERS AN OCTAL NUMBER IN S1 OF A1 TO SP )@@G@@FIELDATA :@@]Z^@ @@@@. AND INSERTS IT INTO THE ASG :@@]ZI@[@@@@. SQ )@@G@@:@@]ZS@F@@@@FLDCON SSC A1,3 . LOOK AT FIRST CHARACSR )@@G@@TER :@@]Z+@C@@@@ AA,U A1,060 . CONVERT :@@]Z?SS )@@G@@@D@@@@ LA A4,A1 . TRANSFER TO A4:@@]Z6@F@@@@ST )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@])@SU )@@G@@@F@@@@ SSL A1,33 . LOOK AT SECOND CHARACTER SV )@@G@@:@@])E@C@@@@ AA,U A1,060 . CONVERT :@@])O@D@@@@SW )@@G@@ LA A4,A1 . TRANSFER TO A4:@@])Y@F@@@@ SX )@@G@@ LMJ X11,MVCSF1 . MOVE CHARACTER TO CSF @ASG:@@])*@C@@@@SY )@@G@@ J 0,X10 . RETURN :@@])2@G@@@@. - - - - - SZ )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - - - - . :@@])/@G@@@@TA )@@G@@. . TB )@@G@@:@@]-A@G@@@@. THIS SUBROUTINE BUILDS THE CSF BUFFER (CSFBF1) USED FOR THTC )@@G@@E . :@@]-K@G@@@@. FILE ASSIGN, USING THE FOLLOWING REGISTERS: TD )@@G@@ . :@@]-U@G@@@@. A4 CONTAINS THE CHARACTER TO STORTE )@@G@@E . :@@]-=@G@@@@. A5 TF )@@G@@ . :@@]-,@G@@@@. X1 TG )@@G@@ . :@@]-8@G@@@@TH )@@G@@. X11 CONTAINS THE RETURN ADDRESS . TI )@@G@@:@@]+]@G@@@@. TJ )@@G@@ . :@@]+G@F@@@@. - - - - - - - - - - - - - - - - - - - - - - - TK )@@G@@- - - - - - - - - :@@]+Q@B@@@@MVCSF1 LA A5,CSFWD1 . TL )@@G@@:@@]+)@G@@@@ TNE A5,40 . ARE WE PAST THE END TM )@@G@@OF AREA :@@]+%@D@@@@ ER EABT$ . YES - ABTN )@@G@@ORT :@@]+4@D@@@@ LX X1,CSFWD1 . LOAD MODIFIER TO )@@G@@:@@]+"@F@@@@ LA A5,CSFCH1 . LOAD CHARACTER TO LOTP )@@G@@AD :@@]@@C@@@@ J SIXCUB )@@G@@1 . YES :@@]>E@F@@@@ ER EABT$ UC )@@G@@ . ABORT INVALID CHARACTER :@@]>O@D@@@@SIXC1 S,S6 A4,CSFBF1,UD )@@G@@X1 . STORE IN S6 :@@]>Y@E@@@@ AX,U X1,1 UE )@@G@@ . ADD 1 TO WRD POINTER:@@]>*@D@@@@ SX X1,CSFWD1 UF )@@G@@ . STORE POINTER :@@]>2@^@@@@ L,U A5,1:@@]>/@E@@@@ UG )@@G@@ S A5,CSFCH1 . SET CSFCH1 TO 1 :@@]&A@F@@@@ UH )@@G@@ J 0,X11 . RETURN TO CALLING POINT :@@]&K@D@@@@UI )@@G@@FIFC1 S,S5 A4,CSFBF1,X1 . STORE IN S5 :@@]&U@^@@@@ UJ )@@G@@ L,U A5,6:@@]&=@E@@@@ S A5,CSFCH1 . SEUK )@@G@@T CSFCH1 TO 6 :@@]&,@F@@@@ J 0,X11 . REUL )@@G@@TURN TO CALLING POINT :@@]&8@D@@@@FORC1 S,S4 A4,CSFBF1,X1 UM )@@G@@ . STORE IN S4 :@@]$]@^@@@@ L,U A5,5:@@]$G@E@@@@ UN )@@G@@ S A5,CSFCH1 . SET CSFCH1 TO 5 :@@]$Q@F@@@@ UO )@@G@@ J 0,X11 . RETURN TO CALLING POINT :@@]$)@D@@@@UP )@@G@@THRC1 S,S3 A4,CSFBF1,X1 . STORE IN S3 :@@]$%@^@@@@ UQ )@@G@@ L,U A5,4:@@]$4@E@@@@ S A5,CSFCH1 . SEUR )@@G@@T CSFCH1 TO 4 :@@]$"@F@@@@ J 0,X11 . REUS )@@G@@TURN TO CALLING POINT :@@]*C@D@@@@SECC1 S,S2 A4,CSFBF1,X1 UT )@@G@@ . STORE IN S2 :@@]*M@^@@@@ L,U A5,3:@@]*W@E@@@@ UU )@@G@@ S A5,CSFCH1 . SET CSFCH1 TO 3 :@@]*&@F@@@@ UV )@@G@@ J 0,X11 . RETURN TO CALLING POINT :@@]*0@D@@@@UW )@@G@@FSTC1 S,S1 A4,CSFBF1,X1 . STORE IN S1 :@@]*'@^@@@@ UX )@@G@@ L,U A5,2:@@](^@E@@@@ S A5,CSFCH1 . SEUY )@@G@@T CSFCH1 TO 2 :@@](I@F@@@@ J 0,X11 . REUZ )@@G@@TURN TO CALLING POINT :@@](S@G@@@@. - - - - - - - - - - - - - - - - - VA )@@G@@- - - - - - - - - - - - - - - . :@@](+@G@@@@. VB )@@G@@ . :@@](?@G@@@@. THIS SUBROVC )@@G@@UTINE BUILDS THE CSF BUFFER (CSFBF2) USED FOR THE . :@@](6@G@@@@VD )@@G@@. FILE ASSIGN, USING THE FOLLOWING REGISTERS: . VE )@@G@@:@@]%@@G@@@@. A4 CONTAINS THE CHARACTER TO STORE VF )@@G@@ . :@@]%E@G@@@@. A5 VG )@@G@@ . :@@]%O@G@@@@. X1 VH )@@G@@ . :@@]%Y@G@@@@. X11 CONTAINS THE RETURVI )@@G@@N ADDRESS . :@@]%*@G@@@@. VJ )@@G@@ . :@@]%2@F@@@@VK )@@G@@. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - :@@]%/VL )@@G@@@B@@@@MVCSF2 LA A5,CSFWD2 . :@@]:A@G@@@@ TNVM )@@G@@E A5,40 . ARE WE PAST THE END OF AREA :@@]:K@D@@@@VN )@@G@@ ER EABT$ . YES - ABORT :@@]:U@D@@@@ VO )@@G@@ LX X1,CSFWD2 . LOAD MODIFIER :@@]:=@F@@@@ LAVP )@@G@@ A5,CSFCH2 . LOAD CHARACTER TO LOAD :@@]:,@G@@@@ VQ )@@G@@ TNE,U A5,1 . ARE WE FILLING 1ST CHARACTER :@@]:8VR )@@G@@@C@@@@ J FSTC2 . YES :@@]?]@G@@@@ VS )@@G@@ TNE,U A5,2 . ARE WE FILLING 2ST CHARACTER :@@]?GVT )@@G@@@C@@@@ J SECC2 . YES :@@]?Q@G@@@@ VU )@@G@@ TNE,U A5,3 . ARE WE FILLING 3RD CHARACTER :@@]?)VV )@@G@@@C@@@@ J THRC2 . YES :@@]?%@G@@@@ VW )@@G@@ TNE,U A5,4 . ARE WE FILLING 4TH CHARACTER :@@]?4VX )@@G@@@C@@@@ J FORC2 . YES :@@]?"@G@@@@ VY )@@G@@ TNE,U A5,5 . ARE WE FILLING 5TH CHARACTER :@@]!CVZ )@@G@@@C@@@@ J FIFC2 . YES :@@]!M@G@@@@ WA )@@G@@ TNE,U A5,6 . ARE WE FILLING 6TH CHARACTER :@@]!WWB )@@G@@@C@@@@ J SIXC2 . YES :@@]!&@F@@@@ WC )@@G@@ ER EABT$ . ABORT INVALID CHARACTER :@@]!0@D@@@@WD )@@G@@SIXC2 S,S6 A4,CSFBF2,X1 . STORE IN S6 :@@]!'@E@@@@ WE )@@G@@ AX,U X1,1 . ADD 1 TO WRD POINTER:@@],^@D@@@@ WF )@@G@@ SX X1,CSFWD2 . STORE POINTER :@@],I@^@@@@ L,WG )@@G@@U A5,1:@@],S@E@@@@ S A5,CSFCH2 . SET CSFCWH )@@G@@H2 TO 1 :@@],+@F@@@@ J 0,X11 . RETURN TWI )@@G@@O CALLING POINT :@@],?@D@@@@FIFC2 S,S5 A4,CSFBF2,X1 . STWJ )@@G@@ORE IN S5 :@@],6@^@@@@ L,U A5,6:@@]\@@E@@@@ S WK )@@G@@ A5,CSFCH2 . SET CSFCH2 TO 6 :@@]\E@F@@@@ J WL )@@G@@ 0,X11 . RETURN TO CALLING POINT :@@]\O@D@@@@FORC2 WM )@@G@@ S,S4 A4,CSFBF2,X1 . STORE IN S4 :@@]\Y@^@@@@ L,WN )@@G@@U A5,5:@@]\*@E@@@@ S A5,CSFCH2 . SET CSFCWO )@@G@@H2 TO 5 :@@]\2@F@@@@ J 0,X11 . RETURN TWP )@@G@@O CALLING POINT :@@]\/@D@@@@THRC2 S,S3 A4,CSFBF2,X1 . STWQ )@@G@@ORE IN S3 :@@]0A@^@@@@ L,U A5,4:@@]0K@E@@@@ S WR )@@G@@ A5,CSFCH2 . SET CSFCH2 TO 4 :@@]0U@F@@@@ J WS )@@G@@ 0,X11 . RETURN TO CALLING POINT :@@]0=@D@@@@SECC2 WT )@@G@@ S,S2 A4,CSFBF2,X1 . STORE IN S2 :@@]0,@^@@@@ L,WU )@@G@@U A5,3:@@]08@E@@@@ S A5,CSFCH2 . SET CSFCWV )@@G@@H2 TO 3 :@@]1]@F@@@@ J 0,X11 . RETURN TWW )@@G@@O CALLING POINT :@@]1G@D@@@@FSTC2 S,S1 A4,CSFBF2,X1 . STWX )@@G@@ORE IN S1 :@@]1Q@^@@@@ L,U A5,2:@@]1)@E@@@@ S WY )@@G@@ A5,CSFCH2 . SET CSFCH2 TO 2 :@@]1%@F@@@@ J WZ )@@G@@ 0,X11 . RETURN TO CALLING POINT :@@]14@C@@@@. - - XA )@@G@@- - - - - - - - - - - - - - - - - - - - :@@]1"@[@@@@. :@@]2C@F@@@@XB )@@G@@. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - :@@]2MXC )@@G@@@[@@@@. :@@]2W@E@@@@INVLD1 P$RINT (PF 1,13,REDBUF) . PRINT INXD )@@G@@PUT CARD :@@]2&@E@@@@ P$RINT (PF 1,9,INVPR1) . PRINT ERXE )@@G@@ROR MESSAGE :@@]20@D@@@@ J REDCRD . READ NEXXF )@@G@@T CARD:@@]2'@E@@@@INVLD2 P$RINT (PF 1,13,REDBUF) . PRINT INPUT CAXG )@@G@@RD :@@]3^@E@@@@ P$RINT (PF 1,9,INVPR2) . PRINT ERROR MEXH )@@G@@SSAGE :@@]3I@D@@@@ J REDCRD . READ NEXT CARDXI )@@G@@:@@]3S@E@@@@INVLD3 P$RINT (PF 1,13,REDBUF) . PRINT INPUT CARD XJ )@@G@@:@@]3+@E@@@@ P$RINT (PF 1,9,INVPR3) . PRINT ERROR MESSAGE XK )@@G@@:@@]3?@D@@@@ J REDCRD . READ NEXT CARD:@@]36XL )@@G@@@E@@@@INVLD4 P$RINT (PF 1,13,REDBUF) . PRINT INPUT CARD :@@]4@XM )@@G@@@E@@@@ P$RINT (PF 1,9,INVPR4) . PRINT ERROR MESSAGE :@@]4EXN )@@G@@@D@@@@ J REDCRD . READ NEXT CARD:@@]4O@E@@@@XO )@@G@@INVLD5 P$RINT (PF 1,13,REDBUF) . PRINT INPUT CARD :@@]4Y@E@@@@XP )@@G@@ P$RINT (PF 1,9,INVPR5) . PRINT ERROR MESSAGE :@@]4*@D@@@@XQ )@@G@@ J REDCRD . READ NEXT CARD:@@]42@E@@@@INVLD6XR )@@G@@ P$RINT (PF 1,13,REDBUF) . PRINT INPUT CARD :@@]4/@E@@@@ XS )@@G@@ P$RINT (PF 1,9,INVPR6) . PRINT ERROR MESSAGE :@@]5A@D@@@@ XT )@@G@@ J REDCRD . READ NEXT CARD:@@]5K@E@@@@INVLD7 P$XU )@@G@@RINT (PF 1,13,REDBUF) . PRINT INPUT CARD :@@]5U@E@@@@ P$XV )@@G@@RINT (PF 1,9,INVPR7) . PRINT ERROR MESSAGE :@@]5=@D@@@@ J XW )@@G@@ REDCRD . READ NEXT CARD:@@]5,@E@@@@INVLD8 P$RINT XX )@@G@@ (PF 1,9,INVPR8) . PRINT ERROR MESSAGE :@@]58@D@@@@ J XY )@@G@@ NORMEND . NORMAL EXIT :@@]6]@[@@@@. :@@]6G@F@@@@. - - XZ )@@G@@- - - - - - - - - - - - - - - - - - - - - - - - - - - - - :@@]6Q@[@@@@YA )@@G@@. :@@]6)@E@@@@FATAL1 P$RINT (PF 1,9,FTL1) . PRINT ERROR MEYB )@@G@@SSAGE :@@]6%@E@@@@ J ERREND . TAKE AN ERROR YC )@@G@@EXIT :@@]64@E@@@@FATAL2 P$RINT (PF 1,9,FTL2) . PRINT ERROR MEYD )@@G@@SSAGE :@@]6"@E@@@@ J ERREND . TAKE AN ERROR YE )@@G@@EXIT :@@]7C@E@@@@FATAL3 P$RINT (PF 1,9,FTL3) . PRINT ERROR MEYF )@@G@@SSAGE :@@]7M@E@@@@ J ERREND . TAKE AN ERROR YG )@@G@@EXIT :@@]7W@E@@@@FATAL4 P$RINT (PF 1,9,FTL4) . PRINT ERROR MEYH )@@G@@SSAGE :@@]7&@E@@@@ J ERREND . TAKE AN ERROR YI )@@G@@EXIT :@@]70@E@@@@FATAL5 P$RINT (PF 1,9,FTL5) . PRINT ERROR MEYJ )@@G@@SSAGE :@@]7'@E@@@@ J ERREND . TAKE AN ERROR YK )@@G@@EXIT :@@]8^@E@@@@FATAL6 P$RINT (PF 1,9,FTL6) . PRINT ERROR MEYL )@@G@@SSAGE :@@]8I@E@@@@ J ERREND . TAKE AN ERROR YM )@@G@@EXIT :@@]8S@E@@@@FATAL7 P$RINT (PF 1,9,FTL7) . PRINT ERROR MEYN )@@G@@SSAGE :@@]8+@E@@@@ J ERREND . TAKE AN ERROR YO )@@G@@EXIT :@@]8?@E@@@@FATAL8 P$RINT (PF 1,9,FTL8) . PRINT ERROR MEYP )@@G@@SSAGE :@@]86@E@@@@ J ERREND . TAKE AN ERROR YQ )@@G@@EXIT :@@]9@@C@@@@. - - - - - - - - - - - - - - - - - - - - - - :@@]9EYR )@@G@@@B@@@@ERREOF L$SNAP 'ERREOF',7,0417,FQUAL :@@]9O@E@@@@ LAYS )@@G@@ A0,REDSTA . RELOAD READ STATUS :@@]9Y@ @@@@ ERYT )@@G@@ EABT$ :@@]9*@[@@@@. :@@]92@B@@@@ERREND L$SNAP 'ERRENDYU )@@G@@',7,0417,FQUAL :@@]9/@E@@@@ LA A0,REDSTA . REYV )@@G@@LOAD READ STATUS :@@]'A@ @@@@ ER EABT$ :@@]'K@[@@@@YW )@@G@@. :@@]'U@E@@@@NORMEND ER EXIT$ . NORMAL TERMINAYX )@@G@@TION :@@]'=@ @@@@ $END START _@@@@@A@0A@0A@0A@0A@0A@0YY )@@G@@A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0YZ )@@G@@A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0A@0ZA )@@G@@======@@^@@ @@@@@@@@@@@@@@ @C@@@@@@]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZB )@@G@@@@@@@@B_S^FU@@@@@@@@@@]@@@@@@"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@@A@@A@@DZC )@@G@@@@A@@@@@@@@^@@@@XO@@@@@@@^@@@]@^@#@[@ @@@]K^@]@)* * * * * * * * * * * * ZD )@@G@@* * * * :@@@]G@[@@@@. :@@@]Q@B@@@@. MULTPK IS DESIGNED TO SPREADZE )@@G@@ A FILE OVER:@@@])@ @@@@. MULTIPLE REMOVABLE PAC@MP@C@) :@UP@@@___@]3^@@ZF )@@G@@@#L^#@@@_^BC)@H^]3)@7^AL)@Q^CB)B<^CX@@@___@@@___@@@___@@@___@@@___@@@___ZG )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___ZH )@@G@@C[@^]![[@^@!C9@@@[[[@^[P[[@^[QC[@^],[[@^[SC9@@@@[[@^]@C9@@@A[[@^][R8)@@@ZI )@@G@@C5]^]0:9@@@ /K@@C*/,0@N7C1]^]0:9@@@ /K@@C*/,0@N7C!]^]0:9@@@ /K@@C*/,0@N7ZJ )@@G@@C(]^]0:9@@@ /K@@C*/,0@N7C>]^]0:9@@@ /K@@C*/,0@N7C-]^]0:9@@@ /K@@C*/,0@N7ZK )@@G@@O8)@@[C[@@@]%[@^ 2/K@@CGC[@^ $/,0@N7C[@^ */,0@N7C[@^]\[[@^]#C[@^]0[[@^]^ZL )@@G@@C[@^]1[[@^] &;@@@7Q;@^AL/,0@QF/K@@P8C[)^AL[[)^BD+[)^AJ[[0^BE/-0@C.C[@@@[ZM )@@G@@[[@^BCR@)^AK/-0@D[C[]^ 5/,0@NF;[0@@[8@)@C"C9@@@ /,0@NFC8@[[[/,0@Q:/K@@DFZN )@@G@@[@@^@@[@K^@[/K@@DJC@@^ %[@@^ 4[@@^@@[@@^@[C8@[[]/,0@Q:/K@@PS[@@^@][@K^@#ZO )@@G@@C8@[[#/,0@Q:/K@@DS[@@^@^C8@[[^/,0@Q:/K@@DW[@@^@ C8@[[ /,0@Q:/K@@D)[@@^@AZP )@@G@@C8@[]A/,0@Q:/K@@PW[@@^@BC4@^@B:)@^ 0/K@@D%:)@^ 1/K@@D%/K@@P0C8@[#A/,0@Q:ZQ )@@G@@/K@@D3:@@^ ,/K@@D1%@@^ \/K@@P)[@@^@C/K@@D5C@@^ ,[@@^@CC8@[^A/,0@Q:/K@@D'ZR )@@G@@[@@^@D[@K^@EC8@[ A/,0@Q:/K@@D_[@@^@F[@@^@GR8)@@@C@@^ %R80@@G[@#^]38@0@E]ZS )@@G@@C@@^]2'=@@@H[@@^#@;@@@@]^@@:9@@@ /K@@GT/,0@NF/,0@N7C-]^@@:9@@@ /K@@GT/,0@NFAE )@@G@@/,0@N7O8)@@[C[@@@]%[@^ 2/K@@F7C-@^ 4:9@@@ /K@@GY/,0@NF/,0@N7R8)@@@C5]^@]AF )@@G@@:9@@@ /K@@H[/,0@NF/,0@N7C1]^@]:9@@@ /K@@H[/,0@NF/,0@N7C!]^@]:9@@@ /K@@H[AG )@@G@@/,0@NF/,0@N7C(]^@]:9@@@ /K@@H[/,0@NF/,0@N7C>]^@]:9@@@ /K@@H[/,0@NF/,0@N7AH )@@G@@C-]^@]:9@@@ /K@@H[/,0@NF/,0@N7O8)@@[C[@@@]%[@^ 2/K@@GZC5@^@^:9@@@ /K@@H*AI )@@G@@C[@^ ?/,0@NF/,0@N7C5@^@^:9@@@ /K@@H>/,0@NF/,0@N7C1@^@^:9@@@ /K@@H>/,0@NFAJ )@@G@@/,0@N7C!@^@^:9@@@ /K@@H>/,0@NF/,0@N7C(@^@^:9@@@ /K@@H>/,0@NF/,0@N7C>@^@^AK )@@G@@:9@@@ /K@@H>/,0@NF/,0@N7C-@^@^:9@@@ /K@@H>/,0@NF/,0@N7C[@^ !/,0@NF/,0@N7AL )@@G@@C5@^@ :9@@@ /K@@IHC[@^ (/,0@NF/,0@N7C5@^@ :9@@@ /K@@IO/,0@NF/,0@N7C1@^@ AM )@@G@@:9@@@ /K@@IO/,0@NF/,0@N7C!@^@ :9@@@ /K@@IO/,0@NF/,0@N7C(@^@ :9@@@ /K@@IOAN )@@G@@/,0@NF/,0@N7C>@^@ :9@@@ /K@@IO/,0@NF/,0@N7C-@^@ :9@@@ /K@@IO/,0@NF/,0@N7AO )@@G@@/K@@IOC5@^@A:9@@@ /K@@I8C[@^ (/,0@NF/,0@N7/K@@IRC5@^@A:9@@@ /K@@I8C[@^ (AP )@@G@@/,0@NF/,0@N7C5@^@A:9@@@ /K@@I8/,0@NF/,0@N7C1@^@A:9@@@ /K@@I8/,0@NF/,0@N7AQ )@@G@@C!@^@A:9@@@ /K@@I8/,0@NF/,0@N7C(@^@A:9@@@ /K@@I8/,0@NF/,0@N7C>@^@A:9@@@ AR )@@G@@/K@@I8/,0@NF/,0@N7C-@^@A:9@@@ /K@@I8/,0@NF/,0@N7C[@^ $/,0@NF/,0@N7C[@^ *AS )@@G@@/,0@NFC5@^@B:9@@@ /K@@JP/,0@NFC1@^@B:9@@@ /K@@JP/,0@NFC!@^@B:9@@@ /K@@JPAT )@@G@@/,0@NFC(@^@B:9@@@ /K@@JP/,0@NFC>@^@B:9@@@ /K@@JP/,0@NFC-@^@B:9@@@ /K@@JPAU )@@G@@/,0@NFC[@^ (/,0@NFC[@^ (/,0@NFC5@^@C/,0@NFC1@^@C/,0@NFC!@^@C/,0@NFC[@^ (AV )@@G@@/,0@NFC5@^@D:9@@@ /K@@K]R8)@@@C5]^@D:9@@@ /K@@K7/,0@NFC1]^@D:9@@@ /K@@K7AW )@@G@@/,0@NFC!]^@D:9@@@ /K@@K7/,0@NFC(]^@D:9@@@ /K@@K7/,0@NFC>]^@D:9@@@ /K@@K7AX )@@G@@/,0@NFC-]^@D:9@@@ /K@@K7/,0@NFO8)@@[C[@@@]%[@^ 2/K@@J>/K@@K7C9@@@@R@)^@HAY )@@G@@C4@^@B%)@^ 0/K@@KFP8)@@[G[]^@X8@)@KC/K@@KQP8)@@[C@M^@XC8@@@@W8@@W@(@@@@HAZ )@@G@@/K@@KMG8@@@[T8@@W@[@]^@XG[]^@X8@)@KG[[@^ WC9@@@0/,0@NFC4K^ W*@@@@H/K@@K?BA )@@G@@C0K^ W*@@@@H/K@@K,C?K^ W*@@@@H/K@@K0C*K^ W*@@@@H/K@@K2C=K^ W*@@@@H/K@@K4BB )@@G@@C)K^ W*@@@@H/K@@K6/K@@P=/,)@N]C0K^ W/,)@N]C?K^ W/,)@N]C*K^ W/,)@N]C=K^ WBC )@@G@@/,)@N]C)K^ W/,)@N]C[@^ */,0@NFR@)^@HP8)@@[/K@@K"C[@^ (/,0@NFC5]^@I:9@@@ BD )@@G@@/K@@LQ/,0@NFC1]^@I:9@@@ /K@@LQ/,0@NFC!]^@I:9@@@ /K@@LQ/,0@NFC(]^@I:9@@@ BE )@@G@@/K@@LQ/,0@NFC>]^@I:9@@@ /K@@LQ/,0@NFC-]^@I:9@@@ /K@@LQ/,0@NF8@)@K/C5@^@FBF )@@G@@:9@@@ /K@@L/C[@^ */,0@NF/,0@NF/,0@NF/,0@NFR8)@@@C5]^@F:9@@@ /K@@L//,0@NFBG )@@G@@C1]^@F:9@@@ /K@@L//,0@NFC!]^@F:9@@@ /K@@L//,0@NFC(]^@F:9@@@ /K@@L//,0@NFBH )@@G@@C>]^@F:9@@@ /K@@L//,0@NFC-]^@F:9@@@ /K@@L//,0@NFO8)@@[C[@@@]%[@^ 2/K@@L)BI )@@G@@C@@^@?'=@@@JC@K^BC(@@@@H/K@@M^*@@@@G/K@@PO/K@@MA*@@@@G/K@@P*C@@^[R'=@@@JBJ )@@G@@*@@@@G/K@@P?R@K^@HP8K@@[C[@^]0[[@^ XC[@^]1[[@^ YC9@@@@[[@^ ZC9@@@@[[@^ )BK )@@G@@C9@@@J[1@^ )C[[^@X(@@@@K/K@@M/C4@^@B:)@^ 0/K@@M+C80@@@W80@W@*@@@@KG80@@[BL )@@G@@C[@@@J/K@@M>C@@^@C%@@^ ,T9@@[@[D@^ -C@@^ &[@@^ +C4@^@B:)@^ 0/K@@M!T9@@W@BM )@@G@@/K@@M,T9@@[@G[@^ &[[@^ &C9@@@@[[@^ BN )@@G@@C8@^ X'=@@@#*4@^ )'=@@@Q8@K@MGC@@^]]'=@@@J*@@@@G/K@@P4/K@@QE;@K@@#G8K@@0BO )@@G@@C[@@@H/,0@NF;CK@@-G8K@@0C[@@@H/,0@NF/KE@@@C[K^[P:[K@@*'=@@@QR@K^[PC[K^[QBP )@@G@@:9K@@[/K@@N3:9K@@]/K@@N\:9K@@#/K@@N::9K@@^/K@@N$:9K@@ /K@@N<:9K@@A/K@@NXBQ )@@G@@'=@@@Q[-[^@!O8K@@[A@K^[PC9K@@[[[K^[Q/KF@@@[>[^@!C9K@@A[[K^[Q/KF@@@[([^@!BR )@@G@@C9K@@ [[K^[Q/KF@@@[![^@!C9K@@^[[K^[Q/KF@@@[1[^@!C9K@@#[[K^[Q/KF@@@[5[^@!BS )@@G@@C9K@@][[K^[Q/KF@@@C[K^]@:[K@@*'=@@@QR@K^]@C[K^][:9K@@[/K@@OZ:9K@@]/K@@OVBT )@@G@@:9K@@#/K@@OR:9K@@^/K@@ON:9K@@ /K@@OJ:9K@@A/K@@OD'=@@@Q[-[^[SO8K@@[A@K^]@BU )@@G@@C9K@@[[[K^][/KF@@@[>[^[SC9K@@A[[K^][/KF@@@[([^[SC9K@@ [[K^][/KF@@@[![^[SBV )@@G@@C9K@@^[[K^][/KF@@@[1[^[SC9K@@#[[K^][/KF@@@[5[^[SC9K@@][[K^][/KF@@@C8@^B\BW )@@G@@C@G@@@'=@@@IC8@^B1C@G@@@'=@@@I/K@@E@C8@^B\C@G@@@'=@@@IC8@^B2C@G@@@'=@@@IBX )@@G@@/K@@E@C8@^B\C@G@@@'=@@@IC8@^B3C@G@@@'=@@@I/K@@E@C8@^B\C@G@@@'=@@@IC8@^B4BY )@@G@@C@G@@@'=@@@I/K@@E@C8@^B\C@G@@@'=@@@IC8@^B5C@G@@@'=@@@I/K@@E@C8@^B\C@G@@@BZ )@@G@@'=@@@IC8@^B6C@G@@@'=@@@I/K@@E@C8@^B\C@G@@@'=@@@IC8@^B7C@G@@@'=@@@I/K@@E@CA )@@G@@C8@^B8C@G@@@'=@@@I/K@@QEC8@^B9C@G@@@'=@@@I/K@@Q[C8@^B'C@G@@@'=@@@I/K@@Q[CB )@@G@@C8@^B;C@G@@@'=@@@I/K@@Q[C8@^B/C@G@@@'=@@@I/K@@Q[C8@^B.C@G@@@'=@@@I/K@@Q[CC )@@G@@C8@^B"C@G@@@'=@@@I/K@@Q[C8@^B_C@G@@@'=@@@I/K@@Q[C8@^C@C@G@@@'=@@@I/K@@Q[CD )@@G@@[@@@P"C8@@P/'=@@[Q/K@@P_ERREOF8^J^@@@@@@@@C@@^#@'=@@@Q[@@@QBC8@@Q '=@@[QCE )@@G@@/K@@QCERREND8^J^@@@@@@@@C@@^#@'=@@@Q'=@@@D*@@^C[/K@@T_[@@^C[ @@^C]C8W@@@CF )@@G@@KCK^C[H8)@@V&;K@Q&C@@@@H'=@@@H(@@^C][@@^C]G8W@@@ @H@@@>@@@UK/K@@Q<>@@@ULCG )@@G@@/K@@T_C8H@@@?8I@@@/K@@QNC@@@UJC8K@@#/K@@Q%C@@@U^C8K@@[/K@@Q%[@@^C]C@@@UECH )@@G@@C8K@@]/K@@Q%/K@@T"L8@@@[C@)^C[G8)@@[*@I@@@?CY@@@/K@@Q3G),@@@/K@@Q!%CI@@@CI )@@G@@/K@@T"C)"@@@H80@@[T80@@AG="@@@9?I@@[?80@@BC@K@UM/K@@T_;CK@@=;^@@@%(@@@@HCJ )@@G@@G8K@@[[@K@[#;C@@@Y[@@@[[C^@^C[G8@@@[(@@@[[/K@@S@C9K@@[ @@^CKN8)@@@C@W@@@CK )@@G@@/@K@R4;CK@@Y*@@@@H?@K@[#/K@@R=%@K@[#/K@@R4%1W@@@/K@@R4C?W@@@!8K@@A/K@@R$CL )@@G@@%(K^CK @@^CJ[(K^CK9??@@[C-G@@@:9@@@[C@0@UM')H@S&H9@@@[T9@@@AG>G@@@')H@S,CM )@@G@@G)G@@@G8@@@[/K@@RF:9K@@[/K@@R?C*?@@@:8)@@.N8)@@[%[K@[[/K@@R=/K@@RV%@)@UMCN )@@G@@[5@^CJ:@)@UM[-K^CJ/K@@R=(@@@[]:(K^CK/K@@R9[(K^CK @@^CJ:[K@[[/K@@S#G9K@@[CO )@@G@@(@G@@@/K@@S@!4W@@@/K@@RE @@^CJ @@^CK/K@@T":(K^CK *@^CK9?K^CJ98K@T"C8@@@-CP )@@G@@[=@^CK(?@^CK/K@@T_C@@^CWD8)@@@C80@@@C!@^CK8^@@SQ1@@@@I!8)@[@C80@@E[))^CKCQ )@@G@@[=0^CK/K@@T_C8K@@@;=@@@A?8K@@'?8K@@0/K@@S-(@@@@JC80@[@H8K@@0T8)@@EG8!@@@CR )@@G@@/K@@SJ/^0@SM%8K@@+:8K@@-C8.@@@/@0@SM/K@@SJ9*)^CL9*)^CN[@)^CP[@)^CQ[@)^CRCS )@@G@@9*)^CS9*)^CU[@)^CW/K@@R\[1@^CJ[!@^CJ[(@^CJ[>@^CJ[5@^CK[1@^CK[!@^CKC80@@FCT )@@G@@+8K@@_:8)@@ ;^@@@A8#0@S89*@^C^Q;@^CB&;@@@[C@K@UNQ;)^CB&;)@@[N8K@@BC@0@UMCU )@@G@@[@")@@8KK@T^N4K^CJ9!@^CL/\)@T3C9K@@*(4@^CJ*)@^CJ')H)@@N0K^CJ9!@^CN*@@@[[CV )@@G@@/K@@TNC[@@UON8K@@^/\)@T3N?K^CJ(@@@[[/K@@TXC9K@@(')H)@@C[@^CP/\)@T3C9K@@)CW )@@G@@')H)@@(*@^CJ*=@^CJ/K@@T=&;@@@GQ;@^C#'=@@@J/K@@T"C9K@@/')H)@@N*K^CJC[@^CQCX )@@G@@/\)@T3N=K^CJ(@@@[[/K@@T)C9K@@/')H)@@C[@^CR/\)@T3/K@@T);>@@@A')H)@@8KK@T1CY )@@G@@/KI@@@[5W@@@[1W@@@[!W@@@[(W@@@[>W@@@/\0@T;[-W)@@Q;K@T5/KJ@@@/KF@@@/KF@@[CZ )@@G@@PROCESSOR CALL ERROR @[^@U@ABNORMAL RETURN FROM READ$ @[ @U TOO MADA )@@G@@NY SPECIFICATIONS @[^@UF]@@@@@[@@@@@ @@[@T5TPF$ DB )@@G@@ @@@@@@ DC )@@G@@ DD )@@G@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DE )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*^@! DF )@@G@@ DG )@@G@@ DH )@@G@@ @@@@@[@@@@@[DI )@@G@@@@*^[S DJ )@@G@@ DK )@@G@@ DL )@@G@@ @@@@@[@@@@@[@@*^]# DM )@@G@@ DN )@@G@@ DO )@@G@@ DP )@@G@@@@@@@[@@@@@[@ASG,C@USE @FREE USE-N @F5^]3@@@@@@RPACK INIT PARAM DQ )@@G@@CARD IS VALID - CARD ACCEPTEDPARAM CARD IS TOO SHORT DR )@@G@@ - CARD IGNORED PARAM CARD HAS INVALID SYNTAX, NO RPACK- CDS )@@G@@ARD IGNORED PARAM CARD HAS INVALID SYNTAX, NO INIT - CARD IGNORED TRACKSDT )@@G@@ TO RESERVE IS BLANK - CARD IGNORED BAD CHAR DURING DECIMAL DU )@@G@@NUMBER CONVERT - CARD IGNORED BAD CHAR DURING OCTAL NUMBER CONVERT - CDV )@@G@@ARD IGNORED TOO MANY PARAMETER CARDS (15 MAX) - CARD IGNORED BAD ASDW )@@G@@SIGN WITH Z OPTION SET - FILE NOT CREATED NO FILE NAME ENTERED DX )@@G@@ - PROCESSOR TERMINATEDNO DEVICE TYPE ENTERED - PROCESSODY )@@G@@R TERMINATEDGRANULARITY MUST BE TRK, POS OR BLANK - TERMINATEDTOTAL DZ )@@G@@SIZE CALCULTED TO BE 0 - PROCESSOR TERMINATEDERROR ON FILE ASG EA )@@G@@ - PROCESSOR TERMINATEDERROR ON FILE USE - PROCESSOEB )@@G@@R TERMINATEDBAD DEVICE TYPE ENTERED (F OR D)- PROCESSOR TERMINATEDERROR EC )@@G@@ON FILE FREE - PROCESSOR TERMINATED@@@@@@@@@@@@@@@@@@@@@@@@ED )@@G@@@J@@@@@@@@@@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@@ . , / *EE )@@G@@ ( )TRK POS F D@@@@@]@@@@@^ * A B CEF )@@G@@ D E F G H I J K L M N OEG )@@G@@ P Q R S T U V W X Y Z@[]@OTEH )@@G@@@@@@@T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EI )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[@@@@@E@@@@[=@@@@J*@@@]WK@@@SU)@@#4D@@@&DU@EJ )@@G@@@ .Y^@@@@@@@@@@@@@@@@@@@@@@@@[@@@@@C@@@@[@@@@@C@@@@[@@@@@C@@@@[@@@@@C@@@EK )@@G@@@[@@@@@@@@@@@@@@@@@@@@@@@[H^]3@[D^##@[D^#G@[D^#P@[D^#Y@[D^#$@[D^#0@[D^#9EL )@@G@@@[D^^]@[D^^F@[D^^O@[D^^X@[D^^&@[D^^\@[D^^8@[D^ [@[D^ E@[D^ N@@@@@@@@@@@@EM )@@G@@@USE @@@@@@@@@@@@, @@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___EN )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___EO )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___$MAIN$ @@^@@^@@@@@]EP )@@G@@@@@#@ @@@@@]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EQ )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ER )@@G@@ERU$ CJQC[SINFOR$ ]2> #QMULTPK B_M^FU@@@@@@@@@@@@@@@@@@ES )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ET )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@$IBANK @@@@@]$DBANK @@A@@]:@@@X6@F@@@@EU )@@G@@. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - :@@@Y@EV )@@G@@@F@@@@FSPLAT ' *' . SP@@@@@A@@@[@^@IF@C@@@@@@#EW )@@G@@K@@[@^@^E@QF@@@@@A)@@@@ @C[^@@@@@@@#0@@]@ @@W^C[@@@@@@@@@@@@@@@@@@@@@@@@EX )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EY )@@G@@RINF$ @@#@@@SINF$ @@#@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EZ )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FA )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@*[@@@[*SDFF*:@@@[=@B@@@@C[ME(I^@)^@)^@)ETTETECDMFB )@@G@@ -OC(#D@?DLJC(MC(^:@@@[,@A@@@@C[NFDH -A^@)^@)E[MDDIE)= 0? -KELNFDN:@@@[8FC )@@G@@@D@@@@C[#CDO -K^@)^@)D(PD-OE[FC- D(J @:AC( 0?C0\ 8\A*0A@)^@):@@@]]@[@@@@FD )@@G@@C[ D1^:@@@]G@A@@@@C[[ETB -[^@)^@)D(PD-OE[FC- D(J 0)^@):@@@]Q@ @@@@C[NFDHFE )@@G@@ -^^@)^@)E[MDDIE)= 0)^@):@@@])@B@@@@C[]ELFE[O^@)^@)E[MDDIE)= 9HE(GE-KDT^FF )@@G@@C(HD8):@@@]%@E@@@@C[ D-O -G^@)^@)ETTES=D-DCK= LHE(GE-KDS,D(PD-OE[F 9^C(HFG )@@G@@D8)^@):@@@]4@[@@@@C[ D1^:@@@]"@[@@@@C@) 0):@@@#C@D@@@@C@) 0)DDIET ELO^[[FH )@@G@@ETNDDBD0)D9A^[NFDN^)%C-GD9#^))D[ EL :@@@#M@[@@@@C@) 0):@@@#W@]@@@@C[KELOFI )@@G@@ -D^@):@@@#&@G@@@@C@) 0)^S<^S<^S<^S<^S<^S<^S<^S<^S<^S<^S<^S<^S<^S<^S<^S@B@@@@GF )@@G@@E[MD9^E(#E))D(PD-OE[F )1EK1^[DD1DE-DCDG^@):@@@[,@K@@@@C1DD- ^@)^@)ETTES=GG )@@G@@D-DCK= LHE(GE-KDS*AC( )1AK8 -RELDE- CD]D- -ID9MD9GD-JE(O^[ D-O -HE(GE-KGH )@@G@@DS)^@):@@@[8@D@@@@D-DCL^^@)^@)ETTES=D-DCK= LHE(GE-KDS*AC(^[HE(GE-KDS)^@)GI )@@G@@_@@@@@$#U;;LW]K W0!;U^63D0JB7Z*MVC*C#&/J6N+V16K2GS"-*%#>@Q&J#'JT+AK19!2[GJ )@@G@@^$CVU 6,+K1&)I.AGDUHJI6)*[@@@[*SDFF*:@@@[=@E@@@@C[ME(I )\EK)^@)^@)^@)^[NGK )@@G@@FDNDLM -OC(#D@?DLJC(MC(^ )1A@?AS0A@):@@@[,@B@@@@C[NFDH -A^@)^@)^@)^@)^[KGL )@@G@@ELDD1O^)? -KELNFDN:@@@[8@B@@@@C[#FD#D- -#^@)^@)^@)^[HE(GE-KDTGETO 0?AS)GM )@@G@@:@@@]]@E@@@@C[#CDO -K^@)^@)^@)^@)^[HE(GE-KDTGETO @:AC( 0?C0\ 8\AC5A@0^@)GN )@@G@@:@@@]G@C@@@@C[PET ^@)^@)^@)^@)^@)^[GETO 0?D(PD-OE[FD-NE),^@):@@@]Q@A@@@@GO )@@G@@C[NFDH -^^@)^@)^@)^@)^[KELDD1O^))^@):@@@])@B@@@@C[]ELFE[O^@)^@)^@)^@)^[KGP )@@G@@ELDD1O^)\D-NE))^@):@@@]%@F@@@@C[CC-B^@)^@)^@) K% K% K% K%^@)ETCD9R^[ME(IGQ )@@G@@ (NE-MC([D*)^@% K% K% K%:@@@]4@B@@@@C[[ETB -O^@)^@)^@)^@)^[OE[A^), )\ 8\GR )@@G@@AS0A@0:@@@]"@C@@@@C[[ETB -[^@)^@)^@)^@)^[NFDN^-GDD]^)%ETGELM 0)^@):@@@#CGS )@@G@@@E@@@@C[PET ^@)^@)^@)^@)^@)^[#D9]^-KC0, -NFDN^-GDD]^)%ETGELM 0)^@):@@@#> )@@G@@@C@@@@C[[ETB -[^@)^@)^@)^@)^[NFDN^-GDD]^)%D(PD-OE[F 0):@@@#0@ @@@@C[[ETBGU )@@G@@ -O^@)^@)^@)^@)^[MC(G 0):@@@^^@C@@@@C[[ETB -[^@)^@)^@)^@)^[NFDN^-GDD]^)%GV )@@G@@D(PD-OE[F 0):@@@^I@D@@@@C[PET ^@)^@)^@)^@)^@)^[NFDH 0?ETTES=D-DCK= LHE(GGW )@@G@@E-KDS,:@@@^S@D@@@@C[PET ^@)^@)^@)^@)^@)^[OCTA 0?ETTES=D-DCK= LHE(GE-KDS,GX )@@G@@:@@@^+@D@@@@C[PET ^@)^@)^@)^@)^@)^[KCTA 0?E(IDDNA0!A@%E[#C1H 0)^@):@@@^6GY )@@G@@@D@@@@C[PET ^@)^@)^@)^@)^@)^[[CLN 0?ETTES=D-DCK= LHE(GE-KDS,:@@@ @@E@@@@GZ )@@G@@C[PET ^@)^@)^@)^@)^@)^[#D9]AK, -NFDN^-GDD]^)%D(PD-OE[F 0)^@):@@@ O@ @@@@HA )@@G@@C[KCD#DS)^@)^@)^@)^@)^[[CLN 0):@@@ Y@C@@@@C[[ETB -O^@)^@)^@)^@)^[#D9HE@,HB )@@G@@ -A 8\ 83A@0A@)^@):@@@ *@ @@@@C[ ELN^@)^@)^@)^@)^@)^[#D9HE@,:@@@ 2@E@@@@HC )@@G@@C[CC-B^@)^@)^@)^@)^@)^@%^@%^@%^@%B0)D(PD-OE[F^@/ K) K) K) K):@@@ /@]@@@@HD )@@G@@C[AE(ME[PEK):@@@AA@B@@@@C[KELO -OD-N^@)^@)^@)^[NFDH 1HE(GE-KDS)^@):@@@AUHE )@@G@@@B@@@@C[KELO -OD-[^@)^@)^@)^[[CLN 1HE(GE-KDS)^@):@@@A=@D@@@@C[HCDND*?D-THF )@@G@@^@)^@)^@)^[NFDH 1HE(GE-KDS?EL D),D(PD-OE[F:@@@A,@[@@@@C[ D9A:@@@A8@ @@@@HG )@@G@@C[KEL E@)^@)^@)^@)^@)^[MC(G 0):@@@B]@ @@@@C[KELO -OD))^@)^@)^@)^[MC(G 0)HH )@@G@@:@@@BG@B@@@@C[HCDK -N^@)^@)^@)^@)^@?CD]ES,D(PD-OE[F^@):@@@BQ@A@@@@^@)C1MHI )@@G@@ETODDI^@)^@)EL D),D(PD-OE[F^@):@@@B)@[@@@@C[ D9A:@@@B%@]@@@@C[ D9 D-OBK)HJ )@@G@@:@@@B4@A@@@@C[]ELFE[O^@)^@)^@)^@)^[KELDD1O^))^@):@@@B"@B@@@@C[#FD#D- -#HK )@@G@@^@)^@)^@)^[HE(GE-KDTGETO 0?AC):@@@CC@D@@@@C@) 0)ETTD*?E*)^@)^@)^@)^@)D(PHL )@@G@@D-OE[FD-NE), )?E[METTES):@@@CM@A@@@@C[NFDH -^^@)^@)^@)^@)^[KELDD1O^))^@)HM )@@G@@:@@@CW@[@@@@C[ADDI_@@@@@V-Y*EHR?Y'*I1[=,VL[6I9SCH R$H8;D.8'5V%/L =>0,O(7HN )@@G@@@ 6)D3X,J"2?BMP[&B3/&966^R$#D"@5!AF3"M""*'Y.C