Seq # *Modification Id* Act
----------------------------+
00001 M00S00001.tduex +++|*NOSEQ
00002 M00S00002.tduex +++|*WIDTH 95
00003 M00S00003.tduex +++|MODULE tduex;
00004 M00S00004.tduex +++|
00005 M00S00005.tduex +++|?? SET ( CHKALL := ON ), RIGHT := 110 ??
00006 M00S00006.tduex +++|
00007 M00S00007.tduex +++|{ Program: TDUEX }
Line S00001 Modification History |
M01 (Added by) | 281l803 |
Seq # *Modification Id* Act
----------------------------+
00008 M01S00001.281l803 +++|{ Copyright Control Data Systems Inc. 1992. }
00009 M00S00008.tduex +++|{ Written: 1/84 by R. Lindsey }
00010 M00S00009.tduex +++|{ Version: Cyber 170, version 1 }
00011 M00S00010.tduex +++|{ Purpose: Compile terminal definitions for the use of the terminal- }
00012 M00S00011.tduex +++|{ independent handler VIRTERM. This handler is used by FSE, }
00013 M00S00012.tduex +++|{ SCREEN, and possibly other programs. }
00014 M00S00013.tduex +++|{ TDU takes its input ("source") in the form of SCL-like statements}
00015 M00S00014.tduex +++|{ which define the characteristics of the particular terminal. }
00016 M00S00015.tduex +++|{ As output ("object") it produces a Virtual Terminal Table (VTT) }
00017 M00S00016.tduex +++|{ which is in the form of COMPASS source code. This source is }
00018 M00S00017.tduex +++|{ in turn fed through COMPASS which produces a relocatable version,}
00019 M00S00018.tduex +++|{ which is then linked to produce the absolute version that can be }
00020 M00S00019.tduex +++|{ directly loaded by VIRTERM. }
00021 M00S00020.tduex +++|{ Modules: The TDU program is composed of four separately compiled modules: }
00022 M00S00021.tduex +++|{ o TDUEX (this module) is the main program. It calls procedures }
00023 M00S00022.tduex +++|{ from the other modules. This module also supplies file- and }
00024 M00S00023.tduex +++|{ error-handling procedures used by all the other modules. }
00025 M00S00024.tduex +++|{ o TDUIN performs the input handling functions. It reads the }
00026 M00S00025.tduex +++|{ TDL source file, translates it into intermediate form, and }
00027 M00S00026.tduex +++|{ writes that intermediate output to internal tables managed }
00028 M00S00027.tduex +++|{ by TDUTAB. }
00029 M00S00028.tduex +++|{ o TDUTAB manages the intermediate data produced by TDUIN and }
00030 M00S00029.tduex +++|{ consumed by TDUOUT. It hides, as much as possible, all the }
00031 M00S00030.tduex +++|{ details of the tables which contain this data. This serves }
00032 M00S00031.tduex +++|{ to isolate TDUIN and TDUOUT from changes made in each other. }
00033 M00S00032.tduex +++|{ o TDUOUT produces the output table from the intermediate data. }
00034 M00S00033.tduex +++|{ It hides all details of target machine word and byte sizes, }
00035 M00S00034.tduex +++|{ alignment, and object code format (e.g., the CYBER 170 }
00036 M00S00035.tduex +++|{ version produces COMPASS source code). }
00037 M00S00036.tduex +++|
00038 M00S00037.tduex +++|{ ?? PUSH ( LIST := OFF ) ?? { un-comment this list for no comm list }
00039 M00S00038.tduex +++| ?? PUSH ( LIST := ON ) ?? { un-comment this line for commdeck list}
00040 M00S00039.tduex +++|
00041 M00S00040.tduex +++|?? NEWTITLE := 'File I/O' ??
00042 M00S00041.tduex +++|
00043 M00S00042.tduex +++|{ ***************************************** }
00044 M00S00043.tduex +++|{ common deck pxiotyp, for file i/o follows }
00045 M00S00044.tduex +++|*CALL PXIOTYP
00046 M00S00045.tduex +++|
00047 M00S00046.tduex +++|{ ********************************************* }
00048 M00S00047.tduex +++|{ common deck lgz, for legible file i/o follows }
00049 M00S00048.tduex +++|*CALLALL LGZ
00050 M00S00049.tduex +++|
00051 M00S00050.tduex +++|{ ************************************ }
00052 M00S00051.tduex +++|{ common deck fz, for file i/o follows }
00053 M00S00052.tduex +++|*CALLALL FZ
00054 M00S00053.tduex +++|
00055 M00S00054.tduex +++|?? OLDTITLE ??
00056 M00S00055.tduex +++|?? POP ??
00057 M00S00056.tduex +++|?? NEWTITLE := 'Error handling, initialization, and messages' ??
00058 M00S00057.tduex +++|?? EJECT ??
00059 M00S00058.tduex +++|
00060 M00S00059.tduex +++|{ ************************************************************** }
00061 M00S00060.tduex +++|{ constants and types for procedures which are XDCL'ed in TDUEX: }
00062 M00S00061.tduex +++|*CALL ZTDCERR
00063 M00S00062.tduex +++|*CALL ZTDTFIL
00064 M00S00063.tduex +++|
00065 M00S00064.tduex +++|{ ************************ }
00066 M00S00065.tduex +++|{ parser error conditions: }
00067 M00S00066.tduex +++|*CALL ZTDAMT0
00068 M00S00067.tduex +++|*CALL ZTDCCON
00069 M00S00068.tduex +++|*CALL ZTDCCLC
00070 M00S00069.tduex +++|
00071 M00S00070.tduex +++|{ **************************** }
00072 M00S00071.tduex +++|{ initialization & termination }
00073 M00S00072.tduex +++|*CALL ZUTPCSA
00074 M00S00073.tduex +++|*CALL ZOSPINI
00075 M00S00074.tduex +++|*CALL ZOSPEND
00076 M00S00075.tduex +++|
00077 M00S00076.tduex +++|{ ************************* }
00078 M00S00077.tduex +++|{ status message formatting }
00079 M00S00078.tduex +++|*CALL ZOSPFMG
00080 M00S00079.tduex +++|
00081 M00S00080.tduex +++|?? OLDTITLE ??
00082 M00S00081.tduex +++|
00083 M00S00082.tduex +++| PROCEDURE [XREF] read_tdl_statements;
00084 M00S00083.tduex +++|
00085 M00S00084.tduex +++| PROCEDURE [XREF] initialize_tables;
00086 M00S00085.tduex +++|
00087 M00S00086.tduex +++| PROCEDURE [XREF] write_tables;
00088 M00S00087.tduex +++|
00089 M00S00088.tduex +++| PROCEDURE [XREF] optimize_tables;
00090 M00S00089.tduex +++|
00091 M00S00090.tduex +++| ?? EJECT ??
00092 M00S00091.tduex +++|{ ?? POP ??
00093 M00S00092.tduex +++|
00094 M00S00093.tduex +++| VAR
00095 M00S00094.tduex +++| tdu_version_num: [XDCL] INTEGER := 1; { version 1 }
00096 M00S00095.tduex +++|
00097 M00S00096.tduex +++| VAR
00098 M00S00097.tduex +++| error_flag: BOOLEAN := FALSE, { an error has occurred }
00099 M00S00098.tduex +++|
00100 M00S00099.tduex +++| input_file,
00101 M00S00100.tduex +++| output_file,
00102 M00S00101.tduex +++| error_file: file,
00103 M00S00102.tduex +++| input_file_name, { from control statement }
00104 M00S00103.tduex +++| output_file_name,
00105 M00S00104.tduex +++| error_file_name: ost$name_descriptor,
00106 M00S00105.tduex +++|
00107 M00S00106.tduex +++| status: ost$status,
00108 M00S00107.tduex +++|
00109 M00S00108.tduex +++| command_name: ost$name_descriptor,
00110 M00S00109.tduex +++| control_statement_arguments: ARRAY [ 1 .. 3 ] OF STRING(7)
00111 M00S00110.tduex +++| := [ 'TDUIN', 'TDUOUT', 'OUTPUT' ];
00112 M00S00111.tduex +++|
00113 M00S00112.tduex +++| ?? NEWTITLE := 'open_file' ??
00114 M00S00113.tduex +++| ?? EJECT ??
00115 M00S00114.tduex +++|
00116 M00S00115.tduex +++| PROCEDURE [XDCL] open_file (file_id: file_selector;
00117 M00S00116.tduex +++| input_output: input_output_selector;
00118 M00S00117.tduex +++| code_set: code_set_selector);
00119 M00S00118.tduex +++| VAR
00120 M00S00119.tduex +++| f: file,
00121 M00S00120.tduex +++| f_name: ost$name_descriptor;
00122 M00S00121.tduex +++|
00123 M00S00122.tduex +++| CASE file_id OF
00124 M00S00123.tduex +++| = input_file_sel =
00125 M00S00124.tduex +++| f := input_file;
00126 M00S00125.tduex +++| f_name := input_file_name;
00127 M00S00126.tduex +++| = output_file_sel =
00128 M00S00127.tduex +++| f := output_file;
00129 M00S00128.tduex +++| f_name := output_file_name;
00130 M00S00129.tduex +++| = error_file_sel =
00131 M00S00130.tduex +++| f := error_file;
00132 M00S00131.tduex +++| f_name := error_file_name;
00133 M00S00132.tduex +++| CASEND;
00134 M00S00133.tduex +++| CASE input_output OF
00135 M00S00134.tduex +++| = input_sel =
00136 M00S00135.tduex +++| lg#open(f, f_name.str(1,f_name.length), old#, input#, first#);
00137 M00S00136.tduex +++| = output_sel =
00138 M00S00137.tduex +++| lg#open(f, f_name.str(1,f_name.length), new#, output#, first#);
00139 M00S00138.tduex +++| CASEND;
00140 M00S00139.tduex +++| CASE code_set OF
00141 M00S00140.tduex +++| = ascii_sel =
00142 M00S00141.tduex +++| ;
00143 M00S00142.tduex +++| = ascii64_sel =
00144 M00S00143.tduex +++| lg#codeset(f, ascii64#); { use 6-bit display code }
00145 M00S00144.tduex +++| CASEND;
00146 M00S00145.tduex +++| CASE file_id OF
00147 M00S00146.tduex +++| = input_file_sel =
00148 M00S00147.tduex +++| input_file := f;
00149 M00S00148.tduex +++| = output_file_sel =
00150 M00S00149.tduex +++| output_file := f;
00151 M00S00150.tduex +++| = error_file_sel =
00152 M00S00151.tduex +++| error_file := f;
00153 M00S00152.tduex +++| CASEND;
00154 M00S00153.tduex +++| PROCEND open_file;
00155 M00S00154.tduex +++| ?? OLDTITLE ??
00156 M00S00155.tduex +++|
00157 M00S00156.tduex +++| ?? NEWTITLE := 'close_file' ??
00158 M00S00157.tduex +++| ?? SKIP := 4 ??
00159 M00S00158.tduex +++|
00160 M00S00159.tduex +++| PROCEDURE [XDCL] close_file (file_id: file_selector);
00161 M00S00160.tduex +++| CASE file_id OF
00162 M00S00161.tduex +++| = input_file_sel =
00163 M00S00162.tduex +++| lg#close(input_file, first#);
00164 M00S00163.tduex +++| = output_file_sel =
00165 M00S00164.tduex +++| lg#close(output_file, first#);
00166 M00S00165.tduex +++| = error_file_sel =
00167 M00S00166.tduex +++| lg#close(error_file, first#);
00168 M00S00167.tduex +++| CASEND;
00169 M00S00168.tduex +++| PROCEND close_file;
00170 M00S00169.tduex +++| ?? OLDTITLE ??
00171 M00S00170.tduex +++|
00172 M00S00171.tduex +++| ?? NEWTITLE := 'get_file' ??
00173 M00S00172.tduex +++| ?? EJECT ??
00174 M00S00173.tduex +++|
00175 M00S00174.tduex +++| PROCEDURE [XDCL] get_file (file_id: file_selector;
00176 M00S00175.tduex +++| VAR text: STRING(*);
00177 M00S00176.tduex +++| VAR text_len: INTEGER;
00178 M00S00177.tduex +++| VAR eof_flag: BOOLEAN);
00179 M00S00178.tduex +++| VAR
00180 M00S00179.tduex +++| structure_mark: file_mark;
00181 M00S00180.tduex +++|
00182 M00S00181.tduex +++| text := '';
00183 M00S00182.tduex +++| CASE file_id OF
00184 M00S00183.tduex +++| = input_file_sel =
00185 M00S00184.tduex +++| lg#get(input_file, text_len, text);
00186 M00S00185.tduex +++| f#mark(input_file, structure_mark);
00187 M00S00186.tduex +++| = output_file_sel =
00188 M00S00187.tduex +++| lg#get(output_file, text_len, text);
00189 M00S00188.tduex +++| f#mark(output_file, structure_mark);
00190 M00S00189.tduex +++| = error_file_sel =
00191 M00S00190.tduex +++| lg#get(error_file, text_len, text);
00192 M00S00191.tduex +++| f#mark(error_file, structure_mark);
00193 M00S00192.tduex +++| CASEND;
00194 M00S00193.tduex +++| IF ( structure_mark = eof# ) OR
00195 M00S00194.tduex +++| ( structure_mark = eoi# ) THEN
00196 M00S00195.tduex +++| eof_flag := TRUE
00197 M00S00196.tduex +++| ELSE
00198 M00S00197.tduex +++| eof_flag := FALSE
00199 M00S00198.tduex +++| IFEND
00200 M00S00199.tduex +++| PROCEND get_file;
00201 M00S00200.tduex +++| ?? OLDTITLE ??
00202 M00S00201.tduex +++|
00203 M00S00202.tduex +++| ?? NEWTITLE := 'put_file' ??
00204 M00S00203.tduex +++| ?? SKIP := 4 ??
00205 M00S00204.tduex +++|
00206 M00S00205.tduex +++| PROCEDURE [XDCL] put_file (file_id: file_selector;
00207 M00S00206.tduex +++| text: STRING(*));
00208 M00S00207.tduex +++| CASE file_id OF
00209 M00S00208.tduex +++| = input_file_sel =
00210 M00S00209.tduex +++| lg#put(input_file, text);
00211 M00S00210.tduex +++| = output_file_sel =
00212 M00S00211.tduex +++| lg#put(output_file, text);
00213 M00S00212.tduex +++| = error_file_sel =
00214 M00S00213.tduex +++| lg#put(error_file, text);
00215 M00S00214.tduex +++| CASEND
00216 M00S00215.tduex +++| PROCEND put_file;
00217 M00S00216.tduex +++| ?? OLDTITLE ??
00218 M00S00217.tduex +++|
00219 M00S00218.tduex +++| ?? NEWTITLE := 'report_error' ??
00220 M00S00219.tduex +++| ?? EJECT ??
00221 M00S00220.tduex +++|
00222 M00S00221.tduex +++| PROCEDURE [XDCL] report_error (text: STRING(*));
00223 M00S00222.tduex +++| VAR
00224 M00S00223.tduex +++| str_ndx,
00225 M00S00224.tduex +++| str_length: INTEGER;
00226 M00S00225.tduex +++|
00227 M00S00226.tduex +++| IF NOT error_flag THEN
00228 M00S00227.tduex +++| open_file(error_file_sel, output_sel, ascii_sel);
00229 M00S00228.tduex +++| error_flag := TRUE
00230 M00S00229.tduex +++| IFEND;
00231 M00S00230.tduex +++| str_ndx := 1;
00232 M00S00231.tduex +++| WHILE str_ndx <= STRLENGTH(text) DO
00233 M00S00232.tduex +++| str_length := ( STRLENGTH(text) - str_ndx ) + 1;
00234 M00S00233.tduex +++| IF str_length > 80 THEN
00235 M00S00234.tduex +++| str_length := 80
00236 M00S00235.tduex +++| IFEND;
00237 M00S00236.tduex +++| put_file(error_file_sel, text(str_ndx, str_length));
00238 M00S00237.tduex +++| str_ndx := str_ndx + str_length
00239 M00S00238.tduex +++| WHILEND
00240 M00S00239.tduex +++| PROCEND report_error;
00241 M00S00240.tduex +++| ?? OLDTITLE ??
00242 M00S00241.tduex +++|
00243 M00S00242.tduex +++| ?? NEWTITLE := 'error_status' ??
00244 M00S00243.tduex +++| ?? EJECT ??
00245 M00S00244.tduex +++|
00246 M00S00245.tduex +++| PROCEDURE [XDCL] error_status (status: ost$status);
00247 M00S00246.tduex +++| VAR
00248 M00S00247.tduex +++| reentry,
00249 M00S00248.tduex +++| message_complete: BOOLEAN,
00250 M00S00249.tduex +++| length: 0 .. osc$max_string_length,
00251 M00S00250.tduex +++| msg: STRING(79);
00252 M00S00251.tduex +++|
00253 M00S00252.tduex +++| report_error(' ');
00254 M00S00253.tduex +++| reentry := FALSE;
00255 M00S00254.tduex +++| REPEAT
00256 M00S00255.tduex +++| osp$format_message(reentry, message_complete, length,
00257 M00S00256.tduex +++| msg, status);
00258 M00S00257.tduex +++| report_error(msg(1,length));
00259 M00S00258.tduex +++| reentry := TRUE;
00260 M00S00259.tduex +++| UNTIL message_complete;
00261 M00S00260.tduex +++| PROCEND error_status;
00262 M00S00261.tduex +++| ?? OLDTITLE ??
00263 M00S00262.tduex +++|
00264 M00S00263.tduex +++| ?? NEWTITLE := 'interpret_control_statement' ??
00265 M00S00264.tduex +++| ?? EJECT ??
00266 M00S00265.tduex +++|
00267 M00S00266.tduex +++| PROCEDURE interpret_control_statement;
00268 M00S00267.tduex +++| VAR
00269 M00S00268.tduex +++| command_line_pointer: ^STRING(*),
00270 M00S00269.tduex +++| command_line_index: clt$string_index;
00271 M00S00270.tduex +++|
00272 M00S00271.tduex +++| osp$initiate(command_name, command_line_pointer,
00273 M00S00272.tduex +++| command_line_index, status);
00274 M00S00273.tduex +++| utp$get_control_statement_args(control_statement_arguments);
00275 M00S00274.tduex +++| input_file_name.typ := clc$nos170_name;
00276 M00S00275.tduex +++| input_file_name.length := 7;
00277 M00S00276.tduex +++| input_file_name.str := control_statement_arguments[1];
00278 M00S00277.tduex +++| output_file_name.typ := clc$nos170_name;
00279 M00S00278.tduex +++| output_file_name.length := 7;
00280 M00S00279.tduex +++| output_file_name.str := control_statement_arguments[2];
00281 M00S00280.tduex +++| error_file_name.typ := clc$nos170_name;
00282 M00S00281.tduex +++| error_file_name.length := 7;
00283 M00S00282.tduex +++| error_file_name.str := control_statement_arguments[3]
00284 M00S00283.tduex +++| PROCEND interpret_control_statement;
00285 M00S00284.tduex +++| ?? OLDTITLE ??
00286 M00S00285.tduex +++| ?? EJECT ??
00287 M00S00286.tduex +++|
00288 M00S00287.tduex +++| PROGRAM tduex;
Line S00288 Modification History |
M01 (Removed by) | tduex1 |
Seq # *Modification Id* Act
----------------------------+
00289 M01S00288.tduex1 ---| utp$start_metrics_time;
00290 M00S00289.tduex +++| interpret_control_statement;
00291 M00S00290.tduex +++| initialize_tables;
00292 M00S00291.tduex +++| IF NOT error_flag THEN
00293 M00S00292.tduex +++| read_tdl_statements;
00294 M00S00293.tduex +++| IF NOT error_flag THEN
00295 M00S00294.tduex +++| optimize_tables;
00296 M00S00295.tduex +++| IF NOT error_flag THEN
00297 M00S00296.tduex +++| write_tables
00298 M00S00297.tduex +++| IFEND
00299 M00S00298.tduex +++| IFEND
00300 M00S00299.tduex +++| IFEND;
00301 M00S00300.tduex +++| IF error_flag THEN
00302 M00S00301.tduex +++| close_file(error_file_sel);
00303 M00S00302.tduex +++| { osp$set_status_abnormal(tdc_prod_code, tde_error_termination,
00304 M00S00303.tduex +++| { '', status)
00305 M00S00304.tduex +++| IFEND;
Line S00305 Modification History |
M01 (Removed by) | tduex1 |
Seq # *Modification Id* Act
----------------------------+
00306 M01S00305.tduex1 ---| utp$report_metrics_time('TDUEX');
00307 M00S00306.tduex +++| osp$terminate(command_name, status)
00308 M00S00307.tduex +++| PROCEND tduex;
00309 M00S00308.tduex +++|
00310 M00S00309.tduex +++|MODEND tduex;