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 #