User Tools

Site Tools


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