ASSEMBLY LISTING OF SEGMENT >udd>sm>ds>w>ml>gcos_sys_xlate_.alm ASSEMBLED ON: 04/18/00 1119.6 mdt Tue OPTIONS USED: list symbols ASSEMBLED BY: ALM Version 8.14 March 1989 ASSEMBLER CREATED: 06/09/89 1102.3 mdt Fri 1 " *********************************************************** 2 " * * 3 " * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4 " * * 5 " *********************************************************** 6 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 7 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 8 " 9 " 10 " G C O S S Y S O U T T R A N S L A T O R 11 " 12 " This program takes 3 arguments. The first is a pointer to a 320 word buffer which 13 " contains a GCOS system standard format block. The second is a pointer to an output area 14 " for the translated output. The third is a return argument which is the number 15 " of ascii characters which were placed in the output buffer. 16 " 17 " Certain special bcd character conventions are recognized: 18 " 19 " 17 ignored 20 " 77n n is a line skip count unless n is 20 21 " in which case a skip to head of form 22 " is called for. 23 " 7777X put any character X in the buffer 24 " 25 " Two ASCII conventions are recognized: 26 " 27 " records with media codes > 5 are ASCII, and characters are copied without translation. 28 " 29 " records with media code = 6 have no trailing newlines, so one will be appended. 30 " 31 " 32 " 33 " INDEX REGISTER USAGE 34 " 35 " X1 holds remaining block size (in words) 36 " X3 holds current offset in input buffer (characters) 37 " X4 holds size of current record not yet processed (characters) 38 " X5 holds size of current record (words) 39 " X6 holds current offset in output buffer (characters) 40 " 41 " 42 " 43 " WRITTEN BY DICK SNYDER FEBRUARY 3,1971 44 " MODIFIED BY T. CASEY, AUGUST 1973, TO PRODUCE UPPERCASE OUTPUT 45 " MODIFIED BY T. CASEY, MARCH 1974 TO: 46 " IGNORE ANY GARBAGE IN RECORD AFTER 77n 47 " MAKE UPPER OR LOWER CASE TRANSLATION AN OPTION 48 " ACCEPT ASCII RECORDS 49 " MODIFIED BY D. KAYDEN JANUARY 1975 TO USE EIS 50 " MODIFIED BY R.H. MORRISON 5/19/76 51 " CHANGED uc_table AND lc_table TO CONFORM TO REAL GCOS 52 " Modified by M. R. Jordan, September 1976 to process all printer escapes 53 " MODIFIED BY: Dave Ward March 1978 TO: 54 " Process overprint correctly, i.e., "!0" 55 " BCD control sequence implies carriage-return. 56 " 57 " 58 " 59 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 60 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 61 62 000000 63 name gcos_sys_xlate_ 000004 64 entry gcos_sys_xlate_ 000000 65 entry gcos_sys_xlate_lc_ 66 000000 67 gcos_sys_xlate_lc_: 000000 aa 000060 6270 00 68 save 000001 aa 7 00040 2721 20 000002 0a 000227 3534 00 69 eppbb lc_table point to lower case table 000003 0a 000007 7100 00 70 tra get_args 71 72 73 000004 74 gcos_sys_xlate_: 000004 aa 000060 6270 00 75 save 000005 aa 7 00040 2721 20 000006 0a 000207 3534 00 76 eppbb uc_table point to upper case table 77 000007 78 get_args: 000007 aa 6 00000 2501 00 79 spriap sp|0 save ap for return arg access 000010 aa 0 00002 3521 20 80 eppbp ap|2,* 000011 aa 2 00000 3521 20 81 eppbp bp|0,* bp->input buffer 000012 aa 0 00004 3501 20 82 eppap ap|4,* 000013 aa 0 00000 3501 20 83 eppap ap|0,* ap->output buffer 84 000014 aa 000000 6260 00 85 eax6 0 set output buffer offset 000015 aa 2 00000 7211 00 86 lxl1 bp|0 get block size 000016 aa 2 00001 3521 00 87 eppbp bp|1 point to first record 000017 aa 2 00000 1011 00 88 xlrcd: cmpx1 bp|0 make sure rec len < curr block len 000020 0a 000165 6044 00 89 tmoz fini it isn't..we're done 000021 aa 2 00000 1611 00 90 sbx1 bp|0 decrement remaining block size 000022 aa 000001 1610 03 91 sbx1 1,du including rcw 000023 aa 2 00000 2251 00 92 ldx5 bp|0 get record size 000024 0a 000165 6000 00 93 tze fini yes..eof and end of block 94 " 95 " Check for ASCII media code, and set switches appropriately 96 " 000025 aa 2 00000 2351 00 97 lda bp|0 get media code from rcw 000026 aa 000032 7350 00 98 als 26 by getting rid of the 26 bits to its left 000027 aa 000040 7710 00 99 arl 32 and the 6 bits to its right 000030 aa 2 00001 3521 00 100 eppbp bp|1 point to beginning of record data 000031 aa 000010 1150 07 101 cmpa =8,dl tss type 8? 000032 0a 000162 6000 00 102 tze endrec ignore this one 000033 aa 000005 1150 07 103 cmpa =o5,dl ASCII or BCD? 000034 0a 000171 6050 00 104 tpl xlasc if >= 5, its ASCII 000035 aa 000000 6360 15 105 eaq 0,5 get record length in chars 000036 aa 000006 4020 07 106 mpy 6,dl 000037 aa 000000 6240 02 107 eax4 0,qu save it in x4 000040 aa 000000 6230 00 108 eax3 0 set char offset in record 109 000041 aa 6 00051 4501 00 110 lp: stz tally 000042 aa 0 00000 1645 53 111 tct (pr,x3,rl) scan for a "!" or "?" 000043 aa 200000 020014 112 desc6a bp|0,x4 000044 0a 000247 0000 00 113 arg tctable 000045 aa 6 00051 0001 00 114 arg tally 000046 aa 6 00051 7271 00 115 lxl7 tally number of chars passed over 000047 0a 000062 6000 00 116 tze lp1 none 000050 aa 6 00051 7471 00 117 stx7 tally 118 000051 aa 0 00156 1605 53 119 mvt (pr,x3,rl),(pr,x6,rl) translate nonedit chars passed over 000052 aa 200000 020017 120 desc6a bp|0,x7 000053 aa 000000 000017 121 desc9a ap|0,x7 000054 aa 3 00000 0001 00 122 arg bb|0 123 000055 aa 6 00051 0631 00 124 adx3 tally increment input record offset 000056 aa 6 00051 0661 00 125 adx6 tally increment output buffer offset 000057 aa 6 00051 1641 00 126 sbx4 tally decrement remaining record length 000060 aa 000002 1040 03 127 cmpx4 2,du at least 2 chars left ? 000061 0a 000162 6040 00 128 tmi endrec done with record 129 000062 aa 0 00100 1005 13 130 lp1: mlr (pr,x3),(pr),fill(00) extract next 3 chars 000063 aa 200000 020003 131 desc6a bp|0,3 000064 aa 600050 020006 132 desc6a temp,6 133 000065 aa 6 00050 2351 00 134 lda temp 000066 aa 770000 3750 03 135 ana =o770000,du examine first char 000067 aa 770000 1150 03 136 cmpa =o770000,du is it a "!" 000070 0a 000110 6010 00 137 tnz ignore no - must be a "?" 000071 aa 6 00050 2351 00 138 lda temp examine second character 000072 aa 007700 3750 03 139 ana =o7700,du 000073 aa 007700 1150 03 140 cmpa =o7700,du is it another "!" 000074 0a 000114 6010 00 141 tnz space no - form spacing request 000075 aa 000003 1040 03 142 cmpx4 3,du were there 3 chars left 000076 0a 000162 6040 00 143 tmi endrec no - done with record 000077 aa 0 00116 1605 00 144 mvt (pr),(pr,x6) translate third char 000100 aa 600050 220001 145 desc6a temp(2),1 000101 aa 000000 000001 146 desc9a ap|0,1 000102 aa 3 00000 0001 00 147 arg bb|0 000103 aa 000001 0660 03 148 adx6 1,du increment output buffer offset 000104 aa 000003 0630 03 149 adx3 3,du increment input record offset 000105 aa 000003 1640 03 150 sbx4 3,du decrement remaining record length 000106 0a 000041 6054 00 151 tpnz lp scan rest of record 000107 0a 000162 7100 00 152 tra endrec done with record 153 000110 aa 000001 0630 03 154 ignore: adx3 1,du increment input record offset 000111 aa 000001 1640 03 155 sbx4 1,du decrement remaining record length 000112 0a 000041 6054 00 156 tpnz lp scan rest of record 000113 0a 000162 7100 00 157 tra endrec done with record 158 " 159 " 160 " Come here when other than an ignore or escaped print is to be performed. 161 " 162 " 000114 aa 000012 7710 00 163 space: arl 6+4 split the key and value 000115 0a 000116 7100 01 164 tra *+1,au do the right thing 000116 0a 000145 7100 00 165 tra feed_countdown 00xxxx => feed by countdown 000117 0a 000140 7100 00 166 tra feed_vfu 01xxxx => feed to xxxx on VFU loop 000120 0a 000125 7100 00 167 tra insert_spaces 10xxxx => insert 8*xxxx spaces 168 000121 169 null 11xxxx => if not 77(8) then no action 000121 170 no_action: 000121 aa 000002 0630 03 171 adx3 2,du increment input record offset 000122 aa 000002 1640 03 172 sbx4 2,du decrement remaining record length 000123 0a 000041 6054 00 173 tpnz lp scan rest of record 000124 0a 000162 7100 00 174 tra endrec done with record 175 000125 176 insert_spaces: 000125 aa 000007 7350 00 177 als 4+3 get 8*xxxx in au 000126 aa 000170 3750 03 178 ana =o170,du 000127 aa 040156 1004 00 179 mlr (),(pr,x6,rl),fill(040) 000130 0a 000130 000000 180 desc9a *,0 000131 aa 000000 000001 181 desc9a ap|0,au 000132 aa 6 00050 7551 00 182 sta temp save the number of spaces inserted 000133 aa 6 00050 0661 00 183 adx6 temp update the output offset 000134 aa 000002 0630 03 184 adx3 2,du increment the input record offset 000135 aa 000002 1640 03 185 sbx4 2,du decrement the remaining record length 000136 0a 000041 6054 00 186 tpnz lp scan rest of record 000137 0a 000162 7100 00 187 tra endrec done with record 188 000140 189 feed_vfu: 000140 aa 014116 1004 00 190 mlr (),(pr,x6),fill(014) 000141 0a 000141 000000 191 desc9a *,0 000142 aa 000000 000001 192 desc9a ap|0,1 000143 aa 000001 0660 03 193 adx6 1,du 000144 0a 000162 7100 00 194 tra endrec 195 000145 196 feed_countdown: 000145 0a 000153 6010 00 197 tnz feeds 198 " Provide for !0 => overprint. 199 " Output 1 carriage return. 000146 aa 000001 2350 03 200 lda 1,du 000147 aa 015156 1014 00 201 mrl (),(pr,x6,rl),fill(015) 000150 0a 000150 000000 202 desc9a *,0 000151 aa 000000 000001 203 desc9a ap|0,au 000152 0a 000160 7100 00 204 tra fin_feeds 205 206 " Provide newlines. 207 " Number of newlines in a-reg bits 18-21. 000153 aa 000004 7350 00 208 feeds: als 4 get the number of lines 000154 aa 000017 3750 03 209 ana =o17,du 000155 aa 012156 1004 00 210 mlr (),(pr,x6,rl),fill(012) 000156 0a 000156 000000 211 desc9a *,0 000157 aa 000000 000001 212 desc9a ap|0,au add right number of newlines 000160 213 fin_feeds: 000160 aa 6 00050 7551 00 214 sta temp 000161 aa 6 00050 0661 00 215 adx6 temp increment output buffer offset 216 000162 aa 2 00000 3521 15 217 endrec: eppbp bp|0,5 move pointer to next record 000163 aa 000000 1010 03 218 cmpx1 0,du end of block yet ? 000164 0a 000017 6010 00 219 tnz xlrcd no 220 000165 aa 6 00000 3501 20 221 fini: eppap sp|0,* restore ap 000166 aa 0 00006 4501 20 222 stz ap|6,* return no of chars 000167 aa 0 00006 4461 20 223 sxl6 ap|6,* 000170 aa 7 00042 7101 20 224 return 225 000171 aa 000000 6360 15 226 xlasc: eaq 0,5 get record length in chars 000172 aa 000002 7360 00 227 qls 2 000173 aa 0 00156 1005 40 228 mlr (pr,rl),(pr,x6,rl) 000174 aa 200000 000002 229 desc9a bp|0,qu 000175 aa 000000 000002 230 desc9a ap|0,qu 231 000176 aa 6 00050 7561 00 232 stq temp 000177 aa 6 00050 0661 00 233 adx6 temp increment output buffer offset 000200 aa 000006 1150 07 234 cmpa 6,dl is this media code 6 000201 0a 000162 6010 00 235 tnz endrec no 000202 aa 012116 1004 00 236 mlr (),(pr,x6),fill(012) add a newline 000203 0a 000203 000000 237 desc9a *,0 000204 aa 000000 000001 238 desc9a ap|0,1 000205 aa 000001 0660 03 239 adx6 1,du increment output buffer offset 000206 0a 000162 7100 00 240 tra endrec 241 242 " 243 " 244 " Translation tables...BCD to ASCII 245 " 246 " 000207 aa 060 061 062 063 247 uc_table: aci x0123456789[#@:>?x 000210 aa 064 065 066 067 000211 aa 070 071 133 043 000212 aa 100 072 076 077 000213 aa 040 101 102 103 248 aci x ABCDEFGHI&.](<\x 000214 aa 104 105 106 107 000215 aa 110 111 046 056 000216 aa 135 050 074 134 000217 aa 136 112 113 114 249 aci x^JKLMNOPQR-$*);'x 000220 aa 115 116 117 120 000221 aa 121 122 055 044 000222 aa 052 051 073 047 000223 aa 053 057 123 124 250 aci x+/STUVWXYZ_,%="!x 000224 aa 125 126 127 130 000225 aa 131 132 137 054 000226 aa 045 075 042 041 251 000227 aa 060 061 062 063 252 lc_table: aci X0123456789[#@:>?X 000230 aa 064 065 066 067 000231 aa 070 071 133 043 000232 aa 100 072 076 077 000233 aa 040 141 142 143 253 aci X abcdefghi&.](<\X 000234 aa 144 145 146 147 000235 aa 150 151 046 056 000236 aa 135 050 074 134 000237 aa 136 152 153 154 254 aci X^jklmnopqr-$*);'X 000240 aa 155 156 157 160 000241 aa 161 162 055 044 000242 aa 052 051 073 047 000243 aa 053 057 163 164 255 aci X+/stuvwxyz_,%="!X 000244 aa 165 166 167 170 000245 aa 171 172 137 054 000246 aa 045 075 042 041 256 000247 aa 000000 000000 257 tctable: dec 0,0,0,1 000250 aa 000000 000000 000251 aa 000000 000000 000252 aa 000000 000001 000253 aa 000000 000000 258 dec 0,0,0,0 000254 aa 000000 000000 000255 aa 000000 000000 000256 aa 000000 000000 000257 aa 000000 000000 259 dec 0,0,0,0 000260 aa 000000 000000 000261 aa 000000 000000 000262 aa 000000 000000 000263 aa 000000 000000 260 dec 0,0,0,1 000264 aa 000000 000000 000265 aa 000000 000000 000266 aa 000000 000001 261 temp temp,tally 262 end ENTRY SEQUENCES 000267 5a 000022 0000 00 000270 aa 7 00046 2721 20 000271 0a 000004 7100 00 000272 5a 000012 0000 00 000273 aa 7 00046 2721 20 000274 0a 000000 7100 00 NO LITERALS NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000276 5a 000003 000000 000277 5a 000040 600000 000300 aa 000000 000000 000301 55 000012 000002 000302 5a 000002 400003 000303 55 000006 000012 000304 aa 017 147 143 157 000305 aa 163 137 163 171 000306 aa 163 137 170 154 000307 aa 141 164 145 137 000310 55 000022 000003 000311 0a 000273 500000 000312 55 000015 000003 000313 aa 022 147 143 157 gcos_sys_xlate_lc_ 000314 aa 163 137 163 171 000315 aa 163 137 170 154 000316 aa 141 164 145 137 000317 aa 154 143 137 000 000320 55 000031 000012 000321 0a 000270 500000 000322 55 000025 000003 000323 aa 017 147 143 157 gcos_sys_xlate_ 000324 aa 163 137 163 171 000325 aa 163 137 170 154 000326 aa 141 164 145 137 000327 55 000002 000022 000330 6a 000000 400002 000331 55 000034 000003 000332 aa 014 163 171 155 symbol_table 000333 aa 142 157 154 137 000334 aa 164 141 142 154 000335 aa 145 000 000 000 DEFINITIONS HASH TABLE 000336 aa 000000 000015 000337 aa 000000 000000 000340 aa 000000 000000 000341 aa 000000 000000 000342 aa 000000 000000 000343 aa 000000 000000 000344 aa 000000 000000 000345 5a 000031 000000 000346 aa 000000 000000 000347 aa 000000 000000 000350 aa 000000 000000 000351 5a 000012 000000 000352 aa 000000 000000 000353 5a 000022 000000 NO EXTERNAL NAMES NO TRAP POINTER WORDS TYPE PAIR BLOCKS 000354 aa 000001 000000 000355 aa 000000 000000 INTERNAL EXPRESSION WORDS LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000276 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000010 000007 a2 000000 000000 SYMBOL INFORMATION SYMBOL TABLE HEADER 000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000010 000004 aa 000000 117244 000005 aa 361023 525721 000006 aa 000000 131036 000007 aa 702465 264715 000010 aa 141154 155040 000011 aa 040040 040040 000012 aa 000024 000040 000013 aa 000034 000040 000014 aa 000044 000100 000015 aa 000002 000002 000016 aa 000064 000000 000017 aa 000000 000145 000020 aa 000000 000103 000021 aa 000127 000124 000022 aa 000137 000103 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 070056 061064 000030 aa 040115 141162 000031 aa 143150 040061 000032 aa 071070 071040 000033 aa 040040 040040 000034 aa 123143 150162 000035 aa 157164 150056 000036 aa 123171 163115 000037 aa 141151 156164 000040 aa 056155 040040 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 154151 163164 000045 aa 040163 171155 000046 aa 142157 154163 000047 aa 040040 040040 000050 aa 040040 040040 000051 aa 040040 040040 000052 aa 040040 040040 000053 aa 040040 040040 000054 aa 040040 040040 000055 aa 040040 040040 000056 aa 040040 040040 000057 aa 040040 040040 000060 aa 040040 040040 000061 aa 040040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000001 000066 aa 000072 000043 000067 aa 310157 125616 000070 aa 000000 131036 000071 aa 702465 200000 000072 aa 076165 144144 >udd>sm>ds>w>ml>gcos_sys_xlate_.alm 000073 aa 076163 155076 000074 aa 144163 076167 000075 aa 076155 154076 000076 aa 147143 157163 000077 aa 137163 171163 000100 aa 137170 154141 000101 aa 164145 137056 000102 aa 141154 155040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number 162 endrec gcos_sys_xlate_: 102, 128, 143, 152, 157, 174, 187, 194, 217, 235, 240. 153 feeds gcos_sys_xlate_: 197, 208. 145 feed_countdown gcos_sys_xlate_: 165, 196. 140 feed_vfu gcos_sys_xlate_: 166, 189. 165 fini gcos_sys_xlate_: 89, 93, 221. 160 fin_feeds gcos_sys_xlate_: 204, 213. 4 gcos_sys_xlate_ gcos_sys_xlate_: 64, 74. 0 gcos_sys_xlate_lc_ gcos_sys_xlate_: 65, 67. 7 get_args gcos_sys_xlate_: 70, 78. 110 ignore gcos_sys_xlate_: 137, 154. 125 insert_spaces gcos_sys_xlate_: 167, 176. 227 lc_table gcos_sys_xlate_: 69, 252. 41 lp gcos_sys_xlate_: 110, 151, 156, 173, 186. 62 lp1 gcos_sys_xlate_: 116, 130. 121 no_action gcos_sys_xlate_: 170. 114 space gcos_sys_xlate_: 141, 163. 51 tally gcos_sys_xlate_: 110, 114, 115, 117, 124, 125, 126, 261. 247 tctable gcos_sys_xlate_: 113, 257. 50 temp gcos_sys_xlate_: 132, 134, 138, 145, 182, 183, 214, 215, 232, 233, 261. 207 uc_table gcos_sys_xlate_: 76, 247. 171 xlasc gcos_sys_xlate_: 104, 226. 17 xlrcd gcos_sys_xlate_: 88, 219. NO FATAL ERRORS ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved