Action unknown: copypageplugin__copy
cdc:nos2.source:opl.opl871:deck:virterm
Deck VIRTERM
Library Member Format: MODIFY
Listing Sections
- Deck VIRTERM Start
- Deck VIRTERM Part 1 (Line 2187)
- Deck VIRTERM Part 2 (Line 3968)
Source
Seq # *Modification Id* Act ----------------------------+ 00001 M00S00001.virterm +++|PROC VIRTERM; 00002 M00S00002.virterm +++| 00003 M00S00003.virterm +++|# TITLE VIRTERM - VIRTUAL TERMINAL INTERFACE. # 00004 M00S00004.virterm +++| 00005 M00S00005.virterm +++|BEGIN # VIRTERM # 00006 M00S00006.virterm +++| 00007 M00S00007.virterm +++|# 00008 M00S00008.virterm +++|*** VIRTERM - VIRTUAL TERMINAL INTERFACE. 00009 M00S00009.virterm +++|* 00010 M00S00010.virterm +++|* *VIRTERM* PROVIDES VIRTUAL TERMINAL OBJECT ROUTINES TO MAP 00011 M00S00011.virterm +++|* TO AND FROM TERMINAL-INDEPENDENT APPLICATION REQUESTS AND 00012 M00S00012.virterm +++|* TERMINAL-DEPENDENT CODE SEQUENCES. 00013 M00S00013.virterm +++|* 00014 M00S00014.virterm +++|* PROC VIRTERM 00015 M00S00015.virterm +++|* 00016 M00S00016.virterm +++|* ENTRY OBJECT ROUTINE CALLED. 00017 M00S00017.virterm +++|* 00018 M00S00018.virterm +++|* EXIT OBJECT ROUTINE EXECUTED. 00019 M00S00019.virterm +++|*
Line S00020 Modification History | |
---|---|
M01 (Removed by) | 281l803 |
Seq # *Modification Id* Act ----------------------------+ 00020 M01S00020.281l803 ---|* COPYRIGHT CONTROL DATA CORPORATION, 1984.
Line S00001 Modification History | |
---|---|
M01 (Added by) | 281l803 |
Seq # *Modification Id* Act ----------------------------+ 00021 M01S00001.281l803 +++|* COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. 00022 M00S00021.virterm +++|# 00023 M00S00022.virterm +++| 00024 M00S00023.virterm +++|DEF LISTCON #1#; # LIST COMDECKS # 00025 M00S00024.virterm +++| 00026 M00S00025.virterm +++|*IFCALL SINGLE,COMFSGL 00027 M00S00026.virterm +++|*IFCALL ONLY,COMFONL 00028 M00S00027.virterm +++|*IFCALL MULTI,COMFMLT 00029 M00S00028.virterm +++|*IFCALL EDITOR,COMFFSE 00030 M00S00029.virterm +++| 00031 M00S00030.virterm +++|# START OF CODE SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY # 00032 M00S00031.virterm +++| 00033 M00S00032.virterm +++|*NIFCALL EDITOR,COMFTIO 00034 M00S00033.virterm +++|*IF UNDEF,EDITOR 00035 M00S00034.virterm +++|DEF EDITORVDT #0#; # STANDALONE VERSION OF VIRTERM # 00036 M00S00035.virterm +++|DEF IOBEGIN(XXX) #BEGIN#; # BEGIN COMPOUND STATEMENT # 00037 M00S00036.virterm +++|DEF IOEND #END#; # END COMPOUND STATEMENT # 00038 M00S00037.virterm +++|DEF IORET #RETURN;#; # RETURN FROM SUBPROGRAM # 00039 M00S00038.virterm +++|DEF SINGLE #1#; # SINGLE-USER VERSION # 00040 M00S00039.virterm +++|DEF MULTI #0#; # NOT MULTI-USER # 00041 M00S00040.virterm +++| 00042 M00S00041.virterm +++|CONTROL PRESET; 00043 M00S00042.virterm +++|*ENDIF 00044 M00S00043.virterm +++| 00045 M00S00044.virterm +++|*IF UNDEF,QTRM 00046 M00S00045.virterm +++|DEF QTRMV #0#; # NOT QTRM VERSION # 00047 M00S00046.virterm +++|*ELSE 00048 M00S00047.virterm +++|DEF QTRMV #1#; # QTRM VERSION # 00049 M00S00048.virterm +++|*ENDIF 00050 M00S00049.virterm +++| 00051 M00S00050.virterm +++|# END OF CODE SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY # 00052 M00S00051.virterm +++|CONTROL EJECT; 00053 M00S00052.virterm +++| 00054 M00S00053.virterm +++|CONTROL IFEQ MULTI,1; # IF MULTI USER FSE VIRTERM # 00055 M00S00054.virterm +++| XREF ARRAY RENTSTK [1:MAXREENT] P(1); # SUBROUTINE STACK # 00056 M00S00055.virterm +++| BEGIN # ARRAY RENTSTK # 00057 M00S00056.virterm +++| ITEM RSTK I; # STACK WORD # 00058 M00S00057.virterm +++| END # ARRAY RENTSTK # 00059 M00S00058.virterm +++| XREF ITEM RSTKPTR I; # STACK POINTER # 00060 M00S00059.virterm +++|CONTROL FI; # END OF IF MULTI USER FSE # 00061 M00S00060.virterm +++| 00062 M00S00061.virterm +++|CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 00063 M00S00062.virterm +++| ARRAY TDUFET [0:0] P(5); # FET TO READ ZZZZTRM FILE # 00064 M00S00063.virterm +++| BEGIN 00065 M00S00064.virterm +++| ITEM TDUNAME C(00,00,07) = ["ZZZZTRM"]; # FILE NAME # 00066 M00S00065.virterm +++| ITEM TDUCODE U(00,42,18) = [1]; # STATUS CODE # 00067 M00S00066.virterm +++| ITEM TDUFET1 U(01,00,42) = [0]; # FET + 1 # 00068 M00S00067.virterm +++| ITEM TDUFIRST U(01,42,18) = [0]; # FIRST # 00069 M00S00068.virterm +++| ITEM TDUFET2 U(02,00,42) = [0]; # FET + 2 # 00070 M00S00069.virterm +++| ITEM TDUIN U(02,42,18) = [0]; # IN # 00071 M00S00070.virterm +++| ITEM TDUFET3 U(03,00,42) = [0]; # FET + 3 # 00072 M00S00071.virterm +++| ITEM TDUOUT U(03,42,18) = [0]; # OUT # 00073 M00S00072.virterm +++| ITEM TDUFET4 U(04,00,42) = [0]; # FET + 4 # 00074 M00S00073.virterm +++| ITEM TDULIMIT U(04,42,18) = [0]; # LIMIT # 00075 M00S00074.virterm +++| END 00076 M00S00075.virterm +++| 00077 M00S00076.virterm +++| DEF TDUBUFFLEN #O"301"#; # *TDU* BUFFER LENGTH # 00078 M00S00077.virterm +++| 00079 M00S00078.virterm +++| ARRAY TDUBUF [0:0] P(TDUBUFFLEN);; # *TDU* BUFFER # 00080 M00S00079.virterm +++| 00081 M00S00080.virterm +++| BASED ARRAY TEMPSTORE [0:0] P(1); 00082 M00S00081.virterm +++| BEGIN # USED TO MOVE *TDU* TABLE # 00083 M00S00082.virterm +++| ITEM TEMPWORD U; # WORD # 00084 M00S00083.virterm +++| END 00085 M00S00084.virterm +++| 00086 M00S00085.virterm +++|ARRAY T3270RTA [0:63] P(1); 00087 M00S00086.virterm +++| BEGIN # 3270 RELATIVE TO ABSOLUTE # 00088 M00S00087.virterm +++| ITEM RTA3270 U(00,00,60) = [ 00089 M00S00088.virterm +++| X"20", X"41", X"42", X"43", X"44", X"45", X"46", X"47", 00090 M00S00089.virterm +++| X"48", X"49", X"5B", X"2E", X"3C", X"28", X"2B", X"21", 00091 M00S00090.virterm +++| X"26", X"4A", X"4B", X"4C", X"4D", X"4E", X"4F", X"50", 00092 M00S00091.virterm +++| X"51", X"52", X"5D", X"24", X"2A", X"29", X"3B", X"5E", 00093 M00S00092.virterm +++| X"2D", X"2F", X"53", X"54", X"55", X"56", X"57", X"58", 00094 M00S00093.virterm +++| X"59", X"5A", X"7C", X"2C", X"25", X"5F", X"3E", X"3F", 00095 M00S00094.virterm +++| X"30", X"31", X"32", X"33", X"34", X"35", X"36", X"37", 00096 M00S00095.virterm +++| X"38", X"39", X"3A", X"23", X"40", X"27", X"3D", X"22" ]; 00097 M00S00096.virterm +++| END 00098 M00S00097.virterm +++| 00099 M00S00098.virterm +++|ARRAY T3270ATR [0:127] P(1); 00100 M00S00099.virterm +++| BEGIN # 3270 ABSOLUTE TO RELATIVE # 00101 M00S00100.virterm +++| ITEM ATR3270 U(00,00,60) = [ 00102 M00S00101.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 00-07 # 00103 M00S00102.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 08-0F # 00104 M00S00103.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 10-17 # 00105 M00S00104.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 18-1F # 00106 M00S00105.virterm +++| X"00", X"0F", X"3F", X"3B", X"1B", X"2C", X"10", X"3D", # 20-27 #
Line S00106 Modification History | |
---|---|
M01 (Removed by) | virte10 |
Seq # *Modification Id* Act ----------------------------+ 00107 M01S00106.virte10 ---| X"0D", X"1D", X"1C", X"0E", X"00", X"20", X"0B", X"21", # 28-2F #
Line S00001 Modification History | |
---|---|
M01 (Added by) | virte10 |
Seq # *Modification Id* Act ----------------------------+ 00108 M01S00001.virte10 +++| X"0D", X"1D", X"1C", X"0E", X"2B", X"20", X"0B", X"21", # 28-2F # 00109 M00S00107.virterm +++| X"30", X"31", X"32", X"33", X"34", X"35", X"36", X"37", # 30-30 # 00110 M00S00108.virterm +++| X"38", X"39", X"3A", X"1E", X"0C", X"3E", X"2E", X"2F", # 38-3F # 00111 M00S00109.virterm +++| X"3C", X"01", X"02", X"03", X"04", X"05", X"06", X"07", # 40-40 # 00112 M00S00110.virterm +++| X"08", X"09", X"11", X"12", X"13", X"14", X"15", X"16", # 48-4F # 00113 M00S00111.virterm +++| X"17", X"18", X"19", X"22", X"23", X"24", X"25", X"26", # 50-50 #
Line S00112 Modification History | |
---|---|
M01 (Removed by) | virte10 |
Seq # *Modification Id* Act ----------------------------+ 00114 M01S00112.virte10 ---| X"27", X"28", X"29", X"0A", X"2B", X"1A", X"1F", X"20", # 58-5F #
Line S00002 Modification History | |
---|---|
M01 (Added by) | virte10 |
Seq # *Modification Id* Act ----------------------------+ 00115 M01S00002.virte10 +++| X"27", X"28", X"29", X"0A", X"00", X"1A", X"1F", X"2D", # 58-5F # 00116 M00S00113.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 60-60 # 00117 M00S00114.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 68-6F # 00118 M00S00115.virterm +++| X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", # 70-70 # 00119 M00S00116.virterm +++| X"00", X"00", X"00", X"00", X"2A", X"00", X"00", X"00" ]; # 78-7F # 00120 M00S00117.virterm +++| END 00121 M00S00118.virterm +++| 00122 M00S00119.virterm +++|CONTROL FI; # END OF NOT MULTI USER FSE # 00123 M00S00120.virterm +++|CONTROL EJECT; 00124 M00S00121.virterm +++| 00125 M00S00122.virterm +++|XDEF 00126 M00S00123.virterm +++| BEGIN 00127 M00S00124.virterm +++|*CALL COMFXVT 00128 M00S00125.virterm +++|*IF DEF,QTRM 00129 M00S00126.virterm +++| PROC VDTWTO; # WRITE ONE WORD OF OUTPUT # 00130 M00S00127.virterm +++|*ENDIF 00131 M00S00128.virterm +++| END 00132 M00S00129.virterm +++| 00133 M00S00130.virterm +++|XREF 00134 M00S00131.virterm +++| BEGIN 00135 M00S00132.virterm +++|*IF DEF,QTRM 00136 M00S00133.virterm +++| PROC PF; # GET PERMANENT FILE # 00137 M00S00134.virterm +++| PROC SCRCCK; # VALIDATE TERMINAL CAPSULE # 00138 M00S00135.virterm +++| PROC SCRLCP; # LOAD TERMINAL CAPSULE # 00139 M00S00136.virterm +++| PROC SCRUGD; # UNLOAD GROUP DIRECTORY # 00140 M00S00137.virterm +++| PROC SFDQUE; # QTRM DEQUEUE # 00141 M00S00138.virterm +++| PROC SFNQUE; # QTRM ENQUEUE # 00142 M00S00139.virterm +++| PROC VDTGTO; # GET TERMINAL ORDINAL # 00143 M00S00140.virterm +++|*ENDIF 00144 M00S00141.virterm +++|*IF DEF,DEBUG 00145 M00S00142.virterm +++| PROC VDTDMP$; # DUMP OUTPUT TO XXXDUMP # 00146 M00S00143.virterm +++|*ENDIF 00147 M00S00144.virterm +++| PROC VDTGSL; # GET OS SCREEN LINE MODE # 00148 M00S00145.virterm +++| PROC VDTGTA; # GET *TDU* TABLE ADDRESS # 00149 M00S00146.virterm +++| PROC VDTRDO; # READ ONE WORD OF INPUT # 00150 M00S00147.virterm +++| PROC VDTRD$; # READ FILE TO CIO BUFFER # 00151 M00S00148.virterm +++| PROC VDTREO$; # READ WORD FROM CIO BUFFER # 00152 M00S00149.virterm +++| PROC VDTWRR$; # WRITE END OF RECORD # 00153 M00S00150.virterm +++|*IF UNDEF,QTRM 00154 M00S00151.virterm +++| PROC VDTWTO; # WRITE ONE WORD OF OUTPUT # 00155 M00S00152.virterm +++|*ENDIF 00156 M00S00153.virterm +++| PROC VDTWTC; # WRITE ONE LINE OF OUTPUT # 00157 M00S00154.virterm +++| END 00158 M00S00155.virterm +++| 00159 M00S00156.virterm +++|CONTROL IFEQ EDITORVDT,0; 00160 M00S00157.virterm +++| XREF 00161 M00S00158.virterm +++| BEGIN 00162 M00S00159.virterm +++| PROC VDTABT$; # ABORT THE CALLING ROUTINE # 00163 M00S00160.virterm +++| PROC VDTCLO; # DO WRITER ON OUTPUT FET # 00164 M00S00161.virterm +++| PROC VDTMSG$; # MESSAGE MACRO # 00165 M00S00162.virterm +++| END 00166 M00S00163.virterm +++|CONTROL FI; 00167 M00S00164.virterm +++| 00168 M00S00165.virterm +++|*IF UNDEF,QTRM 00169 M00S00166.virterm +++|CONTROL IFEQ SINGLE,1; 00170 M00S00167.virterm +++| CONTROL IFEQ EDITORVDT,1; 00171 M00S00168.virterm +++| XREF 00172 M00S00169.virterm +++| BEGIN 00173 M00S00170.virterm +++| PROC VDTCLO; # DO WRITER ON OUTPUT FET # 00174 M00S00171.virterm +++| PROC VDTPRT$; # PROMPT ON/OFF # 00175 M00S00172.virterm +++| END 00176 M00S00173.virterm +++| CONTROL FI; 00177 M00S00174.virterm +++|CONTROL FI; 00178 M00S00175.virterm +++|*ENDIF 00179 M00S00176.virterm +++| 00180 M00S00177.virterm +++|CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 00181 M00S00178.virterm +++| XREF 00182 M00S00179.virterm +++| BEGIN 00183 M00S00180.virterm +++| PROC VDTRWD; # REWIND FILE # 00184 M00S00181.virterm +++| END 00185 M00S00182.virterm +++|CONTROL FI; 00186 M00S00183.virterm +++|CONTROL EJECT; 00187 M00S00184.virterm +++| 00188 M00S00185.virterm +++|DEF XPARENTOUT #O"00070000000000000000"#; # XPARENT OUTPUT # 00189 M00S00186.virterm +++| 00190 M00S00187.virterm +++|*CALL COMFVDT 00191 M00S00188.virterm +++| # COMMON DATA BLOCK # 00192 M00S00189.virterm +++|*IFCALL EDITOR,COMFDS1 00193 M00S00190.virterm +++|*IFCALL EDITOR,COMFVD2 00194 M00S00191.virterm +++|*IFCALL EDITOR,COMFDS2 00195 M00S00192.virterm +++| 00196 M00S00193.virterm +++|*NIFCALL EDITOR,COMFVD1 00197 M00S00194.virterm +++|*NIFCALL EDITOR,COMFVD2 00198 M00S00195.virterm +++|*NIFCALL EDITOR,COMFVD3 00199 M00S00196.virterm +++| 00200 M00S00197.virterm +++|CONTROL IFEQ SINGLE,1; 00201 M00S00198.virterm +++| CONTROL IFEQ EDITORVDT,1; 00202 M00S00199.virterm +++| ARRAY ENABLEMMSG [0:3] P(1); # ENABLE MULTI-MSG TRANSPARENT # 00203 M00S00200.virterm +++| BEGIN 00204 M00S00201.virterm +++| ITEM MULTIMSG I = [ # TERMDEF CODES # 00205 M00S00202.virterm +++| O"0016 4070 4001 4071 4011", # XPT CHAR, UPPER BITS 2500D # 00206 M00S00203.virterm +++| O"4072 4304 4073 4015 4074", # LOWER BITS 2500D, CR DEL # 00207 M00S00204.virterm +++| O"4000 4105 4377 4106 4001", # NO TIMEOUT, R.O. DEL, M-MSG # 00208 M00S00205.virterm +++| O"4064 4001 0000 0000 0000" ]; # START TRANSPARENT # 00209 M00S00206.virterm +++| END 00210 M00S00207.virterm +++| 00211 M00S00208.virterm +++| ARRAY DISABLMMSG [0:3] P(1); # DISABLE MULTI-MSG TRANSPARENT # 00212 M00S00209.virterm +++| BEGIN 00213 M00S00210.virterm +++| ITEM SINGLEMSG I = [ # TERMDEF CODES # 00214 M00S00211.virterm +++| O"0016 4070 4001 4071 4011", # XPT CHAR, UPPER BITS 2500D # 00215 M00S00212.virterm +++| O"4072 4304 4073 4015 4074", # LOWER BITS 2500D, CR DEL # 00216 M00S00213.virterm +++| O"4000 4105 4377 4106 4000", # NO TIMEOUT, R.O. DEL, S-MSG # 00217 M00S00214.virterm +++| O"4064 4000 0000 0000 0000" ]; # END TRANSPARENT # 00218 M00S00215.virterm +++| END 00219 M00S00216.virterm +++| CONTROL FI; 00220 M00S00217.virterm +++|CONTROL FI; 00221 M00S00218.virterm +++|CONTROL EJECT; 00222 M00S00219.virterm +++| 00223 M00S00220.virterm +++|CONTROL IFEQ EDITORVDT,0; # PROCEDURES NOT NEEDED BY FSE # 00224 M00S00221.virterm +++| 00225 M00S00222.virterm +++|PROC VDTBOI(ORDINAL); 00226 M00S00223.virterm +++| 00227 M00S00224.virterm +++|# TITLE VDTBOI - BEGINNING OF INPUT. # 00228 M00S00225.virterm +++| 00229 M00S00226.virterm +++|BEGIN # VDTBOI # 00230 M00S00227.virterm +++| 00231 M00S00228.virterm +++|# 00232 M00S00229.virterm +++|** VDTBOI - BEGINNING OF INPUT. 00233 M00S00230.virterm +++|* 00234 M00S00231.virterm +++|* THIS PROCEDURES PROVIDES THE ABILITY TO START AND MONITOR 00235 M00S00232.virterm +++|* INPUT SEQUENCES. IT IS IDENTICAL TO PROCEDURE *VDTPPI* EX- 00236 M00S00233.virterm +++|* CEPT THAT IT RETURNS AN ORDINAL. 00237 M00S00234.virterm +++|* 00238 M00S00235.virterm +++|* PROC VDTBOI(ORDINAL) 00239 M00S00236.virterm +++|* 00240 M00S00237.virterm +++|* EXIT ORDINAL = 0, IF TRANSPARENT INPUT RECEIVED OK. 00241 M00S00238.virterm +++|* = NON ZERO, IF TYPEAHEAD. 00242 M00S00239.virterm +++|* 00243 M00S00240.virterm +++|* CALLS VDTPPI. 00244 M00S00241.virterm +++|* 00245 M00S00242.virterm +++|* USES VTORDN. 00246 M00S00243.virterm +++|# 00247 M00S00244.virterm +++| 00248 M00S00245.virterm +++|ITEM ORDINAL I; # VTORDN # 00249 M00S00246.virterm +++| 00250 M00S00247.virterm +++|VDTPPI; # PRE-PROCESS INPUT # 00251 M00S00248.virterm +++|IF VTINPDATA EQ 0 THEN VTORDN = 1; # NULL TYPEAHEAD # 00252 M00S00249.virterm +++|ORDINAL = VTORDN; 00253 M00S00250.virterm +++| 00254 M00S00251.virterm +++|END # VDTBOI # 00255 M00S00252.virterm +++|CONTROL EJECT; 00256 M00S00253.virterm +++| 00257 M00S00254.virterm +++|PROC VDTBOX(ORDINAL); 00258 M00S00255.virterm +++| 00259 M00S00256.virterm +++|# TITLE VDTBOX - OUTPUT LINE DRAWING CHARACTER. # 00260 M00S00257.virterm +++| 00261 M00S00258.virterm +++|BEGIN # VDTBOX # 00262 M00S00259.virterm +++| 00263 M00S00260.virterm +++|# 00264 M00S00261.virterm +++|** VDTBOX - OUTPUT LINE DRAWING CHARACTER. 00265 M00S00262.virterm +++|* 00266 M00S00263.virterm +++|* THIS PROCEDURE OUTPUTS LINE DRAWING CHARACTERS BY ORDINAL. 00267 M00S00264.virterm +++|* 00268 M00S00265.virterm +++|* PROC VDTBOX(ORDINAL) 00269 M00S00266.virterm +++|* 00270 M00S00267.virterm +++|* CALLS VDCTRL. 00271 M00S00268.virterm +++|# 00272 M00S00269.virterm +++| 00273 M00S00270.virterm +++|ITEM ORDINAL I; # LINE DRAWING CHARACTER ORDINAL # 00274 M00S00271.virterm +++| 00275 M00S00272.virterm +++|IF ORDINAL GQ 0 AND ORDINAL LQ 11 THEN 00276 M00S00273.virterm +++| BEGIN # IF VALID ORDINAL # 00277 M00S00274.virterm +++| VDCTRL(OUT"LDFHORIZON" + ORDINAL + (13 * (BOXWEIGHT - 1))); 00278 M00S00275.virterm +++| END 00279 M00S00276.virterm +++| 00280 M00S00277.virterm +++|END # VDTBOX # 00281 M00S00278.virterm +++|CONTROL EJECT; 00282 M00S00279.virterm +++| 00283 M00S00280.virterm +++|PROC VDTCAA(NEWMASK); 00284 M00S00281.virterm +++| 00285 M00S00282.virterm +++|# TITLE VDTCAA - CHANGE ALL ATTRIBUTES. # 00286 M00S00283.virterm +++| 00287 M00S00284.virterm +++|BEGIN # VDTCAA # 00288 M00S00285.virterm +++| 00289 M00S00286.virterm +++|# 00290 M00S00287.virterm +++|** VDTCAA - CHANGE ALL ATTRIBUTES. 00291 M00S00288.virterm +++|* 00292 M00S00289.virterm +++|* THIS PROCEDURE CHANGES THE CURRENT ATTRIBUTE MASK. 00293 M00S00290.virterm +++|* 00294 M00S00291.virterm +++|* PROC VDTCAA(NEWMASK) 00295 M00S00292.virterm +++|# 00296 M00S00293.virterm +++|ITEM NEWMASK U; # NEW ATTRIBUTE MASK # 00297 M00S00294.virterm +++| 00298 M00S00295.virterm +++|ATTRIBMASK[0] = NEWMASK; # SET NEW ATTRIBUTE MASK # 00299 M00S00296.virterm +++| 00300 M00S00297.virterm +++|END # VDTCAA # 00301 M00S00298.virterm +++|*IF DEF,ECHO 00302 M00S00299.virterm +++|CONTROL EJECT; 00303 M00S00300.virterm +++| 00304 M00S00301.virterm +++|PROC VDTCLR; 00305 M00S00302.virterm +++| 00306 M00S00303.virterm +++|# TITLE VDTCLR - CLEAR TO END OF SCREEN. # 00307 M00S00304.virterm +++| 00308 M00S00305.virterm +++|BEGIN # VDTCLR # 00309 M00S00306.virterm +++| 00310 M00S00307.virterm +++|# 00311 M00S00308.virterm +++|** VDTCLR - CLEAR TO END OF SCREEN. 00312 M00S00309.virterm +++|* 00313 M00S00310.virterm +++|* THIS PROCEDURE CLEARS THE SCREEN FROM THE CURRENT CURSOR 00314 M00S00311.virterm +++|* POSITION TO THE END OF THE SCREEN AND POSITIONS THE CURSOR 00315 M00S00312.virterm +++|* TO THE HOME POSITION. 00316 M00S00313.virterm +++|* 00317 M00S00314.virterm +++|* PROC VDTCLR 00318 M00S00315.virterm +++|* 00319 M00S00316.virterm +++|* EXIT VTXCUR = 0. 00320 M00S00317.virterm +++|* VTYCUR = 0 OR VTYMAX. 00321 M00S00318.virterm +++|* 00322 M00S00319.virterm +++|* CALLS VDCTRL, VDTBOO, VDTHOM. 00323 M00S00320.virterm +++|# 00324 M00S00321.virterm +++| 00325 M00S00322.virterm +++|VDTBOO; # BEGIN OUTPUT SEQUENCE # 00326 M00S00323.virterm +++|VDCTRL(OUT"CLREOS"); # CLEAR TO END OF SCREEN # 00327 M00S00324.virterm +++|VDTHOM; # POSITION CURSOR TO HOME # 00328 M00S00325.virterm +++| 00329 M00S00326.virterm +++|END # VDTCLR # 00330 M00S00327.virterm +++|CONTROL EJECT; 00331 M00S00328.virterm +++| 00332 M00S00329.virterm +++|PROC VDTCUD; 00333 M00S00330.virterm +++| 00334 M00S00331.virterm +++|# TITLE VDTCUD - MOVE CURSOR DOWN ONE POSITION. # 00335 M00S00332.virterm +++| 00336 M00S00333.virterm +++|BEGIN # VDTCUD # 00337 M00S00334.virterm +++| 00338 M00S00335.virterm +++|# 00339 M00S00336.virterm +++|** VDTCUD - MOVE CURSOR DOWN ONE POSITION. 00340 M00S00337.virterm +++|* 00341 M00S00338.virterm +++|* THIS PROCEDURE MOVES THE CURSOR DOWN ONE POSITION. 00342 M00S00339.virterm +++|* 00343 M00S00340.virterm +++|* PROC VDTCUD 00344 M00S00341.virterm +++|* 00345 M00S00342.virterm +++|* EXIT VTYCUR AND VTXCUR ADJUSTED IF NECESSARY. 00346 M00S00343.virterm +++|* 00347 M00S00344.virterm +++|* CALLS VDCTRL. 00348 M00S00345.virterm +++|* 00349 M00S00346.virterm +++|* USES VTXCUR, VTYCUR. 00350 M00S00347.virterm +++|* 00351 M00S00348.virterm +++|* NOTES IF MOVING THE CURSOR DOWN ONE POSITON WILL CAUSE 00352 M00S00349.virterm +++|* THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME 00353 M00S00350.virterm +++|* (OR IF THE CURSOR WILL STOP) THIS IS A NOOP. 00354 M00S00351.virterm +++|# 00355 M00S00352.virterm +++| 00356 M00S00353.virterm +++|IF VTYCUR EQ VTYMAX THEN 00357 M00S00354.virterm +++| BEGIN # IF PRESENTLY ON LAST LINE # 00358 M00S00355.virterm +++| IF TABDWNCRSR[0] GQ CURSORMOVE"SPIRAL" THEN 00359 M00S00356.virterm +++| BEGIN # IF NOT STOP, SCROLL OR HOME # 00360 M00S00357.virterm +++| VTYCUR = 0; # CURSOR WILL MOVE TO FIRST LINE # 00361 M00S00358.virterm +++| IF TABDWNCRSR[0] EQ CURSORMOVE"SPIRAL" THEN VTXCUR = VTXCUR + 1; 00362 M00S00359.virterm +++| VDCTRL(OUT"CURSORDOWN"); # MOVE CURSOR DOWN # 00363 M00S00360.virterm +++| END 00364 M00S00361.virterm +++| END 00365 M00S00362.virterm +++|ELSE 00366 M00S00363.virterm +++| BEGIN # NOT YET AT BOTTOM OF SCREEN # 00367 M00S00364.virterm +++| VTYCUR = VTYCUR + 1; # ADJUST POSITION # 00368 M00S00365.virterm +++| VDCTRL(OUT"CURSORDOWN"); # MOVE CURSOR DOWN # 00369 M00S00366.virterm +++| END 00370 M00S00367.virterm +++| 00371 M00S00368.virterm +++|END # VDTCUD # 00372 M00S00369.virterm +++|CONTROL EJECT; 00373 M00S00370.virterm +++| 00374 M00S00371.virterm +++|PROC VDTCUL; 00375 M00S00372.virterm +++| 00376 M00S00373.virterm +++|# TITLE VDTCUL - MOVE CURSOR LEFT ONE POSITION. # 00377 M00S00374.virterm +++| 00378 M00S00375.virterm +++|BEGIN # VDTCUL # 00379 M00S00376.virterm +++| 00380 M00S00377.virterm +++|# 00381 M00S00378.virterm +++|** VDTCUL - MOVE CURSOR LEFT ONE POSITION. 00382 M00S00379.virterm +++|* 00383 M00S00380.virterm +++|* THIS PROCEDURE MOVES THE CURSOR LEFT ONE POSITION. 00384 M00S00381.virterm +++|* 00385 M00S00382.virterm +++|* PROC VDTCUL 00386 M00S00383.virterm +++|* 00387 M00S00384.virterm +++|* EXIT VTXCUR AND VTYCUR ADJUSTED IF NECESSARY. 00388 M00S00385.virterm +++|* 00389 M00S00386.virterm +++|* CALLS VDCTRL, VDTCUU. 00390 M00S00387.virterm +++|* 00391 M00S00388.virterm +++|* USES VTXCUR, VTYCUR. 00392 M00S00389.virterm +++|* 00393 M00S00390.virterm +++|* NOTES IF MOVING THE CURSOR LEFT ONE POSITON WILL CAUSE 00394 M00S00391.virterm +++|* THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME 00395 M00S00392.virterm +++|* (OR IF THE CURSOR WILL STOP) THIS IS A NOOP. 00396 M00S00393.virterm +++|# 00397 M00S00394.virterm +++| 00398 M00S00395.virterm +++|IF VTXCUR EQ 0 THEN 00399 M00S00396.virterm +++| BEGIN # IF PRESENTLY IN FIRST COLUMN # 00400 M00S00397.virterm +++| IF TABLEFTCUR[0] GQ CURSORMOVE"SPIRAL" THEN 00401 M00S00398.virterm +++| BEGIN # IF NOT STOP, SCROLL OR HOME # 00402 M00S00399.virterm +++| VTYCUR = VTYMAX; # CURSOR MOVES TO LAST COLUMN # 00403 M00S00400.virterm +++| IF TABLEFTCUR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR - 1; 00404 M00S00401.virterm +++| VDCTRL(OUT"CURSORLEFT"); # MOVE CURSOR LEFT # 00405 M00S00402.virterm +++| END 00406 M00S00403.virterm +++| END 00407 M00S00404.virterm +++|ELSE 00408 M00S00405.virterm +++| BEGIN # NOT YET AT LEFT SIDE OF SCREEN # 00409 M00S00406.virterm +++| VTXCUR = VTXCUR - 1; # ADJUST POSITION # 00410 M00S00407.virterm +++| VDCTRL(OUT"CURSORLEFT"); # MOVE CURSOR LEFT # 00411 M00S00408.virterm +++| END 00412 M00S00409.virterm +++| 00413 M00S00410.virterm +++|END # VDTCUL # 00414 M00S00411.virterm +++|CONTROL EJECT; 00415 M00S00412.virterm +++| 00416 M00S00413.virterm +++|PROC VDTCUR; 00417 M00S00414.virterm +++| 00418 M00S00415.virterm +++|# TITLE VDTCUR - MOVE CURSOR RIGHT ONE POSITION. # 00419 M00S00416.virterm +++| 00420 M00S00417.virterm +++|BEGIN # VDTCUR # 00421 M00S00418.virterm +++| 00422 M00S00419.virterm +++|# 00423 M00S00420.virterm +++|** VDTCUR - MOVE CURSOR RIGHT ONE POSITION. 00424 M00S00421.virterm +++|* 00425 M00S00422.virterm +++|* THIS PROCEDURE MOVES THE CURSOR RIGHT ONE POSITION. 00426 M00S00423.virterm +++|* 00427 M00S00424.virterm +++|* PROC VDTCUR 00428 M00S00425.virterm +++|* 00429 M00S00426.virterm +++|* EXIT VTXCUR AND VTYCUR ADJUSTED IF NECESSARY. 00430 M00S00427.virterm +++|* 00431 M00S00428.virterm +++|* CALLS VDCTRL. 00432 M00S00429.virterm +++|* 00433 M00S00430.virterm +++|* USES VTXCUR, VTYCUR. 00434 M00S00431.virterm +++|* 00435 M00S00432.virterm +++|* NOTES IF MOVING THE CURSOR RIGHT ONE POSITON WILL CAUSE 00436 M00S00433.virterm +++|* THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME 00437 M00S00434.virterm +++|* (OR IF THE CURSOR WILL STOP) THIS IS A NOOP. 00438 M00S00435.virterm +++|# 00439 M00S00436.virterm +++| 00440 M00S00437.virterm +++|IF VTXCUR EQ VTXMAX THEN 00441 M00S00438.virterm +++| BEGIN # IF PRESENTLY IN LAST COLUMN # 00442 M00S00439.virterm +++| IF TABRGHTCUR[0] GQ CURSORMOVE"SPIRAL" THEN 00443 M00S00440.virterm +++| BEGIN # IF NOT STOP, SCROLL OR HOME # 00444 M00S00441.virterm +++| VTYCUR = 0; # CURSOR MOVES TO FIRST COLUMN # 00445 M00S00442.virterm +++| IF TABRGHTCUR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR + 1; 00446 M00S00443.virterm +++| VDCTRL(OUT"CURSORIGHT"); # MOVE CURSOR RIGHT # 00447 M00S00444.virterm +++| END 00448 M00S00445.virterm +++| END 00449 M00S00446.virterm +++|ELSE 00450 M00S00447.virterm +++| BEGIN # NOT AT RIGHT SIDE OF SCREEN # 00451 M00S00448.virterm +++| VTXCUR = VTXCUR + 1; # ADJUST POSITION # 00452 M00S00449.virterm +++| VDCTRL(OUT"CURSORIGHT"); # MOVE CURSOR RIGHT # 00453 M00S00450.virterm +++| END 00454 M00S00451.virterm +++| 00455 M00S00452.virterm +++|END # VDTCUR # 00456 M00S00453.virterm +++|CONTROL EJECT; 00457 M00S00454.virterm +++| 00458 M00S00455.virterm +++|PROC VDTCUU; 00459 M00S00456.virterm +++| 00460 M00S00457.virterm +++|# TITLE VDTCUU - MOVE CURSOR UP ONE POSITION. # 00461 M00S00458.virterm +++| 00462 M00S00459.virterm +++|BEGIN # VDTCUU # 00463 M00S00460.virterm +++| 00464 M00S00461.virterm +++|# 00465 M00S00462.virterm +++|** VDTCUU - MOVE CURSOR UP ONE POSTION. 00466 M00S00463.virterm +++|* 00467 M00S00464.virterm +++|* THIS PROCEDURE MOVES THE CURSOR UP ONE POSITION. 00468 M00S00465.virterm +++|* 00469 M00S00466.virterm +++|* PROC VDTCUU 00470 M00S00467.virterm +++|* 00471 M00S00468.virterm +++|* EXIT VTYCUR AND VTXCUR ADJUSTED IF NECESSARY. 00472 M00S00469.virterm +++|* 00473 M00S00470.virterm +++|* CALLS VDCTRL. 00474 M00S00471.virterm +++|* 00475 M00S00472.virterm +++|* USES VTXCUR, VTYCUR 00476 M00S00473.virterm +++|* 00477 M00S00474.virterm +++|* NOTES IF MOVING THE CURSOR UP ONE POSITON WILL CAUSE 00478 M00S00475.virterm +++|* THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME 00479 M00S00476.virterm +++|* (OR IF THE CURSOR WILL STOP) THIS IS A NOOP. 00480 M00S00477.virterm +++|# 00481 M00S00478.virterm +++| 00482 M00S00479.virterm +++|IF VTYCUR EQ 0 THEN 00483 M00S00480.virterm +++| BEGIN # IF PRESENTLY ON FIRST LINE # 00484 M00S00481.virterm +++| IF TABUPCURSR[0] GQ CURSORMOVE"SPIRAL" THEN 00485 M00S00482.virterm +++| BEGIN # IF NOT STOP, SCROLL OR HOME # 00486 M00S00483.virterm +++| VTYCUR = VTYMAX; # CURSOR WILL MOVE TO LAST LINE # 00487 M00S00484.virterm +++| IF TABUPCURSR[0] EQ CURSORMOVE"SPIRAL" THEN VTXCUR = VTXCUR - 1; 00488 M00S00485.virterm +++| VDCTRL(OUT"CURSORUP"); # MOVE CURSOR UP # 00489 M00S00486.virterm +++| END 00490 M00S00487.virterm +++| END 00491 M00S00488.virterm +++|ELSE 00492 M00S00489.virterm +++| BEGIN # NOT YET AT TOP OF SCREEN # 00493 M00S00490.virterm +++| VTYCUR = VTYCUR - 1; # ADJUST POSITION # 00494 M00S00491.virterm +++| VDCTRL(OUT"CURSORUP"); # MOVE CURSOR UP # 00495 M00S00492.virterm +++| END 00496 M00S00493.virterm +++| 00497 M00S00494.virterm +++|END # VDTCUU # 00498 M00S00495.virterm +++|CONTROL EJECT; 00499 M00S00496.virterm +++| 00500 M00S00497.virterm +++|PROC VDTDEC; 00501 M00S00498.virterm +++| 00502 M00S00499.virterm +++|# TITLE VDTDEC - DELETE ONE CHARACTER. # 00503 M00S00500.virterm +++| 00504 M00S00501.virterm +++|BEGIN # VDTDEC # 00505 M00S00502.virterm +++| 00506 M00S00503.virterm +++|# 00507 M00S00504.virterm +++|** VDTDEC - DELETE ONE CHARACTER. 00508 M00S00505.virterm +++|* 00509 M00S00506.virterm +++|* THIS PROCEDURE DELETES ONE CHARACTER FROM THE TEXT ON THE SCREEN 00510 M00S00507.virterm +++|* SHIFTING EXISTING TEXT THAT WAS TO THE RIGHT OF THE CHARACTER ONE 00511 M00S00508.virterm +++|* POSITION TO THE LEFT. 00512 M00S00509.virterm +++|* 00513 M00S00510.virterm +++|* PROC VDTDEC 00514 M00S00511.virterm +++|* 00515 M00S00512.virterm +++|* CALLS VDCTRL. 00516 M00S00513.virterm +++|# 00517 M00S00514.virterm +++| 00518 M00S00515.virterm +++|VDCTRL(OUT"DELETECHAR"); # DELETE CHARACTER # 00519 M00S00516.virterm +++| 00520 M00S00517.virterm +++|END # VDTDEC # 00521 M00S00518.virterm +++|CONTROL EJECT; 00522 M00S00519.virterm +++| 00523 M00S00520.virterm +++|PROC VDTDEL; 00524 M00S00521.virterm +++| 00525 M00S00522.virterm +++|# TITLE VDTDEL - DELETE ONE LINE. # 00526 M00S00523.virterm +++| 00527 M00S00524.virterm +++|BEGIN # VDTDEL # 00528 M00S00525.virterm +++| 00529 M00S00526.virterm +++|# 00530 M00S00527.virterm +++|** VDTDEL - DELETE ONE LINE. 00531 M00S00528.virterm +++|* 00532 M00S00529.virterm +++|* THIS PROCEDURE DELETES THE LINE THAT THE CURSOR IS ON AND 00533 M00S00530.virterm +++|* MOVES THE REMAINING LINES BELOW THE DELETED AREA UP ONE, 00534 M00S00531.virterm +++|* POSITIONING THE CURSOR TO THE START OF THE LINE. 00535 M00S00532.virterm +++|* 00536 M00S00533.virterm +++|* PROC VDTDEL 00537 M00S00534.virterm +++|* 00538 M00S00535.virterm +++|* CALLS VDCTRL, VDMOVE. 00539 M00S00536.virterm +++|* 00540 M00S00537.virterm +++|* USES VTXCUR. 00541 M00S00538.virterm +++|# 00542 M00S00539.virterm +++| 00543 M00S00540.virterm +++|VDCTRL(OUT"DELINECURL"); # DELETE LINE, CURSOR LEFT # 00544 M00S00541.virterm +++|IF NUMBERBYTE EQ 0 THEN 00545 M00S00542.virterm +++| BEGIN # IF NO FUNCTION AVAILABLE # 00546 M00S00543.virterm +++| VDCTRL(OUT"DELETELINE"); # DELETE LINE # 00547 M00S00544.virterm +++| IF NUMBERBYTE NQ 0 AND VTXCUR NQ 0 THEN 00548 M00S00545.virterm +++| BEGIN # IF POSITION NEEDS UPDATE # 00549 M00S00546.virterm +++| VTXCUR = 0; # CLEAR X POSITION # 00550 M00S00547.virterm +++| VDMOVE(VTXCUR,VTYCUR); # POSITION CURSOR # 00551 M00S00548.virterm +++| END 00552 M00S00549.virterm +++| END 00553 M00S00550.virterm +++|ELSE 00554 M00S00551.virterm +++| BEGIN # FUNCTION AVAILABLE # 00555 M00S00552.virterm +++| VTXCUR = 0; # CLEAR X POSITION # 00556 M00S00553.virterm +++| END 00557 M00S00554.virterm +++| 00558 M00S00555.virterm +++|END # VDTDEL # 00559 M00S00556.virterm +++|*ENDIF 00560 M00S00557.virterm +++|CONTROL EJECT; 00561 M00S00558.virterm +++| 00562 M00S00559.virterm +++|PROC VDTDRW(WEIGHT); 00563 M00S00560.virterm +++| 00564 M00S00561.virterm +++|# TITLE VDTDRW - SET LINE DRAWING CHARACTER SET. # 00565 M00S00562.virterm +++| 00566 M00S00563.virterm +++|BEGIN # VDTDRW # 00567 M00S00564.virterm +++| 00568 M00S00565.virterm +++|# 00569 M00S00566.virterm +++|** VDTDRW - SET LINE DRAWING CHARACTER SET. 00570 M00S00567.virterm +++|* 00571 M00S00568.virterm +++|* THIS PROCEDURE SETS OR CLEARS THE LINE DRAWING CHARACTER SET FOR 00572 M00S00569.virterm +++|* THOSE TERMINALS THAT HAVE A LINE DRAWING CHARACTER SET. 00573 M00S00570.virterm +++|* 00574 M00S00571.virterm +++|* PROC VDTDRW(WEIGHT) 00575 M00S00572.virterm +++|* 00576 M00S00573.virterm +++|* ENTRY BOXWEIGHT = CURRENT LINE DRAWING WEIGHT. 00577 M00S00574.virterm +++|* WEIGHT = REQUESTED LINE DRAWING WEIGHT. 00578 M00S00575.virterm +++|* = 0, IF TURNING OFF LINE DRAWING. 00579 M00S00576.virterm +++|* = 1, IF FINE LINE DRAWING REQUESTED. 00580 M00S00577.virterm +++|* = 2, IF MEDIUM LINE DRAWING REQUESTED. 00581 M00S00578.virterm +++|* = 3, IF BOLD LINE DRAWING REQUESTED. 00582 M00S00579.virterm +++|* 00583 M00S00580.virterm +++|* EXIT BOXWEIGHT = CURRENT LINE DRAWING WEIGHT. 00584 M00S00581.virterm +++|* 00585 M00S00582.virterm +++|* CALLS VDCTRL. 00586 M00S00583.virterm +++|# 00587 M00S00584.virterm +++| 00588 M00S00585.virterm +++|ITEM WEIGHT I; # LINE DRAWING WEIGHT # 00589 M00S00586.virterm +++| 00590 M00S00587.virterm +++|IF WEIGHT GQ 0 AND WEIGHT LQ 3 AND WEIGHT NQ BOXWEIGHT THEN 00591 M00S00588.virterm +++| BEGIN # IF VALID CHANGE REQUESTED # 00592 M00S00589.virterm +++| IF BOXWEIGHT GR 0 THEN 00593 M00S00590.virterm +++| BEGIN # IF LINE DRAWING IS ON # 00594 M00S00591.virterm +++| VDCTRL(OUT"LDFINEOFF"+((BOXWEIGHT-1)*13)); 00595 M00S00592.virterm +++| END 00596 M00S00593.virterm +++| IF WEIGHT GR 0 THEN 00597 M00S00594.virterm +++| BEGIN # IF NEW WEIGHT REQUESTED # 00598 M00S00595.virterm +++| VDCTRL(OUT"LDFINEON"+((WEIGHT-1)*13)); 00599 M00S00596.virterm +++| END 00600 M00S00597.virterm +++| BOXWEIGHT = WEIGHT; # SAVE NEW BOX WEIGHT # 00601 M00S00598.virterm +++| END 00602 M00S00599.virterm +++| 00603 M00S00600.virterm +++|END # VDTDRW # 00604 M00S00601.virterm +++|*IF DEF,ECHO 00605 M00S00602.virterm +++|CONTROL EJECT; 00606 M00S00603.virterm +++| 00607 M00S00604.virterm +++|PROC VDTEOI; 00608 M00S00605.virterm +++| 00609 M00S00606.virterm +++|# TITLE VDTEOI - END OF INFORMATION. # 00610 M00S00607.virterm +++| 00611 M00S00608.virterm +++|BEGIN # VDTEOI # 00612 M00S00609.virterm +++| 00613 M00S00610.virterm +++|# 00614 M00S00611.virterm +++|** VDTEOI - END OF INFORMATION. 00615 M00S00612.virterm +++|* 00616 M00S00613.virterm +++|* THIS PROCEDURE SENDS AN END OF INFORMATION BYTE. 00617 M00S00614.virterm +++|* 00618 M00S00615.virterm +++|* PROC VDTEOI 00619 M00S00616.virterm +++|* 00620 M00S00617.virterm +++|* CALLS VDTOUT. 00621 M00S00618.virterm +++|# 00622 M00S00619.virterm +++| 00623 M00S00620.virterm +++|VDTOUT(X"00"); # END OF INFORMATION BYTE # 00624 M00S00621.virterm +++| 00625 M00S00622.virterm +++|END # VDTEOI # 00626 M00S00623.virterm +++|CONTROL EJECT; 00627 M00S00624.virterm +++| 00628 M00S00625.virterm +++|PROC VDTERC; 00629 M00S00626.virterm +++| 00630 M00S00627.virterm +++|# TITLE VDTERC - ERASE CHARACTER. # 00631 M00S00628.virterm +++| 00632 M00S00629.virterm +++|BEGIN # VDTERC # 00633 M00S00630.virterm +++| 00634 M00S00631.virterm +++|# 00635 M00S00632.virterm +++|** VDTERC - ERASE CHARACTER. 00636 M00S00633.virterm +++|* 00637 M00S00634.virterm +++|* THIS PROCEDURE MOVES THE CURSOR LEFT ONE POSITION AND 00638 M00S00635.virterm +++|* CLEARS THE (UNPROTECTED) CHARACTER IN THAT POSITION. 00639 M00S00636.virterm +++|* 00640 M00S00637.virterm +++|* PROC VDTERC 00641 M00S00638.virterm +++|* 00642 M00S00639.virterm +++|* EXIT VTXCUR AND VTYCUR ADJUSTED IF NECESSARY. 00643 M00S00640.virterm +++|* 00644 M00S00641.virterm +++|* CALLS VDCTRL. 00645 M00S00642.virterm +++|# 00646 M00S00643.virterm +++| 00647 M00S00644.virterm +++|VDCTRL(OUT"ERASECHAR"); 00648 M00S00645.virterm +++| 00649 M00S00646.virterm +++|VTXCUR = VTXCUR - 1; 00650 M00S00647.virterm +++|IF VTXCUR LS 0 THEN 00651 M00S00648.virterm +++| BEGIN # IF OFF LEFT SIDE OF SCREEN # 00652 M00S00649.virterm +++| IF TABLEFTCHR[0] GQ CURSORMOVE"SPIRAL" THEN 00653 M00S00650.virterm +++| BEGIN # IF WRAP OR SPIRAL # 00654 M00S00651.virterm +++| VTXCUR = VTXMAX; # CURSOR IS IN LAST COLUMN # 00655 M00S00652.virterm +++| IF TABLEFTCHR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR - 1; 00656 M00S00653.virterm +++| END 00657 M00S00654.virterm +++| ELSE 00658 M00S00655.virterm +++| BEGIN # CURSOR HAS STOPPED AT LEFT # 00659 M00S00656.virterm +++| VTXCUR = 0; # CURSOR IS IN FIRST COLUMN # 00660 M00S00657.virterm +++| END 00661 M00S00658.virterm +++| END 00662 M00S00659.virterm +++| 00663 M00S00660.virterm +++|END # VDTERC # 00664 M00S00661.virterm +++|CONTROL EJECT; 00665 M00S00662.virterm +++| 00666 M00S00663.virterm +++|PROC VDTERL; 00667 M00S00664.virterm +++| 00668 M00S00665.virterm +++|# TITLE VDTERL - ERASE LINE. # 00669 M00S00666.virterm +++| 00670 M00S00667.virterm +++|BEGIN # VDTERL # 00671 M00S00668.virterm +++| 00672 M00S00669.virterm +++|# 00673 M00S00670.virterm +++|** VDTERL - ERASE LINE. 00674 M00S00671.virterm +++|* 00675 M00S00672.virterm +++|* THIS PROCEDURE ERASES THE UNPROTECTED AREAS OF THE ACTIVE LINE. 00676 M00S00673.virterm +++|* 00677 M00S00674.virterm +++|* PROC VDTERL 00678 M00S00675.virterm +++|* 00679 M00S00676.virterm +++|* EXIT VTXCUR = 0. 00680 M00S00677.virterm +++|* 00681 M00S00678.virterm +++|* CALLS VDTCLL, VDCTRL, VDMOVE. 00682 M00S00679.virterm +++|* 00683 M00S00680.virterm +++|* USES VTXCUR. 00684 M00S00681.virterm +++|# 00685 M00S00682.virterm +++| 00686 M00S00683.virterm +++|VDCTRL(OUT"ERASELNECL"); # ERASE LINE, CURSOR LEFT # 00687 M00S00684.virterm +++|IF NUMBERBYTE EQ 0 THEN 00688 M00S00685.virterm +++| BEGIN # IF NO FUNCTION AVAILABLE # 00689 M00S00686.virterm +++| IF VTXCUR NQ 0 THEN 00690 M00S00687.virterm +++| BEGIN # IF NOT AT START OF LINE # 00691 M00S00688.virterm +++| VTXCUR = 0; # SET X POSITION # 00692 M00S00689.virterm +++| VDMOVE(VTXCUR,VTYCUR); # POSITION CURSOR # 00693 M00S00690.virterm +++| END 00694 M00S00691.virterm +++| VDCTRL(OUT"ERASELINE"); # ERASE LINE # 00695 M00S00692.virterm +++| IF NUMBERBYTE EQ 0 THEN 00696 M00S00693.virterm +++| BEGIN # IF NO FUNCTION AVAILABLE # 00697 M00S00694.virterm +++| VDTCLL(VTXCUR,VTYCUR); # CLEAR LINE # 00698 M00S00695.virterm +++| END 00699 M00S00696.virterm +++| END 00700 M00S00697.virterm +++|ELSE 00701 M00S00698.virterm +++| BEGIN 00702 M00S00699.virterm +++| VTXCUR = 0; # CLEAR X POSITION # 00703 M00S00700.virterm +++| END 00704 M00S00701.virterm +++| 00705 M00S00702.virterm +++|END # VDTERL # 00706 M00S00703.virterm +++|*ENDIF 00707 M00S00704.virterm +++|CONTROL EJECT; 00708 M00S00705.virterm +++| 00709 M00S00706.virterm +++|PROC VDTGTF(WORD,INDEX); 00710 M00S00707.virterm +++| 00711 M00S00708.virterm +++|# TITLE VDTGTF - GET TERMINAL ATTRIBUTE FLAGS. # 00712 M00S00709.virterm +++| 00713 M00S00710.virterm +++|BEGIN # VDTGTF # 00714 M00S00711.virterm +++| 00715 M00S00712.virterm +++|# 00716 M00S00713.virterm +++|** VDTGTF - GET TERMINAL ATTRIBUTE FLAGS. 00717 M00S00714.virterm +++|* 00718 M00S00715.virterm +++|* THIS PROCEDURE RETURNS *TDU* TERMINAL ATTRIBUTE FLAGS. 00719 M00S00716.virterm +++|* 00720 M00S00717.virterm +++|* PROC VDTGTF(WORD,INDEX) 00721 M00S00718.virterm +++|* 00722 M00S00719.virterm +++|* EXIT WORD = TERMINAL ATTRIBUTE WORD FROM *TDU* TABLE. 00723 M00S00720.virterm +++|# 00724 M00S00721.virterm +++|ITEM WORD U; # TERMINAL ATTRIBUTE WORD # 00725 M00S00722.virterm +++|ITEM INDEX I; # INDEX INTO *TDU* TABLE # 00726 M00S00723.virterm +++| 00727 M00S00724.virterm +++|WORD = TABHEADONE[INDEX]; # RETURN WORD FROM TABLE # 00728 M00S00725.virterm +++| 00729 M00S00726.virterm +++|END # VDTGTF # 00730 M00S00727.virterm +++|*IF DEF,ECHO 00731 M00S00728.virterm +++|CONTROL EJECT; 00732 M00S00729.virterm +++| 00733 M00S00730.virterm +++|PROC VDTINC; 00734 M00S00731.virterm +++| 00735 M00S00732.virterm +++|# TITLE VDTINC - INSERT ONE SPACE CHARACTER. # 00736 M00S00733.virterm +++| 00737 M00S00734.virterm +++|BEGIN # VDTINC # 00738 M00S00735.virterm +++| 00739 M00S00736.virterm +++|# 00740 M00S00737.virterm +++|** VDTINC - INSERT ONE SPACE CHARACTER. 00741 M00S00738.virterm +++|* 00742 M00S00739.virterm +++|* THIS PROCEDURE INSERTS ONE BLANK CHARACTER INTO THE TEXT ON THE 00743 M00S00740.virterm +++|* SCREEN, SHIFTING EXISTING TEXT PAST THE CURSOR ONE POSITION TO 00744 M00S00741.virterm +++|* THE RIGHT. 00745 M00S00742.virterm +++|* 00746 M00S00743.virterm +++|* PROC VDTINC 00747 M00S00744.virterm +++|* 00748 M00S00745.virterm +++|* CALLS VDCTRL. 00749 M00S00746.virterm +++|# 00750 M00S00747.virterm +++| 00751 M00S00748.virterm +++|VDCTRL(OUT"INSERTCHAR"); # INSERT CHARACTER # 00752 M00S00749.virterm +++| 00753 M00S00750.virterm +++|END # VDTINC # 00754 M00S00751.virterm +++|CONTROL EJECT; 00755 M00S00752.virterm +++| 00756 M00S00753.virterm +++|PROC VDTINL; 00757 M00S00754.virterm +++| 00758 M00S00755.virterm +++|# TITLE VDTINL - INSERT ONE BLANK LINE. # 00759 M00S00756.virterm +++| 00760 M00S00757.virterm +++|BEGIN # VDTINL # 00761 M00S00758.virterm +++| 00762 M00S00759.virterm +++|# 00763 M00S00760.virterm +++|** VDTINL - INSERT ONE BLANK LINE. 00764 M00S00761.virterm +++|* 00765 M00S00762.virterm +++|* THIS PROCEDURE INSERTS A BLANK LINE, MOVING THE LINE THAT 00766 M00S00763.virterm +++|* THE CURSOR IS ON AND ALL FOLLOWING LINES DOWN ONE, POS- 00767 M00S00764.virterm +++|* TIONING THE CURSOR TO THE START OF THE LINE. 00768 M00S00765.virterm +++|* 00769 M00S00766.virterm +++|* PROC VDTINL 00770 M00S00767.virterm +++|* 00771 M00S00768.virterm +++|* CALLS VDCTRL, VDMOVE. 00772 M00S00769.virterm +++|* 00773 M00S00770.virterm +++|* USES VTXCUR. 00774 M00S00771.virterm +++|# 00775 M00S00772.virterm +++| 00776 M00S00773.virterm +++|VDCTRL(OUT"INSLNECURL"); # INSERT LINE, CURSOR LEFT # 00777 M00S00774.virterm +++|IF NUMBERBYTE EQ 0 THEN 00778 M00S00775.virterm +++| BEGIN # IF NO FUNCTION AVAILABLE # 00779 M00S00776.virterm +++| VDCTRL(OUT"INSERTLINE"); # INSERT LINE # 00780 M00S00777.virterm +++| IF NUMBERBYTE NQ 0 AND VTXCUR NQ 0 THEN 00781 M00S00778.virterm +++| BEGIN # IF POSITION NEEDS UPDATE # 00782 M00S00779.virterm +++| VTXCUR = 0; # CLEAR X POSITION # 00783 M00S00780.virterm +++| VDMOVE(VTXCUR,VTYCUR); # POSITION CURSOR # 00784 M00S00781.virterm +++| END 00785 M00S00782.virterm +++| END 00786 M00S00783.virterm +++|ELSE 00787 M00S00784.virterm +++| BEGIN # FUNCTION AVAILABLE # 00788 M00S00785.virterm +++| VTXCUR = 0; # CLEAR X POSITION # 00789 M00S00786.virterm +++| END 00790 M00S00787.virterm +++| 00791 M00S00788.virterm +++|END # VDTINL # 00792 M00S00789.virterm +++|*ENDIF 00793 M00S00790.virterm +++|CONTROL EJECT; 00794 M00S00791.virterm +++| 00795 M00S00792.virterm +++|PROC VDTINP(ORDINAL,COLUMN,LINE,CHAR,N); 00796 M00S00793.virterm +++| 00797 M00S00794.virterm +++|# TITLE VDTINP - IDENTIFY NEXT VIRTUAL INPUT EVENT. # 00798 M00S00795.virterm +++| 00799 M00S00796.virterm +++|BEGIN # VDTINP # 00800 M00S00797.virterm +++| 00801 M00S00798.virterm +++|# 00802 M00S00799.virterm +++|** VDTINP - IDENTIFY NEXT VIRTUAL INPUT EVENT. 00803 M00S00800.virterm +++|* 00804 M00S00801.virterm +++|* THIS PROCEDURE INDENTIFIES THE NEXT VIRTUAL TERMINAL INPUT 00805 M00S00802.virterm +++|* EVENT. THIS REQUIRES THAT *VDTBOI* MUST BE CALLED FIRST TO 00806 M00S00803.virterm +++|* SET UP FOR INPUT EVENTS. 00807 M00S00804.virterm +++|* 00808 M00S00805.virterm +++|* PROC VDTINP(ORDINAL,COLUMN,LINE,CHAR,N) 00809 M00S00806.virterm +++|* 00810 M00S00807.virterm +++|* ENTRY VTINCR = RESIDUAL CURSOR INCREMENT. 00811 M00S00808.virterm +++|* VTXMAX = NUMBER OF COLUMNS ON SCREEN. 00812 M00S00809.virterm +++|* VTYMAX = NUMBER OF LINES ON SCREEN. 00813 M00S00810.virterm +++|* 00814 M00S00811.virterm +++|* EXIT ORDINAL = EVENT CATEGORY. 00815 M00S00812.virterm +++|* CHAR = DATA CHARACTER, OR FUNCTION ORDINAL. 00816 M00S00813.virterm +++|* COLUMN = COLUMN CURSOR POSITION. 00817 M00S00814.virterm +++|* LINE = LINE CURSOR POSITION. 00818 M00S00815.virterm +++|* N = INCREMENTAL CURSOR MOVEMENT. 00819 M00S00816.virterm +++|* 00820 M00S00817.virterm +++|* CALLS VDTIINP. 00821 M00S00818.virterm +++|# 00822 M00S00819.virterm +++| 00823 M00S00820.virterm +++|ITEM ORDINAL I; # EVENT CATEGORY # 00824 M00S00821.virterm +++|ITEM COLUMN I; # COLUMN POSITION # 00825 M00S00822.virterm +++|ITEM LINE I; # LINE POSITION # 00826 M00S00823.virterm +++|ITEM CHAR I; # DATA CHARACTER # 00827 M00S00824.virterm +++|ITEM N I; # INCREMENTAL CURSOR MOVEMENT # 00828 M00S00825.virterm +++| 00829 M00S00826.virterm +++|VDTIINP; # PERFORM INPUT SEQUENCE # 00830 M00S00827.virterm +++|ORDINAL = VTORDN; 00831 M00S00828.virterm +++|COLUMN = VTXCUR; 00832 M00S00829.virterm +++|LINE = VTYCUR; 00833 M00S00830.virterm +++|CHAR = VTCHAR; 00834 M00S00831.virterm +++|N = VTDELT; 00835 M00S00832.virterm +++| 00836 M00S00833.virterm +++|END # VDTINP # 00837 M00S00834.virterm +++|CONTROL EJECT; 00838 M00S00835.virterm +++| 00839 M00S00836.virterm +++|PROC VDTPRO(ORD); 00840 M00S00837.virterm +++| 00841 M00S00838.virterm +++|# TITLE VDTPRO - SET PROTECTION. # 00842 M00S00839.virterm +++| 00843 M00S00840.virterm +++|BEGIN # VDTPRO # 00844 M00S00841.virterm +++| 00845 M00S00842.virterm +++|# 00846 M00S00843.virterm +++|** VDTPRO - SET PROTECTION. 00847 M00S00844.virterm +++|* 00848 M00S00845.virterm +++|* THIS PROCEDURE ISSUES OUTPUT SEQUENCES DEALING WITH PROTECT. 00849 M00S00846.virterm +++|* 00850 M00S00847.virterm +++|* PROC VDTPRO(ORD) 00851 M00S00848.virterm +++|* 00852 M00S00849.virterm +++|* ENTRY ORD = OUTPUT SEQUENCE ORDINAL FOR PROTECT 00853 M00S00850.virterm +++|* ALL, BEGIN DISPLAY OR END DISPLAY. 00854 M00S00851.virterm +++|* 00855 M00S00852.virterm +++|* EXIT REQUESTED SEQUENCE ISSUED. 00856 M00S00853.virterm +++|* 00857 M00S00854.virterm +++|* CALLS VDCTRL. 00858 M00S00855.virterm +++|# 00859 M00S00856.virterm +++|ITEM ORD I; # OUTPUT SEQUENCE ORDINAL # 00860 M00S00857.virterm +++| 00861 M00S00858.virterm +++|VDCTRL(ORD); # ISSUE REQUESTED SEQUENCE # 00862 M00S00859.virterm +++| 00863 M00S00860.virterm +++|END # VDTPRO # 00864 M00S00861.virterm +++|CONTROL EJECT; 00865 M00S00862.virterm +++| 00866 M00S00863.virterm +++|PROC VDTPSU; 00867 M00S00864.virterm +++| 00868 M00S00865.virterm +++|# TITLE VDTPSU - PSEUDO UNDERLINE. # 00869 M00S00866.virterm +++| 00870 M00S00867.virterm +++|BEGIN # VDTPSU # 00871 M00S00868.virterm +++| 00872 M00S00869.virterm +++|# 00873 M00S00870.virterm +++|** VDTPSU - PSEUDO UNDERLINE. 00874 M00S00871.virterm +++|* 00875 M00S00872.virterm +++|* THIS PROCEDURE ALLOWS INPUT FIELDS TO BE SEEN ON DUMB TERMINALS 00876 M00S00873.virterm +++|* BY TURNING THE BLANK AREA OF AN INPUT FIELD INTO UNDERSCORES. 00877 M00S00874.virterm +++|* 00878 M00S00875.virterm +++|* PROC VDTPSU 00879 M00S00876.virterm +++|* 00880 M00S00877.virterm +++|* ENTRY VTPSUNDACT = TRUE, IF PSEUDO UNDERLINING. 00881 M00S00878.virterm +++|* 00882 M00S00879.virterm +++|* EXIT BLANK OR UNDERSCORE OUTPUT AS NECESSARY. 00883 M00S00880.virterm +++|# 00884 M00S00881.virterm +++| 00885 M00S00882.virterm +++|IF VTPSUNDACT[0] THEN 00886 M00S00883.virterm +++| BEGIN # IF PSEUDO UNDERLINING # 00887 M00S00884.virterm +++| VDTCHR(O"0137"); 00888 M00S00885.virterm +++| END 00889 M00S00886.virterm +++|ELSE 00890 M00S00887.virterm +++| BEGIN # JUST A BLANK # 00891 M00S00888.virterm +++| VDTCHR(O"0040"); 00892 M00S00889.virterm +++| END 00893 M00S00890.virterm +++| 00894 M00S00891.virterm +++|END # VDTPSU # 00895 M00S00892.virterm +++|*IF DEF,ECHO 00896 M00S00893.virterm +++|CONTROL EJECT; 00897 M00S00894.virterm +++| 00898 M00S00895.virterm +++|PROC VDTRES; 00899 M00S00896.virterm +++| 00900 M00S00897.virterm +++|# TITLE VDTRES - RESET. # 00901 M00S00898.virterm +++| 00902 M00S00899.virterm +++|BEGIN # VDTRES # 00903 M00S00900.virterm +++| 00904 M00S00901.virterm +++|# 00905 M00S00902.virterm +++|** VDTRES - RESET. 00906 M00S00903.virterm +++|* 00907 M00S00904.virterm +++|* THIS PROCEDURE ISSUES A RESET SEQUENCE. 00908 M00S00905.virterm +++|* 00909 M00S00906.virterm +++|* PROC VDTRES 00910 M00S00907.virterm +++|* 00911 M00S00908.virterm +++|* CALLS VDCTRL. 00912 M00S00909.virterm +++|# 00913 M00S00910.virterm +++| 00914 M00S00911.virterm +++|VDCTRL(OUT"RESET"); # ISSUE RESET SEQUENCE # 00915 M00S00912.virterm +++| 00916 M00S00913.virterm +++|END # VDTRES # 00917 M00S00914.virterm +++|CONTROL EJECT; 00918 M00S00915.virterm +++| 00919 M00S00916.virterm +++|PROC VDTRET; 00920 M00S00917.virterm +++| 00921 M00S00918.virterm +++|# TITLE VDTRET - RETURN. # 00922 M00S00919.virterm +++| 00923 M00S00920.virterm +++|BEGIN # VDTRET # 00924 M00S00921.virterm +++| 00925 M00S00922.virterm +++|# 00926 M00S00923.virterm +++|** VDTRET - RETURN. 00927 M00S00924.virterm +++|* 00928 M00S00925.virterm +++|* THIS PROCEDURE ISSUES A RETURN SEQUENCE. 00929 M00S00926.virterm +++|* 00930 M00S00927.virterm +++|* PROC VDTRET 00931 M00S00928.virterm +++|* 00932 M00S00929.virterm +++|* CALLS VDCTRL. 00933 M00S00930.virterm +++|# 00934 M00S00931.virterm +++| 00935 M00S00932.virterm +++|VDCTRL(OUT"RET"); 00936 M00S00933.virterm +++| 00937 M00S00934.virterm +++|END # VDTRET # 00938 M00S00935.virterm +++|CONTROL EJECT; 00939 M00S00936.virterm +++| 00940 M00S00937.virterm +++|PROC VDTTAB; 00941 M00S00938.virterm +++| 00942 M00S00939.virterm +++|# TITLE VDTTAB - TAB FORWARD. # 00943 M00S00940.virterm +++| 00944 M00S00941.virterm +++|BEGIN # VDTTAB # 00945 M00S00942.virterm +++| 00946 M00S00943.virterm +++|# 00947 M00S00944.virterm +++|** VDTTAB - TAB FORWARD. 00948 M00S00945.virterm +++|* 00949 M00S00946.virterm +++|* THIS PROCEDURE MOVES THE CURSOR TO THE NEXT TAB POSITION OR 00950 M00S00947.virterm +++|* UNPROTECTED FIELD. 00951 M00S00948.virterm +++|* 00952 M00S00949.virterm +++|* PROC VDTTAB 00953 M00S00950.virterm +++|* 00954 M00S00951.virterm +++|* CALLS VDCTRL. 00955 M00S00952.virterm +++|* 00956 M00S00953.virterm +++|* NOTES THE INTERNAL CURSOR POSITION IS INCORRECT AFTER 00957 M00S00954.virterm +++|* A TAB FUNCTION SO PROCEDURE VDTCOR MUST BE CALLED. 00958 M00S00955.virterm +++|# 00959 M00S00956.virterm +++| 00960 M00S00957.virterm +++|VDCTRL(OUT"TABFORWARD"); # TAB FORWARD # 00961 M00S00958.virterm +++| 00962 M00S00959.virterm +++|END # VDTTAB # 00963 M00S00960.virterm +++|CONTROL EJECT; 00964 M00S00961.virterm +++| 00965 M00S00962.virterm +++|PROC VDTTBB; 00966 M00S00963.virterm +++| 00967 M00S00964.virterm +++|# TITLE VDTTBB - TAB BACKWARD. # 00968 M00S00965.virterm +++| 00969 M00S00966.virterm +++|BEGIN # VDTTBB # 00970 M00S00967.virterm +++| 00971 M00S00968.virterm +++|# 00972 M00S00969.virterm +++|** VDTTBB - TAB BACKWARD. 00973 M00S00970.virterm +++|* 00974 M00S00971.virterm +++|* THIS PROCEDURE MOVES THE CURSOR TO THE PREVIOUS TAB POSITION 00975 M00S00972.virterm +++|* OR UNPROTECTED FIELD. 00976 M00S00973.virterm +++|* 00977 M00S00974.virterm +++|* PROC VDTTBB 00978 M00S00975.virterm +++|* 00979 M00S00976.virterm +++|* CALLS VDCTRL. 00980 M00S00977.virterm +++|* 00981 M00S00978.virterm +++|* NOTES THE INTERNAL CURSOR POSITION IS INCORRECT AFTER 00982 M00S00979.virterm +++|* A TAB FUNCTION SO PROCEDURE VDTCOR MUST BE CALLED. 00983 M00S00980.virterm +++|# 00984 M00S00981.virterm +++| 00985 M00S00982.virterm +++|VDCTRL(OUT"TABACKWARD"); # TAB BACKWARD # 00986 M00S00983.virterm +++| 00987 M00S00984.virterm +++|END # VDTTBB # 00988 M00S00985.virterm +++|*ENDIF 00989 M00S00986.virterm +++| 00990 M00S00987.virterm +++|CONTROL FI; # END OF SFORM ONLY PROCEDURES # 00991 M00S00988.virterm +++|CONTROL EJECT; # VDTTFF USED BY SFORM AND FSE # 00992 M00S00989.virterm +++| 00993 M00S00990.virterm +++|CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 00994 M00S00991.virterm +++| 00995 M00S00992.virterm +++|PROC VDTTFF(OUTORD,COUNT); 00996 M00S00993.virterm +++| 00997 M00S00994.virterm +++|# TITLE VDTTFF - TEST FOR OUTPUT FUNCTION. # 00998 M00S00995.virterm +++| 00999 M00S00996.virterm +++|BEGIN # VDTTFF # 01000 M00S00997.virterm +++| 01001 M00S00998.virterm +++|# 01002 M00S00999.virterm +++|** VDTTFF - TEST FOR OUTPUT FUNCTION. 01003 M00S01000.virterm +++|* 01004 M00S01001.virterm +++|* THIS PROCEDURE TESTS FOR A *TDU* DEFINED OUTPUT FUNCTION FOR A 01005 M00S01002.virterm +++|* GIVEN ORDINAL. 01006 M00S01003.virterm +++|* 01007 M00S01004.virterm +++|* PROC VDTTFF(OUTORD,COUNT) 01008 M00S01005.virterm +++|* 01009 M00S01006.virterm +++|* ENTRY OUTORD = THE *TDU* OUPUT ORDINAL TO BE CHECKED. 01010 M00S01007.virterm +++|* 01011 M00S01008.virterm +++|* EXIT COUNT = THE NUMBER OF BYTES IN THE SEQUENCE. 01012 M00S01009.virterm +++|# 01013 M00S01010.virterm +++| 01014 M00S01011.virterm +++|ITEM OUTORD I; # *TDU* OUTPUT ORDINAL # 01015 M00S01012.virterm +++|ITEM COUNT I; # BTYE COUNT FOR SEQUENCE # 01016 M00S01013.virterm +++| 01017 M00S01014.virterm +++|ITEM TDUOFFSET I; # *TDU* OFFSET FOR SEQUENCE # 01018 M00S01015.virterm +++|ITEM CHARINDEX I; # CHARACTER INDEX INTO WORD # 01019 M00S01016.virterm +++|ITEM WORDINDEX I; # WORD INDEX INTP *TDU* TABLE # 01020 M00S01017.virterm +++| 01021 M00S01018.virterm +++|IF OUTORD GR OUT"RESERVED" AND OUTORD LS OUT"LASTOUT" THEN 01022 M00S01019.virterm +++| BEGIN # IF LEGAL OUTPUT ORDINAL # 01023 M00S01020.virterm +++| WORDINDEX = OUTORD / 5; # GET OFFSET FOR ORDINAL # 01024 M00S01021.virterm +++| CHARINDEX = 12 * (OUTORD - (WORDINDEX * 5)); 01025 M00S01022.virterm +++| TDUOFFSET = B<CHARINDEX,12>TABFULLWRD[WORDINDEX]; 01026 M00S01023.virterm +++| IF CHARINDEX NQ 48 THEN 01027 M00S01024.virterm +++| BEGIN # IF NEXT BYTE IS IN SAME WORD # 01028 M00S01025.virterm +++| COUNT = B<CHARINDEX+12,12>TABFULLWRD[WORDINDEX]; 01029 M00S01026.virterm +++| END 01030 M00S01027.virterm +++| ELSE 01031 M00S01028.virterm +++| BEGIN # GET BYTE FROM NEXT WORD # 01032 M00S01029.virterm +++| COUNT = B<0,12>TABFULLWRD[WORDINDEX+1]; 01033 M00S01030.virterm +++| END 01034 M00S01031.virterm +++| COUNT = COUNT - TDUOFFSET; # CALCULATE NUMBER OF BYTES # 01035 M00S01032.virterm +++| IF COUNT LS 0 THEN COUNT = 0; # IF NEGATIVE COUNT, RETURN ZERO # 01036 M00S01033.virterm +++| END 01037 M00S01034.virterm +++|ELSE 01038 M00S01035.virterm +++| BEGIN # IF ILLEGAL ORDINAL # 01039 M00S01036.virterm +++| COUNT = 0; # RETURN ZERO COUNT # 01040 M00S01037.virterm +++| END 01041 M00S01038.virterm +++| 01042 M00S01039.virterm +++|END # VDTTFF # 01043 M00S01040.virterm +++| 01044 M00S01041.virterm +++|CONTROL FI; # END OF IF NOT MULTI USER FSE # 01045 M00S01042.virterm +++|CONTROL EJECT; # FSE USED PROCEDURE VDTAPS # 01046 M00S01043.virterm +++|CONTROL IFEQ EDITORVDT,1; # IF EDITOR VERSION OF VIRTERM # 01047 M00S01044.virterm +++| CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 01048 M00S01045.virterm +++| 01049 M00S01046.virterm +++| PROC VDTAPS(NAME,STRING,LENGTH,STAT); 01050 M00S01047.virterm +++| 01051 M00S01048.virterm +++| # TITLE VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE. # 01052 M00S01049.virterm +++| 01053 M00S01050.virterm +++| BEGIN # VDTAPS # 01054 M00S01051.virterm +++| 01055 M00S01052.virterm +++| # 01056 M00S01053.virterm +++| ** VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE. 01057 M00S01054.virterm +++| * 01058 M00S01055.virterm +++| * THIS PROCEDURE GETS THE NEXT APPLICATION STRING FROM THE 01059 M00S01056.virterm +++| * *TDU* TABLE. 01060 M00S01057.virterm +++| * 01061 M00S01058.virterm +++| * PROC VDTAPS(NAME,STRING,LENGTH,STAT) 01062 M00S01059.virterm +++| * 01063 M00S01060.virterm +++| * ENTRY NAME = NAME OF APPLICATION STRING REQUESTED. 01064 M00S01061.virterm +++| * TDUINDEX = WORD COUNT READ SO FAR OF *TDU* TABLE. 01065 M00S01062.virterm +++| * TDURESID = RESIDENT *TDU* TABLE FLAG. 01066 M00S01063.virterm +++| * 01067 M00S01064.virterm +++| * EXIT STRING = APPLICATION STRING (SEVEN BIT FORMAT). 01068 M00S01065.virterm +++| * LENGTH = NUMBER OF CHARACTERS IN STRING. 01069 M00S01066.virterm +++| * STAT = 0, IF NO ERROR. 01070 M00S01067.virterm +++| * = 1, IF NO STRING. 01071 M00S01068.virterm +++| * TDUINDEX = UPDATED. 01072 M00S01069.virterm +++| * 01073 M00S01070.virterm +++| * CALLS VDGETW. 01074 M00S01071.virterm +++| * 01075 M00S01072.virterm +++| * USES TDUINDEX. 01076 M00S01073.virterm +++| # 01077 M00S01074.virterm +++| 01078 M00S01075.virterm +++| ITEM NAME C(7); # NAME OF STRING # 01079 M00S01076.virterm +++| ARRAY STRING [0:0] P(1); 01080 M00S01077.virterm +++| BEGIN # APPLICATION STRING # 01081 M00S01078.virterm +++| ITEM STRINGWORD U; # WORD # 01082 M00S01079.virterm +++| END 01083 M00S01080.virterm +++| ITEM LENGTH I; # NUMBER OF CHARACTERS # 01084 M00S01081.virterm +++| ITEM STAT I; # STATUS RETURNED # 01085 M00S01082.virterm +++| 01086 M00S01083.virterm +++| ITEM FOUND B; # FLAG # 01087 M00S01084.virterm +++| ITEM COUNTER I; # COUNTER # 01088 M00S01085.virterm +++| ITEM COUNTER2 I; # COUNTER2 # 01089 M00S01086.virterm +++| ITEM COUNTER3 I; # COUNTER3 # 01090 M00S01087.virterm +++| ITEM WORD U; # WORD FROM *TDU* TABLE # 01091 M00S01088.virterm +++| ARRAY WORDEXP [0:0] P(1); # EXPANDED *TDU* TABLE WORD # 01092 M00S01089.virterm +++| BEGIN 01093 M00S01090.virterm +++| ITEM WORDFULL U(00,00,60); # FULL WORD # 01094 M00S01091.virterm +++| ITEM WORDNAME C(00,00,07); # APPLICATION STRING NAME # 01095 M00S01092.virterm +++| ITEM WORDCOUNT I(00,42,18); # CHARACTER COUNT # 01096 M00S01093.virterm +++| END 01097 M00S01094.virterm +++| 01098 M00S01095.virterm +++| STAT = 0; 01099 M00S01096.virterm +++| IF TDUINDEX[0] GQ TABSTRINIT[0] THEN 01100 M00S01097.virterm +++| BEGIN # IF PAST APPLICATION STRINGS # 01101 M00S01098.virterm +++| STAT = 1; # NO MORE STRINGS # 01102 M00S01099.virterm +++| END 01103 M00S01100.virterm +++| ELSE 01104 M00S01101.virterm +++| BEGIN 01105 M00S01102.virterm +++| IF TDUINDEX[0] LS TABSTRAPPS THEN 01106 M00S01103.virterm +++| BEGIN # IF NOT AT APPLICATION STRINGS # 01107 M00S01104.virterm +++| COUNTER2 = TABSTRAPPS[0] - TDUINDEX[0]; 01108 M00S01105.virterm +++| FOR COUNTER = 0 STEP 1 UNTIL COUNTER2 - 1 DO 01109 M00S01106.virterm +++| BEGIN # SKIP TO APPLICATION STRINGS # 01110 M00S01107.virterm +++| VDGETW(WORD,STAT); 01111 M00S01108.virterm +++| END 01112 M00S01109.virterm +++| END 01113 M00S01110.virterm +++| IF STAT EQ 0 THEN 01114 M00S01111.virterm +++| BEGIN # IF NOT END OF TABLE # 01115 M00S01112.virterm +++| FOUND = FALSE; # NOT FOUND YET # 01116 M00S01113.virterm +++| FOR COUNTER = 0 STEP 1 WHILE STAT EQ 0 AND NOT FOUND DO 01117 M00S01114.virterm +++| BEGIN 01118 M00S01115.virterm +++| VDGETW(WORD,STAT); # GET APPLICATION STRING NAME # 01119 M00S01116.virterm +++| WORDFULL = WORD; 01120 M00S01117.virterm +++| IF WORDCOUNT[0] EQ 0 THEN 01121 M00S01118.virterm +++| BEGIN # IF END OF APPLICATION STRINGS # 01122 M00S01119.virterm +++| STAT = 1; 01123 M00S01120.virterm +++| END 01124 M00S01121.virterm +++| IF STAT EQ 0 THEN 01125 M00S01122.virterm +++| BEGIN # IF NOT END OF TABLE # 01126 M00S01123.virterm +++| COUNTER3 = (WORDCOUNT[0] + 7) / 8; 01127 M00S01124.virterm +++| IF WORDNAME[0] NQ NAME THEN 01128 M00S01125.virterm +++| BEGIN # IF NO MATCH ON NAME # 01129 M00S01126.virterm +++| FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO 01130 M00S01127.virterm +++| BEGIN 01131 M00S01128.virterm +++| VDGETW(WORD,STAT); # SKIP THROUGH STRING # 01132 M00S01129.virterm +++| END 01133 M00S01130.virterm +++| END 01134 M00S01131.virterm +++| ELSE 01135 M00S01132.virterm +++| BEGIN # IF NAME MATCHES # 01136 M00S01133.virterm +++| FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO 01137 M00S01134.virterm +++| BEGIN 01138 M00S01135.virterm +++| VDGETW(WORD,STAT); # GET WORD FROM *TDU* TABLE # 01139 M00S01136.virterm +++| STRINGWORD[COUNTER2] = WORD; 01140 M00S01137.virterm +++| END 01141 M00S01138.virterm +++| LENGTH = WORDCOUNT[0]; 01142 M00S01139.virterm +++| FOUND = TRUE; # FOUND IT # 01143 M00S01140.virterm +++| END 01144 M00S01141.virterm +++| END 01145 M00S01142.virterm +++| END 01146 M00S01143.virterm +++| END 01147 M00S01144.virterm +++| END 01148 M00S01145.virterm +++| 01149 M00S01146.virterm +++| END # VDTAPS # 01150 M00S01147.virterm +++| CONTROL FI; # END OF NOT MULTI USER FSE # 01151 M00S01148.virterm +++|CONTROL FI; # END OF IF EDITOR VIRTERM # 01152 M00S01149.virterm +++|CONTROL EJECT; # SFORM USED PROCEDURE VDTAPS # 01153 M00S01150.virterm +++|CONTROL IFEQ EDITORVDT,1; # IF EDITOR VIRTERM # 01154 M00S01151.virterm +++|CONTROL IFEQ EDITORVDT,0; # IF NOT EDITOR VIRTERM # 01155 M00S01152.virterm +++| 01156 M00S01153.virterm +++| PROC VDTAPS(NAME,STRING,LENGTH,STAT); 01157 M00S01154.virterm +++| 01158 M00S01155.virterm +++| # TITLE VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE. # 01159 M00S01156.virterm +++| 01160 M00S01157.virterm +++| BEGIN # VDTAPS # 01161 M00S01158.virterm +++| 01162 M00S01159.virterm +++| # 01163 M00S01160.virterm +++| ** VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE. 01164 M00S01161.virterm +++| * 01165 M00S01162.virterm +++| * THIS PROCEDURE GETS THE NEXT APPLICATION STRING FROM THE 01166 M00S01163.virterm +++| * *TDU* TABLE. 01167 M00S01164.virterm +++| * 01168 M00S01165.virterm +++| * PROC VDTAPS(NAME,STRING,LENGTH,STAT) 01169 M00S01166.virterm +++| * 01170 M00S01167.virterm +++| * ENTRY NAME = NAME OF APPLICATION STRING REQUESTED. 01171 M00S01168.virterm +++| * TDUINDEX = WORD COUNT READ SO FAR OF *TDU* TABLE. 01172 M00S01169.virterm +++| * TDURESID = RESIDENT *TDU* TABLE FLAG. 01173 M00S01170.virterm +++| * 01174 M00S01171.virterm +++| * EXIT STRING = APPLICATION STRING (8/12 FORMAT). 01175 M00S01172.virterm +++| * LENGTH = NUMBER OF CHARACTERS IN STRING. 01176 M00S01173.virterm +++| * STAT = 0, IF NO ERROR. 01177 M00S01174.virterm +++| * = 1, IF NO STRING. 01178 M00S01175.virterm +++| * TDUINDEX = UPDATED. 01179 M00S01176.virterm +++| * 01180 M00S01177.virterm +++| * CALLS VDGETW. 01181 M00S01178.virterm +++| * 01182 M00S01179.virterm +++| * USES TDUINDEX. 01183 M00S01180.virterm +++| # 01184 M00S01181.virterm +++| 01185 M00S01182.virterm +++| ITEM NAME C(7); # NAME OF STRING # 01186 M00S01183.virterm +++| ARRAY STRING [0:0] P(1); 01187 M00S01184.virterm +++| BEGIN # APPLICATION STRING # 01188 M00S01185.virterm +++| ITEM STRINGWORD U; # WORD # 01189 M00S01186.virterm +++| END 01190 M00S01187.virterm +++| ITEM LENGTH I; # NUMBER OF CHARACTERS # 01191 M00S01188.virterm +++| ITEM STAT I; # STATUS RETURNED # 01192 M00S01189.virterm +++| 01193 M00S01190.virterm +++| ITEM FOUND B; # FLAG # 01194 M00S01191.virterm +++| ITEM COUNTER I; # COUNTER # 01195 M00S01192.virterm +++| ITEM COUNTER2 I; # COUNTER2 # 01196 M00S01193.virterm +++| ITEM COUNTER3 I; # COUNTER3 # 01197 M00S01194.virterm +++| ITEM WORD U; # WORD FROM *TDU* TABLE # 01198 M00S01195.virterm +++| ARRAY WORDEXP [0:0] P(1); # EXPANDED *TDU* TABLE WORD # 01199 M00S01196.virterm +++| BEGIN 01200 M00S01197.virterm +++| ITEM WORDFULL U(00,00,60); # FULL WORD # 01201 M00S01198.virterm +++| ITEM WORDNAME C(00,00,07); # APPLICATION STRING NAME # 01202 M00S01199.virterm +++| ITEM WORDCOUNT I(00,42,18); # CHARACTER COUNT # 01203 M00S01200.virterm +++| END 01204 M00S01201.virterm +++| 01205 M00S01202.virterm +++| STAT = 0; 01206 M00S01203.virterm +++| IF TDUINDEX[0] GQ TABSTRINIT[0] THEN 01207 M00S01204.virterm +++| BEGIN # IF PAST APPLICATION STRINGS # 01208 M00S01205.virterm +++| STAT = 1; # NO MORE STRINGS # 01209 M00S01206.virterm +++| END 01210 M00S01207.virterm +++| ELSE 01211 M00S01208.virterm +++| BEGIN # NOT PAST APPLICATION STRINGS # 01212 M00S01209.virterm +++| IF TDUINDEX[0] LS TABSTRAPPS THEN 01213 M00S01210.virterm +++| BEGIN # IF NOT AT APPLICATION STRINGS # 01214 M00S01211.virterm +++| COUNTER2 = TABSTRAPPS[0] - TDUINDEX[0]; 01215 M00S01212.virterm +++| FOR COUNTER = 0 STEP 1 UNTIL COUNTER2 - 1 DO 01216 M00S01213.virterm +++| BEGIN # SKIP TO APPLICATION STRINGS # 01217 M00S01214.virterm +++| VDGETW(WORD,STAT); 01218 M00S01215.virterm +++| END 01219 M00S01216.virterm +++| END 01220 M00S01217.virterm +++| IF STAT EQ 0 THEN 01221 M00S01218.virterm +++| BEGIN # IF NOT END OF TABLE # 01222 M00S01219.virterm +++| FOUND = FALSE; # NOT FOUND YET # 01223 M00S01220.virterm +++| FOR COUNTER = 0 STEP 1 WHILE STAT EQ 0 AND NOT FOUND DO 01224 M00S01221.virterm +++| BEGIN 01225 M00S01222.virterm +++| VDGETW(WORD,STAT); # GET APPLICATION STRING NAME # 01226 M00S01223.virterm +++| WORDFULL = WORD; 01227 M00S01224.virterm +++| IF WORDCOUNT[0] EQ 0 THEN 01228 M00S01225.virterm +++| BEGIN # IF END OF APPLICATION STRINGS # 01229 M00S01226.virterm +++| STAT = 1; 01230 M00S01227.virterm +++| END 01231 M00S01228.virterm +++| IF STAT EQ 0 THEN 01232 M00S01229.virterm +++| BEGIN # IF NOT END OF TABLE # 01233 M00S01230.virterm +++| COUNTER3 = (WORDCOUNT[0] + 7) / 8; 01234 M00S01231.virterm +++| IF WORDNAME[0] NQ NAME THEN 01235 M00S01232.virterm +++| BEGIN # IF NO MATCH ON NAME # 01236 M00S01233.virterm +++| FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO 01237 M00S01234.virterm +++| BEGIN 01238 M00S01235.virterm +++| VDGETW(WORD,STAT); # SKIP THROUGH STRING # 01239 M00S01236.virterm +++| END 01240 M00S01237.virterm +++| END 01241 M00S01238.virterm +++| ELSE 01242 M00S01239.virterm +++| BEGIN # IF NAME MATCHES # 01243 M00S01240.virterm +++| FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO 01244 M00S01241.virterm +++| BEGIN 01245 M00S01242.virterm +++| VDGETW(WORD,STAT); # GET WORD FROM *TDU* TABLE # 01246 M00S01243.virterm +++| B<0,12>STRINGWORD[COUNTER2] = B<4,7>WORD; 01247 M00S01244.virterm +++| B<12,12>STRINGWORD[COUNTER2] = B<11,7>WORD; 01248 M00S01245.virterm +++| B<24,12>STRINGWORD[COUNTER2] = B<18,7>WORD; 01249 M00S01246.virterm +++| B<36,12>STRINGWORD[COUNTER2] = B<25,7>WORD; 01250 M00S01247.virterm +++| B<48,12>STRINGWORD[COUNTER2] = B<32,7>WORD; 01251 M00S01248.virterm +++| END 01252 M00S01249.virterm +++| LENGTH = WORDCOUNT[0]; 01253 M00S01250.virterm +++| FOUND = TRUE; # FOUND IT # 01254 M00S01251.virterm +++| END 01255 M00S01252.virterm +++| END 01256 M00S01253.virterm +++| END 01257 M00S01254.virterm +++| END 01258 M00S01255.virterm +++| END 01259 M00S01256.virterm +++| 01260 M00S01257.virterm +++| END # VDTAPS # 01261 M00S01258.virterm +++|CONTROL FI; # END OF IF EDITOR # 01262 M00S01259.virterm +++|CONTROL FI; # END OF IF NOT EDITOR # 01263 M00S01260.virterm +++|CONTROL EJECT; 01264 M00S01261.virterm +++| 01265 M00S01262.virterm +++|PROC VDTBEL; 01266 M00S01263.virterm +++| 01267 M00S01264.virterm +++|# TITLE VDTBEL - RING THE BELL. # 01268 M00S01265.virterm +++| 01269 M00S01266.virterm +++|IOBEGIN(VDTBEL) 01270 M00S01267.virterm +++| 01271 M00S01268.virterm +++|# 01272 M00S01269.virterm +++|** VDTBEL - RING THE BELL. 01273 M00S01270.virterm +++|* 01274 M00S01271.virterm +++|* THIS PROCEDURE SOUNDS THE AUDIBLE ALARM. 01275 M00S01272.virterm +++|* 01276 M00S01273.virterm +++|* PROC VDTBEL 01277 M00S01274.virterm +++|* 01278 M00S01275.virterm +++|* CALLS VDCTRL. 01279 M00S01276.virterm +++|# 01280 M00S01277.virterm +++| 01281 M00S01278.virterm +++|VDCTRL(OUT"RINGBELL"); # RING THE BELL # 01282 M00S01279.virterm +++| 01283 M00S01280.virterm +++|IOEND # VDTBELL # 01284 M00S01281.virterm +++|CONTROL EJECT; 01285 M00S01282.virterm +++| 01286 M00S01283.virterm +++|PROC VDTBOO; 01287 M00S01284.virterm +++| 01288 M00S01285.virterm +++|# TITLE VDTBOO - BEGINNING OF OUTPUT SEQUENCE. # 01289 M00S01286.virterm +++| 01290 M00S01287.virterm +++|IOBEGIN(VDTBOO) 01291 M00S01288.virterm +++| 01292 M00S01289.virterm +++|# 01293 M00S01290.virterm +++|** VDTBOO - BEGINNING OF OUTPUT SEQUENCE. 01294 M00S01291.virterm +++|* 01295 M00S01292.virterm +++|* THIS PROCEDURE IS CALLED TO START EACH OUTPUT SEQUENCE. 01296 M00S01293.virterm +++|* 01297 M00S01294.virterm +++|* PROC VDTBOO 01298 M00S01295.virterm +++|* 01299 M00S01296.virterm +++|* CALLS VDCTRL. 01300 M00S01297.virterm +++|* 01301 M00S01298.virterm +++|* NOTES TO PROTECT USERS FROM THEMSELVES THE CONTROL 01302 M00S01299.virterm +++|* SEQUENCE TO TURN OFF INSERT MODE IS ISSUED. 01303 M00S01300.virterm +++|# 01304 M00S01301.virterm +++| 01305 M00S01302.virterm +++|VTINSMODE[0] = FALSE; # INSERT MODE IS FALSE # 01306 M00S01303.virterm +++|VDCTRL(OUT"INSRTMDOFF"); # TURN OFF INSERT MODE # 01307 M00S01304.virterm +++|VDCTRL(OUT"BEGINOUT"); # BEGIN OUTPUT SEQUENCE # 01308 M00S01305.virterm +++|CONTROL IFEQ EDITORVDT,0; # IF NOT EDITOR VIRTERM # 01309 M00S01306.virterm +++| VDCTRL(OUT"BEGINDIS"); # OUTPUT BEGIN DISPLAY # 01310 M00S01307.virterm +++| IF NUMBERBYTE NQ 0 THEN 01311 M00S01308.virterm +++| BEGIN # IF A SEQUENCE WAS SENT # 01312 M00S01309.virterm +++| ATTRIBMASK = O"6001"; # PROTECT ATTRIBUTE IS ON # 01313 M00S01310.virterm +++| END 01314 M00S01311.virterm +++|CONTROL FI; # END OF IF NOT EDITOR # 01315 M00S01312.virterm +++| 01316 M00S01313.virterm +++|IOEND # VDTBOO # 01317 M00S01314.virterm +++|CONTROL EJECT; 01318 M00S01315.virterm +++| 01319 M00S01316.virterm +++|PROC VDTCHR(CHAR); 01320 M00S01317.virterm +++| 01321 M00S01318.virterm +++|# TITLE VDTCHR - OUTPUT ONE BYTE OF TEXT. # 01322 M00S01319.virterm +++| 01323 M00S01320.virterm +++|IOBEGIN(VDTCHR) 01324 M00S01321.virterm +++| 01325 M00S01322.virterm +++|# 01326 M00S01323.virterm +++|** VDTCHR - OUTPUT ONE 12 BIT BYTE. 01327 M00S01324.virterm +++|* 01328 M00S01325.virterm +++|* THIS PROCEDURE OUTPUTS A CHARACTER. 01329 M00S01326.virterm +++|* 01330 M00S01327.virterm +++|* PROC VDTCHR(CHAR) 01331 M00S01328.virterm +++|* 01332 M00S01329.virterm +++|* ENTRY CHAR = 12 BIT BYTE OF DATA. 01333 M00S01330.virterm +++|* 01334 M00S01331.virterm +++|* EXIT VTXCUR AND VTYCUR ADJUSTED AS NECESSARY. 01335 M00S01332.virterm +++|* 01336 M00S01333.virterm +++|* CALLS VDTOUT. 01337 M00S01334.virterm +++|* 01338 M00S01335.virterm +++|* USES VTCHAR, VTXCUR, VTYCUR. 01339 M00S01336.virterm +++|* 01340 M00S01337.virterm +++|* NOTES IF THE MOVEMENT OF THE CURSOR THAT WILL OCCUR WHEN 01341 M00S01338.virterm +++|* THE CHARACTER IS OUTPUT WILL CAUSE THE TERMINAL TO 01342 M00S01339.virterm +++|* SCROLL THEN THE CHARACTER WILL NOT BE OUTPUT. 01343 M00S01340.virterm +++|# 01344 M00S01341.virterm +++| 01345 M00S01342.virterm +++|ITEM CHAR I; # OUTPUT BYTE # 01346 M00S01343.virterm +++| 01347 M00S01344.virterm +++|VTCHAR = CHAR; 01348 M00S01345.virterm +++| 01349 M00S01346.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE # 01350 M00S01347.virterm +++| 01351 M00S01348.virterm +++|IF VTXCUR EQ VTXMAX THEN 01352 M00S01349.virterm +++| BEGIN # IF PRESENTLY IN LAST COLUMN # 01353 M00S01350.virterm +++| IF VTYCUR EQ VTYMAX THEN 01354 M00S01351.virterm +++| BEGIN # IF PRESENTLY ON LAST LINE # 01355 M00S01352.virterm +++| IF TABLASTPOS[0] NQ CURSORMOVE"SCROLL" THEN 01356 M00S01353.virterm +++| BEGIN # IF TERMINAL WILL NOT SCROLL # 01357 M00S01354.virterm +++| VDTOUT(VTCHAR); # OUTPUT CHARACTER # 01358 M00S01355.virterm +++| IF TABLASTPOS[0] GQ CURSORMOVE"SPIRAL" THEN 01359 M00S01356.virterm +++| BEGIN # IF WRAP OR SPIRAL # 01360 M00S01357.virterm +++| VTXCUR = 0; 01361 M00S01358.virterm +++| IF TABLASTPOS[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = 0; 01362 M00S01359.virterm +++| END 01363 M00S01360.virterm +++| END 01364 M00S01361.virterm +++| END 01365 M00S01362.virterm +++| ELSE 01366 M00S01363.virterm +++| BEGIN # NOT YET AT BOTTOM OF SCREEN # 01367 M00S01364.virterm +++| VDTOUT(VTCHAR); # OUTPUT CHARACTER # 01368 M00S01365.virterm +++| IF TABRGHTCHR[0] GQ CURSORMOVE"SPIRAL" THEN 01369 M00S01366.virterm +++| BEGIN # IF WRAP OR SPIRAL # 01370 M00S01367.virterm +++| VTXCUR = 0; 01371 M00S01368.virterm +++| IF TABRGHTCHR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR + 1; 01372 M00S01369.virterm +++| END 01373 M00S01370.virterm +++| END 01374 M00S01371.virterm +++| END 01375 M00S01372.virterm +++|ELSE 01376 M00S01373.virterm +++| BEGIN # NOT YET AT LAST COLUMN # 01377 M00S01374.virterm +++| VDTOUT(VTCHAR); # OUTPUT CHARACTER # 01378 M00S01375.virterm +++| VTXCUR = VTXCUR + 1; # ADJUST POSITION # 01379 M00S01376.virterm +++| END 01380 M00S01377.virterm +++| 01381 M00S01378.virterm +++|IOEND # VDTCHR # 01382 M00S01379.virterm +++|CONTROL EJECT; 01383 M00S01380.virterm +++| 01384 M00S01381.virterm +++|PROC VDTCLL(XX,YY); 01385 M00S01382.virterm +++| 01386 M00S01383.virterm +++|# TITLE VDTCLL - CLEAR TO END OF LINE. # 01387 M00S01384.virterm +++| 01388 M00S01385.virterm +++|IOBEGIN(VDTCLL) 01389 M00S01386.virterm +++| 01390 M00S01387.virterm +++|# 01391 M00S01388.virterm +++|** VDTCLL - CLEAR TO END OF LINE. 01392 M00S01389.virterm +++|* 01393 M00S01390.virterm +++|* THIS PROCEDURE ERASES ALL CHARACTERS FROM THE COLUMN XX TO THE 01394 M00S01391.virterm +++|* END OF THE LINE FOR LINE YY. 01395 M00S01392.virterm +++|* 01396 M00S01393.virterm +++|* PROC VDTCLL(XX,YY) 01397 M00S01394.virterm +++|* 01398 M00S01395.virterm +++|* ENTRY XX = X COORDINATE TO CLEAR FROM. 01399 M00S01396.virterm +++|* YY = Y COORDINATE OF LINE TO CLEAR. 01400 M00S01397.virterm +++|* 01401 M00S01398.virterm +++|* EXIT VTXCUR UPDATED. 01402 M00S01399.virterm +++|* VTYCUR UPDATED. 01403 M00S01400.virterm +++|* LINE CLEARED. 01404 M00S01401.virterm +++|* 01405 M00S01402.virterm +++|* USES VTHOLD, VTXCUR, VTYCUR. 01406 M00S01403.virterm +++|* 01407 M00S01404.virterm +++|* CALLS VDCTRL, VDMOVE, VDTCHR, VDTOUT. 01408 M00S01405.virterm +++|# 01409 M00S01406.virterm +++| 01410 M00S01407.virterm +++|ITEM XX I; # X CORDINATE # 01411 M00S01408.virterm +++|ITEM YY I; # Y CORDINATE # 01412 M00S01409.virterm +++| 01413 M00S01410.virterm +++|# START OF NON-REENTRANT PARAMETER USAGE # 01414 M00S01411.virterm +++| 01415 M00S01412.virterm +++|IF VTXCUR NQ XX OR VTYCUR NQ YY THEN 01416 M00S01413.virterm +++| BEGIN 01417 M00S01414.virterm +++| VTXCUR = XX; 01418 M00S01415.virterm +++| VTYCUR = YY; 01419 M00S01416.virterm +++| 01420 M00S01417.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE # 01421 M00S01418.virterm +++| 01422 M00S01419.virterm +++| VDMOVE(VTXCUR,VTYCUR); # POSITION CURSOR # 01423 M00S01420.virterm +++| END 01424 M00S01421.virterm +++| 01425 M00S01422.virterm +++|CONTROL IFEQ EDITORVDT,1; # IF EDITOR VERSION OF VIRTERM # 01426 M00S01423.virterm +++|CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 01427 M00S01424.virterm +++| 01428 M00S01425.virterm +++|# 01429 M00S01426.virterm +++|* FSE USES THE LAST CHARACTER POSITION OF EACH LINE AS THE FIELD 01430 M00S01427.virterm +++|* ATTRIBUTE FOR THE NEXT LINE ON A BLOCK MODE TERMINAL. TO PRE- 01431 M00S01428.virterm +++|* VENT THIS ATTRIBUTE CHARACTER FROM BEING OVERWRITTEN BY THE 01432 M00S01429.virterm +++|* NORMAL CLEAR-TO-END-OF-LINE SEQUENCE, A SPECIAL SEQUENCE IS 01433 M00S01430.virterm +++|* GENERATED THAT ONLY CLEARS UP TO, BUT NOT INCLUDING THE LAST 01434 M00S01431.virterm +++|* POSITION OF THE LINE. 01435 M00S01432.virterm +++|# 01436 M00S01433.virterm +++| 01437 M00S01434.virterm +++| IF TABLOCKMDE[0] THEN 01438 M00S01435.virterm +++| BEGIN # IF BLOCK MODE TERMINAL # 01439 M00S01436.virterm +++| IF VTXCUR NQ VTXMAX THEN 01440 M00S01437.virterm +++| BEGIN # IF NOT ALREADY AT END OF LINE # 01441 M00S01438.virterm +++| VTI = (VTYCUR * (VTXMAX + 1)) + VTXMAX; 01442 M00S01439.virterm +++| VDTOUT(X"14"); # REPEAT TO ADDRESS # 01443 M00S01440.virterm +++| VDTOUT(RTA3270[B<48,6>VTI]); # OUTPUT BYTE 1 OF ADDRESS # 01444 M00S01441.virterm +++| VDTOUT(RTA3270[B<54,6>VTI]); # OUTPUT BYTE 2 OF ADDRESS # 01445 M00S01442.virterm +++| VDTOUT(X"00"); # REPEAT (NULL CHARACTER) # 01446 M00S01443.virterm +++| VDMOVE(VTXCUR,VTYCUR); # REPOSITION CURSOR # 01447 M00S01444.virterm +++| END 01448 M00S01445.virterm +++| IORET 01449 M00S01446.virterm +++| END 01450 M00S01447.virterm +++| 01451 M00S01448.virterm +++|CONTROL FI; # END OF IF NOT MULTI FSE # 01452 M00S01449.virterm +++|CONTROL FI; # END OF IF EDITOR VIRTERM # 01453 M00S01450.virterm +++| 01454 M00S01451.virterm +++|VDCTRL(OUT"CLREOL"); # CLEAR TO END OF LINE # 01455 M00S01452.virterm +++|IF NUMBERBYTE EQ 0 THEN 01456 M00S01453.virterm +++| BEGIN # IF NO FUNCTION AVAILABLE # 01457 M00S01454.virterm +++| FOR VTI = VTXCUR STEP 1 UNTIL VTXMAX - 1 DO 01458 M00S01455.virterm +++| BEGIN # UNTIL END OF LINE # 01459 M00S01456.virterm +++| VDTOUT(X"20"); # OUTPUT BLANK # 01460 M00S01457.virterm +++| END 01461 M00S01458.virterm +++| CONTROL IFEQ EDITORVDT,1; # IF EDITOR VERSION OF VIRTERM # 01462 M00S01459.virterm +++| VTHOLD = VTXCUR; # SAVE X COORDINATE # 01463 M00S01460.virterm +++| VTI = VTYCUR; 01464 M00S01461.virterm +++| CONTROL FI; # END OF IF EDITOR VIRTERM # 01465 M00S01462.virterm +++| VTXCUR = VTXMAX; # CURSOR IS AT EDGE OF SCREEN # 01466 M00S01463.virterm +++| VDTCHR(X"20"); # OUTPUT CHARACTER WITH CHECK # 01467 M00S01464.virterm +++| CONTROL IFEQ EDITORVDT,1; # IF EDITOR VERSION OF VIRTERM # 01468 M00S01465.virterm +++| VTXCUR = VTHOLD; # RESTORE X COORDINATE # 01469 M00S01466.virterm +++| VTYCUR = VTI; 01470 M00S01467.virterm +++| VDMOVE(VTXCUR,VTYCUR); # RESET CURSOR POSITION # 01471 M00S01468.virterm +++| CONTROL FI; # END OF IF EDITOR VIRTERM # 01472 M00S01469.virterm +++| END 01473 M00S01470.virterm +++| 01474 M00S01471.virterm +++|IOEND # VDTCLL # 01475 M00S01472.virterm +++|CONTROL EJECT; 01476 M00S01473.virterm +++| 01477 M00S01474.virterm +++|PROC VDTCLS; 01478 M00S01475.virterm +++| 01479 M00S01476.virterm +++|# TITLE VDTCLS - CLEAR SCREEN. # 01480 M00S01477.virterm +++| 01481 M00S01478.virterm +++|IOBEGIN(VDTCLS) 01482 M00S01479.virterm +++| 01483 M00S01480.virterm +++|# 01484 M00S01481.virterm +++|** VDTCLS - CLEAR SCREEN. 01485 M00S01482.virterm +++|* 01486 M00S01483.virterm +++|* THIS PROCEDURE CLEARS THE SCREEN AND POSITIONS THE CURSOR TO 01487 M00S01484.virterm +++|* THE HOME POSITION. 01488 M00S01485.virterm +++|* 01489 M00S01486.virterm +++|* PROC VDTCLS 01490 M00S01487.virterm +++|* 01491 M00S01488.virterm +++|* EXIT VTXCUR = 0. 01492 M00S01489.virterm +++|* VTYCUR = 0 OR VTYMAX. 01493 M00S01490.virterm +++|*
Line S01491 Modification History | |
---|---|
M01 (Removed by) | ns2524 |
Seq # *Modification Id* Act ----------------------------+ 01494 M01S01491.ns2524 ---|* CALLS VDCTRL, VDTBOO, VDTHOM.
Line S00001 Modification History | |
---|---|
M01 (Added by) | ns2524 |
Seq # *Modification Id* Act ----------------------------+ 01495 M01S00001.ns2524 +++|* CALLS VDCTRL, VDTHOM. 01496 M00S01492.virterm +++|* 01497 M00S01493.virterm +++|* USES VTXCUR, VTYCUR. 01498 M00S01494.virterm +++|* 01499 M00S01495.virterm +++|* NOTES THE *TDU* DEFINITION OF THE BEGIN OUTPUT SEQUENCE
Line S00002 Modification History | |
---|---|
M01 (Added by) | ns2524 |
Seq # *Modification Id* Act ----------------------------+ 01500 M01S00002.ns2524 +++|* (WHICH MUST BE ISSUED PRIOR TO CALLING VDTCLS) 01501 M00S01496.virterm +++|* INCLUDES THE SEQUENCE TO TURN OFF INSERT MODE AND 01502 M00S01497.virterm +++|* TO DISABLE PROTECT. 01503 M00S01498.virterm +++|# 01504 M00S01499.virterm +++|
Line S01500 Modification History | |
---|---|
M01 (Removed by) | ns2524 |
Seq # *Modification Id* Act ----------------------------+ 01505 M01S01500.ns2524 ---|VDTBOO; # BEGIN OUTPUT SEQUENCE # 01506 M00S01501.virterm +++|VDCTRL(OUT"CLRSCRCURH"); # CLEAR SCREEN, CURSOR HOME # 01507 M00S01502.virterm +++|IF NUMBERBYTE EQ 0 THEN 01508 M00S01503.virterm +++| BEGIN # IF NO CLEAR WITH CURSOR HOME # 01509 M00S01504.virterm +++| VDCTRL(OUT"CLRSCREEN"); # ISSUE CLEAR SCREEN SEQUENCE # 01510 M00S01505.virterm +++| VDTHOM; # POSITION CURSOR TO HOME # 01511 M00S01506.virterm +++| END 01512 M00S01507.virterm +++|ELSE 01513 M00S01508.virterm +++| BEGIN # CURSOR IS AT HOME POSITION # 01514 M00S01509.virterm +++| VTXCUR = 0; # RESET COLUMN POINTER # 01515 M00S01510.virterm +++| IF TABVTHOMEU[0] THEN 01516 M00S01511.virterm +++| BEGIN # IF HOME POSITION IS TOP # 01517 M00S01512.virterm +++| VTYCUR = 0; # CLEAR Y COORDINATE # 01518 M00S01513.virterm +++| END 01519 M00S01514.virterm +++| ELSE 01520 M00S01515.virterm +++| BEGIN # HOME IS AT BOTTOM # 01521 M00S01516.virterm +++| VTYCUR = VTYMAX; # SET Y COORDINATE # 01522 M00S01517.virterm +++| END 01523 M00S01518.virterm +++| END 01524 M00S01519.virterm +++| 01525 M00S01520.virterm +++|IOEND # VDTCLS # 01526 M00S01521.virterm +++|CONTROL EJECT; 01527 M00S01522.virterm +++| 01528 M00S01523.virterm +++|PROC VDTCOR(LINE,COLUMN); 01529 M00S01524.virterm +++| 01530 M00S01525.virterm +++|# TITLE VDTCOR - SET INTERNAL CURSOR POSITION. # 01531 M00S01526.virterm +++| 01532 M00S01527.virterm +++|BEGIN # VDTCOR # 01533 M00S01528.virterm +++| 01534 M00S01529.virterm +++|# 01535 M00S01530.virterm +++|** VDTCOR - SET INTERNAL CURSOR POSITION. 01536 M00S01531.virterm +++|* 01537 M00S01532.virterm +++|* THIS PROCEDURE ALLOWS AN APPLICATION PROGRAM TO SET THE 01538 M00S01533.virterm +++|* INTERNAL CURSOR POSITION TO A SPECIFIED LINE AND COLUMN. 01539 M00S01534.virterm +++|* 01540 M00S01535.virterm +++|* PROC VDTCOR(LINE,COLUMN) 01541 M00S01536.virterm +++|* 01542 M00S01537.virterm +++|* ENTRY LINE = DESIRED Y COORDINATE. 01543 M00S01538.virterm +++|* COLUMN = DESIRED X COORDINATE. 01544 M00S01539.virterm +++|* 01545 M00S01540.virterm +++|* EXIT VTYCUR = LINE. 01546 M00S01541.virterm +++|* VTXCUR = COLUMN. 01547 M00S01542.virterm +++|* 01548 M00S01543.virterm +++|* NOTES THIS ROUTINE DOES NOT PHYSICALLY MOVE THE CURSOR 01549 M00S01544.virterm +++|* BUT MERELY CHANGES THE INTERNAL POINTERS TO THE 01550 M00S01545.virterm +++|* CORRECT VALUES IF THEY ARE NO LONGER VALID, FOR 01551 M00S01546.virterm +++|* EXAMPLE AFTER A TAB FUNCTION HAS BEEN RECEIVED. 01552 M00S01547.virterm +++|# 01553 M00S01548.virterm +++| 01554 M00S01549.virterm +++|ITEM LINE I; # DESIRED X COORDINATE # 01555 M00S01550.virterm +++|ITEM COLUMN I; # DESIRED Y COORDIANTE # 01556 M00S01551.virterm +++| 01557 M00S01552.virterm +++|VTYCUR = LINE; 01558 M00S01553.virterm +++|VTXCUR = COLUMN; 01559 M00S01554.virterm +++| 01560 M00S01555.virterm +++|END # VDTCOR # 01561 M00S01556.virterm +++|CONTROL EJECT; 01562 M00S01557.virterm +++| 01563 M00S01558.virterm +++|PROC VDTCTS; 01564 M00S01559.virterm +++| 01565 M00S01560.virterm +++|# TITLE VDTCTS - CLEAR ALL TABS. # 01566 M00S01561.virterm +++| 01567 M00S01562.virterm +++|IOBEGIN(VDTCTS) 01568 M00S01563.virterm +++| 01569 M00S01564.virterm +++|# 01570 M00S01565.virterm +++|** VDTCTS - CLEAR ALL TABS. 01571 M00S01566.virterm +++|* 01572 M00S01567.virterm +++|* THIS PROCEDURE CLEARS ALL TAB STOPS. 01573 M00S01568.virterm +++|* 01574 M00S01569.virterm +++|* PROC VDTCTS 01575 M00S01570.virterm +++|* 01576 M00S01571.virterm +++|* EXIT VTTABS CLEARED. 01577 M00S01572.virterm +++|* 01578 M00S01573.virterm +++|* CALLS VDCTRL. 01579 M00S01574.virterm +++|# 01580 M00S01575.virterm +++| 01581 M00S01576.virterm +++|VDCTRL(OUT"CLRALLTABS"); # CLEAR TAB STOPS # 01582 M00S01577.virterm +++| 01583 M00S01578.virterm +++|IOEND # VDTCTS # 01584 M00S01579.virterm +++|CONTROL EJECT; 01585 M00S01580.virterm +++| 01586 M00S01581.virterm +++|PROC VDTEOO; 01587 M00S01582.virterm +++| 01588 M00S01583.virterm +++|# TITLE VDTEOO - END OF OUTPUT SEQUENCE. # 01589 M00S01584.virterm +++| 01590 M00S01585.virterm +++|IOBEGIN(VDTEOO) 01591 M00S01586.virterm +++| 01592 M00S01587.virterm +++|# 01593 M00S01588.virterm +++|** VDTEOO - END OF OUTPUT SEQUENCE. 01594 M00S01589.virterm +++|* 01595 M00S01590.virterm +++|* THIS PROCEDURE IS CALLED TO END EACH OUTPUT SEQUENCE. 01596 M00S01591.virterm +++|* 01597 M00S01592.virterm +++|* EXIT VTOUTDATA = TRANSPARENT OUTPUT WORD. 01598 M00S01593.virterm +++|* VTOUTNEXT = 12. 01599 M00S01594.virterm +++|* 01600 M00S01595.virterm +++|* CALLS VDCTRL, VDSYNCH. 01601 M00S01596.virterm +++|* 01602 M00S01597.virterm +++|# 01603 M00S01598.virterm +++| 01604 M00S01599.virterm +++|CONTROL IFEQ EDITORVDT,0; # IF NOT EDITOR VIRTERM # 01605 M00S01600.virterm +++| VDCTRL(OUT"ENDISPLAY"); # OUTPUT END DISPLAY # 01606 M00S01601.virterm +++| IF NUMBERBYTE NQ 0 THEN 01607 M00S01602.virterm +++| BEGIN # IF A SEQUENCE WAS SENT # 01608 M00S01603.virterm +++| ATTRIBMASK = 0; # NO ATTRIBUTES # 01609 M00S01604.virterm +++| END 01610 M00S01605.virterm +++|CONTROL FI; # END OF IF NOT EDITOR # 01611 M00S01606.virterm +++|VDCTRL(OUT"ENDOUTPUT"); # END OUTPUT SEQUENCE # 01612 M00S01607.virterm +++| 01613 M00S01608.virterm +++|VDSYNCH; 01614 M00S01609.virterm +++| 01615 M00S01610.virterm +++|IOEND # VDTEOO # 01616 M00S01611.virterm +++|CONTROL EJECT; 01617 M00S01612.virterm +++| 01618 M00S01613.virterm +++|PROC VDTGTD(COLUMNS,LINES); 01619 M00S01614.virterm +++| 01620 M00S01615.virterm +++|# TITLE VDTGTD - GET TERMINAL DIMENSIONS. # 01621 M00S01616.virterm +++| 01622 M00S01617.virterm +++|BEGIN # VDTGTD # 01623 M00S01618.virterm +++| 01624 M00S01619.virterm +++|# 01625 M00S01620.virterm +++|** VDTGTD - GET TERMINAL DIMENSIONS. 01626 M00S01621.virterm +++|* 01627 M00S01622.virterm +++|* THIS PROCEDURE RETURNS THE CURRENT NUMBER OF COLUMNS AND LINES. 01628 M00S01623.virterm +++|* 01629 M00S01624.virterm +++|* PROC VDTGTD(COLUMNS,LINES) 01630 M00S01625.virterm +++|* 01631 M00S01626.virterm +++|* EXIT COLUMNS = NUMBER OF COLUMNS ON SCREEN. 01632 M00S01627.virterm +++|* LINES = NUMBER OF LINES ON SCREEN. 01633 M00S01628.virterm +++|# 01634 M00S01629.virterm +++| 01635 M00S01630.virterm +++|ITEM COLUMNS I; # NUMBER OF COLUMNS # 01636 M00S01631.virterm +++|ITEM LINES I; # NUMBER OF LINES # 01637 M00S01632.virterm +++| 01638 M00S01633.virterm +++|COLUMNS = VTXMAX + 1; 01639 M00S01634.virterm +++|LINES = VTYMAX + 1; 01640 M00S01635.virterm +++| 01641 M00S01636.virterm +++|END # VDTGTD # 01642 M00S01637.virterm +++|CONTROL EJECT; 01643 M00S01638.virterm +++| 01644 M00S01639.virterm +++|PROC VDTHOM; 01645 M00S01640.virterm +++| 01646 M00S01641.virterm +++|# TITLE VDTHOM - MOVE CURSOR TO HOME POSITION. # 01647 M00S01642.virterm +++| 01648 M00S01643.virterm +++|IOBEGIN(VDTHOM) 01649 M00S01644.virterm +++| 01650 M00S01645.virterm +++|# 01651 M00S01646.virterm +++|** VDTHOM - MOVE CURSOR TO HOME POSITION. 01652 M00S01647.virterm +++|* 01653 M00S01648.virterm +++|* THIS PROCEDURE POSITIONS THE CURSOR TO HOME. 01654 M00S01649.virterm +++|* 01655 M00S01650.virterm +++|* PROC VDTHOM 01656 M00S01651.virterm +++|* 01657 M00S01652.virterm +++|* EXIT VTXCUR = 0. 01658 M00S01653.virterm +++|* VTYCUR = 0 OR VTYMAX. 01659 M00S01654.virterm +++|* 01660 M00S01655.virterm +++|* CALLS VDCTRL. 01661 M00S01656.virterm +++|* 01662 M00S01657.virterm +++|* USES VTXCUR, VTYCUR. 01663 M00S01658.virterm +++|# 01664 M00S01659.virterm +++| 01665 M00S01660.virterm +++|VDCTRL(OUT"CURSORHOME"); # POSITION CURSOR TO HOME # 01666 M00S01661.virterm +++| 01667 M00S01662.virterm +++|VTXCUR = 0; # RESET COLUMN POINTER # 01668 M00S01663.virterm +++|IF TABVTHOMEU[0] THEN 01669 M00S01664.virterm +++| BEGIN # IF HOME POSITION IS TOP # 01670 M00S01665.virterm +++| VTYCUR = 0; # CLEAR Y COORDINATE # 01671 M00S01666.virterm +++| END 01672 M00S01667.virterm +++|ELSE 01673 M00S01668.virterm +++| BEGIN # HOME IS AT BOTTOM # 01674 M00S01669.virterm +++| VTYCUR = VTYMAX; # SET Y COORDINATE # 01675 M00S01670.virterm +++| END 01676 M00S01671.virterm +++| 01677 M00S01672.virterm +++|IOEND # VDTHOM # 01678 M00S01673.virterm +++|CONTROL EJECT; 01679 M00S01674.virterm +++|CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 01680 M00S01675.virterm +++| 01681 M00S01676.virterm +++|PROC VDTITD(MODELNAME); 01682 M00S01677.virterm +++| 01683 M00S01678.virterm +++|# TITLE VDTITD - INITIALIZE *TDU* TABLE. # 01684 M00S01679.virterm +++| 01685 M00S01680.virterm +++|BEGIN # VDTITD # 01686 M00S01681.virterm +++| 01687 M00S01682.virterm +++|# 01688 M00S01683.virterm +++|** VDTITD - INITIALIZE *TDU* TABLE. 01689 M00S01684.virterm +++|* 01690 M00S01685.virterm +++|* THIS PROCEDURE GETS THE *TDU* (TERMINAL DEFINITION UTILITY) TABLE 01691 M00S01686.virterm +++|* FROM MEMORY OR FILE *ZZZZTRM* AND MOVES IT TO ARRAYS *TABLEHEADR* 01692 M00S01687.virterm +++|* AND *TABLEWORDS* SO THAT THE TERMINAL CAN BE RUN IN SCREEN MODE. 01693 M00S01688.virterm +++|* TDUINDEX IS LEFT POSITIONED WHERE THE READING OF THE INPUT AND 01694 M00S01689.virterm +++|* OUPTUT DATA STOPPED TO ALLOW SUBSEQUENT ACCESS TO THE REST OF 01695 M00S01690.virterm +++|* THE DATA IN THE REMAINING SECTIONS OF THE *TDU* TABLE. 01696 M00S01691.virterm +++|* 01697 M00S01692.virterm +++|* PROC VDTITD(MODELNAME) 01698 M00S01693.virterm +++|* 01699 M00S01694.virterm +++|* EXIT MODELNAME = THE MODELNAME OF THE TERMINAL AS DEFINED 01700 M00S01695.virterm +++|* TO *TDU*, LEFT JUSTIFIED, BLANK FILL. 01701 M00S01696.virterm +++|* = BLANK, IF NO *TDU* DEFINITION EXISTS. 01702 M00S01697.virterm +++|* 01703 M00S01698.virterm +++|* CALLS VDGETW, VDTGSL, VDTGTA. 01704 M00S01699.virterm +++|* 01705 M00S01700.virterm +++|* USES VTI, VTJ, VTMODEL. 01706 M00S01701.virterm +++|* 01707 M00S01702.virterm +++|* NOTES VDTITD CAN NOT BE CALLED IN THE MULTI USER VERSION 01708 M00S01703.virterm +++|* VERSION OF THE EDITOR SINCE IT MAY DO DISK I/O TO 01709 M00S01704.virterm +++|* TO GET A USER DEFINED *TDU* TABLE. 01710 M00S01705.virterm +++|# 01711 M00S01706.virterm +++| 01712 M00S01707.virterm +++|ITEM MODELNAME C(6); # MODEL NAME # 01713 M00S01708.virterm +++|ITEM TDUINOUT U; # COUNT OF *TDU* I/O INFORMATION # 01714 M00S01709.virterm +++|ITEM TDUWORD U; # WORD FROM *TDU* TABLE # 01715 M00S01710.virterm +++| 01716 M00S01711.virterm +++|CONTROL IFEQ QTRMV,1; # IF QTRM # 01717 M00S01712.virterm +++|ITEM I I; 01718 M00S01713.virterm +++|ITEM TMODEL C(7); # TEMP MODEL NAME # 01719 M00S01714.virterm +++|ITEM SCRCLS I; # CAPSULE LOADED SUCCESSFULLY # 01720 M00S01715.virterm +++|ITEM SCRLCA U; # LOADED CAPSULE ADDRESS # 01721 M00S01716.virterm +++|ITEM SCRPFF I; # PERMANENT FILE FOUND FLAG # 01722 M00S01717.virterm +++|ITEM SCRPFN C(7) = "TERMLIB"; # PERMANENT FILE NAME # 01723 M00S01718.virterm +++|ITEM SCRSTS B; # *TERMLIB* STATUS FLAG # 01724 M00S01719.virterm +++|ITEM SCRTCL I; # TERMINAL CAPSULE LENGTH # 01725 M00S01720.virterm +++|ITEM SCRUSN C(7) = "LIBRARY"; # ALTERNATE USER NUMBER # 01726 M00S01721.virterm +++|ITEM SCRZTM C(7); # MODEL NAME PREFACED WITH Z # 01727 M00S01722.virterm +++|CONTROL FI; # END OF IF QTRM # 01728 M00S01723.virterm +++| 01729 M00S01724.virterm +++|IF NOT VTTDUREAD[0] THEN 01730 M00S01725.virterm +++| BEGIN # IF *TDU* TABLE NOT READ YET # 01731 M00S01726.virterm +++|*IF UNDEF,QTRM 01732 M00S01727.virterm +++| VDTGSL(VTMODEL,VTI); # GET MODEL AND SCREEN OR LINE # 01733 M00S01728.virterm +++| IF VTMODEL NQ 0 THEN 01734 M00S01729.virterm +++| BEGIN # IF TERMINAL HAS BEEN DEFINED # 01735 M00S01730.virterm +++| IF VTMODEL NQ 1 THEN 01736 M00S01731.virterm +++| BEGIN # IF SYSTEM RESIDENT TABLE # 01737 M00S01732.virterm +++| VDTGTA(VTMODEL,VTJ); # GET ADDRESS FOR *TDU* TABLE # 01738 M00S01733.virterm +++| P<TEMPSTORE> = VTJ; # POSITION BASED ARRAY # 01739 M00S01734.virterm +++| TDURESID[0] = TRUE; # SET RESIDENT TABLE # 01740 M00S01735.virterm +++| END 01741 M00S01736.virterm +++| ELSE 01742 M00S01737.virterm +++| BEGIN # NOT SYSTEM RESIDENT TABLE # 01743 M00S01738.virterm +++| VTJ = LOC(TDUBUF); # PRESET FET FOR READ # 01744 M00S01739.virterm +++| TDUCODE = 1; 01745 M00S01740.virterm +++| TDUIN = VTJ; 01746 M00S01741.virterm +++| TDUFIRST = VTJ; 01747 M00S01742.virterm +++| TDUOUT = VTJ; 01748 M00S01743.virterm +++| TDULIMIT = VTJ + TDUBUFFLEN; # BUFFER LENGTH # 01749 M00S01744.virterm +++| VDTRWD(TDUFET,1); # REWIND FET WITH RECALL # 01750 M00S01745.virterm +++| VDTRD$(TDUFET,1); # READ *TDU* TABLE WITH RECALL # 01751 M00S01746.virterm +++| TDURESID[0] = FALSE; # CLEAR RESIDENT TABLE # 01752 M00S01747.virterm +++| END 01753 M00S01748.virterm +++| TDUINDEX[0] = 0; # START INDEX AT ZERO # 01754 M00S01749.virterm +++| VDGETW(TDUWORD,VTI); # MOVE TABLE HEADER TO COMMON # 01755 M00S01750.virterm +++| IF VTI EQ 0 THEN 01756 M00S01751.virterm +++| BEGIN # IF TABLE EXISTS # 01757 M00S01752.virterm +++| TABHEADONE[0] = TDUWORD; 01758 M00S01753.virterm +++| VDGETW(TDUWORD,VTI); 01759 M00S01754.virterm +++| TABHEADTWO[0] = TDUWORD; 01760 M00S01755.virterm +++| VDGETW(TDUWORD,VTI); 01761 M00S01756.virterm +++| TABHEADTHR[0] = TDUWORD; 01762 M00S01757.virterm +++| VDGETW(TDUWORD,VTI); 01763 M00S01758.virterm +++| TABHEADFOU[0] = TDUWORD; 01764 M00S01759.virterm +++| VDGETW(TDUWORD,VTI); 01765 M00S01760.virterm +++| TABHEADFIV[0] = TDUWORD; 01766 M00S01761.virterm +++| VDGETW(TDUWORD,VTI); 01767 M00S01762.virterm +++| TABHEADSIX[0] = TDUWORD; 01768 M00S01763.virterm +++| TDUINOUT = TABSTRNMES[0] - 7; # COUNT *TDU* I/O INFORMATION # 01769 M00S01764.virterm +++| IF TDUINOUT GR TDUBUFFLEN - O"10" THEN 01770 M00S01765.virterm +++| BEGIN # IF TOO MUCH I/O INFORMATION # 01771 M00S01766.virterm +++| TDUINOUT = TDUBUFFLEN - O"10"; 01772 M00S01767.virterm +++| END 01773 M00S01768.virterm +++| FOR VTJ = 0 STEP 1 UNTIL TDUINOUT DO 01774 M00S01769.virterm +++| BEGIN # MOVE BODY OF TABLE TO COMMON # 01775 M00S01770.virterm +++| VDGETW(TDUWORD,VTI); 01776 M00S01771.virterm +++| TABFULLWRD[VTJ] = TDUWORD; 01777 M00S01772.virterm +++| END 01778 M00S01773.virterm +++| VTTDUREAD[0] = TRUE; # SET TABLE READ FLAG # 01779 M00S01774.virterm +++| END 01780 M00S01775.virterm +++| ELSE 01781 M00S01776.virterm +++| BEGIN # TABLE CAN NOT BE FOUND # 01782 M00S01777.virterm +++| TABMODNAME[0] = " "; # SET BLANK NAME IN BLOCK # 01783 M00S01778.virterm +++| END 01784 M00S01779.virterm +++| END 01785 M00S01780.virterm +++| ELSE 01786 M00S01781.virterm +++| BEGIN # UNDEFINED TERMINAL # 01787 M00S01782.virterm +++| TABMODNAME[0] = " "; # SET BLANK NAME IN BLOCK # 01788 M00S01783.virterm +++| END 01789 M00S01784.virterm +++| END 01790 M00S01785.virterm +++|*ELSE 01791 M00S01786.virterm +++| VDTGTO(VTMODEL,MODELNAME); # GET TERMINAL ORDINAL # 01792 M00S01787.virterm +++| IF VTMODEL NQ 0 THEN 01793 M00S01788.virterm +++| BEGIN # IF SYSTEM RESIDENT TABLE # 01794 M00S01789.virterm +++| VDTGTA(VTMODEL,VTJ); # GET ADDRESS FOR *TDU* TABLE # 01795 M00S01790.virterm +++| P<TEMPSTORE> = VTJ; # POSITION BASED ARRAY # 01796 M00S01791.virterm +++| TDURESID[0] = TRUE; # SET RESIDENT TABLE # 01797 M00S01792.virterm +++| END 01798 M00S01793.virterm +++| ELSE 01799 M00S01794.virterm +++| BEGIN # NOT SYSTEM RESIDENT TABLE # 01800 M00S01795.virterm +++| PF("GET",SCRPFN,SCRPFN,"RC",SCRPFF,"UN",SCRUSN,0); 01801 M00S01796.virterm +++| IF SCRPFF NQ 0 THEN 01802 M00S01797.virterm +++| BEGIN # IF NOT INDIRECT, TRY DIRECT # 01803 M00S01798.virterm +++| PF("ATTACH",SCRPFN,SCRPFN,"RC",SCRPFF,"UN",SCRUSN,"PN", 01804 M00S01799.virterm +++| "0","NA",0,0); 01805 M00S01800.virterm +++| END 01806 M00S01801.virterm +++| IF SCRPFF EQ 0 THEN 01807 M00S01802.virterm +++| BEGIN # IF FILE FOUND # 01808 M00S01803.virterm +++| C<0>SCRZTM = "Z"; # LOADER PREFIX # 01809 M00S01804.virterm +++| FOR I = 1 STEP 1 UNTIL 6 DO C<I>SCRZTM = C<I-1>MODELNAME; 01810 M00S01805.virterm +++| SCRLCP(SCRZTM,SCRLCA,SCRCLS); # LOAD TERMINAL CAPSULE # 01811 M00S01806.virterm +++| IF SCRCLS EQ 0 THEN 01812 M00S01807.virterm +++| BEGIN # IF CAPSULE LOADED # 01813 M00S01808.virterm +++| P<TEMPSTORE> = SCRLCA; # POSITION BASED ARRAY # 01814 M00S01809.virterm +++| TDURESID[0] = TRUE; # SET RESIDENT TABLE # 01815 M00S01810.virterm +++| TABMODNAME[0] = MODELNAME; # BLANK NAME IN BLOCK # 01816 M00S01811.virterm +++| END # CAPSULE LOADED # 01817 M00S01812.virterm +++| END 01818 M00S01813.virterm +++| IF ((SCRCLS NQ 0) OR (SCRPFF NQ 0)) THEN 01819 M00S01814.virterm +++| BEGIN # IF CAPSULE NOT FOUND # 01820 M00S01815.virterm +++| TABMODNAME[0] = " "; # SET BLANK NAME IN BLOCK # 01821 M00S01816.virterm +++| END 01822 M00S01817.virterm +++| END 01823 M00S01818.virterm +++| TDUINDEX[0] = 0; # START INDEX AT ZERO # 01824 M00S01819.virterm +++| VDGETW(TDUWORD,VTI); # MOVE TABLE HEADER TO COMMON # 01825 M00S01820.virterm +++| TABHEADONE[0] = TDUWORD; 01826 M00S01821.virterm +++| VDGETW(TDUWORD,VTI); 01827 M00S01822.virterm +++| TABHEADTWO[0] = TDUWORD; 01828 M00S01823.virterm +++| VDGETW(TDUWORD,VTI); 01829 M00S01824.virterm +++| TABHEADTHR[0] = TDUWORD; 01830 M00S01825.virterm +++| VDGETW(TDUWORD,VTI); 01831 M00S01826.virterm +++| TABHEADFOU[0] = TDUWORD; 01832 M00S01827.virterm +++| VDGETW(TDUWORD,VTI); 01833 M00S01828.virterm +++| TABHEADFIV[0] = TDUWORD; 01834 M00S01829.virterm +++| VDGETW(TDUWORD,VTI); 01835 M00S01830.virterm +++| TABHEADSIX[0] = TDUWORD; 01836 M00S01831.virterm +++| TDUINOUT = TABSTRNMES[0] - 7; # COUNT *TDU* I/O INFORMATION # 01837 M00S01832.virterm +++| IF TDUINOUT GR TDUBUFFLEN - O"10" THEN 01838 M00S01833.virterm +++| BEGIN # IF TOO MUCH I/O INFORMATION # 01839 M00S01834.virterm +++| TDUINOUT = TDUBUFFLEN - O"10"; 01840 M00S01835.virterm +++| END 01841 M00S01836.virterm +++| FOR VTJ = 0 STEP 1 UNTIL TDUINOUT DO 01842 M00S01837.virterm +++| BEGIN # MOVE BODY OF TABLE TO COMMON # 01843 M00S01838.virterm +++| VDGETW(TDUWORD,VTI); 01844 M00S01839.virterm +++| TABFULLWRD[VTJ] = TDUWORD; 01845 M00S01840.virterm +++| END 01846 M00S01841.virterm +++| VTTDUREAD[0] = TRUE; # SET TABLE READ FLAG # 01847 M00S01842.virterm +++| END 01848 M00S01843.virterm +++|*ENDIF 01849 M00S01844.virterm +++|C<0,6>MODELNAME = TABMODNAME[0]; # RETURN MODEL NAME # 01850 M00S01845.virterm +++| 01851 M00S01846.virterm +++|END # VDTITD # 01852 M00S01847.virterm +++|CONTROL FI; # END OF IF SINGLE USER FSE # 01853 M00S01848.virterm +++|*IF UNDEF,QTRM 01854 M00S01849.virterm +++|CONTROL EJECT; 01855 M00S01850.virterm +++| 01856 M00S01851.virterm +++|PROC VDTOUT(CHAR); 01857 M00S01852.virterm +++| 01858 M00S01853.virterm +++|# TITLE VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD. # 01859 M00S01854.virterm +++| 01860 M00S01855.virterm +++|IOBEGIN(VDTOUT) 01861 M00S01856.virterm +++| 01862 M00S01857.virterm +++|# 01863 M00S01858.virterm +++|** VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD. 01864 M00S01859.virterm +++|* 01865 M00S01860.virterm +++|* THIS PROCEDURE ALLOWS THE GENERAL OUTPUT OF ONE CHARACTER. 01866 M00S01861.virterm +++|* 01867 M00S01862.virterm +++|* PROC VDTOUT(CHAR) 01868 M00S01863.virterm +++|* 01869 M00S01864.virterm +++|* ENTRY CHAR = 12 BIT BYTE TO QUEUE OR TRANSMIT. 01870 M00S01865.virterm +++|* VTOUTDATA = ACCUMULATOR WORD. 01871 M00S01866.virterm +++|* VTOUTNEXT = PRESENT BIT POSITION. 01872 M00S01867.virterm +++|* 01873 M00S01868.virterm +++|* EXIT VTOUTDATA, VTOUTNEXT UPDATED. 01874 M00S01869.virterm +++|* 01875 M00S01870.virterm +++|* CALLS VDTWTO. 01876 M00S01871.virterm +++|* 01877 M00S01872.virterm +++|* USES VTOUTDATA, VTOUTNEXT. 01878 M00S01873.virterm +++|# 01879 M00S01874.virterm +++| 01880 M00S01875.virterm +++|ITEM CHAR I; # OUTPUT BYTE # 01881 M00S01876.virterm +++| 01882 M00S01877.virterm +++|B<VTOUTNEXT,12>VTOUTDATA = CHAR LOR O"4000"; # XPARENT BYTE # 01883 M00S01878.virterm +++| 01884 M00S01879.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE # 01885 M00S01880.virterm +++| 01886 M00S01881.virterm +++|VTOUTNEXT = VTOUTNEXT +12; # INCREMENT BIT POSITION # 01887 M00S01882.virterm +++|IF VTOUTNEXT EQ 60 THEN 01888 M00S01883.virterm +++| BEGIN # IF ACCUMULATOR WORD IS FULL # 01889 M00S01884.virterm +++| VDTWTO(VTOUTDATA); # WRITE WORD # 01890 M00S01885.virterm +++| VTOUTDATA = 0; # CLEAR ACCUMULATOR WORD # 01891 M00S01886.virterm +++| VTOUTNEXT = 0; # SET BIT POSITION # 01892 M00S01887.virterm +++| END 01893 M00S01888.virterm +++| 01894 M00S01889.virterm +++|IOEND # VDTOUT # 01895 M00S01890.virterm +++|*ELSE 01896 M00S01891.virterm +++|CONTROL EJECT; # QTRM VARIANT OF VDTOUT # 01897 M00S01892.virterm +++| 01898 M00S01893.virterm +++|PROC VDTOUT(CHAR); 01899 M00S01894.virterm +++| 01900 M00S01895.virterm +++|# TITLE VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD. # 01901 M00S01896.virterm +++| 01902 M00S01897.virterm +++|BEGIN # VDTOUT # 01903 M00S01898.virterm +++| 01904 M00S01899.virterm +++|# 01905 M00S01900.virterm +++|** VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD. 01906 M00S01901.virterm +++|* 01907 M00S01902.virterm +++|* THIS PROCEDURE ALLOWS GENERAL QTRM OUTPUT OF ONE CHARACTER. 01908 M00S01903.virterm +++|* 01909 M00S01904.virterm +++|* PROC VDTOUT(CHAR) 01910 M00S01905.virterm +++|* 01911 M00S01906.virterm +++|* ENTRY CHAR = 12 BIT BYTE TO QUEUE OR TRANSMIT. 01912 M00S01907.virterm +++|* VTOUTDATA = ACCUMULATOR WORD. 01913 M00S01908.virterm +++|* VTOUTNEXT = PRESENT BIT POSITION. 01914 M00S01909.virterm +++|* 01915 M00S01910.virterm +++|* EXIT VTOUTDATA, VTOUTNEXT UPDATED. 01916 M00S01911.virterm +++|* 01917 M00S01912.virterm +++|* CALLS SFNQUE. 01918 M00S01913.virterm +++|* 01919 M00S01914.virterm +++|* USES VTOUTDATA, VTOUTNEXT. 01920 M00S01915.virterm +++|# 01921 M00S01916.virterm +++|ITEM CHAR I; # OUTPUT BYTE # 01922 M00S01917.virterm +++|ITEM I I; # DUMMY PARAMETER # 01923 M00S01918.virterm +++| 01924 M00S01919.virterm +++| B<VTOUTNEXT,12>VTOUTDATA = CHAR; 01925 M00S01920.virterm +++| VTOUTNEXT = VTOUTNEXT + 12; 01926 M00S01921.virterm +++| IF VTOUTNEXT EQ 60 THEN 01927 M00S01922.virterm +++| BEGIN # IF ACCUMULATOR WORD IS FULL # 01928 M00S01923.virterm +++| NIT$CTLC = 5; # ENQUEUE WORD # 01929 M00S01924.virterm +++| SFNQUE("PUT",VTOUTDATA,I); 01930 M00S01925.virterm +++| VTOUTDATA = 0; # CLEAR ACCUMULATOR WORD # 01931 M00S01926.virterm +++| VTOUTNEXT = 0; # SET BIT POSITION # 01932 M00S01927.virterm +++| END 01933 M00S01928.virterm +++| 01934 M00S01929.virterm +++|END # VDTOUT # 01935 M00S01930.virterm +++|*ENDIF 01936 M00S01931.virterm +++|CONTROL EJECT; 01937 M00S01932.virterm +++| 01938 M00S01933.virterm +++|PROC VDTPOS(XX,YY); 01939 M00S01934.virterm +++| 01940 M00S01935.virterm +++|# TITLE VDTPOS - POSITION CURSOR. # 01941 M00S01936.virterm +++| 01942 M00S01937.virterm +++|IOBEGIN(VDTPOS) 01943 M00S01938.virterm +++| 01944 M00S01939.virterm +++|# 01945 M00S01940.virterm +++|** VDTPOS - POSITION CURSOR. 01946 M00S01941.virterm +++|* 01947 M00S01942.virterm +++|* THIS PROCEDURE MOVES THE CURSOR TO THE SPECIFIED POSITION. 01948 M00S01943.virterm +++|* 01949 M00S01944.virterm +++|* PROC VDTPOS(XX,YY) 01950 M00S01945.virterm +++|* 01951 M00S01946.virterm +++|* ENTRY XX = DESIRED X COORDINATE. 01952 M00S01947.virterm +++|* YY = DESIRED Y COORDINATE. 01953 M00S01948.virterm +++|* 01954 M00S01949.virterm +++|* EXIT VTXCUR = XX. 01955 M00S01950.virterm +++|* VTYCUR = YY. 01956 M00S01951.virterm +++|* 01957 M00S01952.virterm +++|* CALLS VDMOVE. 01958 M00S01953.virterm +++|# 01959 M00S01954.virterm +++| 01960 M00S01955.virterm +++|ITEM XX I; # COLUMN POSITION # 01961 M00S01956.virterm +++|ITEM YY I; # LINE POSITION # 01962 M00S01957.virterm +++| 01963 M00S01958.virterm +++|VTXCUR = XX; # RESET COLUMN POINTER # 01964 M00S01959.virterm +++|VTYCUR = YY; # RESET LINE POINTER # 01965 M00S01960.virterm +++| 01966 M00S01961.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE # 01967 M00S01962.virterm +++| 01968 M00S01963.virterm +++|VDMOVE(VTXCUR,VTYCUR); # POSITION CURSOR # 01969 M00S01964.virterm +++| 01970 M00S01965.virterm +++|IOEND # VDTPOS # 01971 M00S01966.virterm +++|*IF UNDEF,QTRM 01972 M00S01967.virterm +++|CONTROL EJECT; 01973 M00S01968.virterm +++| 01974 M00S01969.virterm +++|PROC VDTPPI; 01975 M00S01970.virterm +++| 01976 M00S01971.virterm +++|# TITLE VDTPPI - PRE-PROCESS INPUT. # 01977 M00S01972.virterm +++| 01978 M00S01973.virterm +++|IOBEGIN(VDTPPI) 01979 M00S01974.virterm +++| 01980 M00S01975.virterm +++|# 01981 M00S01976.virterm +++|** VDTPPI - PRE-PROCESS INPUT. 01982 M00S01977.virterm +++|* 01983 M00S01978.virterm +++|* THIS PROCEDURE VERIFIES THAT THE INPUT IS EITHER NULL OR IS 01984 M00S01979.virterm +++|* TRANSPARENT INPUT. THE EFFECT IS TO BANISH MOST TYPE AHEAD 01985 M00S01980.virterm +++|* EXCEPT FOR TYPED AHEAD CARRIAGE RETURNS WHICH CAN BE IGNORED. 01986 M00S01981.virterm +++|* 01987 M00S01982.virterm +++|* PROC VDTPPI 01988 M00S01983.virterm +++|* 01989 M00S01984.virterm +++|* EXIT VTORDN = 0, IF TRANSPARENT INPUT RECEIVED OK. 01990 M00S01985.virterm +++|* = NON ZERO, IF NON-NULL TYPEAHEAD. 01991 M00S01986.virterm +++|* VTINPDATA = CONTAINS NEW TRANSPARENT INPUT DATA. 01992 M00S01987.virterm +++|* VTRESINP = BLOCK MODE RESIDUAL INPUT. 01993 M00S01988.virterm +++|* VTINPNEXT = UPDATED. 01994 M00S01989.virterm +++|* 01995 M00S01990.virterm +++|* CALLS VDTRDO, VDTWTO. 01996 M00S01991.virterm +++|* 01997 M00S01992.virterm +++|* USES VTINPDATA, VTINPDATA, VTORDN. 01998 M00S01993.virterm +++|* 01999 M00S01994.virterm +++|* NOTES SINCE THIS PROCEDURE INITIALIZES THE BIT POINTER 02000 M00S01995.virterm +++|* (VTINPNEXT), IT MUST BE CALLED EXACTLY AT THE 02001 M00S01996.virterm +++|* START OF EACH INPUT SEQUENCE. 02002 M00S01997.virterm +++|# 02003 M00S01998.virterm +++| 02004 M00S01999.virterm +++|CONTROL IFEQ EDITORVDT,1; # IF EDITOR VIRTERM # 02005 M00S02000.virterm +++| CONTROL IFEQ SINGLE,1; # MULTI DOES THIS IN TTITRAP # 02006 M00S02001.virterm +++| IF NOT TABTYPHEAD[0] THEN 02007 M00S02002.virterm +++| BEGIN # IF TYPE AHEAD NOT ENABLED # 02008 M00S02003.virterm +++| VDTWTO(O"0006 4704 0015 0000 0000"); # XPARENT INPUT MODE # 02009 M00S02004.virterm +++| END 02010 M00S02005.virterm +++| CONTROL FI; 02011 M00S02006.virterm +++|CONTROL FI; 02012 M00S02007.virterm +++| 02013 M00S02008.virterm +++|CONTROL IFEQ EDITORVDT,0; # IF STAND ALONE VIRTERM # 02014 M00S02009.virterm +++| VDTWTO(O"0006 4704 0015 0000 0000"); # XPARENT INPUT MODE # 02015 M00S02010.virterm +++|CONTROL FI; 02016 M00S02011.virterm +++| 02017 M00S02012.virterm +++|VTORDN = 1; 02018 M00S02013.virterm +++|VDTRDO(VTINPDATA); # READ WORD # 02019 M00S02014.virterm +++|VTINPNEXT = 12; # RESET BIT POSITION # 02020 M00S02015.virterm +++|VTRESINP = 0; # CLEAR RESIDUAL INPUT # 02021 M00S02016.virterm +++| 02022 M00S02017.virterm +++|IF B<0,12>VTINPDATA EQ 7 THEN 02023 M00S02018.virterm +++| BEGIN # IF TRANSPARENT INPUT # 02024 M00S02019.virterm +++| VTORDN = 0; 02025 M00S02020.virterm +++|CONTROL IFEQ SINGLE,1; # IF NOT MULTI USER FSE # 02026 M00S02021.virterm +++| IF TABLOCKMDE[0] THEN 02027 M00S02022.virterm +++| BEGIN # IF BLOCK MODE TYPE TERMINAL # 02028 M00S02023.virterm +++| B<00,12>VTRESINP = B<24,12>VTINPDATA; # CURSOR ADDRESS # 02029 M00S02024.virterm +++| B<12,12>VTRESINP = B<36,12>VTINPDATA; 02030 M00S02025.virterm +++| B<24,12>VTRESINP = B<12,12>VTINPDATA; # ATTENTION IDENTIFIER # 02031 M00S02026.virterm +++| VTINPNEXT = 48; # SET BIT POINTER # 02032 M00S02027.virterm +++| END 02033 M00S02028.virterm +++|CONTROL FI; # END OF IF NOT MULTI FSE # 02034 M00S02029.virterm +++| END 02035 M00S02030.virterm +++|ELSE 02036 M00S02031.virterm +++| BEGIN # NOT TRANSPARENT INPUT # 02037 M00S02032.virterm +++| IF VTINPDATA EQ 0 THEN VTORDN = 0; # CHECK FOR NULL TYPE AHEAD # 02038 M00S02033.virterm +++| END 02039 M00S02034.virterm +++| 02040 M00S02035.virterm +++|IOEND # VDTPPI # 02041 M00S02036.virterm +++|*ELSE 02042 M00S02037.virterm +++|CONTROL EJECT; # QTRM VARIANT OF VDTPPI # 02043 M00S02038.virterm +++| 02044 M00S02039.virterm +++|PROC VDTPPI; 02045 M00S02040.virterm +++| 02046 M00S02041.virterm +++|# TITLE VDTPPI - PRE-PROCESS INPUT. # 02047 M00S02042.virterm +++| 02048 M00S02043.virterm +++|BEGIN # VDTPPI # 02049 M00S02044.virterm +++| 02050 M00S02045.virterm +++|# 02051 M00S02046.virterm +++|** VDTPPI - PRE-PROCESS INPUT. 02052 M00S02047.virterm +++|* 02053 M00S02048.virterm +++|* THIS PROCEDURE DOES INITIALIZATION FOR QTRM INPUT. 02054 M00S02049.virterm +++|* 02055 M00S02050.virterm +++|* PROC VDTPPI 02056 M00S02051.virterm +++|* 02057 M00S02052.virterm +++|* EXIT VTINPDATA = FIRST WORD OF INPUT. 02058 M00S02053.virterm +++|* VTINPWORD = 1. 02059 M00S02054.virterm +++|* VTINPNEXT = 0. 02060 M00S02055.virterm +++|* VTORDN = 0. 02061 M00S02056.virterm +++|* 02062 M00S02057.virterm +++|* USES VTINPDATA, VTINPNEXT, VTINPWORD, VTORDN. 02063 M00S02058.virterm +++|# 02064 M00S02059.virterm +++|ITEM WORD I; # WORD POINTER # 02065 M00S02060.virterm +++|ITEM BIT I; # BIT POINTER # 02066 M00S02061.virterm +++| 02067 M00S02062.virterm +++|VTINPNEXT = 0; # CLEAR INPUT WORD # 02068 M00S02063.virterm +++|VTORDN = 0; # CLEAR ORDINAL # 02069 M00S02064.virterm +++|VTINPWORD = 1; 02070 M00S02065.virterm +++|WORD = (NIT$CTLC + 1) / 5; # INSERT DUMMY CARRIAGE RETURN # 02071 M00S02066.virterm +++|BIT = (NIT$CTLC + 1 - (WORD * 5)) * 12; 02072 M00S02067.virterm +++|B<BIT,12>QTRM$WD0[WORD] = O"15"; 02073 M00S02068.virterm +++|VTINPDATA = QTRM$WD0[0]; 02074 M00S02069.virterm +++| 02075 M00S02070.virterm +++|END # VDTPPI # 02076 M00S02071.virterm +++|*ENDIF 02077 M00S02072.virterm +++|CONTROL EJECT; 02078 M00S02073.virterm +++| 02079 M00S02074.virterm +++|PROC VDTSAM(MASK); 02080 M00S02075.virterm +++| 02081 M00S02076.virterm +++|# TITLE VDTSAM - SET ATTRIBUTE MASK. # 02082 M00S02077.virterm +++| 02083 M00S02078.virterm +++|IOBEGIN(VDTSAM) 02084 M00S02079.virterm +++| 02085 M00S02080.virterm +++|# 02086 M00S02081.virterm +++|** VDTSAM - SET ATTRIBUTE MASK. 02087 M00S02082.virterm +++|* 02088 M00S02083.virterm +++|* THIS PROCEDURE SETS THE ATTRIBUTES REQUESTED BY MASK. 02089 M00S02084.virterm +++|* 02090 M00S02085.virterm +++|* PROC VDTSAM(MASK) 02091 M00S02086.virterm +++|* 02092 M00S02087.virterm +++|* ENTRY MASK = MASK OF LOGICAL/PHYSICAL ATTRIBUTES. 02093 M00S02088.virterm +++|* ATTRIBMASK = CURRENT ATTRIBUTE MASK. 02094 M00S02089.virterm +++|* 02095 M00S02090.virterm +++|* EXIT ATTRIBMASK = NEW ATTRIBUTE MASK. 02096 M00S02091.virterm +++|* 02097 M00S02092.virterm +++|* CALLS VDCTRL, VDTOUT. 02098 M00S02093.virterm +++|* 02099 M00S02094.virterm +++|* USES ATTNEWMASK, ATTRIBMASK, ATTRIBSAME. 02100 M00S02095.virterm +++|# 02101 M00S02096.virterm +++| 02102 M00S02097.virterm +++|ITEM MASK U; # REQUESTED ATTRIBUTES # 02103 M00S02098.virterm +++| 02104 M00S02099.virterm +++|ATTNEWMASK = MASK; # SAVE NEW ATTRIBUTES # 02105 M00S02100.virterm +++| 02106 M00S02101.virterm +++|IF NOT TABNOTMASK[0] THEN 02107 M00S02102.virterm +++| BEGIN # IF ATTRIBUTES ARE MASKABLE # 02108 M00S02103.virterm +++| 02109 M00S02104.virterm +++| # CALCULATE ATTRIBUTES THAT WILL BE UNCHANGED # 02110 M00S02105.virterm +++| 02111 M00S02106.virterm +++| ATTRIBSAME = (ATTNEWMASK LAN ATTRIBMASK[0]) LAN O"3000"; 02112 M00S02107.virterm +++| IF ATTLOGICAL[0] THEN 02113 M00S02108.virterm +++| BEGIN # IF LOGICAL ATTRIBUTE # 02114 M00S02109.virterm +++| IF B<0,1>ATTNEWMASK EQ 1 AND ATTORDINAL[0] EQ B<6,6>ATTNEWMASK THEN 02115 M00S02110.virterm +++| ATTRIBSAME = ATTRIBSAME LOR (ATTNEWMASK LAN O"4077"); 02116 M00S02111.virterm +++| END 02117 M00S02112.virterm +++| ELSE 02118 M00S02113.virterm +++| BEGIN # PHYSICAL ATTRIBUTES # 02119 M00S02114.virterm +++| IF B<0,1> ATTNEWMASK EQ 0 THEN 02120 M00S02115.virterm +++| BEGIN 02121 M00S02116.virterm +++| ATTRIBSAME = ATTRIBSAME LOR 02122 M00S02117.virterm +++| ((ATTNEWMASK LAN ATTRIBMASK[0]) LAN O"0017"); 02123 M00S02118.virterm +++| END 02124 M00S02119.virterm +++| END 02125 M00S02120.virterm +++| 02126 M00S02121.virterm +++| # TURN OFF ATTRIBUTES THAT ARE ON AND NOT REQUESTED THIS CALL # 02127 M00S02122.virterm +++| 02128 M00S02123.virterm +++| ATTRIBMASK[0] = ATTRIBMASK[0] LXR ATTRIBSAME; 02129 M00S02124.virterm +++| 02130 M00S02125.virterm +++|END 02131 M00S02126.virterm +++| 02132 M00S02127.virterm +++|IF ATTRIBMASK[0] NQ 0 THEN 02133 M00S02128.virterm +++| BEGIN # IF TURNING OFF ANY ATTRIBUTES # 02134 M00S02129.virterm +++| IF ATTLOGICAL[0] THEN 02135 M00S02130.virterm +++| BEGIN # TURN OFF LOGICAL ATTRIBUTE # 02136 M00S02131.virterm +++| IF ATTORDINAL[0] GQ 0 AND ATTORDINAL[0] LQ MAXLOGTYPE THEN 02137 M00S02132.virterm +++| BEGIN # IF GROUP ONE LOGICAL # 02138 M00S02133.virterm +++| VDCTRL(OUT"INPTEXTOFF" + (ATTORDINAL[0] * 2)); 02139 M00S02134.virterm +++| IF ATTORDINAL[0] EQ 0 THEN VTPSUNDACT[0] = FALSE; 02140 M00S02135.virterm +++| END 02141 M00S02136.virterm +++| ELSE 02142 M00S02137.virterm +++| BEGIN # NOT GROUP ONE LOGICAL # 02143 M00S02138.virterm +++| IF ATTORDINAL[0] LQ MAXLOGTYPE*2+1 THEN 02144 M00S02139.virterm +++| BEGIN # IF LEGAL GROUP TWO LOGICAL # 02145 M00S02140.virterm +++| VDCTRL(OUT"INPUTE2" + ((ATTORDINAL[0]-6) * 2)); 02146 M00S02141.virterm +++| END 02147 M00S02142.virterm +++| END 02148 M00S02143.virterm +++| END 02149 M00S02144.virterm +++| ELSE 02150 M00S02145.virterm +++| BEGIN # TURN OFF PHYSICAL ATTRIBUTES # 02151 M00S02146.virterm +++| IF ATTUNDERLN[0] THEN VTPSUNDACT[0] = FALSE; 02152 M00S02147.virterm +++| IF ATTUNDERLN[0] THEN VDCTRL(OUT"UNDERLNOFF"); 02153 M00S02148.virterm +++| IF ATTALTERIN[0] THEN VDCTRL(OUT"ALTINTNOFF"); 02154 M00S02149.virterm +++| IF ATTINVERSE[0] THEN VDCTRL(OUT"INVERSEOFF"); 02155 M00S02150.virterm +++| IF ATTBLINKMD[0] THEN VDCTRL(OUT"BLINKOFF"); 02156 M00S02151.virterm +++| END 02157 M00S02152.virterm +++| IF ATTPROTECT[0] THEN VDCTRL(OUT"PROTECTOFF"); 02158 M00S02153.virterm +++| IF ATTGUARDMD[0] THEN VDCTRL(OUT"GUARDOFF"); 02159 M00S02154.virterm +++| END 02160 M00S02155.virterm +++| 02161 M00S02156.virterm +++|# TURN ON ATTRIBUTES THAT ARE NOT ON AND ARE REQUESTED THIS CALL # 02162 M00S02157.virterm +++| 02163 M00S02158.virterm +++|ATTRIBMASK[0] = ATTNEWMASK; # RESET NEW ATTRIBUTES # 02164 M00S02159.virterm +++| 02165 M00S02160.virterm +++|IF ATTRIBMASK NQ 0 THEN 02166 M00S02161.virterm +++| BEGIN # IF ANY ATTRIBUTES TO TURN ON # 02167 M00S02162.virterm +++| IF NOT TABLOCKMDE[0] THEN 02168 M00S02163.virterm +++| BEGIN # IF NOT BLOCK TYPE TERMINAL # 02169 M00S02164.virterm +++| IF NOT TABNOTMASK[0] THEN 02170 M00S02165.virterm +++| BEGIN # IF ATTRIBUTES ARE MASKABLE # 02171 M00S02166.virterm +++| ATTRIBMASK[0] = ATTRIBMASK[0] LXR ATTRIBSAME; 02172 M00S02167.virterm +++| END 02173 M00S02168.virterm +++| IF ATTPROTECT[0] THEN VDCTRL(OUT"PROTECTON"); 02174 M00S02169.virterm +++| IF ATTGUARDMD[0] THEN VDCTRL(OUT"GUARDON"); 02175 M00S02170.virterm +++| END 02176 M00S02171.virterm +++| IF ATTLOGICAL[0] THEN 02177 M00S02172.virterm +++| BEGIN # TURN ON LOGICAL ATTRIBUTE # 02178 M00S02173.virterm +++| IF ATTORDINAL[0] GQ 0 AND ATTORDINAL[0] LQ MAXLOGTYPE THEN 02179 M00S02174.virterm +++| BEGIN # IF GROUP ONE LOGICAL # 02180 M00S02175.virterm +++| VDCTRL(OUT"INPTEXTON" + (ATTORDINAL[0] * 2)); 02181 M00S02176.virterm +++| IF ATTORDINAL[0] EQ 0 THEN VTPSUNDACT[0] = VTPSUNDREQ[0]; 02182 M00S02177.virterm +++| END 02183 M00S02178.virterm +++| ELSE 02184 M00S02179.virterm +++| BEGIN # NOT GROUP ONE LOGICAL # 02185 M00S02180.virterm +++| IF ATTORDINAL[0] LQ MAXLOGTYPE*2+1 THEN 02186 M00S02181.virterm +++| BEGIN # IF LEGAL GROUP TWO LOGICAL #
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/virterm.txt ยท Last modified: by 127.0.0.1