cdc:nos2.source:opl.opl871:deck:tdutab
Deck TDUTAB
2 Modifications
Source
Seq # *Modification Id* Act ----------------------------+ 00001 M01S00001.tdutab +++|*NOSEQ 00002 M01S00002.tdutab +++|*WIDTH 95 00003 M01S00003.tdutab +++|MODULE tdutab; 00004 M01S00004.tdutab +++| 00005 M01S00005.tdutab +++|?? SET ( CHKALL := ON ), RIGHT := 110 ?? 00006 M01S00006.tdutab +++| 00007 M01S00007.tdutab +++|{ Module : TDUTAB } 00008 M01S00001.281l803 +++|{ Copyright Control Data Systems Inc. 1992. } 00009 M01S00008.tdutab +++|{ Written: 1/84 by R. Lindsey } 00010 M01S00009.tdutab +++|{ Version: Cyber 170/180, version 1 } 00011 M01S00010.tdutab +++|{ Purpose: This module encapsulates the internal tables of the TDU program. } 00012 M01S00011.tdutab +++|{ It provides functions to add elements to the tables, to optimize } 00013 M01S00012.tdutab +++|{ them, and to return the elements for output. } 00014 M01S00013.tdutab +++|{ This module has no I/O. } 00015 M01S00014.tdutab +++| 00016 M01S00015.tdutab +++| ?? PUSH ( LIST := OFF ) ?? {use this line to suppress commdeck list} 00017 M01S00016.tdutab +++|{ ?? PUSH ( LIST := ON ) ?? {use this line to list common decks } 00018 M01S00017.tdutab +++|?? SKIP := 4 ?? 00019 M01S00018.tdutab +++| 00020 M01S00019.tdutab +++|?? NEWTITLE := 'ZTDTTAB' ?? 00021 M01S00020.tdutab +++|{ **************************** } 00022 M01S00021.tdutab +++|{ common deck ZTDTTAB follows: } 00023 M01S00022.tdutab +++|*CALL ZTDTTAB 00024 M01S00023.tdutab +++| 00025 M01S00024.tdutab +++|?? OLDTITLE ?? 00026 M01S00025.tdutab +++| 00027 M01S00026.tdutab +++|{ ************************** } 00028 M01S00027.tdutab +++|{ tdu error handler follows: } 00029 M01S00028.tdutab +++|*CALL ZTDPERR 00030 M01S00029.tdutab +++|*CALL ZTDCCON 00031 M01S00030.tdutab +++| 00032 M01S00031.tdutab +++|{ ************************* } 00033 M01S00032.tdutab +++|{ tdu verb-table constants: } 00034 M01S00033.tdutab +++|*CALL ZTDCVRB 00035 M01S00034.tdutab +++| 00036 M01S00035.tdutab +++|?? EJECT ?? 00037 M01S00036.tdutab +++|?? POP ?? 00038 M01S00037.tdutab +++| 00039 M01S00038.tdutab +++| VAR 00040 M01S00039.tdutab +++| parm_record: parameter_record, { all parameters stored here } 00041 M01S00040.tdutab +++| input_list: ^input_node := NIL, { head of input list } 00042 M01S00041.tdutab +++| input_offset: INTEGER, 00043 M01S00042.tdutab +++| output_table: ARRAY [ 0 .. output_last_ordinal ] OF string_node, 00044 M01S00043.tdutab +++| key_name_table: ARRAY [ 0 .. key_name_last_ordinal ] OF string_node, 00045 M01S00044.tdutab +++| init_table: ARRAY [ 0 .. init_last_ordinal ] OF string_node, 00046 M01S00045.tdutab +++| appstr_table, 00047 M01S00046.tdutab +++| appstr_next_node_dumped, 00048 M01S00047.tdutab +++| appstr_latest_new_node: ^appstr_node, 00049 M01S00048.tdutab +++| output_total_characters, 00050 M01S00049.tdutab +++| key_name_total_characters, 00051 M01S00050.tdutab +++| init_total_characters, 00052 M01S00051.tdutab +++| appstr_total_sequences, 00053 M01S00052.tdutab +++| appstr_total_characters: INTEGER, 00054 M01S00053.tdutab +++| status: ost$status; 00055 M01S00054.tdutab +++| 00056 M01S00055.tdutab +++| ?? NEWTITLE := 'store_ord_char_node' ?? 00057 M01S00056.tdutab +++| ?? EJECT ?? 00058 M01S00057.tdutab +++| 00059 M01S00058.tdutab +++| PROCEDURE store_ord_char_node (ordinal: ordinal_type; 00060 M01S00059.tdutab +++| sequence_length: INTEGER; 00061 M01S00060.tdutab +++| char_sequence: STRING(*); 00062 M01S00061.tdutab +++| VAR table: ARRAY [ * ] OF string_node; 00063 M01S00062.tdutab +++| VAR total_characters: INTEGER; 00064 M01S00063.tdutab +++| VAR error_return: error_type); 00065 M01S00064.tdutab +++| 00066 M01S00065.tdutab +++| error_return := no_error; 00067 M01S00066.tdutab +++| IF table[ordinal].length > 0 THEN 00068 M01S00067.tdutab +++| error_return := duplicate_error 00069 M01S00068.tdutab +++| ELSEIF sequence_length > 0 THEN 00070 M01S00069.tdutab +++| ALLOCATE table[ordinal].chars : [ sequence_length ]; 00071 M01S00070.tdutab +++| IF table[ordinal].chars = NIL THEN 00072 M01S00071.tdutab +++| error_return := no_room_error; 00073 M01S00072.tdutab +++| ELSE 00074 M01S00073.tdutab +++| table[ordinal].length := sequence_length; 00075 M01S00074.tdutab +++| table[ordinal].chars^ := char_sequence(1,sequence_length); 00076 M01S00075.tdutab +++| total_characters := total_characters + sequence_length 00077 M01S00076.tdutab +++| IFEND 00078 M01S00077.tdutab +++| IFEND 00079 M01S00078.tdutab +++| PROCEND store_ord_char_node; 00080 M01S00079.tdutab +++| ?? OLDTITLE ?? 00081 M01S00001.tdutab1 +++| 00082 M01S00002.tdutab1 +++| ?? NEWTITLE := 'concatenate_sequences' ?? 00083 M01S00003.tdutab1 +++| ?? EJECT ?? 00084 M01S00004.tdutab1 +++| 00085 M01S00005.tdutab1 +++| PROCEDURE concatenate_sequences (new_seq: STRING(*); 00086 M01S00006.tdutab1 +++| new_seq_length: INTEGER; 00087 M01S00007.tdutab1 +++| VAR table_node: string_node; 00088 M01S00008.tdutab1 +++| VAR total_characters: INTEGER; 00089 M01S00009.tdutab1 +++| VAR error_return: error_type); 00090 M01S00010.tdutab1 +++| VAR 00091 M01S00011.tdutab1 +++| allocation_len, 00092 M01S00012.tdutab1 +++| stringrep_len: INTEGER, 00093 M01S00013.tdutab1 +++| old_node: string_node; 00094 M01S00014.tdutab1 +++| 00095 M01S00015.tdutab1 +++| error_return := no_error; 00096 M01S00016.tdutab1 +++| old_node := table_node; 00097 M01S00017.tdutab1 +++| IF old_node.length = 0 THEN 00098 M01S00018.tdutab1 +++| allocation_len := new_seq_length 00099 M01S00019.tdutab1 +++| ELSE 00100 M01S00020.tdutab1 +++| allocation_len := old_node.length + new_seq_length 00101 M01S00021.tdutab1 +++| IFEND; 00102 M01S00022.tdutab1 +++| table_node.length := allocation_len; 00103 M01S00023.tdutab1 +++| IF allocation_len > 0 THEN { can't allocate 0 } 00104 M01S00024.tdutab1 +++| ALLOCATE table_node.chars : [ allocation_len ]; 00105 M01S00025.tdutab1 +++| IF table_node.chars = NIL THEN 00106 M01S00026.tdutab1 +++| error_return := no_room_error; 00107 M01S00027.tdutab1 +++| ELSE 00108 M01S00028.tdutab1 +++| IF old_node.length = 0 THEN 00109 M01S00029.tdutab1 +++| table_node.chars^ := new_seq(1,new_seq_length) 00110 M01S00030.tdutab1 +++| ELSE 00111 M01S00031.tdutab1 +++| STRINGREP(table_node.chars^, stringrep_len, 00112 M01S00032.tdutab1 +++| old_node.chars^(1,old_node.length), 00113 M01S00033.tdutab1 +++| new_seq(1,new_seq_length)); 00114 M01S00034.tdutab1 +++| FREE old_node.chars 00115 M01S00035.tdutab1 +++| IFEND; 00116 M01S00036.tdutab1 +++| total_characters := total_characters + new_seq_length 00117 M01S00037.tdutab1 +++| IFEND 00118 M01S00038.tdutab1 +++| IFEND 00119 M01S00039.tdutab1 +++| PROCEND concatenate_sequences; 00120 M01S00040.tdutab1 +++| ?? OLDTITLE ?? 00121 M01S00080.tdutab +++| 00122 M01S00081.tdutab +++| ?? NEWTITLE := 'initialize_tables' ?? 00123 M01S00082.tdutab +++| ?? EJECT ?? 00124 M01S00083.tdutab +++| 00125 M01S00084.tdutab +++| PROCEDURE [XDCL] initialize_tables; 00126 M01S00085.tdutab +++| VAR 00127 M01S00086.tdutab +++| table_ndx: INTEGER; 00128 M01S00087.tdutab +++| 00129 M01S00088.tdutab +++| ALLOCATE input_list : [ fail ]; { ignore no-room error, caught later } 00130 M01S00089.tdutab +++| IF input_list <> NIL THEN 00131 M01S00090.tdutab +++| input_list^.next_node := NIL; 00132 M01S00091.tdutab +++| input_list^.offset := 0; 00133 M01S00092.tdutab +++| input_list^.node_visited := FALSE 00134 M01S00093.tdutab +++| IFEND; 00135 M01S00094.tdutab +++| FOR table_ndx := 1 TO output_last_ordinal DO 00136 M01S00095.tdutab +++| output_table[table_ndx].length := 0; 00137 M01S00096.tdutab +++| output_table[table_ndx].chars := NIL 00138 M01S00097.tdutab +++| FOREND; 00139 M01S00098.tdutab +++| output_total_characters := 0; 00140 M01S00099.tdutab +++| FOR table_ndx := 1 TO key_name_last_ordinal DO 00141 M01S00100.tdutab +++| key_name_table[table_ndx].length := 0; 00142 M01S00101.tdutab +++| key_name_table[table_ndx].chars := NIL 00143 M01S00102.tdutab +++| FOREND; 00144 M01S00103.tdutab +++| key_name_total_characters := 0; 00145 M01S00104.tdutab +++| FOR table_ndx := 1 TO init_last_ordinal DO 00146 M01S00105.tdutab +++| init_table[table_ndx].length := 0; 00147 M01S00106.tdutab +++| init_table[table_ndx].chars := NIL 00148 M01S00107.tdutab +++| FOREND; 00149 M01S00108.tdutab +++| init_total_characters := 0; 00150 M01S00109.tdutab +++| appstr_table := NIL; 00151 M01S00110.tdutab +++| appstr_latest_new_node := NIL; 00152 M01S00111.tdutab +++| appstr_next_node_dumped := NIL; 00153 M01S00112.tdutab +++| appstr_total_sequences := 0; 00154 M01S00113.tdutab +++| appstr_total_characters := 0 00155 M01S00114.tdutab +++| PROCEND initialize_tables; 00156 M01S00115.tdutab +++| ?? OLDTITLE ?? 00157 M01S00116.tdutab +++| 00158 M01S00117.tdutab +++| ?? NEWTITLE := 'store_parameters' ?? 00159 M01S00118.tdutab +++| ?? EJECT ?? 00160 M01S00119.tdutab +++| 00161 M01S00120.tdutab +++| PROCEDURE [XDCL] store_parameters (parm: parameter_record); 00162 M01S00121.tdutab +++| parm_record := parm; { save it in my local space } 00163 M01S00122.tdutab +++| PROCEND store_parameters; 00164 M01S00123.tdutab +++| ?? OLDTITLE ?? 00165 M01S00124.tdutab +++| 00166 M01S00125.tdutab +++| ?? NEWTITLE := 'dump_parameters' ?? 00167 M01S00126.tdutab +++| ?? SKIP := 4 ?? 00168 M01S00127.tdutab +++| 00169 M01S00128.tdutab +++| PROCEDURE [XDCL] dump_parameters (VAR parm: parameter_record); 00170 M01S00129.tdutab +++| parm := parm_record; { give caller my copy } 00171 M01S00130.tdutab +++| PROCEND dump_parameters; 00172 M01S00131.tdutab +++| ?? OLDTITLE ?? 00173 M01S00132.tdutab +++| 00174 M01S00133.tdutab +++| ?? NEWTITLE := 'store_output_node' ?? 00175 M01S00134.tdutab +++| ?? EJECT ?? 00176 M01S00135.tdutab +++| 00177 M01S00136.tdutab +++| PROCEDURE [XDCL] store_output_node (ordinal: ordinal_type; 00178 M01S00137.tdutab +++| sequence_length: INTEGER; 00179 M01S00138.tdutab +++| char_sequence: STRING(*); 00180 M01S00139.tdutab +++| VAR error_return: error_type); 00181 M01S00140.tdutab +++| 00182 M01S00141.tdutab +++| IF ( ordinal < 0 ) OR 00183 M01S00142.tdutab +++| ( ordinal > output_last_ordinal ) THEN 00184 M01S00143.tdutab +++| error_return := no_room_error 00185 M01S00144.tdutab +++| ELSE
Line S00145 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00186 M02S00145.tdutab1 ---| store_ord_char_node(ordinal, sequence_length, char_sequence,
Line S00146 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00187 M02S00146.tdutab1 ---| output_table, output_total_characters, error_return) 00188 M01S00041.tdutab1 +++| concatenate_sequences(char_sequence, sequence_length, 00189 M01S00042.tdutab1 +++| output_table[ordinal], output_total_characters, 00190 M01S00043.tdutab1 +++| error_return) 00191 M01S00147.tdutab +++| IFEND 00192 M01S00148.tdutab +++| PROCEND store_output_node; 00193 M01S00149.tdutab +++| ?? OLDTITLE ?? 00194 M01S00150.tdutab +++| 00195 M01S00151.tdutab +++| ?? NEWTITLE := 'dump_output_node' ?? 00196 M01S00152.tdutab +++| ?? SKIP := 4 ?? 00197 M01S00153.tdutab +++| 00198 M01S00154.tdutab +++| PROCEDURE [XDCL] dump_output_node (ordinal: ordinal_type; 00199 M01S00155.tdutab +++| VAR length: INTEGER; 00200 M01S00156.tdutab +++| VAR chars: ^STRING(*); 00201 M01S00157.tdutab +++| VAR total_ordinals: INTEGER; 00202 M01S00158.tdutab +++| VAR total_characters: INTEGER; 00203 M01S00159.tdutab +++| VAR node_returned: BOOLEAN); 00204 M01S00160.tdutab +++| 00205 M01S00161.tdutab +++| node_returned := FALSE; 00206 M01S00162.tdutab +++| IF ( ordinal >= 0 ) AND 00207 M01S00163.tdutab +++| ( ordinal <= output_last_ordinal ) THEN 00208 M01S00164.tdutab +++| node_returned := TRUE; 00209 M01S00165.tdutab +++| total_ordinals := output_last_ordinal; 00210 M01S00166.tdutab +++| total_characters := output_total_characters; 00211 M01S00167.tdutab +++| length := output_table[ordinal].length; 00212 M01S00168.tdutab +++| chars := output_table[ordinal].chars 00213 M01S00169.tdutab +++| IFEND 00214 M01S00170.tdutab +++| PROCEND dump_output_node; 00215 M01S00171.tdutab +++| ?? OLDTITLE ?? 00216 M01S00172.tdutab +++| 00217 M01S00173.tdutab +++| ?? NEWTITLE := 'store_key_name_node' ?? 00218 M01S00174.tdutab +++| ?? EJECT ?? 00219 M01S00175.tdutab +++| 00220 M01S00176.tdutab +++| PROCEDURE [XDCL] store_key_name_node (ordinal: ordinal_type; 00221 M01S00177.tdutab +++| sequence_length: INTEGER; 00222 M01S00178.tdutab +++| char_sequence: STRING(*); 00223 M01S00179.tdutab +++| VAR error_return: error_type); 00224 M01S00180.tdutab +++| 00225 M01S00181.tdutab +++| IF ( ordinal < 0 ) OR 00226 M01S00182.tdutab +++| ( ordinal > key_name_last_ordinal ) THEN 00227 M01S00183.tdutab +++| error_return := no_room_error 00228 M01S00184.tdutab +++| ELSE 00229 M01S00185.tdutab +++| store_ord_char_node(ordinal, sequence_length, char_sequence, 00230 M01S00186.tdutab +++| key_name_table, key_name_total_characters, error_return) 00231 M01S00187.tdutab +++| IFEND 00232 M01S00188.tdutab +++| PROCEND store_key_name_node; 00233 M01S00189.tdutab +++| ?? OLDTITLE ?? 00234 M01S00190.tdutab +++| 00235 M01S00191.tdutab +++| ?? NEWTITLE := 'dump_key_name_node' ?? 00236 M01S00192.tdutab +++| ?? SKIP := 4 ?? 00237 M01S00193.tdutab +++| 00238 M01S00194.tdutab +++| PROCEDURE [XDCL] dump_key_name_node(ordinal: ordinal_type; 00239 M01S00195.tdutab +++| VAR length: INTEGER; 00240 M01S00196.tdutab +++| VAR chars: ^STRING(*); 00241 M01S00197.tdutab +++| VAR total_ordinals: INTEGER; 00242 M01S00198.tdutab +++| VAR total_characters: INTEGER; 00243 M01S00199.tdutab +++| VAR node_returned: BOOLEAN); 00244 M01S00200.tdutab +++| 00245 M01S00201.tdutab +++| node_returned := FALSE; 00246 M01S00202.tdutab +++| IF ( ordinal >= 0 ) AND 00247 M01S00203.tdutab +++| ( ordinal <= key_name_last_ordinal ) THEN 00248 M01S00204.tdutab +++| node_returned := TRUE; 00249 M01S00205.tdutab +++| total_ordinals := key_name_last_ordinal; 00250 M01S00206.tdutab +++| total_characters := key_name_total_characters; 00251 M01S00207.tdutab +++| length := key_name_table[ordinal].length; 00252 M01S00208.tdutab +++| chars := key_name_table[ordinal].chars 00253 M01S00209.tdutab +++| IFEND 00254 M01S00210.tdutab +++| PROCEND dump_key_name_node; 00255 M01S00211.tdutab +++| ?? OLDTITLE ?? 00256 M01S00212.tdutab +++| 00257 M01S00213.tdutab +++| ?? NEWTITLE := 'store_reset_sequence' ?? 00258 M01S00214.tdutab +++| ?? EJECT ?? 00259 M01S00215.tdutab +++| 00260 M01S00216.tdutab +++| PROCEDURE [XDCL] store_reset_sequence (ordinal: ordinal_type; 00261 M01S00217.tdutab +++| char_seq_length: INTEGER; 00262 M01S00218.tdutab +++| char_seq: STRING(*); 00263 M01S00219.tdutab +++| VAR error_return: error_type); 00264 M01S00220.tdutab +++|
Line S00221 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00265 M02S00221.tdutab1 ---| ?? NEWTITLE := 'concatenate_init_sequence' ??
Line S00222 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00266 M02S00222.tdutab1 ---| ?? EJECT ??
Line S00223 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00267 M02S00223.tdutab1 ---|
Line S00224 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00268 M02S00224.tdutab1 ---| PROCEDURE concatenate_init_sequence (new_seq: STRING(*);
Line S00225 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00269 M02S00225.tdutab1 ---| new_seq_length: INTEGER;
Line S00226 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00270 M02S00226.tdutab1 ---| VAR init_node: string_node;
Line S00227 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00271 M02S00227.tdutab1 ---| VAR error_return: error_type);
Line S00228 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00272 M02S00228.tdutab1 ---| VAR
Line S00229 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00273 M02S00229.tdutab1 ---| allocation_len,
Line S00230 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00274 M02S00230.tdutab1 ---| stringrep_len: INTEGER,
Line S00231 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00275 M02S00231.tdutab1 ---| old_node: string_node;
Line S00232 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00276 M02S00232.tdutab1 ---|
Line S00233 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00277 M02S00233.tdutab1 ---| error_return := no_error;
Line S00234 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00278 M02S00234.tdutab1 ---| old_node := init_node;
Line S00235 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00279 M02S00235.tdutab1 ---| IF old_node.length = 0 THEN
Line S00236 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00280 M02S00236.tdutab1 ---| allocation_len := new_seq_length
Line S00237 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00281 M02S00237.tdutab1 ---| ELSE
Line S00238 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00282 M02S00238.tdutab1 ---| allocation_len := old_node.length + new_seq_length
Line S00239 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00283 M02S00239.tdutab1 ---| IFEND;
Line S00240 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00284 M02S00240.tdutab1 ---| init_node.length := allocation_len;
Line S00241 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00285 M02S00241.tdutab1 ---| IF allocation_len > 0 THEN { can't allocate 0 }
Line S00242 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00286 M02S00242.tdutab1 ---| ALLOCATE init_node.chars : [ allocation_len ];
Line S00243 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00287 M02S00243.tdutab1 ---| IF init_node.chars = NIL THEN
Line S00244 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00288 M02S00244.tdutab1 ---| error_return := no_room_error;
Line S00245 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00289 M02S00245.tdutab1 ---| ELSE
Line S00246 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00290 M02S00246.tdutab1 ---| IF old_node.length = 0 THEN
Line S00247 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00291 M02S00247.tdutab1 ---| init_node.chars^ := new_seq(1,new_seq_length)
Line S00248 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00292 M02S00248.tdutab1 ---| ELSE
Line S00249 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00293 M02S00249.tdutab1 ---| STRINGREP(init_node.chars^, stringrep_len,
Line S00250 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00294 M02S00250.tdutab1 ---| old_node.chars^(1,old_node.length),
Line S00251 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00295 M02S00251.tdutab1 ---| new_seq(1,new_seq_length));
Line S00252 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00296 M02S00252.tdutab1 ---| FREE old_node.chars
Line S00253 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00297 M02S00253.tdutab1 ---| IFEND;
Line S00254 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00298 M02S00254.tdutab1 ---| init_total_characters := init_total_characters + new_seq_length
Line S00255 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00299 M02S00255.tdutab1 ---| IFEND
Line S00256 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00300 M02S00256.tdutab1 ---| IFEND
Line S00257 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00301 M02S00257.tdutab1 ---| PROCEND concatenate_init_sequence;
Line S00258 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00302 M02S00258.tdutab1 ---| ?? OLDTITLE ??
Line S00259 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00303 M02S00259.tdutab1 ---| ?? SKIP := 4 ??
Line S00260 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00304 M02S00260.tdutab1 ---| 00305 M01S00261.tdutab +++| IF ( ordinal < 0 ) OR 00306 M01S00262.tdutab +++| ( ordinal > init_last_ordinal ) THEN 00307 M01S00263.tdutab +++| error_return := no_room_error 00308 M01S00264.tdutab +++| ELSE
Line S00265 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00309 M02S00265.tdutab1 ---| concatenate_init_sequence(char_seq, char_seq_length,
Line S00266 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 00310 M02S00266.tdutab1 ---| init_table[ordinal], error_return); 00311 M01S00044.tdutab1 +++| concatenate_sequences(char_seq, char_seq_length, 00312 M01S00045.tdutab1 +++| init_table[ordinal], init_total_characters, 00313 M01S00046.tdutab1 +++| error_return); 00314 M01S00267.tdutab +++| IFEND 00315 M01S00268.tdutab +++| PROCEND store_reset_sequence; 00316 M01S00269.tdutab +++| ?? OLDTITLE ?? 00317 M01S00270.tdutab +++| 00318 M01S00271.tdutab +++| ?? NEWTITLE := 'dump_reset_sequence' ?? 00319 M01S00272.tdutab +++| ?? SKIP := 4 ?? 00320 M01S00273.tdutab +++| 00321 M01S00274.tdutab +++| PROCEDURE [XDCL] dump_reset_sequence(ordinal: ordinal_type; 00322 M01S00275.tdutab +++| VAR length: INTEGER; 00323 M01S00276.tdutab +++| VAR chars: ^STRING(*); 00324 M01S00277.tdutab +++| VAR total_ordinals: INTEGER; 00325 M01S00278.tdutab +++| VAR total_characters: INTEGER; 00326 M01S00279.tdutab +++| VAR node_returned: BOOLEAN); 00327 M01S00280.tdutab +++| 00328 M01S00281.tdutab +++| node_returned := FALSE; 00329 M01S00282.tdutab +++| IF ( ordinal >= 0 ) AND 00330 M01S00283.tdutab +++| ( ordinal <= init_last_ordinal ) THEN 00331 M01S00284.tdutab +++| node_returned := TRUE; 00332 M01S00285.tdutab +++| total_ordinals := init_last_ordinal; 00333 M01S00286.tdutab +++| total_characters := init_total_characters; 00334 M01S00287.tdutab +++| length := init_table[ordinal].length; 00335 M01S00288.tdutab +++| chars := init_table[ordinal].chars 00336 M01S00289.tdutab +++| IFEND 00337 M01S00290.tdutab +++| PROCEND dump_reset_sequence; 00338 M01S00291.tdutab +++| ?? OLDTITLE ?? 00339 M01S00292.tdutab +++| 00340 M01S00293.tdutab +++| ?? NEWTITLE := 'store_appstr_node' ?? 00341 M01S00294.tdutab +++| ?? EJECT ?? 00342 M01S00295.tdutab +++| 00343 M01S00296.tdutab +++| PROCEDURE [XDCL] store_appstr_node (name: STRING(*); 00344 M01S00297.tdutab +++| sequence_length: INTEGER; 00345 M01S00298.tdutab +++| char_sequence: STRING(*); 00346 M01S00299.tdutab +++| VAR error_return: error_type); 00347 M01S00300.tdutab +++| VAR 00348 M01S00301.tdutab +++| new_node: ^appstr_node; 00349 M01S00302.tdutab +++| 00350 M01S00303.tdutab +++| error_return := no_error; 00351 M01S00304.tdutab +++| ALLOCATE new_node; 00352 M01S00305.tdutab +++| IF new_node = NIL THEN 00353 M01S00306.tdutab +++| error_return := no_room_error 00354 M01S00307.tdutab +++| ELSE 00355 M01S00308.tdutab +++| IF appstr_table = NIL THEN 00356 M01S00309.tdutab +++| appstr_table := new_node 00357 M01S00310.tdutab +++| ELSE 00358 M01S00311.tdutab +++| appstr_latest_new_node^.next_node := new_node 00359 M01S00312.tdutab +++| IFEND; 00360 M01S00313.tdutab +++| appstr_latest_new_node := new_node; 00361 M01S00314.tdutab +++| new_node^.next_node := NIL; 00362 M01S00315.tdutab +++| new_node^.name := name; 00363 M01S00316.tdutab +++| new_node^.value.length := sequence_length; 00364 M01S00317.tdutab +++| appstr_total_sequences := appstr_total_sequences + 1; 00365 M01S00318.tdutab +++| IF sequence_length > 0 THEN 00366 M01S00319.tdutab +++| ALLOCATE new_node^.value.chars : [ sequence_length ]; 00367 M01S00320.tdutab +++| IF new_node^.value.chars = NIL THEN 00368 M01S00321.tdutab +++| error_return := no_room_error 00369 M01S00322.tdutab +++| ELSE 00370 M01S00323.tdutab +++| new_node^.value.chars^ := char_sequence(1,sequence_length); 00371 M01S00324.tdutab +++| appstr_total_characters := 00372 M01S00325.tdutab +++| appstr_total_characters + sequence_length 00373 M01S00326.tdutab +++| IFEND 00374 M01S00327.tdutab +++| IFEND 00375 M01S00328.tdutab +++| IFEND 00376 M01S00329.tdutab +++| PROCEND store_appstr_node; 00377 M01S00330.tdutab +++| ?? OLDTITLE ?? 00378 M01S00331.tdutab +++| 00379 M01S00332.tdutab +++| ?? NEWTITLE := 'reset_appstr_table' ?? 00380 M01S00333.tdutab +++| ?? SKIP := 4 ?? 00381 M01S00334.tdutab +++| 00382 M01S00335.tdutab +++| PROCEDURE [XDCL] reset_appstr_table; 00383 M01S00336.tdutab +++| appstr_next_node_dumped := appstr_table 00384 M01S00337.tdutab +++| PROCEND reset_appstr_table; 00385 M01S00338.tdutab +++| ?? OLDTITLE ?? 00386 M01S00339.tdutab +++| 00387 M01S00340.tdutab +++| ?? NEWTITLE := 'dump_appstr_node' ?? 00388 M01S00341.tdutab +++| ?? EJECT ?? 00389 M01S00342.tdutab +++| 00390 M01S00343.tdutab +++| PROCEDURE [XDCL] dump_appstr_node (VAR name: STRING(*); 00391 M01S00344.tdutab +++| VAR length: INTEGER; 00392 M01S00345.tdutab +++| VAR chars: ^STRING(*); 00393 M01S00346.tdutab +++| VAR total_sequences: INTEGER; 00394 M01S00347.tdutab +++| VAR total_characters: INTEGER; 00395 M01S00348.tdutab +++| VAR node_returned: BOOLEAN); 00396 M01S00349.tdutab +++| 00397 M01S00350.tdutab +++| IF ( appstr_table = NIL ) OR 00398 M01S00351.tdutab +++| ( appstr_next_node_dumped = NIL ) THEN 00399 M01S00352.tdutab +++| node_returned := FALSE 00400 M01S00353.tdutab +++| ELSE 00401 M01S00354.tdutab +++| node_returned := TRUE; 00402 M01S00355.tdutab +++| name := appstr_next_node_dumped^.name; 00403 M01S00356.tdutab +++| length := appstr_next_node_dumped^.value.length; 00404 M01S00357.tdutab +++| chars := appstr_next_node_dumped^.value.chars; 00405 M01S00358.tdutab +++| appstr_next_node_dumped := appstr_next_node_dumped^.next_node; 00406 M01S00359.tdutab +++| total_sequences := appstr_total_sequences; 00407 M01S00360.tdutab +++| total_characters := appstr_total_characters 00408 M01S00361.tdutab +++| IFEND 00409 M01S00362.tdutab +++| PROCEND dump_appstr_node; 00410 M01S00363.tdutab +++| ?? OLDTITLE ?? 00411 M01S00364.tdutab +++| 00412 M01S00365.tdutab +++| ?? NEWTITLE := 'store_input_node' ?? 00413 M01S00366.tdutab +++| ?? EJECT ?? 00414 M01S00367.tdutab +++| 00415 M01S00368.tdutab +++| PROCEDURE [XDCL] store_input_node (ordinal: ordinal_type; 00416 M01S00369.tdutab +++| sequence_length: INTEGER; 00417 M01S00370.tdutab +++| char_sequence: STRING(*); 00418 M01S00371.tdutab +++| VAR error_return: error_type); 00419 M01S00372.tdutab +++| 00420 M01S00373.tdutab +++| { Input character recognition sequences are stored in a tree of linked } 00421 M01S00374.tdutab +++| { lists. Each character of a particular sequence occupies a node in } 00422 M01S00375.tdutab +++| { a different level of the tree. Thus, when matching a sequence in } 00423 M01S00376.tdutab +++| { the tree, one would start at the first level (pointed to by } 00424 M01S00377.tdutab +++| { input_list), and search the linked list which constitutes that level } 00425 M01S00378.tdutab +++| { (using search_level). If the character is found, the process repeats} 00426 M01S00379.tdutab +++| { with the next character in the sequence, and the search is of the } 00427 M01S00380.tdutab +++| { level pointed to by the node which was found. } 00428 M01S00381.tdutab +++| { Each level consists of a linked list of 'list' nodes, where each node } 00429 M01S00382.tdutab +++| { corresponds to a single-element list in the final output format. } 00430 M01S00383.tdutab +++| { These list nodes are later combined where possible into ranges and } 00431 M01S00384.tdutab +++| { single-action ranges by the optimize_tables procedure. } 00432 M01S00385.tdutab +++| { The last node in each level's linked list is always a 'fail' node. } 00433 M01S00386.tdutab +++| 00434 M01S00387.tdutab +++| VAR 00435 M01S00388.tdutab +++| new_node, 00436 M01S00389.tdutab +++| pred_node, { predecessor to current node } 00437 M01S00390.tdutab +++| succ_node, { successor to current node } 00438 M01S00391.tdutab +++| prev_level, { previous level which points to current} 00439 M01S00392.tdutab +++| curr_level: ^input_node, { start of the level to search } 00440 M01S00393.tdutab +++| node_found: BOOLEAN, 00441 M01S00394.tdutab +++| char_ndx: INTEGER; 00442 M01S00395.tdutab +++| 00443 M01S00396.tdutab +++| ?? NEWTITLE := 'search_level' ?? 00444 M01S00397.tdutab +++| ?? SKIP := 4 ?? 00445 M01S00398.tdutab +++| 00446 M01S00399.tdutab +++| PROCEDURE search_level (ch: CHAR; curr_level: ^input_node; 00447 M01S00400.tdutab +++| VAR pred_node: ^input_node; VAR succ_node: ^input_node; 00448 M01S00401.tdutab +++| VAR node_found: BOOLEAN); 00449 M01S00402.tdutab +++| { This procedure searches a particular level of the input char tree, } 00450 M01S00403.tdutab +++| { looking for a node which contains the given character. If it } 00451 M01S00404.tdutab +++| { doesn't find one, it returns pointers set up to insert a new node } 00452 M01S00405.tdutab +++| { for that character in its proper order. } 00453 M01S00406.tdutab +++| 00454 M01S00407.tdutab +++| node_found := FALSE; 00455 M01S00408.tdutab +++| pred_node := NIL; 00456 M01S00409.tdutab +++| succ_node := curr_level; 00457 M01S00410.tdutab +++| WHILE ( succ_node^.opcode <> fail ) AND 00458 M01S00411.tdutab +++| ( node_found = FALSE ) AND 00459 M01S00412.tdutab +++| ( succ_node^.list_pointer^[1].character <= ch ) DO 00460 M01S00413.tdutab +++| IF succ_node^.list_pointer^[1].character = ch THEN 00461 M01S00414.tdutab +++| node_found := TRUE 00462 M01S00415.tdutab +++| ELSE 00463 M01S00416.tdutab +++| pred_node := succ_node; 00464 M01S00417.tdutab +++| succ_node := pred_node^.next_node 00465 M01S00418.tdutab +++| IFEND 00466 M01S00419.tdutab +++| WHILEND 00467 M01S00420.tdutab +++| PROCEND search_level; 00468 M01S00421.tdutab +++| ?? OLDTITLE ?? 00469 M01S00422.tdutab +++| ?? EJECT ?? 00470 M01S00423.tdutab +++| 00471 M01S00424.tdutab +++| error_return := no_error; 00472 M01S00425.tdutab +++| curr_level := input_list; 00473 M01S00426.tdutab +++| FOR char_ndx := 1 TO sequence_length DO 00474 M01S00427.tdutab +++| search_level(char_sequence(char_ndx), curr_level, 00475 M01S00428.tdutab +++| pred_node, succ_node, node_found); 00476 M01S00429.tdutab +++| IF node_found THEN 00477 M01S00430.tdutab +++| IF succ_node^.list_pointer^[1].action.ordinal > no_ordinal THEN 00478 M01S00431.tdutab +++| IF char_ndx <> sequence_length THEN 00479 M01S00432.tdutab +++| error_return := superset_error; 00480 M01S00433.tdutab +++| RETURN 00481 M01S00434.tdutab +++| IFEND; 00482 M01S00435.tdutab +++| error_return := duplicate_input_error; 00483 M01S00436.tdutab +++| RETURN 00484 M01S00437.tdutab +++| IFEND; 00485 M01S00438.tdutab +++| IF char_ndx = sequence_length THEN 00486 M01S00439.tdutab +++| error_return := subset_error; 00487 M01S00440.tdutab +++| RETURN 00488 M01S00441.tdutab +++| IFEND; 00489 M01S00442.tdutab +++| prev_level := succ_node; 00490 M01S00443.tdutab +++| curr_level := { point to next level in sequence } 00491 M01S00444.tdutab +++| succ_node^.list_pointer^[1].action.next_level 00492 M01S00445.tdutab +++| ELSE { no match found, build a new node } 00493 M01S00446.tdutab +++| ALLOCATE new_node : [ list ]; { create a list node } 00494 M01S00447.tdutab +++| IF pred_node = NIL THEN { never got past first node } 00495 M01S00448.tdutab +++| IF char_ndx = 1 THEN { first level only } 00496 M01S00449.tdutab +++| new_node^.next_node := input_list; 00497 M01S00450.tdutab +++| input_list := new_node 00498 M01S00451.tdutab +++| ELSE { beyond first level } 00499 M01S00452.tdutab +++| new_node^.next_node := 00500 M01S00453.tdutab +++| prev_level^.list_pointer^[1].action.next_level; 00501 M01S00454.tdutab +++| prev_level^.list_pointer^[1].action.next_level := new_node 00502 M01S00455.tdutab +++| IFEND 00503 M01S00456.tdutab +++| ELSE { new node is in midst of existing level} 00504 M01S00457.tdutab +++| new_node^.next_node := pred_node^.next_node; 00505 M01S00458.tdutab +++| pred_node^.next_node := new_node; 00506 M01S00459.tdutab +++| IFEND; 00507 M01S00460.tdutab +++| new_node^.offset := 0; 00508 M01S00461.tdutab +++| new_node^.node_visited := FALSE; 00509 M01S00462.tdutab +++| new_node^.list_character_count := 1; { one element in list } 00510 M01S00463.tdutab +++| ALLOCATE new_node^.list_pointer : [ 1..1 ]; { the list itself } 00511 M01S00464.tdutab +++| new_node^.list_pointer^[1].character := char_sequence(char_ndx); 00512 M01S00465.tdutab +++| new_node^.list_pointer^[1].action.next_offset := 0; 00513 M01S00466.tdutab +++| IF char_ndx = sequence_length THEN 00514 M01S00467.tdutab +++| new_node^.list_pointer^[1].action.ordinal := ordinal; 00515 M01S00468.tdutab +++| new_node^.list_pointer^[1].action.next_level := NIL 00516 M01S00469.tdutab +++| ELSE 00517 M01S00470.tdutab +++| new_node^.list_pointer^[1].action.ordinal := no_ordinal; 00518 M01S00471.tdutab +++| ALLOCATE 00519 M01S00472.tdutab +++| new_node^.list_pointer^[1].action.next_level : [ fail ]; 00520 M01S00473.tdutab +++| new_node^.list_pointer^[1].action.next_level^.next_node := NIL; 00521 M01S00474.tdutab +++| new_node^.list_pointer^[1].action.next_level^.offset := 0; 00522 M01S00475.tdutab +++| new_node^.list_pointer^[1].action.next_level^. 00523 M01S00476.tdutab +++| node_visited := FALSE; 00524 M01S00477.tdutab +++| prev_level := new_node; 00525 M01S00478.tdutab +++| curr_level := 00526 M01S00479.tdutab +++| new_node^.list_pointer^[1].action.next_level 00527 M01S00480.tdutab +++| IFEND 00528 M01S00481.tdutab +++| IFEND 00529 M01S00482.tdutab +++| FOREND 00530 M01S00483.tdutab +++| PROCEND store_input_node; 00531 M01S00484.tdutab +++| ?? OLDTITLE ?? 00532 M01S00485.tdutab +++| 00533 M01S00486.tdutab +++| ?? NEWTITLE := 'dump_input_node' ?? 00534 M01S00487.tdutab +++| ?? SKIP := 4 ?? 00535 M01S00488.tdutab +++| 00536 M01S00489.tdutab +++| PROCEDURE [XDCL] dump_input_node ( 00537 M01S00490.tdutab +++| before_procedure: ^PROCEDURE(in_nd: ^input_node) ); 00538 M01S00491.tdutab +++| 00539 M01S00492.tdutab +++| traverse_input_tree(input_list, before_procedure, NIL) 00540 M01S00493.tdutab +++| PROCEND dump_input_node; 00541 M01S00494.tdutab +++| ?? OLDTITLE ?? 00542 M01S00495.tdutab +++| 00543 M01S00496.tdutab +++| ?? NEWTITLE := 'reset_input_table' ?? 00544 M01S00497.tdutab +++| ?? SKIP := 4 ?? 00545 M01S00498.tdutab +++| 00546 M01S00499.tdutab +++| PROCEDURE [XDCL] reset_input_table (VAR character_count: INTEGER); 00547 M01S00500.tdutab +++| 00548 M01S00501.tdutab +++| PROCEDURE reset_node_flags(in_node: ^input_node); 00549 M01S00502.tdutab +++| in_node^.node_visited := FALSE; 00550 M01S00503.tdutab +++| calculate_input_offsets(in_node) 00551 M01S00504.tdutab +++| PROCEND reset_node_flags; 00552 M01S00505.tdutab +++| 00553 M01S00506.tdutab +++| input_offset := 0; 00554 M01S00507.tdutab +++| dump_input_node(^reset_node_flags); 00555 M01S00508.tdutab +++| character_count := input_offset 00556 M01S00509.tdutab +++| PROCEND reset_input_table; 00557 M01S00510.tdutab +++| ?? OLDTITLE ?? 00558 M01S00511.tdutab +++| 00559 M01S00512.tdutab +++| ?? NEWTITLE := 'traverse_input_tree' ?? 00560 M01S00513.tdutab +++| ?? EJECT ?? 00561 M01S00514.tdutab +++| 00562 M01S00515.tdutab +++| PROCEDURE traverse_input_tree ( { recursively process tree, calling proc} 00563 M01S00516.tdutab +++| in_node: ^input_node; 00564 M01S00517.tdutab +++| before_procedure: ^PROCEDURE(in_nd: ^input_node); 00565 M01S00518.tdutab +++| after_procedure: ^PROCEDURE(in_nd: ^input_node) ); 00566 M01S00519.tdutab +++| 00567 M01S00520.tdutab +++| VAR 00568 M01S00521.tdutab +++| action_ndx: INTEGER; 00569 M01S00522.tdutab +++| 00570 M01S00523.tdutab +++| IF in_node <> NIL THEN 00571 M01S00524.tdutab +++| IF before_procedure <> NIL THEN 00572 M01S00525.tdutab +++| before_procedure^(in_node) { do whatever my caller requests } 00573 M01S00526.tdutab +++| IFEND; 00574 M01S00527.tdutab +++| CASE in_node^.opcode OF 00575 M01S00528.tdutab +++| = fail = 00576 M01S00529.tdutab +++| ; 00577 M01S00530.tdutab +++| = list = 00578 M01S00531.tdutab +++| traverse_input_tree(in_node^.next_node, { same level first } 00579 M01S00532.tdutab +++| before_procedure, after_procedure); 00580 M01S00533.tdutab +++| FOR action_ndx := 1 TO in_node^.list_character_count DO 00581 M01S00534.tdutab +++| traverse_input_tree( { now the next level } 00582 M01S00535.tdutab +++| in_node^.list_pointer^[action_ndx]. 00583 M01S00536.tdutab +++| action.next_level, 00584 M01S00537.tdutab +++| before_procedure, after_procedure) 00585 M01S00538.tdutab +++| FOREND; 00586 M01S00539.tdutab +++| = range = 00587 M01S00540.tdutab +++| traverse_input_tree(in_node^.next_node, 00588 M01S00541.tdutab +++| before_procedure, after_procedure); 00589 M01S00542.tdutab +++| FOR action_ndx := ORD(in_node^.range_lower_bound) TO 00590 M01S00543.tdutab +++| ORD(in_node^.range_upper_bound) DO 00591 M01S00544.tdutab +++| traverse_input_tree( 00592 M01S00545.tdutab +++| in_node^.range_pointer^[action_ndx].next_level, 00593 M01S00546.tdutab +++| before_procedure, after_procedure) 00594 M01S00547.tdutab +++| FOREND; 00595 M01S00548.tdutab +++| = single_action_range = 00596 M01S00549.tdutab +++| traverse_input_tree(in_node^.next_node, 00597 M01S00550.tdutab +++| before_procedure, after_procedure); 00598 M01S00551.tdutab +++| traverse_input_tree( 00599 M01S00552.tdutab +++| in_node^.sar_action.next_level, 00600 M01S00553.tdutab +++| before_procedure, after_procedure); 00601 M01S00554.tdutab +++| CASEND; 00602 M01S00555.tdutab +++| IF after_procedure <> NIL THEN 00603 M01S00556.tdutab +++| after_procedure^(in_node) { do whatever desired after traversal } 00604 M01S00557.tdutab +++| IFEND 00605 M01S00558.tdutab +++| IFEND 00606 M01S00559.tdutab +++| PROCEND traverse_input_tree; 00607 M01S00560.tdutab +++| ?? OLDTITLE ?? 00608 M01S00561.tdutab +++| 00609 M01S00562.tdutab +++| ?? NEWTITLE := 'calculate_input_offsets' ?? 00610 M01S00563.tdutab +++| ?? EJECT ?? 00611 M01S00564.tdutab +++| 00612 M01S00565.tdutab +++| PROCEDURE calculate_input_offsets (in_node: ^input_node); 00613 M01S00566.tdutab +++| 00614 M01S00567.tdutab +++| in_node^.offset := input_offset; 00615 M01S00568.tdutab +++| CASE in_node^.opcode OF 00616 M01S00569.tdutab +++| = fail = 00617 M01S00570.tdutab +++| input_offset := input_offset + 1; 00618 M01S00571.tdutab +++| = list = 00619 M01S00572.tdutab +++| input_offset := input_offset + 2 + 00620 M01S00573.tdutab +++| ( in_node^.list_character_count * 3 ); 00621 M01S00574.tdutab +++| = range = 00622 M01S00575.tdutab +++| input_offset := input_offset + 3 + ( 00623 M01S00576.tdutab +++| ( ( ORD(in_node^.range_upper_bound) - 00624 M01S00577.tdutab +++| ORD(in_node^.range_lower_bound) ) + 1 ) * 2 ); 00625 M01S00578.tdutab +++| = single_action_range = 00626 M01S00579.tdutab +++| input_offset := input_offset + 5; 00627 M01S00580.tdutab +++| CASEND 00628 M01S00581.tdutab +++| PROCEND calculate_input_offsets; 00629 M01S00582.tdutab +++| ?? OLDTITLE ?? 00630 M01S00583.tdutab +++| 00631 M01S00584.tdutab +++| ?? NEWTITLE := 'optimize_tables' ?? 00632 M01S00585.tdutab +++| ?? EJECT ?? 00633 M01S00586.tdutab +++| 00634 M01S00587.tdutab +++| PROCEDURE [XDCL] optimize_tables; 00635 M01S00588.tdutab +++| VAR 00636 M01S00589.tdutab +++| next_ordinal: ordinal_type, 00637 M01S00590.tdutab +++| node_returned: BOOLEAN, 00638 M01S00591.tdutab +++| error_return: error_type; 00639 M01S00592.tdutab +++| 00640 M01S00593.tdutab +++| ?? NEWTITLE := 'create_ranges' ?? 00641 M01S00594.tdutab +++| ?? SKIP := 4 ?? 00642 M01S00595.tdutab +++| 00643 M01S00596.tdutab +++| PROCEDURE create_ranges (in_node: ^input_node); 00644 M01S00597.tdutab +++| VAR 00645 M01S00598.tdutab +++| action_ndx: INTEGER; 00646 M01S00599.tdutab +++| 00647 M01S00600.tdutab +++| IF in_node <> NIL THEN 00648 M01S00601.tdutab +++| CASE in_node^.opcode OF 00649 M01S00602.tdutab +++| = fail = 00650 M01S00603.tdutab +++| ; 00651 M01S00604.tdutab +++| = list = 00652 M01S00605.tdutab +++| FOR action_ndx := 1 TO in_node^.list_character_count DO 00653 M01S00606.tdutab +++| IF in_node^.list_pointer^[action_ndx].action.next_level <> 00654 M01S00607.tdutab +++| NIL THEN 00655 M01S00608.tdutab +++| create_range_level( 00656 M01S00609.tdutab +++| in_node^.list_pointer^[action_ndx].action.next_level) 00657 M01S00610.tdutab +++| IFEND 00658 M01S00611.tdutab +++| FOREND; 00659 M01S00612.tdutab +++| = range = 00660 M01S00613.tdutab +++| FOR action_ndx := ORD(in_node^.range_lower_bound) TO 00661 M01S00614.tdutab +++| ORD(in_node^.range_upper_bound) DO 00662 M01S00615.tdutab +++| IF in_node^.range_pointer^[action_ndx].next_level <> NIL 00663 M01S00616.tdutab +++| THEN 00664 M01S00617.tdutab +++| create_range_level( 00665 M01S00618.tdutab +++| in_node^.range_pointer^[action_ndx].next_level) 00666 M01S00619.tdutab +++| IFEND 00667 M01S00620.tdutab +++| FOREND; 00668 M01S00621.tdutab +++| = single_action_range = 00669 M01S00622.tdutab +++| IF in_node^.sar_action.next_level <> NIL THEN 00670 M01S00623.tdutab +++| create_range_level(in_node^.sar_action.next_level) 00671 M01S00624.tdutab +++| IFEND 00672 M01S00625.tdutab +++| CASEND 00673 M01S00626.tdutab +++| IFEND 00674 M01S00627.tdutab +++| PROCEND create_ranges; 00675 M01S00628.tdutab +++| ?? OLDTITLE ?? 00676 M01S00629.tdutab +++| 00677 M01S00630.tdutab +++| ?? NEWTITLE := 'create_range_level' ?? 00678 M01S00631.tdutab +++| ?? EJECT ?? 00679 M01S00632.tdutab +++| 00680 M01S00633.tdutab +++| PROCEDURE create_range_level (VAR curr_level: ^input_node); 00681 M01S00634.tdutab +++| { This procedure scans across a given level of the input tree, } 00682 M01S00635.tdutab +++| { attempting to reduce consecutive lists of characters to ranges. } 00683 M01S00636.tdutab +++| { It ASSUMES it is being called as the FIRST phase of input table } 00684 M01S00637.tdutab +++| { optimization, so that each level consists of single-item lists } 00685 M01S00638.tdutab +++| { ONLY, and that the lists are in ASCENDING ORDER. } 00686 M01S00639.tdutab +++| 00687 M01S00640.tdutab +++| VAR 00688 M01S00641.tdutab +++| new_node, 00689 M01S00642.tdutab +++| pred_node, 00690 M01S00643.tdutab +++| succ_node, 00691 M01S00644.tdutab +++| low_node, 00692 M01S00645.tdutab +++| low_node_pred, 00693 M01S00646.tdutab +++| new_low_node: ^input_node, 00694 M01S00647.tdutab +++| low, 00695 M01S00648.tdutab +++| high: CHAR, 00696 M01S00649.tdutab +++| range_ndx: INTEGER; 00697 M01S00650.tdutab +++| 00698 M01S00651.tdutab +++| IF curr_level^.opcode = list THEN { just in case of empty table } 00699 M01S00652.tdutab +++| low := curr_level^.list_pointer^[1].character 00700 M01S00653.tdutab +++| IFEND; 00701 M01S00654.tdutab +++| high := low; 00702 M01S00655.tdutab +++| low_node := curr_level; 00703 M01S00656.tdutab +++| succ_node := curr_level; 00704 M01S00657.tdutab +++| pred_node := NIL; 00705 M01S00658.tdutab +++| WHILE ( succ_node <> NIL ) AND 00706 M01S00659.tdutab +++| ( error_return = no_error ) DO 00707 M01S00660.tdutab +++| IF ( succ_node^.opcode <> fail ) AND 00708 M01S00661.tdutab +++| ( succ_node^.list_pointer^[1].character = SUCC(high) ) THEN 00709 M01S00662.tdutab +++| high := succ_node^.list_pointer^[1].character { extend range } 00710 M01S00663.tdutab +++| ELSEIF low = high THEN { 'orphan' list--reset search ptrs } 00711 M01S00664.tdutab +++| IF succ_node^.opcode = list THEN 00712 M01S00665.tdutab +++| low := succ_node^.list_pointer^[1].character; 00713 M01S00666.tdutab +++| high := low; 00714 M01S00667.tdutab +++| low_node := succ_node; 00715 M01S00668.tdutab +++| low_node_pred := pred_node 00716 M01S00669.tdutab +++| IFEND 00717 M01S00670.tdutab +++| ELSE { at least 2 consecutive nodes found } 00718 M01S00671.tdutab +++| ALLOCATE new_node : [ range ]; 00719 M01S00672.tdutab +++| IF new_node = NIL THEN 00720 M01S00673.tdutab +++| osp$set_status_abnormal(tdc_prod_code, 00721 M01S00674.tdutab +++| tde_optimize_table_full, '', status); 00722 M01S00675.tdutab +++| error_status(status); 00723 M01S00676.tdutab +++| error_return := no_room_error; 00724 M01S00677.tdutab +++| RETURN 00725 M01S00678.tdutab +++| IFEND; 00726 M01S00679.tdutab +++| new_node^.next_node := succ_node; { new range in same spot} 00727 M01S00680.tdutab +++| new_node^.offset := 0; 00728 M01S00681.tdutab +++| new_node^.node_visited := FALSE; 00729 M01S00682.tdutab +++| IF low_node = curr_level THEN { new node is first on level} 00730 M01S00683.tdutab +++| curr_level := new_node { return pointer to my caller } 00731 M01S00684.tdutab +++| ELSE 00732 M01S00685.tdutab +++| low_node_pred^.next_node := new_node 00733 M01S00686.tdutab +++| IFEND; 00734 M01S00687.tdutab +++| new_node^.range_lower_bound := low; 00735 M01S00688.tdutab +++| new_node^.range_upper_bound := high; 00736 M01S00689.tdutab +++| ALLOCATE new_node^.range_pointer : [ ORD(low)..ORD(high) ]; 00737 M01S00690.tdutab +++| IF new_node^.range_pointer = NIL THEN 00738 M01S00691.tdutab +++| osp$set_status_abnormal(tdc_prod_code, 00739 M01S00692.tdutab +++| tde_optimize_table_full, '', status); 00740 M01S00693.tdutab +++| error_status(status); 00741 M01S00694.tdutab +++| error_return := no_room_error; 00742 M01S00695.tdutab +++| RETURN 00743 M01S00696.tdutab +++| IFEND; 00744 M01S00697.tdutab +++| FOR range_ndx := ORD(low) TO ORD(high) DO 00745 M01S00698.tdutab +++| new_node^.range_pointer^[range_ndx] := 00746 M01S00699.tdutab +++| low_node^.list_pointer^[1].action; 00747 M01S00700.tdutab +++| new_low_node := low_node^.next_node; 00748 M01S00701.tdutab +++| FREE low_node^.list_pointer; 00749 M01S00702.tdutab +++| FREE low_node; 00750 M01S00703.tdutab +++| low_node := new_low_node 00751 M01S00704.tdutab +++| FOREND; 00752 M01S00705.tdutab +++| IF succ_node^.opcode = list THEN 00753 M01S00706.tdutab +++| low := succ_node^.list_pointer^[1].character; 00754 M01S00707.tdutab +++| high := low; 00755 M01S00708.tdutab +++| low_node := succ_node; 00756 M01S00709.tdutab +++| low_node_pred := new_node 00757 M01S00710.tdutab +++| IFEND 00758 M01S00711.tdutab +++| IFEND; 00759 M01S00712.tdutab +++| pred_node := succ_node; 00760 M01S00713.tdutab +++| IF succ_node^.opcode = fail THEN 00761 M01S00714.tdutab +++| succ_node := NIL 00762 M01S00715.tdutab +++| ELSE 00763 M01S00716.tdutab +++| succ_node := pred_node^.next_node 00764 M01S00717.tdutab +++| IFEND 00765 M01S00718.tdutab +++| WHILEND 00766 M01S00719.tdutab +++| PROCEND create_range_level; 00767 M01S00720.tdutab +++| ?? OLDTITLE ?? 00768 M01S00721.tdutab +++| 00769 M01S00722.tdutab +++| ?? NEWTITLE := 'insert_remaining_chars' ?? 00770 M01S00723.tdutab +++| ?? EJECT ?? 00771 M01S00724.tdutab +++| 00772 M01S00725.tdutab +++| PROCEDURE insert_remaining_chars; 00773 M01S00726.tdutab +++| { This procedure processes the first level of the input tree only, } 00774 M01S00727.tdutab +++| { adding all characters that are not yet represented there. This } 00775 M01S00728.tdutab +++| { is necessary because we can make no assumptions about which } 00776 M01S00729.tdutab +++| { characters the application program wants to see. We will pass } 00777 M01S00730.tdutab +++| { everything to the app, and let it decide what to do. } 00778 M01S00731.tdutab +++| { At the time this procedure is called, it ASSUMES that the first } 00779 M01S00732.tdutab +++| { level consists ONLY of ranges and lists, and that everything } 00780 M01S00733.tdutab +++| { is still in ASCENDING ORDER. } 00781 M01S00734.tdutab +++| 00782 M01S00735.tdutab +++| VAR 00783 M01S00736.tdutab +++| pred_node, 00784 M01S00737.tdutab +++| succ_node: ^input_node, 00785 M01S00738.tdutab +++| first_needed: 0 .. 129; 00786 M01S00739.tdutab +++| 00787 M01S00740.tdutab +++| ?? NEWTITLE := 'maybe_insert_chars' ?? 00788 M01S00741.tdutab +++| ?? EJECT ?? 00789 M01S00742.tdutab +++| 00790 M01S00743.tdutab +++| PROCEDURE maybe_insert_chars (next_used: 0 .. 128; 00791 M01S00744.tdutab +++| succ_node: ^input_node; 00792 M01S00745.tdutab +++| VAR pred_node: ^input_node; 00793 M01S00746.tdutab +++| VAR first_needed: 0 .. 129); 00794 M01S00747.tdutab +++| 00795 M01S00748.tdutab +++| VAR 00796 M01S00749.tdutab +++| new_node: ^input_node; 00797 M01S00750.tdutab +++| 00798 M01S00751.tdutab +++| IF next_used > first_needed THEN 00799 M01S00752.tdutab +++| ALLOCATE new_node : [ single_action_range ]; 00800 M01S00753.tdutab +++| IF new_node = NIL THEN 00801 M01S00754.tdutab +++| osp$set_status_abnormal(tdc_prod_code, 00802 M01S00755.tdutab +++| tde_optimize_table_full, '', status); 00803 M01S00756.tdutab +++| error_status(status); 00804 M01S00757.tdutab +++| error_return := no_room_error; 00805 M01S00758.tdutab +++| ELSE 00806 M01S00759.tdutab +++| new_node^.next_node := succ_node; 00807 M01S00760.tdutab +++| new_node^.offset := 0; 00808 M01S00761.tdutab +++| new_node^.node_visited := FALSE; 00809 M01S00762.tdutab +++| IF pred_node = NIL THEN 00810 M01S00763.tdutab +++| input_list := new_node 00811 M01S00764.tdutab +++| ELSE 00812 M01S00765.tdutab +++| pred_node^.next_node := new_node 00813 M01S00766.tdutab +++| IFEND; 00814 M01S00767.tdutab +++| pred_node := new_node; 00815 M01S00768.tdutab +++| new_node^.sar_lower_bound := CHR(first_needed); 00816 M01S00769.tdutab +++| new_node^.sar_upper_bound := CHR(next_used - 1); 00817 M01S00770.tdutab +++| new_node^.sar_action.ordinal := overstrike_ordinal; 00818 M01S00771.tdutab +++| new_node^.sar_action.next_offset := 0; 00819 M01S00772.tdutab +++| new_node^.sar_action.next_level := NIL 00820 M01S00773.tdutab +++| IFEND 00821 M01S00774.tdutab +++| IFEND; 00822 M01S00775.tdutab +++| first_needed := next_used + 1 00823 M01S00776.tdutab +++| PROCEND maybe_insert_chars; 00824 M01S00777.tdutab +++| ?? OLDTITLE ?? 00825 M01S00778.tdutab +++| 00826 M01S00779.tdutab +++| succ_node := input_list; 00827 M01S00780.tdutab +++| pred_node := NIL; 00828 M01S00781.tdutab +++| first_needed := 0; 00829 M01S00782.tdutab +++| WHILE first_needed < 128 DO 00830 M01S00783.tdutab +++| CASE succ_node^.opcode OF 00831 M01S00784.tdutab +++| = fail = 00832 M01S00785.tdutab +++| maybe_insert_chars(128, succ_node, pred_node, first_needed); 00833 M01S00786.tdutab +++| = list = 00834 M01S00787.tdutab +++| maybe_insert_chars( 00835 M01S00788.tdutab +++| ORD(succ_node^.list_pointer^[1].character), 00836 M01S00789.tdutab +++| succ_node, pred_node, first_needed); 00837 M01S00790.tdutab +++| first_needed := 1 + ORD(succ_node^.list_pointer^ 00838 M01S00791.tdutab +++| [succ_node^.list_character_count].character); 00839 M01S00792.tdutab +++| = range = 00840 M01S00793.tdutab +++| maybe_insert_chars(ORD(succ_node^.range_lower_bound), 00841 M01S00794.tdutab +++| succ_node, pred_node, first_needed); 00842 M01S00795.tdutab +++| first_needed := 1 + ORD(succ_node^.range_upper_bound); 00843 M01S00796.tdutab +++| CASEND; 00844 M01S00797.tdutab +++| pred_node := succ_node; 00845 M01S00798.tdutab +++| succ_node := pred_node^.next_node 00846 M01S00799.tdutab +++| WHILEND 00847 M01S00800.tdutab +++| PROCEND insert_remaining_chars; 00848 M01S00801.tdutab +++| ?? OLDTITLE ?? 00849 M01S00802.tdutab +++| 00850 M01S00803.tdutab +++| ?? NEWTITLE := 'combine_lists' ?? 00851 M01S00804.tdutab +++| ?? EJECT ?? 00852 M01S00805.tdutab +++| 00853 M01S00806.tdutab +++| PROCEDURE combine_lists (in_node: ^input_node); 00854 M01S00807.tdutab +++| { This procedure processes all levels of the input tree, combining } 00855 M01S00808.tdutab +++| { multiple list nodes at each level into a single list node. } 00856 M01S00809.tdutab +++| { It is called recursively by traverse_input_tree. } 00857 M01S00810.tdutab +++| 00858 M01S00811.tdutab +++| VAR 00859 M01S00812.tdutab +++| action_ndx: INTEGER; 00860 M01S00813.tdutab +++| 00861 M01S00814.tdutab +++| IF in_node <> NIL THEN 00862 M01S00815.tdutab +++| CASE in_node^.opcode OF 00863 M01S00816.tdutab +++| = fail = 00864 M01S00817.tdutab +++| ; 00865 M01S00818.tdutab +++| = list = 00866 M01S00819.tdutab +++| FOR action_ndx := 1 TO in_node^.list_character_count DO 00867 M01S00820.tdutab +++| IF in_node^.list_pointer^[action_ndx].action.next_level <> 00868 M01S00821.tdutab +++| NIL THEN 00869 M01S00822.tdutab +++| combine_list_level( 00870 M01S00823.tdutab +++| in_node^.list_pointer^[action_ndx].action.next_level) 00871 M01S00824.tdutab +++| IFEND 00872 M01S00825.tdutab +++| FOREND; 00873 M01S00826.tdutab +++| = range = 00874 M01S00827.tdutab +++| FOR action_ndx := ORD(in_node^.range_lower_bound) TO 00875 M01S00828.tdutab +++| ORD(in_node^.range_upper_bound) DO 00876 M01S00829.tdutab +++| IF in_node^.range_pointer^[action_ndx].next_level <> NIL 00877 M01S00830.tdutab +++| THEN 00878 M01S00831.tdutab +++| combine_list_level( 00879 M01S00832.tdutab +++| in_node^.range_pointer^[action_ndx].next_level) 00880 M01S00833.tdutab +++| IFEND 00881 M01S00834.tdutab +++| FOREND; 00882 M01S00835.tdutab +++| = single_action_range = 00883 M01S00836.tdutab +++| IF in_node^.sar_action.next_level <> NIL THEN 00884 M01S00837.tdutab +++| combine_list_level(in_node^.sar_action.next_level) 00885 M01S00838.tdutab +++| IFEND 00886 M01S00839.tdutab +++| CASEND 00887 M01S00840.tdutab +++| IFEND 00888 M01S00841.tdutab +++| PROCEND combine_lists; 00889 M01S00842.tdutab +++| ?? OLDTITLE ?? 00890 M01S00843.tdutab +++| 00891 M01S00844.tdutab +++| ?? NEWTITLE := 'combine_list_level' ?? 00892 M01S00845.tdutab +++| ?? EJECT ?? 00893 M01S00846.tdutab +++| 00894 M01S00847.tdutab +++| PROCEDURE combine_list_level (VAR curr_level: ^input_node); 00895 M01S00848.tdutab +++| { This procedure scans across a given level of the input tree, } 00896 M01S00849.tdutab +++| { combining all separate lists found at that level into a single } 00897 M01S00850.tdutab +++| { list. It doesn't really care at what phase of the optimization } 00898 M01S00851.tdutab +++| { it is being called. } 00899 M01S00852.tdutab +++| 00900 M01S00853.tdutab +++| VAR 00901 M01S00854.tdutab +++| new_node, 00902 M01S00855.tdutab +++| pred_node, 00903 M01S00856.tdutab +++| succ_node: ^input_node, 00904 M01S00857.tdutab +++| list_count, 00905 M01S00858.tdutab +++| new_ndx, 00906 M01S00859.tdutab +++| old_ndx: INTEGER; 00907 M01S00860.tdutab +++| 00908 M01S00861.tdutab +++| succ_node := curr_level; 00909 M01S00862.tdutab +++| pred_node := NIL; 00910 M01S00863.tdutab +++| list_count := 0; 00911 M01S00864.tdutab +++| WHILE succ_node^.opcode <> fail DO 00912 M01S00865.tdutab +++| IF succ_node^.opcode = list THEN 00913 M01S00866.tdutab +++| list_count := list_count + succ_node^.list_character_count 00914 M01S00867.tdutab +++| IFEND; 00915 M01S00868.tdutab +++| pred_node := succ_node; 00916 M01S00869.tdutab +++| succ_node := succ_node^.next_node 00917 M01S00870.tdutab +++| WHILEND; 00918 M01S00871.tdutab +++| IF list_count > 0 THEN { at least one list on this level } 00919 M01S00872.tdutab +++| ALLOCATE new_node : [ list ]; 00920 M01S00873.tdutab +++| IF new_node = NIL THEN 00921 M01S00874.tdutab +++| error_return := no_room_error; 00922 M01S00875.tdutab +++| osp$set_status_abnormal(tdc_prod_code, tde_optimize_table_full, 00923 M01S00876.tdutab +++| '', status); 00924 M01S00877.tdutab +++| error_status(status); 00925 M01S00878.tdutab +++| RETURN 00926 M01S00879.tdutab +++| IFEND; 00927 M01S00880.tdutab +++| new_node^.offset := 0; 00928 M01S00881.tdutab +++| new_node^.node_visited := FALSE; 00929 M01S00882.tdutab +++| new_node^.list_character_count := list_count; 00930 M01S00883.tdutab +++| ALLOCATE new_node^.list_pointer : [ 1 .. list_count ]; 00931 M01S00884.tdutab +++| IF new_node^.list_pointer = NIL THEN 00932 M01S00885.tdutab +++| error_return := no_room_error; 00933 M01S00886.tdutab +++| osp$set_status_abnormal(tdc_prod_code, 00934 M01S00887.tdutab +++| tde_optimize_table_full, '', status); 00935 M01S00888.tdutab +++| error_status(status); 00936 M01S00889.tdutab +++| RETURN 00937 M01S00890.tdutab +++| IFEND; 00938 M01S00891.tdutab +++| succ_node := curr_level; 00939 M01S00892.tdutab +++| pred_node := NIL; 00940 M01S00893.tdutab +++| new_ndx := 0; 00941 M01S00894.tdutab +++| WHILE ( succ_node <> NIL ) AND 00942 M01S00895.tdutab +++| ( error_return = no_error ) DO 00943 M01S00896.tdutab +++| CASE succ_node^.opcode OF 00944 M01S00897.tdutab +++| = list = { old node, move pieces to new node } 00945 M01S00898.tdutab +++| FOR old_ndx := 1 TO succ_node^.list_character_count DO 00946 M01S00899.tdutab +++| new_ndx := new_ndx + 1; 00947 M01S00900.tdutab +++| new_node^.list_pointer^[new_ndx].character := 00948 M01S00901.tdutab +++| succ_node^.list_pointer^[old_ndx].character; 00949 M01S00902.tdutab +++| new_node^.list_pointer^[new_ndx].action := 00950 M01S00903.tdutab +++| succ_node^.list_pointer^[old_ndx].action 00951 M01S00904.tdutab +++| FOREND; 00952 M01S00905.tdutab +++| FREE succ_node^.list_pointer; 00953 M01S00906.tdutab +++| IF succ_node = curr_level THEN { old list is first on lvl } 00954 M01S00907.tdutab +++| curr_level := succ_node^.next_node; { link around it } 00955 M01S00908.tdutab +++| FREE succ_node; 00956 M01S00909.tdutab +++| succ_node := curr_level 00957 M01S00910.tdutab +++| ELSE 00958 M01S00911.tdutab +++| pred_node^.next_node := succ_node^.next_node; 00959 M01S00912.tdutab +++| FREE succ_node; 00960 M01S00913.tdutab +++| succ_node := pred_node^.next_node 00961 M01S00914.tdutab +++| IFEND; 00962 M01S00915.tdutab +++| = range, single_action_range = 00963 M01S00916.tdutab +++| pred_node := succ_node; 00964 M01S00917.tdutab +++| succ_node := pred_node^.next_node; 00965 M01S00918.tdutab +++| = fail = { at end, insert new node here } 00966 M01S00919.tdutab +++| new_node^.next_node := succ_node; { new list at end } 00967 M01S00920.tdutab +++| IF succ_node = curr_level THEN { new node is first on lvl } 00968 M01S00921.tdutab +++| curr_level := new_node { return pointer to my caller } 00969 M01S00922.tdutab +++| ELSE 00970 M01S00923.tdutab +++| pred_node^.next_node := new_node 00971 M01S00924.tdutab +++| IFEND; 00972 M01S00925.tdutab +++| succ_node := NIL; 00973 M01S00926.tdutab +++| CASEND; 00974 M01S00927.tdutab +++| WHILEND 00975 M01S00928.tdutab +++| IFEND 00976 M01S00929.tdutab +++| PROCEND combine_list_level; 00977 M01S00930.tdutab +++| ?? OLDTITLE ?? 00978 M01S00931.tdutab +++| 00979 M01S00932.tdutab +++| ?? NEWTITLE := 'assign_input_offsets' ?? 00980 M01S00933.tdutab +++| ?? SKIP := 2 ?? 00981 M01S00934.tdutab +++| 00982 M01S00935.tdutab +++| PROCEDURE assign_input_offsets (in_node: ^input_node); 00983 M01S00936.tdutab +++| VAR 00984 M01S00937.tdutab +++| action_ndx: INTEGER; 00985 M01S00938.tdutab +++| 00986 M01S00939.tdutab +++| CASE in_node^.opcode OF 00987 M01S00940.tdutab +++| = fail = 00988 M01S00941.tdutab +++| ; 00989 M01S00942.tdutab +++| = list = 00990 M01S00943.tdutab +++| FOR action_ndx := 1 TO in_node^.list_character_count DO 00991 M01S00944.tdutab +++| IF in_node^.list_pointer^[action_ndx].action.ordinal = 00992 M01S00945.tdutab +++| no_ordinal THEN 00993 M01S00946.tdutab +++| in_node^.list_pointer^[action_ndx].action.next_offset := 00994 M01S00947.tdutab +++| in_node^.list_pointer^[action_ndx].action.next_level^ 00995 M01S00948.tdutab +++| .offset 00996 M01S00949.tdutab +++| IFEND 00997 M01S00950.tdutab +++| FOREND; 00998 M01S00951.tdutab +++| = range = 00999 M01S00952.tdutab +++| FOR action_ndx := ORD(in_node^.range_lower_bound) TO 01000 M01S00953.tdutab +++| ORD(in_node^.range_upper_bound) DO 01001 M01S00954.tdutab +++| IF in_node^.range_pointer^[action_ndx].ordinal=no_ordinal THEN 01002 M01S00955.tdutab +++| in_node^.range_pointer^[action_ndx].next_offset := 01003 M01S00956.tdutab +++| in_node^.range_pointer^[action_ndx].next_level^.offset 01004 M01S00957.tdutab +++| IFEND 01005 M01S00958.tdutab +++| FOREND; 01006 M01S00959.tdutab +++| = single_action_range = 01007 M01S00960.tdutab +++| IF in_node^.sar_action.ordinal = no_ordinal THEN 01008 M01S00961.tdutab +++| in_node^.sar_action.next_offset := 01009 M01S00962.tdutab +++| in_node^.sar_action.next_level^.offset 01010 M01S00963.tdutab +++| IFEND 01011 M01S00964.tdutab +++| CASEND 01012 M01S00965.tdutab +++| PROCEND assign_input_offsets; 01013 M01S00966.tdutab +++| ?? OLDTITLE ?? 01014 M01S00967.tdutab +++| 01015 M01S00968.tdutab +++| ?? EJECT ?? 01016 M01S00969.tdutab +++| 01017 M01S00970.tdutab +++| error_return := no_error; 01018 M01S00971.tdutab +++| appstr_latest_new_node := appstr_table; 01019 M01S00972.tdutab +++| 01020 M01S00973.tdutab +++| traverse_input_tree(input_list, NIL, ^create_ranges); 01021 M01S00974.tdutab +++| create_range_level(input_list); { root level wasn't handled recursively } 01022 M01S00975.tdutab +++| IF error_return = no_error THEN 01023 M01S00976.tdutab +++| insert_remaining_chars; { adds all chars not already in first lv} 01024 M01S00977.tdutab +++| IF error_return = no_error THEN 01025 M01S00978.tdutab +++| traverse_input_tree(input_list, NIL, ^combine_lists); 01026 M01S00979.tdutab +++| combine_list_level(input_list); { root level wasn't handled } 01027 M01S00980.tdutab +++| IF error_return = no_error THEN 01028 M01S00981.tdutab +++| input_offset := 0; { assign object table offset addresses } 01029 M01S00982.tdutab +++| dump_input_node(^calculate_input_offsets); 01030 M01S00983.tdutab +++| dump_input_node(^assign_input_offsets) 01031 M01S00984.tdutab +++| IFEND 01032 M01S00985.tdutab +++| IFEND 01033 M01S00986.tdutab +++| IFEND 01034 M01S00987.tdutab +++| PROCEND optimize_tables; 01035 M01S00988.tdutab +++| ?? OLDTITLE ?? 01036 M01S00989.tdutab +++| 01037 M01S00990.tdutab +++|MODEND tdutab; 01038 M01S00014.tdutab +++|TERMIO 01039 M01S00000.tdutab +++| 01040 M01S00004.tdutab +++| BEGIN # TERMIO # 01041 M01S00005.tdutab +++| 01042 M01S00006.tdutab +++|# 01043 M01S00007.tdutab +++|*** TERMIO - TERMINAL INPUT/OUTPUT MODULE. 01044 M01S00008.tdutab +++|* 01045 M01S00009.tdutab +++|* *TERMIO* PROVIDES FETS, CIRCULAR BUFFERS, AND FUNDAMENTAL 01046 M01S00010.tdutab +++|* I/O MACROS FOR THE FULL SCREEN EDITOR AND FOR PRODUCTS 01047 M01S00011.tdutab +++|* BUILT ON THE VIRTUAL DISPLAY TERMINAL OBJECT ROUTINES. 01048 M01S00012.tdutab +++|* 01049 M01S00013.tdutab +++|* FOR THE FULL SCREEN EDITOR, *TERMIO* MAPS STORAGE INTO THE 01050 M01S00014.tdutab +++|* GLOBAL COMMON BLOCK AND GENERATES CODE APPROPRIATE TO THE 01051 M01S00015.tdutab +++|* SINGLE AND MULTI USER VERSIONS OF THE EDITOR. FOR OTHER 01052 M01S00016.tdutab +++|* PRODUCTS, *TERMIO* STANDS ALONE. 01053 M01S00017.tdutab +++|* 01054 M01S00018.tdutab +++|* PROC TERMIO 01055 M01S00019.tdutab +++|* 01056 M01S00020.tdutab +++|* ENTRY OBJECT ROUTINE CALLED. 01057 M01S00021.tdutab +++|* 01058 M01S00022.tdutab +++|* EXIT OBJECT ROUTINE EXECUTED. 01059 M01S00023.tdutab +++|* 01060 M01S00024.tdutab +++|* NOTES THE *TERMIO* ROUTINES ALLOW USE OF BOTH *FORTRAN* 01061 M01S00025.tdutab +++|* AND *COBOL* CALLING SEQUENCES. 01062 M01S00026.tdutab +++|*
Line S00027 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Yanked) (Updated by) | @000005 |
Seq # *Modification Id* Act ----------------------------+ 01063 M02S00027.@000005 ---|* COPYRIGHT CONTROL DATA CORPORATION, 1983. 01064 M01S00001.@000005 +++|* COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. 01065 M01S00028.tdutab +++|# 01066 M01S00029.tdutab +++| 01067 M01S00030.tdutab +++|# START OF MODIFY CONDITIONAL SEQUENCE # 01068 M01S00031.tdutab +++|*IF DEF,EDITOR 01069 M01S00032.tdutab +++|DEF LISTCON #0#; # DO NOT LIST COMDECKS # 01070 M01S00033.tdutab +++|*ELSE 01071 M01S00034.tdutab +++|DEF LISTCON #1#; # LIST COMDECKS # 01072 M01S00035.tdutab +++|*ENDIF 01073 M01S00036.tdutab +++|# END OF MODIFY CONDITIONAL # 01074 M01S00037.tdutab +++| 01075 M01S00038.tdutab +++|*IFCALL SINGLE,COMFSGL 01076 M01S00039.tdutab +++|*IFCALL ONLY,COMFONL 01077 M01S00040.tdutab +++|*IFCALL MULTI,COMFMLT 01078 M01S00041.tdutab +++|*IFCALL EDITOR,COMFFSE 01079 M01S00042.tdutab +++| 01080 M01S00043.tdutab +++|# START OF CODE SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY # 01081 M01S00044.tdutab +++| 01082 M01S00045.tdutab +++|*NIFCALL EDITOR,COMFTIO 01083 M01S00046.tdutab +++|*IF UNDEF,EDITOR 01084 M01S00047.tdutab +++|DEF SINGLE #1#; # SINGLE-USER VERSION # 01085 M01S00048.tdutab +++|DEF MULTI #0#; # NOT MULTI-USER VERSION # 01086 M01S00049.tdutab +++|DEF EDITORVDT #0#; # STANDALONE VERSION OF VIRTERM # 01087 M01S00050.tdutab +++|DEF IOBEGIN(XXX) #BEGIN#; # BEGIN COMPOUND STATEMENT # 01088 M01S00051.tdutab +++|DEF IOEND #END#; # END COMPOUND STATEMENT # 01089 M01S00052.tdutab +++|DEF IORET #RETURN;#; # EXIT FROM SUBPROGRAM # 01090 M01S00053.tdutab +++|CONTROL PRESET; 01091 M01S00054.tdutab +++|*ENDIF 01092 M01S00001.@000003 +++| 01093 M01S00002.@000003 +++|*IF UNDEF,QTRM 01094 M01S00003.@000003 +++|DEF QTRMV #0#; # NOT QTRM VERSION # 01095 M01S00004.@000003 +++|*ELSE 01096 M01S00005.@000003 +++|DEF QTRMV #1#; # QTRM VERSION # 01097 M01S00006.@000003 +++|*ENDIF 01098 M01S00055.tdutab +++| 01099 M01S00056.tdutab +++|# END OF MODIFY CONDITIONAL # 01100 M01S00057.tdutab +++| 01101 M01S00058.tdutab +++| # COMMON DATA # 01102 M01S00059.tdutab +++| 01103 M01S00060.tdutab +++|CONTROL IFEQ MULTI,1; 01104 M01S00061.tdutab +++| XREF ARRAY RENTSTK [1:MAXREENT] P(1); # SUBROUTINE STACK # 01105 M01S00062.tdutab +++| BEGIN # ARRAY RENTSTK # 01106 M01S00063.tdutab +++| ITEM RSTK I; # STACK WORD # 01107 M01S00064.tdutab +++| END # ARRAY RENTSTK # 01108 M01S00065.tdutab +++| XREF ITEM RSTKPTR I; # STACK POINTER # 01109 M01S00066.tdutab +++|CONTROL FI; 01110 M01S00067.tdutab +++| 01111 M01S00068.tdutab +++|CONTROL IFEQ MULTI,1; 01112 M01S00069.tdutab +++| XREF 01113 M01S00070.tdutab +++| BEGIN 01114 M01S00071.tdutab +++| PROC TTITRAP; # TELETYPE INPUT TRAP # 01115 M01S00072.tdutab +++| PROC TTOTRAP; # TELETYPE OUTPUT TRAP # 01116 M01S00073.tdutab +++| PROC VOLUNTEER; # VOLUNTEER PREEMPTIVE SWAPPING # 01117 M01S00074.tdutab +++| FUNC NOSWDSZ; # NOS WORD SIZE # 01118 M01S00075.tdutab +++| END 01119 M01S00076.tdutab +++|CONTROL FI; 01120 M01S00077.tdutab +++| 01121 M01S00078.tdutab +++|XREF 01122 M01S00079.tdutab +++| BEGIN 01123 M01S00080.tdutab +++|*IFCALL EDITOR,COMFXSB 01124 M01S00081.tdutab +++| CONTROL IFEQ SINGLE,1; 01125 M01S00082.tdutab +++| PROC VDTLOF$; # SET LIST OF FILES # 01126 M01S00083.tdutab +++| PROC VDTRD$; # READ AFTER EOR # 01127 M01S00084.tdutab +++| PROC VDTREC$; # READ CODED LINE # 01128 M01S00085.tdutab +++| PROC VDTREO$; # READ ONE WORD # 01129 M01S00086.tdutab +++| PROC VDTWRC$; # WRITE CODED LINE # 01130 M01S00087.tdutab +++| PROC VDTWRO$; # CIO WRITE WORD # 01131 M01S00088.tdutab +++| PROC VDTWRR$; # WRITE EOR #
Line S00089 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01132 M02S00089.tdutab1 ---| CONTROL FI;
Line S00001 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01133 M02S00001.@000002 ---| CONTROL IFEQ EDITORVDT,0;
Line S00002 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01134 M02S00002.@000002 ---| PROC VDTCLO$; # CLOSE CRM OUTPUT FILE #
Line S00003 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01135 M02S00003.@000002 ---| PROC VDTOPN$; # OPEN CRM OUTPUT FILE #
Line S00004 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01136 M02S00004.@000002 ---| CONTROL FI; 01137 M01S00001.@000002 +++|*IF DEF,CRM 01138 M01S00002.@000002 +++| 01139 M01S00003.@000002 +++| # START OF MODIFY CONDITIONAL FOR TERMINAL OUTPUT. # 01140 M01S00004.@000002 +++| 01141 M01S00005.@000002 +++| PROC VDTCLO$; # CLOSE CRM OUTPUT FILE # 01142 M01S00006.@000002 +++| PROC VDTOPN$; # OPEN CRM OUTPUT FILE # 01143 M01S00007.@000002 +++| 01144 M01S00008.@000002 +++| # END OF MODIFY CONDITIONAL FOR TERMINAL OUTPUT. # 01145 M01S00009.@000002 +++| 01146 M01S00010.@000002 +++|*ENDIF 01147 M01S00005.tdutab1 +++| CONTROL FI; 01148 M01S00090.tdutab +++| END 01149 M01S00091.tdutab +++| 01150 M01S00092.tdutab +++|XDEF 01151 M01S00093.tdutab +++| BEGIN # COMFXTI # 01152 M01S00094.tdutab +++|*CALL COMFXTI 01153 M01S00095.tdutab +++| END # COMFXTI # 01154 M01S00096.tdutab +++| 01155 M01S00097.tdutab +++| 01156 M01S00098.tdutab +++| # COMMON DATA BLOCK # 01157 M01S00099.tdutab +++|*IFCALL EDITOR,COMFDS1 01158 M01S00100.tdutab +++|*IFCALL EDITOR,COMFVD2 01159 M01S00101.tdutab +++|*IFCALL EDITOR,COMFDS2 01160 M01S00102.tdutab +++| 01161 M01S00103.tdutab +++|*NIFCALL EDITOR,COMFVD1 01162 M01S00104.tdutab +++|*NIFCALL EDITOR,COMFVD2 01163 M01S00105.tdutab +++|*NIFCALL EDITOR,COMFVD3 01164 M01S00106.tdutab +++|CONTROL EJECT; 01165 M01S00107.tdutab +++| 01166 M01S00108.tdutab +++|PROC VDTFLS; 01167 M01S00109.tdutab +++|# TITLE VDTFLS - FLUSH OUTPUT BUFFER. # 01168 M01S00110.tdutab +++| 01169 M01S00111.tdutab +++| BEGIN # VDTFLS # 01170 M01S00112.tdutab +++| 01171 M01S00113.tdutab +++|# 01172 M01S00114.tdutab +++|** VDTFLS - FLUSH OUTPUT BUFFER. 01173 M01S00115.tdutab +++|* 01174 M01S00116.tdutab +++|* *VDTFLS* FLUSHES THE OUTPUT BUFFER. 01175 M01S00117.tdutab +++|* 01176 M01S00118.tdutab +++|* PROC VDTFLS 01177 M01S00119.tdutab +++|* 01178 M01S00120.tdutab +++|* EXIT TTYO - FET HAS RESET TO SHOW THE OUTPUT BUFFER 01179 M01S00121.tdutab +++|* EMPTY. 01180 M01S00122.tdutab +++|# 01181 M01S00123.tdutab +++| 01182 M01S00124.tdutab +++| CONTROL IFEQ SINGLE,1; 01183 M01S00125.tdutab +++| TTYOIN = TTYOOT; # SET IN EQUAL TO OUT # 01184 M01S00126.tdutab +++| CONTROL FI; 01185 M01S00127.tdutab +++| 01186 M01S00128.tdutab +++| END # VDTFLS # 01187 M01S00129.tdutab +++|CONTROL EJECT; 01188 M01S00130.tdutab +++| 01189 M01S00131.tdutab +++|PROC VDTDRN; 01190 M01S00132.tdutab +++|# TITLE VDTDRN - FLUSH THE INPUT BUFFER. # 01191 M01S00133.tdutab +++| 01192 M01S00134.tdutab +++| IOBEGIN(VDTDRN) 01193 M01S00135.tdutab +++| 01194 M01S00136.tdutab +++|# 01195 M01S00137.tdutab +++|** VDTDRN - FLUSH THE INPUT BUFFER. 01196 M01S00138.tdutab +++|* 01197 M01S00139.tdutab +++|* *VDTDRN* FLUSHES THE INPUT BUFFER. 01198 M01S00140.tdutab +++|* 01199 M01S00141.tdutab +++|* PROC VDTDRN 01200 M01S00142.tdutab +++|* 01201 M01S00143.tdutab +++|* EXIT TTYI - FET HAS EMPTY CIRCULAR BUFFER, IN EITHER 01202 M01S00144.tdutab +++|* SINGLE-EDITOR OR STANDALONE VERSION. 01203 M01S00145.tdutab +++|* 01204 M01S00146.tdutab +++|* CALLS TTITRAP (MULTI ONLY). 01205 M01S00147.tdutab +++|* 01206 M01S00148.tdutab +++|* USES TTILEN (MULTI ONLY). 01207 M01S00149.tdutab +++|# 01208 M01S00150.tdutab +++| 01209 M01S00151.tdutab +++| CONTROL IFEQ SINGLE,1; 01210 M01S00152.tdutab +++| TTYIOT=TTYIIN; 01211 M01S00153.tdutab +++| CONTROL FI; 01212 M01S00154.tdutab +++| CONTROL IFEQ MULTI,1; 01213 M01S00155.tdutab +++| TTILEN=-1; 01214 M01S00156.tdutab +++| TTITRAP; 01215 M01S00157.tdutab +++| CONTROL FI; 01216 M01S00158.tdutab +++| 01217 M01S00159.tdutab +++| IOEND # VDTDRN # 01218 M01S00160.tdutab +++|CONTROL EJECT; 01219 M01S00161.tdutab +++| 01220 M01S00162.tdutab +++|PROC VDTRDO(L); 01221 M01S00163.tdutab +++|# TITLE VDTRDO - READ ONE WORD OF INPUT. # 01222 M01S00164.tdutab +++| 01223 M01S00165.tdutab +++| IOBEGIN(VDTRDO) 01224 M01S00166.tdutab +++| 01225 M01S00167.tdutab +++|# 01226 M01S00168.tdutab +++|** VDTRDO - READ ONE WORD OF INPUT. 01227 M01S00169.tdutab +++|* 01228 M01S00170.tdutab +++|* *VDTRDO* READS ONE WORD OF INPUT INTO BUFFER *L*. 01229 M01S00171.tdutab +++|* 01230 M01S00172.tdutab +++|* PROC VDTRDO(L) 01231 M01S00173.tdutab +++|* 01232 M01S00174.tdutab +++|* ENTRY L - WORD TO BE READ INTO. 01233 M01S00175.tdutab +++|* 01234 M01S00176.tdutab +++|* CALLS READ, READO (SINGLE OR STANDALONE). 01235 M01S00177.tdutab +++|* MORTAL (SINGLE-EDITOR ONLY). 01236 M01S00178.tdutab +++|* TTITRAP, VOLUNTEER (MULTI-EDITOR ONLY). 01237 M01S00179.tdutab +++|* 01238 M01S00180.tdutab +++|* USES TTYI FET (SINGLE OR STANDALONE). 01239 M01S00181.tdutab +++|* TTIADDR, TTILEN (MULTI ONLY). 01240 M01S00182.tdutab +++|* TTYINPUT (SINGLE EDITOR ONLY) 01241 M01S00183.tdutab +++|# 01242 M01S00184.tdutab +++| 01243 M01S00185.tdutab +++| ARRAY L [0:0] P(1); # WORD TO BE READ INTO # 01244 M01S00186.tdutab +++| BEGIN # ARRAY L # 01245 M01S00187.tdutab +++| ITEM LL I; # LINE OF INPUT # 01246 M01S00188.tdutab +++| END # ARRAY L # 01247 M01S00189.tdutab +++| 01248 M01S00190.tdutab +++| CONTROL IFEQ MULTI,1; 01249 M01S00191.tdutab +++| TTIADDR=LOC(L); 01250 M01S00192.tdutab +++| TTILEN=1; 01251 M01S00193.tdutab +++| TTITRAP; # GET FROM SMFEX # 01252 M01S00194.tdutab +++| VOLUNTEER; # MOVE FAST IF LOW TTI # 01253 M01S00195.tdutab +++| CONTROL FI; 01254 M01S00196.tdutab +++| 01255 M01S00197.tdutab +++| CONTROL IFEQ SINGLE,1; 01256 M01S00198.tdutab +++| ITEM R I; # READ STATUS # 01257 M01S00199.tdutab +++| LL = 0; # EMPTY LINE BY DEFAULT # 01258 M01S00200.tdutab +++| R=-1; # EOF DETECTED ON FILE #
Line S00201 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Yanked) (Updated by) | @000003 |
Seq # *Modification Id* Act ----------------------------+ 01259 M02S00201.@000003 ---| IF TTYIIN EQ TTYIOT THEN VDTRD$(TTYI,1); # READ MACRO # 01260 M01S00007.@000003 +++| IF TTYIIN EQ TTYIOT THEN 01261 M01S00008.@000003 +++| BEGIN 01262 M01S00009.@000003 +++|*IF DEF,DEBUG 01263 M01S00010.@000003 +++| VDTDMP$; 01264 M01S00011.@000003 +++|*ENDIF 01265 M01S00012.@000003 +++| VDTRD$(TTYI,1); # READ MACRO # 01266 M01S00013.@000003 +++| END 01267 M01S00202.tdutab +++| IF TTYIIN NQ TTYIOT THEN VDTREO$(TTYI,L,R); # READO MACRO # 01268 M01S00203.tdutab +++| # START OF CODE CONDITIONALLY PRODUCED BY MODIFY UTILITY # 01269 M01S00204.tdutab +++|*IF DEF,EDITOR 01270 M01S00205.tdutab +++| IF R NQ 0 AND NOT TTYINPUT 01271 M01S00206.tdutab +++| THEN MORTAL(" QUIT IS REQUIRED FOR BATCH JOBS.$"); 01272 M01S00207.tdutab +++|*ENDIF 01273 M01S00208.tdutab +++| # END OF MODIFY UTILITY CONDITIONAL # 01274 M01S00209.tdutab +++| CONTROL FI; 01275 M01S00210.tdutab +++| 01276 M01S00211.tdutab +++| IOEND # VDTRDO # 01277 M01S00212.tdutab +++|CONTROL EJECT; 01278 M01S00213.tdutab +++| 01279 M01S00214.tdutab +++|PROC VDTWTO(A); 01280 M01S00215.tdutab +++|# TITLE VDTWTO - WRITE ONE WORD OF OUTPUT. # 01281 M01S00216.tdutab +++| 01282 M01S00217.tdutab +++| IOBEGIN(VDTWTO) 01283 M01S00218.tdutab +++| 01284 M01S00219.tdutab +++|# 01285 M01S00220.tdutab +++|** VDTWTO - WRITE ONE WORD OF OUTPUT. 01286 M01S00221.tdutab +++|* 01287 M01S00222.tdutab +++|* *VDTWTO* WRITES ONE WORD OF OUTPUT FROM BUFFER *A*. 01288 M01S00223.tdutab +++|* 01289 M01S00224.tdutab +++|* PROC VDTWTO(A) 01290 M01S00225.tdutab +++|* 01291 M01S00226.tdutab +++|* ENTRY A - THE WORD. 01292 M01S00227.tdutab +++|* 01293 M01S00228.tdutab +++|* CALLS WRITEO (SINGLE-EDITOR OR STANDALONE). 01294 M01S00229.tdutab +++|* TTOTRAP (MULTI ONLY). 01295 M01S00230.tdutab +++|* 01296 M01S00231.tdutab +++|* USES TTOLEN, TTOTYPE, TTOADDR (MULTI ONLY). 01297 M01S00232.tdutab +++|# 01298 M01S00233.tdutab +++| 01299 M01S00234.tdutab +++| ARRAY A [0:0] P(1);; # WORD OF OUTPUT # 01300 M01S00235.tdutab +++| 01301 M01S00236.tdutab +++| CONTROL IFEQ MULTI,1; 01302 M01S00237.tdutab +++| TTOADDR=LOC(A); 01303 M01S00238.tdutab +++| TTOLEN=1; 01304 M01S00239.tdutab +++| TTOTYPE=TTOST"NORMAL"; 01305 M01S00240.tdutab +++| TTOTRAP; 01306 M01S00241.tdutab +++| CONTROL FI; 01307 M01S00242.tdutab +++| 01308 M01S00243.tdutab +++| CONTROL IFEQ SINGLE,1; 01309 M01S00244.tdutab +++| VDTWRO$(TTYO,A); # WRITEO MACRO # 01310 M01S00245.tdutab +++| CONTROL FI; 01311 M01S00246.tdutab +++| 01312 M01S00247.tdutab +++| IOEND # VDTWTO # 01313 M01S00248.tdutab +++|CONTROL EJECT; 01314 M01S00249.tdutab +++| 01315 M01S00250.tdutab +++|PROC VDTRDC(L,N); 01316 M01S00251.tdutab +++|# TITLE VDTRDC - READ ONE LINE OF INPUT. # 01317 M01S00252.tdutab +++| 01318 M01S00253.tdutab +++| IOBEGIN(VDTRDC) 01319 M01S00254.tdutab +++| 01320 M01S00255.tdutab +++|# 01321 M01S00256.tdutab +++|** VDTRDC - READ ONE LINE OF INPUT. 01322 M01S00257.tdutab +++|* 01323 M01S00258.tdutab +++|* *VDTRDC* READS ONE LINE OF INPUT INTO BUFFER *L*. 01324 M01S00259.tdutab +++|* 01325 M01S00260.tdutab +++|* PROC VDTRDC(L,N) 01326 M01S00261.tdutab +++|* 01327 M01S00262.tdutab +++|* ENTRY L - LINE IMAGE BUFFER. 01328 M01S00263.tdutab +++|* N - BUFFER CAPACITY IN WORDS. 01329 M01S00264.tdutab +++|* 01330 M01S00265.tdutab +++|* CALLS READ, READC (SINGLE OR STANDALONE). 01331 M01S00266.tdutab +++|* MORTAL (SINGLE-EDITOR ONLY). 01332 M01S00267.tdutab +++|* TTITRAP, VOLUNTEER (MULTI-EDITOR ONLY). 01333 M01S00268.tdutab +++|* 01334 M01S00269.tdutab +++|* USES TTYI FET (SINGLE OR STANDALONE). 01335 M01S00270.tdutab +++|* TTIADDR, TTILEN (MULTI ONLY). 01336 M01S00271.tdutab +++|* TTYINPUT (SINGLE EDITOR ONLY) 01337 M01S00272.tdutab +++|# 01338 M01S00273.tdutab +++| 01339 M01S00274.tdutab +++| ARRAY L [0:0] P(1); # LINE IMAGE BUFFER # 01340 M01S00275.tdutab +++| BEGIN # ARRAY L # 01341 M01S00276.tdutab +++| ITEM LL I; # LINE IMAGE # 01342 M01S00277.tdutab +++| END # ARRAY L # 01343 M01S00278.tdutab +++| 01344 M01S00279.tdutab +++| ITEM N I; # MAX NUM WORDS # 01345 M01S00280.tdutab +++| 01346 M01S00281.tdutab +++| CONTROL IFEQ MULTI,1; 01347 M01S00282.tdutab +++| TTIADDR=LOC(L); 01348 M01S00283.tdutab +++| TTILEN=N; 01349 M01S00284.tdutab +++| TTITRAP; # GET FROM SMFEX # 01350 M01S00285.tdutab +++| VOLUNTEER; # MOVE FAST IF LOW TTI # 01351 M01S00286.tdutab +++| CONTROL FI; 01352 M01S00287.tdutab +++| 01353 M01S00288.tdutab +++| CONTROL IFEQ SINGLE,1; 01354 M01S00289.tdutab +++| ITEM R I; # READ STATUS # 01355 M01S00290.tdutab +++| LL = 0; # EMPTY LINE BY DEFAULT # 01356 M01S00291.tdutab +++| R=-1; # EOF DETECTED ON FILE # 01357 M01S00292.tdutab +++| IF TTYIIN EQ TTYIOT THEN VDTRD$(TTYI,1); # READ MACRO # 01358 M01S00293.tdutab +++| IF TTYIIN NQ TTYIOT THEN VDTREC$(TTYI,L,N,R); # READC MACRO # 01359 M01S00294.tdutab +++| # START OF SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY # 01360 M01S00295.tdutab +++|*IF DEF,EDITOR 01361 M01S00296.tdutab +++| IF R NQ 0 AND NOT TTYINPUT 01362 M01S00297.tdutab +++| THEN MORTAL(" QUIT IS REQUIRED FOR BATCH JOBS.$"); 01363 M01S00298.tdutab +++|*ENDIF 01364 M01S00299.tdutab +++| # END OF MODIFY CONDITIONAL # 01365 M01S00300.tdutab +++| CONTROL FI; 01366 M01S00301.tdutab +++| 01367 M01S00302.tdutab +++| IOEND # VDTRDC # 01368 M01S00303.tdutab +++|CONTROL EJECT; 01369 M01S00304.tdutab +++| 01370 M01S00305.tdutab +++|PROC VDTWTC(A); 01371 M01S00306.tdutab +++|# TITLE VDTWTC - WRITE ONE LINE OF OUTPUT. # 01372 M01S00307.tdutab +++| 01373 M01S00308.tdutab +++| IOBEGIN(VDTWTC) 01374 M01S00309.tdutab +++| 01375 M01S00310.tdutab +++|# 01376 M01S00311.tdutab +++|** VDTWTC - WRITE ONE LINE OF OUTPUT. 01377 M01S00312.tdutab +++|* 01378 M01S00313.tdutab +++|* *VDTWTC* WRITES ONE LINE OF OUTPUT FROM BUFFER *A*. 01379 M01S00314.tdutab +++|* 01380 M01S00315.tdutab +++|* PROC VDTWTC(A) 01381 M01S00316.tdutab +++|* 01382 M01S00317.tdutab +++|* ENTRY A - LINE IMAGE BUFFER WITH ZERO BYTE TERMINATOR. 01383 M01S00318.tdutab +++|* 01384 M01S00319.tdutab +++|* CALLS WRITEC (SINGLE-EDITOR OR STANDALONE). 01385 M01S00320.tdutab +++|* TTOTRAP (MULTI ONLY). 01386 M01S00321.tdutab +++|* 01387 M01S00322.tdutab +++|* USES TTOLEN, TTOTYPE, TTOADDR (MULTI ONLY). 01388 M01S00323.tdutab +++|# 01389 M01S00324.tdutab +++| 01390 M01S00325.tdutab +++| ARRAY A [0:0] P(1);; # LINE IMAGE BUFFER # 01391 M01S00326.tdutab +++| 01392 M01S00327.tdutab +++| CONTROL IFEQ MULTI,1; 01393 M01S00328.tdutab +++| TTOADDR=LOC(A);
Line S00329 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | 281l803 |
Seq # *Modification Id* Act ----------------------------+ 01394 M02S00329.281l803 ---| TTOLEN=NOSWDSZ(BUFWID2P1,A); 01395 M01S00001.281l803 +++| TTOLEN=NOSWDSZ(9999,A); 01396 M01S00330.tdutab +++| TTOTYPE=TTOST"NORMAL"; 01397 M01S00331.tdutab +++| TTOTRAP; 01398 M01S00332.tdutab +++| CONTROL FI; 01399 M01S00333.tdutab +++| 01400 M01S00334.tdutab +++| CONTROL IFEQ SINGLE,1; 01401 M01S00335.tdutab +++| VDTWRC$(TTYO,A); # WRITEC MACRO # 01402 M01S00336.tdutab +++| CONTROL FI; 01403 M01S00337.tdutab +++| 01404 M01S00338.tdutab +++| IOEND # VDTWTC # 01405 M01S00339.tdutab +++|CONTROL EJECT; 01406 M01S00340.tdutab +++| 01407 M01S00341.tdutab +++|PROC VDTCLO(RCL); 01408 M01S00342.tdutab +++|# TITLE VDTCLO - DO A WRITER ON OUTPUT FET. # 01409 M01S00343.tdutab +++| 01410 M01S00344.tdutab +++| IOBEGIN(VDTCLO) 01411 M01S00345.tdutab +++| 01412 M01S00346.tdutab +++|# 01413 M01S00347.tdutab +++|** VDTCLO - DO A WRITER ON OUTPUT FET. 01414 M01S00348.tdutab +++|* 01415 M01S00349.tdutab +++|* *VDTCLO* CLOSES THE OUTPUT FET BY DOING A *WRITER*. 01416 M01S00350.tdutab +++|* 01417 M01S00351.tdutab +++|* PROC VDTCLO(RCL) 01418 M01S00352.tdutab +++|*
Line S00353 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01419 M02S00353.@000002 ---|* CALLS WRITER (SINGLE EDITOR OR STANDALONE).
Line S00006 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01420 M02S00006.@000002 ---|* VDTCLO$ (STANDALONE ONLY). 01421 M01S00011.@000002 +++|* CALLS VDTWRR$ (SINGLE EDITOR OR STANDALONE). 01422 M01S00012.@000002 +++|*IF DEF,CRM 01423 M01S00013.@000002 +++|* VDTCLO$ (CRM STANDALONE ONLY). 01424 M01S00014.@000002 +++|*ENDIF 01425 M01S00354.tdutab +++|# 01426 M01S00355.tdutab +++| 01427 M01S00356.tdutab +++| ITEM RCL I; # RECALL PARAMETER # 01428 M01S00357.tdutab +++| CONTROL IFEQ SINGLE,1; 01429 M01S00014.@000003 +++|*IF DEF,DEBUG 01430 M01S00015.@000003 +++| VDTDMP$; 01431 M01S00016.@000003 +++|*ENDIF 01432 M01S00358.tdutab +++| VDTWRR$(TTYO,RCL); # WRITER MACRO #
Line S00359 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01433 M02S00359.tdutab1 ---| CONTROL FI;
Line S00007 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01434 M02S00007.@000002 ---| CONTROL IFEQ EDITORVDT,0;
Line S00008 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01435 M02S00008.@000002 ---| VDTCLO$; # CLOSE CRM OUTPUT FILE #
Line S00009 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01436 M02S00009.@000002 ---| CONTROL FI; 01437 M01S00015.@000002 +++|*IF DEF,CRM 01438 M01S00016.@000002 +++| 01439 M01S00017.@000002 +++| # START OF MODIFY CONDITIONAL FOR TERMINAL OUTPUT. # 01440 M01S00018.@000002 +++| 01441 M01S00019.@000002 +++| VDTCLO$; # CLOSE CRM OUTPUT FILE # 01442 M01S00020.@000002 +++| 01443 M01S00021.@000002 +++| # END OF MODIFY CONDITIONAL FOR TERMINAL OUTPUT. # 01444 M01S00022.@000002 +++| 01445 M01S00023.@000002 +++|*ENDIF 01446 M01S00010.tdutab1 +++| CONTROL FI; 01447 M01S00360.tdutab +++| 01448 M01S00361.tdutab +++| IOEND # VDTCLO # 01449 M01S00362.tdutab +++|CONTROL EJECT; 01450 M01S00363.tdutab +++| 01451 M01S00001.@000004 +++|PROC VDTFOS(RCL); 01452 M01S00002.@000004 +++|# TITLE VDTFOS - FLUSH OUTPUT TO SCREEN. # 01453 M01S00003.@000004 +++| 01454 M01S00004.@000004 +++| IOBEGIN(VDTFOS) 01455 M01S00005.@000004 +++| 01456 M01S00006.@000004 +++|# 01457 M01S00007.@000004 +++|** VDTFOS - FLUSH OUTPUT TO SCREEN. 01458 M01S00008.@000004 +++|* 01459 M01S00009.@000004 +++|* *VDTFOS* FLUSHES THE OUTPUT TO SCREEN BY A WRITER ON OUTPUT FET. 01460 M01S00010.@000004 +++|* 01461 M01S00011.@000004 +++|* PROC VDTFOS(RCL) 01462 M01S00012.@000004 +++|* 01463 M01S00013.@000004 +++|* CALLS VDTWRR$ (SINGLE EDITOR OR STANDALONE). 01464 M01S00014.@000004 +++|# 01465 M01S00015.@000004 +++| 01466 M01S00016.@000004 +++| ITEM RCL I; # RECALL PARAMETER # 01467 M01S00017.@000004 +++| CONTROL IFEQ SINGLE,1; 01468 M01S00018.@000004 +++|*IF DEF,DEBUG 01469 M01S00019.@000004 +++| VDTDMP$; 01470 M01S00020.@000004 +++|*ENDIF 01471 M01S00021.@000004 +++| VDTWRR$(TTYO,RCL); # WRITER MACRO # 01472 M01S00022.@000004 +++| CONTROL FI; 01473 M01S00023.@000004 +++| 01474 M01S00024.@000004 +++| IOEND # VDTFOS # 01475 M01S00025.@000004 +++|CONTROL EJECT; 01476 M01S00026.@000004 +++| 01477 M01S00364.tdutab +++|PROC VDTOPN; 01478 M01S00365.tdutab +++|# TITLE VDTOPN - INITIALIZE TERMIO MODULE. # 01479 M01S00366.tdutab +++| 01480 M01S00367.tdutab +++| IOBEGIN(VDTOPN) 01481 M01S00368.tdutab +++| 01482 M01S00369.tdutab +++|# 01483 M01S00370.tdutab +++|** VDTOPN - INITIALIZE TERMIO MODULE. 01484 M01S00371.tdutab +++|* 01485 M01S00372.tdutab +++|* *VDTOPN* OPENS THE INPUT AND OUTPUT FETS AND INITIALIZES 01486 M01S00373.tdutab +++|* THEM. 01487 M01S00374.tdutab +++|* 01488 M01S00375.tdutab +++|* PROC VDTOPN 01489 M01S00376.tdutab +++|* 01490 M01S00377.tdutab +++|* ENTRY INTERACT - WHETHER TRULY INTERACTIVE (SINGLE EDITOR). 01491 M01S00378.tdutab +++|* 01492 M01S00379.tdutab +++|* EXIT TTYI, TTYO - FETS ARE INITIALIZED. 01493 M01S00380.tdutab +++|* LIST OF FILES IS SET UP. 01494 M01S00381.tdutab +++|* 01495 M01S00382.tdutab +++|* CALLS MAKEFET (INTERNAL) (STANDALONE ONLY). 01496 M01S00383.tdutab +++|* MAKEFET (EXTERNAL) (SINGLE-EDITOR ONLY).
Line S00384 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01497 M02S00384.tdutab1 ---|* SETLOF (SINGLE OR STANDALONE).
Line S00011 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01498 M02S00011.@000002 ---|* SETLOF (SINGLE-EDITOR ONLY).
Line S00012 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01499 M02S00012.@000002 ---|* VDTOPN$ (STANDALONE ONLY). 01500 M01S00024.@000002 +++|*IF UNDEF,CRM 01501 M01S00025.@000002 +++|* VDTLOF$ (SINGLE EDITOR OR STANDALONE). 01502 M01S00026.@000002 +++|*ELSE 01503 M01S00027.@000002 +++|* VDTOPN$ (CRM STANDALONE ONLY). 01504 M01S00028.@000002 +++|*ENDIF 01505 M01S00385.tdutab +++|* 01506 M01S00386.tdutab +++|* NOTE CURRENTLY A NO-OP FOR MULTI-EDITOR. 01507 M01S00387.tdutab +++|# 01508 M01S00388.tdutab +++| 01509 M01S00389.tdutab +++|# START OF SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY # 01510 M01S00390.tdutab +++| 01511 M01S00391.tdutab +++|*IF UNDEF EDITOR 01512 M01S00392.tdutab +++| DEF INTERACT #TRUE#; # INTERACTIVE TERMINALS # 01513 M01S00393.tdutab +++| 01514 M01S00394.tdutab +++| 01515 M01S00395.tdutab +++| PROC MAKEFET(FET,NAME,BUFFER,LENGTH); 01516 M01S00396.tdutab +++|# TITLE MAKEFET - MAKE A FET. # 01517 M01S00397.tdutab +++| 01518 M01S00398.tdutab +++| BEGIN # MAKEFET # 01519 M01S00399.tdutab +++| 01520 M01S00400.tdutab +++|# 01521 M01S00401.tdutab +++|** MAKEFET - MAKE A FET. 01522 M01S00402.tdutab +++|* 01523 M01S00403.tdutab +++|* *MAKEFET* SETS UP THE FET AND INITIALIZES IT. 01524 M01S00404.tdutab +++|* 01525 M01S00405.tdutab +++|* PROC MAKEFET(FET,NAME,BUFFER,LENGTH) 01526 M01S00406.tdutab +++|* 01527 M01S00407.tdutab +++|* ENTRY NAME - FET NAME. 01528 M01S00408.tdutab +++|* BUFFER - FIRST ADDRESS. 01529 M01S00409.tdutab +++|* LENGTH - FET LENGTH. 01530 M01S00410.tdutab +++|* 01531 M01S00411.tdutab +++|* EXIT FET INITIALIZED. 01532 M01S00412.tdutab +++|# 01533 M01S00413.tdutab +++| 01534 M01S00414.tdutab +++| ARRAY FET [0:0] S(5); 01535 M01S00415.tdutab +++| BEGIN # ARRAY FET # 01536 M01S00416.tdutab +++| ITEM FETNAME C(00,00,07); # FET NAME # 01537 M01S00417.tdutab +++| ITEM FETCODE U(00,42,18); # FET STATUS CODES # 01538 M01S00418.tdutab +++| ITEM FETFIRST I(01,00,60); # FIRST ADDRESS # 01539 M01S00419.tdutab +++| ITEM FETIN I(02,00,60); # IN ADDRESS # 01540 M01S00420.tdutab +++| ITEM FETOUT I(03,00,60); # OUT ADDRESS # 01541 M01S00421.tdutab +++| ITEM FETLIMIT I(04,00,60); # LIMIT ADDRESS # 01542 M01S00422.tdutab +++| END # ARRAY FET # 01543 M01S00423.tdutab +++| 01544 M01S00424.tdutab +++| ITEM NAME C(07); # FET NAME # 01545 M01S00425.tdutab +++| ARRAY BUFFER [0:0] P(1);; # FIRST ADDRESS # 01546 M01S00426.tdutab +++| ITEM LENGTH I; # FET LENGTH # 01547 M01S00427.tdutab +++| ITEM TMP1 I; # TEMPORARY STORAGE # 01548 M01S00428.tdutab +++| 01549 M01S00429.tdutab +++| FETNAME=NAME; 01550 M01S00430.tdutab +++| FOR TMP1=0 STEP 1 UNTIL 6 DO 01551 M01S00431.tdutab +++| BEGIN 01552 M01S00432.tdutab +++| IF C<TMP1,1>FETNAME EQ " " THEN C<TMP1,1>FETNAME=0; 01553 M01S00433.tdutab +++| END 01554 M01S00434.tdutab +++| FETCODE=1; 01555 M01S00435.tdutab +++| FETFIRST=LOC(BUFFER); 01556 M01S00436.tdutab +++| FETIN=FETFIRST; 01557 M01S00437.tdutab +++| FETOUT=FETFIRST; 01558 M01S00438.tdutab +++| FETLIMIT=FETFIRST+LENGTH; 01559 M01S00439.tdutab +++| 01560 M01S00440.tdutab +++| END # MAKEFET # 01561 M01S00441.tdutab +++| 01562 M01S00442.tdutab +++|*ENDIF 01563 M01S00443.tdutab +++|# END OF MODIFY CONDITIONAL FOR MAKEFET # 01564 M01S00444.tdutab +++| 01565 M01S00445.tdutab +++|# START OF MAIN-LINE CODE FOR VDTOPN # 01566 M01S00446.tdutab +++| 01567 M01S00447.tdutab +++| CONTROL IFEQ SINGLE,1; 01568 M01S00448.tdutab +++| MAKEFET(TTYI,INPTNAM,TTYIBF,TTYIBUFSIZ);
Line S00449 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01569 M02S00449.tdutab1 ---| MAKEFET(TTYO,OUTPNAM,TTYOBF,TTYOBUFSIZ);
Line S00450 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01570 M02S00450.tdutab1 ---| IF INTERACT THEN
Line S00451 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01571 M02S00451.tdutab1 ---| BEGIN
Line S00452 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01572 M02S00452.tdutab1 ---| B<12,18>LISTFETPTR=LOC(FETLIST);
Line S00453 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01573 M02S00453.tdutab1 ---| FETLSTNAM=TTYONM;
Line S00454 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01574 M02S00454.tdutab1 ---| FETLSTLOC=LOC(TTYO);
Line S00455 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01575 M02S00455.tdutab1 ---| TTYOFB=TRUE;
Line S00456 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01576 M02S00456.tdutab1 ---| VDTLOF$(LISTFETPTR); # SETLOF MACRO #
Line S00457 Modification History | |
---|---|
M01 (Added by) | tdutab |
M02 (Updated by) | tdutab1 |
Seq # *Modification Id* Act ----------------------------+ 01577 M02S00457.tdutab1 ---| END
Line S00013 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01578 M02S00013.@000002 ---| CONTROL IFEQ EDITORVDT,1;
Line S00014 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01579 M02S00014.@000002 ---| MAKEFET(TTYO,OUTPNAM,TTYOBF,TTYOBUFSIZ);
Line S00015 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01580 M02S00015.@000002 ---| IF INTERACT THEN
Line S00016 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01581 M02S00016.@000002 ---| BEGIN
Line S00017 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01582 M02S00017.@000002 ---| B<12,18>LISTFETPTR=LOC(FETLIST);
Line S00018 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01583 M02S00018.@000002 ---| FETLSTNAM=TTYONM;
Line S00019 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01584 M02S00019.@000002 ---| FETLSTLOC=LOC(TTYO);
Line S00020 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01585 M02S00020.@000002 ---| TTYOFB=TRUE;
Line S00021 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01586 M02S00021.@000002 ---| VDTLOF$(LISTFETPTR); # SETLOF MACRO #
Line S00022 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01587 M02S00022.@000002 ---| END
Line S00023 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01588 M02S00023.@000002 ---| CONTROL FI;
Line S00024 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01589 M02S00024.@000002 ---| CONTROL IFEQ EDITORVDT,0;
Line S00025 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01590 M02S00025.@000002 ---| VDTOPN$(LISTFETPTR); # OPEN CRM OUTPUT FILE #
Line S00026 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01591 M02S00026.@000002 ---| P<TTYO>=LISTFETPTR; # SET BASED ARRAY ADDRESS #
Line S00027 Modification History | |
---|---|
M01 (Added by) | tdutab1 |
M02 (Yanked) (Updated by) | @000002 |
Seq # *Modification Id* Act ----------------------------+ 01592 M02S00027.@000002 ---| CONTROL FI; 01593 M01S00029.@000002 +++| 01594 M01S00030.@000002 +++| # START OF MODIFY CONDITIONAL FOR TERMINAL OUTPUT. # 01595 M01S00031.@000002 +++| 01596 M01S00032.@000002 +++|*IF UNDEF,CRM 01597 M01S00033.@000002 +++| MAKEFET(TTYO,OUTPNAM,TTYOBF,TTYOBUFSIZ); 01598 M01S00034.@000002 +++| IF INTERACT THEN 01599 M01S00035.@000002 +++| BEGIN 01600 M01S00036.@000002 +++| B<12,18>LISTFETPTR=LOC(FETLIST); 01601 M01S00037.@000002 +++| FETLSTNAM=TTYONM; 01602 M01S00038.@000002 +++| FETLSTLOC=LOC(TTYO); 01603 M01S00039.@000002 +++| TTYOFB=TRUE; 01604 M01S00040.@000002 +++| VDTLOF$(LISTFETPTR); # SETLOF MACRO # 01605 M01S00041.@000002 +++| END 01606 M01S00042.@000002 +++|*ELSE 01607 M01S00043.@000002 +++| VDTOPN$(LISTFETPTR); # OPEN CRM OUTPUT FILE # 01608 M01S00044.@000002 +++| P<TTYO>=LISTFETPTR; # SET BASED ARRAY ADDRESS # 01609 M01S00045.@000002 +++|*ENDIF 01610 M01S00046.@000002 +++| 01611 M01S00047.@000002 +++| # END OF MODIFY CONDITIONAL FOR TERMINAL OUTPUT. # 01612 M01S00048.@000002 +++| 01613 M01S00458.tdutab +++| CONTROL FI; 01614 M01S00459.tdutab +++| 01615 M01S00460.tdutab +++| IOEND # VDTOPN # 01616 M01S00017.@000003 +++|*IF DEF,DEBUG 01617 M01S00018.@000003 +++|CONTROL EJECT; 01618 M01S00019.@000003 +++| 01619 M01S00020.@000003 +++|PROC VDTDMP$; 01620 M01S00021.@000003 +++|# TITLE VDTDMP$ - DUMP OUTPUT DATA TO XXXDUMP. # 01621 M01S00022.@000003 +++| 01622 M01S00023.@000003 +++| BEGIN # VDTDMP$ # 01623 M01S00024.@000003 +++| 01624 M01S00025.@000003 +++|# 01625 M01S00026.@000003 +++|** VDTDMP$ - DUMP OUTPUT DATA TO XXXDUMP. 01626 M01S00027.@000003 +++|* 01627 M01S00028.@000003 +++|* THIS PROCEDURE DUMPS THE CURRENT CONTENTS OF THE OUPUT FET TO 01628 M01S00029.@000003 +++|* THE LOCAL FILE *XXXDUMP* OR DEBUGGING ANALYSIS. 01629 M01S00030.@000003 +++|* 01630 M01S00031.@000003 +++|* PROC VDTDMP$. 01631 M01S00032.@000003 +++|* 01632 M01S00033.@000003 +++|* EXIT DATA DUMPED TO XXXDUMP. 01633 M01S00034.@000003 +++|* 01634 M01S00035.@000003 +++|* CALLS VDTWRR$. 01635 M01S00036.@000003 +++|# 01636 M01S00037.@000003 +++| 01637 M01S00038.@000003 +++| ARRAY XXXDUMP [0:0] P(5); 01638 M01S00039.@000003 +++| BEGIN 01639 M01S00040.@000003 +++| ITEM DUMPLFN U(00,00,60) = [O"3030 3004 2515 2000 0001"]; 01640 M01S00041.@000003 +++| ITEM DUMPFT U(01,42,18); 01641 M01S00042.@000003 +++| ITEM DUMPIN U(02,42,18); 01642 M01S00043.@000003 +++| ITEM DUMPOT U(03,42,18); 01643 M01S00044.@000003 +++| ITEM DUMPLM U(04,42,18); 01644 M01S00045.@000003 +++| END 01645 M01S00046.@000003 +++| 01646 M01S00047.@000003 +++| DUMPFT = TTYOFT; # SET FET POINTERS # 01647 M01S00048.@000003 +++| DUMPIN = TTYOIN; 01648 M01S00049.@000003 +++| DUMPOT = TTYOOT; 01649 M01S00050.@000003 +++| DUMPIN = TTYOLM; 01650 M01S00051.@000003 +++| VDTWRR$(XXXDUMP,1); # DUMP BUFFER # 01651 M01S00052.@000003 +++| 01652 M01S00053.@000003 +++| END # VDTDMP$ # 01653 M01S00054.@000003 +++|*ENDIF 01654 M01S00461.tdutab +++| 01655 M01S00462.tdutab +++| 01656 M01S00463.tdutab +++|END # TERMIO # 01657 M01S00464.tdutab +++| 01658 M01S00465.tdutab +++|TERM
cdc/nos2.source/opl.opl871/deck/tdutab.txt ยท Last modified: by 127.0.0.1