Deck VIRTERM Part 001

12 Modifications

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
02187  M00S02182.virterm +++|       VDCTRL(OUT"INPUTB2" + ((ATTORDINAL[0]-6)* 2));
02188  M00S02183.virterm +++|       END
02189  M00S02184.virterm +++|      END
02190  M00S02185.virterm +++|    END
02191  M00S02186.virterm +++|  ELSE
02192  M00S02187.virterm +++|    BEGIN                            # TURN ON PHYSICAL ATTRIBUTES #
02193  M00S02188.virterm +++|    IF TABLOCKMDE[0] THEN
02194  M00S02189.virterm +++|      BEGIN                          # IF BLOCK TYPE TERMINAL #
02195  M00S02190.virterm +++|      VDTOUT(X"1D");                 # OUTPUT START FIELD ORDER #
02196  M00S02191.virterm +++|      IF ATTGUARDMD[0] THEN
02197  M00S02192.virterm +++|        BEGIN                        # IF GUARD MODE #
02198  M00S02193.virterm +++|        VTCHAR = X"3C";              # ASSUME UNPROTECTED #
02199  M00S02194.virterm +++|        IF ATTPROTECT[0] THEN VTCHAR = VTCHAR + X"04";
02200  M00S02195.virterm +++|        END
02201  M00S02196.virterm +++|      ELSE
02202  M00S02197.virterm +++|        BEGIN                        # UNGUARDED FIELD #
02203  M00S02198.virterm +++|        VTCHAR = X"44";              # ASSUME UNPROTECTED AND NORMAL #
02204  M00S02199.virterm +++|        IF ATTPROTECT[0] THEN VTCHAR = VTCHAR - X"10";
02205  M00S02200.virterm +++|        IF ATTALTERIN[0] OR ATTUNDERLN[0] OR
02206  M00S02201.virterm +++|          ATTINVERSE[0] OR ATTBLINKMD[0] THEN
02207  M00S02202.virterm +++|          VTCHAR = VTCHAR + X"04";
02208  M00S02203.virterm +++|        END
02209  M00S02204.virterm +++|      VDTOUT(VTCHAR);                # OUTPUT FIELD ATTRIBUTE #
02210  M00S02205.virterm +++|      END
02211  M00S02206.virterm +++|    ELSE
02212  M00S02207.virterm +++|      BEGIN
02213  M00S02208.virterm +++|      IF ATTUNDERLN[0] THEN VTPSUNDACT[0] = VTPSUNDREQ[0];
02214  M00S02209.virterm +++|      IF ATTUNDERLN[0] THEN VDCTRL(OUT"UNDERLNEON");
02215  M00S02210.virterm +++|      IF ATTALTERIN[0] THEN VDCTRL(OUT"ALTINTENON");
02216  M00S02211.virterm +++|      IF ATTINVERSE[0] THEN VDCTRL(OUT"INVERSEON");
02217  M00S02212.virterm +++|      IF ATTBLINKMD[0] THEN VDCTRL(OUT"BLINKON");
02218  M00S02213.virterm +++|      END
02219  M00S02214.virterm +++|    END
02220  M00S02215.virterm +++|  END
02221  M00S02216.virterm +++|ELSE
02222  M00S02217.virterm +++|  BEGIN                              # NO ATTRIBUTES #
02223  M00S02218.virterm +++|  IF TABLOCKMDE[0] THEN
02224  M00S02219.virterm +++|    BEGIN                            # IF BLOCK MODE TERMINAL #
02225  M00S02220.virterm +++|    VDTOUT(X"1D");                   # OUTPUT *START FIELD* ORDER #
02226  M00S02221.virterm +++|    VDTOUT(X"20");                   # UNPROTECTED #
02227  M00S02222.virterm +++|    END
02228  M00S02223.virterm +++|  END
02229  M00S02224.virterm +++|
02230  M00S02225.virterm +++|ATTRIBMASK[0] = ATTNEWMASK;          # SAVE CURRENT ATTRIBUTES #
02231  M00S02226.virterm +++|
02232  M00S02227.virterm +++|IOEND  # VDTSAM #
02233  M00S02228.virterm +++|CONTROL EJECT;
02234  M00S02229.virterm +++|
02235  M00S02230.virterm +++|PROC VDTSAP(LASTPOS,XPOS,YPOS);
02236  M00S02231.virterm +++|
02237  M00S02232.virterm +++|# TITLE VDTSAP - SET ATTRIBUTE POSITION. #
02238  M00S02233.virterm +++|
02239  M00S02234.virterm +++|IOBEGIN(VDTSAP)
02240  M00S02235.virterm +++|
02241  M00S02236.virterm +++|#
02242  M00S02237.virterm +++|**    VDTSAP - SET ATTRIBUTE POSITION.
02243  M00S02238.virterm +++|*
02244  M00S02239.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR TO THE SPECIFIED ROW AND COLUMN.
02245  M00S02240.virterm +++|*     FOR A NON BLOCK MODE TERMINAL THIS IS IDENTICAL TO VDTPOS BUT A
02246  M00S02241.virterm +++|*     BLOCK MODE TERMINAL WHOSES ATTRIBUTE CHARACTER OCCUPIES A SPACE
02247  M00S02242.virterm +++|*     ON THE SCREEN REQUIRES THAT THE POSITION BE BACKED UP ONE SPACE.
02248  M00S02243.virterm +++|*
02249  M00S02244.virterm +++|*     PROC VDTSAP(LASTPOS,XPOS,YPOS)
02250  M00S02245.virterm +++|*
02251  M00S02246.virterm +++|*     ENTRY     LASTPOS      = BUFFER POSITION OF LAST FIELD ATTRIBUTE.
02252  M00S02247.virterm +++|*               XPOS         = DESIRED X COORDINATE.
02253  M00S02248.virterm +++|*               YPOS         = DESIRED Y COORDINATE.
02254  M00S02249.virterm +++|*
02255  M00S02250.virterm +++|*     EXIT      CURSOR MOVED TO APPROPRIATE POSITION.
02256  M00S02251.virterm +++|*
02257  M00S02252.virterm +++|*     CALLS     VDMOVE, VDTOUT.
02258  M00S02253.virterm +++|*
02259  M00S02254.virterm +++|*     USES      VTCOUNT, VTHOLD, VTXCUR, VTYCUR.
02260  M00S02255.virterm +++|#
02261  M00S02256.virterm +++|ITEM LASTPOS    I;                   # LAST ATTRIBUTE POSITION #
02262  M00S02257.virterm +++|ITEM XPOS       I;                   # DESIRED X COORDINATE #
02263  M00S02258.virterm +++|ITEM YPOS       I;                   # DESIRED Y COORDINATE #
02264  M00S02259.virterm +++|
02265  M00S02260.virterm +++|VTXCUR = XPOS;
02266  M00S02261.virterm +++|VTYCUR = YPOS;
02267  M00S02262.virterm +++|VTHOLD = LASTPOS;
02268  M00S02263.virterm +++|
02269  M00S02264.virterm +++|CONTROL IFEQ EDITORVDT,0;            # IF NOT FSE VERSION OF VIRTERM #
02270  M00S02265.virterm +++|IF TABLOCKMDE[0] OR TABATTRCHR[0] THEN
02271  M00S02266.virterm +++|  BEGIN                              # IF ATTRIBUTE WILL TAKE A BYTE #
02272  M00S02267.virterm +++|CONTROL FI;                          # END OF IF NOT FSE #
02273  M00S02268.virterm +++|CONTROL IFEQ EDITORVDT,1;            # IF FSE VERSION OF VIRTERM #
02274  M00S02269.virterm +++|IF TABLOCKMDE[0] THEN
02275  M00S02270.virterm +++|  BEGIN                              # IF BLOCK MODE TERMINAL #
02276  M00S02271.virterm +++|CONTROL FI;                          # END OF IF FSE #
02277  M00S02272.virterm +++|  VTXCUR = VTXCUR - 1;               # BACK CURSOR UP ONE POSITION #
02278  M00S02273.virterm +++|  IF VTXCUR LS 0 THEN
02279  M00S02274.virterm +++|    BEGIN                            # IF WRAP TO PREVIOUS LINE #
02280  M00S02275.virterm +++|    VTXCUR = VTXMAX;
02281  M00S02276.virterm +++|    VTYCUR = VTYCUR - 1;
02282  M00S02277.virterm +++|    IF VTYCUR LS 0 THEN
02283  M00S02278.virterm +++|      BEGIN                          # IF WRAP TO LAST SCREEN POSTION #
02284  M00S02279.virterm +++|      VTYCUR = VTYMAX;
02285  M00S02280.virterm +++|      IF TABATTRCHR[0] THEN
02286  M00S02281.virterm +++|        BEGIN                        # IF ATTRIBUTE TAKES A SPACE #
02287  M00S02282.virterm +++|        VTXCUR = 0;
02288  M00S02283.virterm +++|        VTYCUR = 0;
02289  M00S02284.virterm +++|        END
02290  M00S02285.virterm +++|      END
02291  M00S02286.virterm +++|    END
02292  M00S02287.virterm +++|CONTROL IFEQ EDITORVDT,0;            # IF NOT FSE VERSION OF VIRTERM #
02293  M00S02288.virterm +++|    IF TABLOCKMDE[0] THEN
02294  M00S02289.virterm +++|      BEGIN                          # IF BLOCK MODE TERMINAL #
02295  M00S02290.virterm +++|      VTCOUNT = (VTYCUR * (VTXMAX + 1)) + VTXCUR;
02296  M00S02291.virterm +++|      IF VTCOUNT LS VTHOLD - 1 OR VTCOUNT GR VTHOLD THEN
02297  M00S02292.virterm +++|        BEGIN                        # IF TERMINATING PREVIOUS FIELD #
02298  M00S02293.virterm +++|        VDTOUT(X"1D");               # START FIELD ORDER #
02299  M00S02294.virterm +++|        VDTOUT(X"30");               # AUTOSKIP, DISPLAY, NON-SELECT #
02300  M00S02295.virterm +++|        END
02301  M00S02296.virterm +++|      VTHOLD = VTCOUNT;              # UPDATE POSITION #
02302  M00S02297.virterm +++|      END
02303  M00S02298.virterm +++|CONTROL FI;                          # END OF IF NOT FSE #
02304  M00S02299.virterm +++|  END
02305  M00S02300.virterm +++|VDMOVE(VTXCUR,VTYCUR);               # MOVE CURSOR #
02306  M00S02301.virterm +++|
02307  M00S02302.virterm +++|LASTPOS = VTHOLD;                    # UPDATE LAST POSITION #
02308  M00S02303.virterm +++|
02309  M00S02304.virterm +++|IOEND  # VDTSAP #
02310  M00S02305.virterm +++|CONTROL EJECT;
02311  M00S02306.virterm +++|
02312  M00S02307.virterm +++|PROC VDTSTD(COLUMNS,LINES);
02313  M00S02308.virterm +++|
02314  M00S02309.virterm +++|# TITLE VDTSTD - SET TERMINAL DIMENSIONS. #
02315  M00S02310.virterm +++|
02316  M00S02311.virterm +++|IOBEGIN(VDTSTD)
02317  M00S02312.virterm +++|
02318  M00S02313.virterm +++|#
02319  M00S02314.virterm +++|**    VDTSTD - SET TERMINAL DIMENSIONS.
02320  M00S02315.virterm +++|*
02321  M00S02316.virterm +++|*     THIS PROCEDURE ATTEMPTS TO SET THE REQUESTED TERMINAL DIMENSIONS.
02322  M00S02317.virterm +++|*     IF THE DIMENSIONS CAN NOT BE ALTERED AS REQUESTED, NO ACTION WILL
02323  M00S02318.virterm +++|*     OCCUR.  IF POSSIBLE, *VDTSTD* WILL CHANGE THE WIDTH AND/OR LENGTH
02324  M00S02319.virterm +++|*     OF THE TERMINAL SCREEN TO CONFORM AS NEARLY AS POSSIBLE TO THE
02325  M00S02320.virterm +++|*     SPECIFIED SIZE.
02326  M00S02321.virterm +++|*
02327  M00S02322.virterm +++|*     PROC VDTSTD(COLUMNS,LINES)
02328  M00S02323.virterm +++|*
02329  M00S02324.virterm +++|*     ENTRY     COLUMNS    = NUMBER OF COLUMNS DESIRED.
02330  M00S02325.virterm +++|*               LINES      = NUMBER OF LINES DESIRED.
02331  M00S02326.virterm +++|*
02332  M00S02327.virterm +++|*     EXIT      TERMINAL DIMENSIONS ADJUSTED IF NECESSARY AND POSSIBLE.
02333  M00S02328.virterm +++|*
02334  M00S02329.virterm +++|*     CALLS     VDCTRL.
02335  M00S02330.virterm +++|*
02336  M00S02331.virterm +++|*     USES      VTI, VTJ, VTXMAX, VTYMAX.
02337  M00S02332.virterm +++|#
02338  M00S02333.virterm +++|
02339  M00S02334.virterm +++|ITEM COLUMNS    I;                   # NUMBER OF COLUMNS DESIRED #
02340  M00S02335.virterm +++|ITEM LINES      I;                   # NUMBER OF LINES DESIRED #
02341  M00S02336.virterm +++|
Line S00001 Modification History
M01 (Added by) ns2700
Seq #  *Modification Id* Act 
----------------------------+
02342  M01S00001.ns2700  +++|ITEM TMP1       U;                   # TEMPORARY STORAGE #
02343  M01S00002.ns2700  +++|ITEM TMP2       U;                   # TEMPORARY STORAGE #
02344  M01S00003.ns2700  +++|ITEM TMP3       U;                   # TEMPORARY STORAGE #
02345  M01S00004.ns2700  +++|ITEM TMP4       U;                   # TEMPORARY STORAGE #
02346  M01S00005.ns2700  +++|ITEM TMP5       U;                   # TEMPORARY STORAGE #
02347  M01S00006.ns2700  +++|
02348  M00S02337.virterm +++|VTI = COLUMNS;
02349  M00S02338.virterm +++|VTJ = LINES;
Line S02339 Modification History
M01 (Removed by) ns2700
Seq #  *Modification Id* Act 
----------------------------+
02350  M01S02339.ns2700  ---|
02351  M01S02340.ns2700  ---|# END OF NON-REENTRANT PARAMTER USAGE #
02352  M01S02341.ns2700  ---|
02353  M01S02342.ns2700  ---|IF (TABXMAXONE[0] GQ VTI AND TABYMAXONE[0] GQ VTJ)
02354  M01S02343.ns2700  ---|  OR TABXMAXTWO[0] EQ 0 THEN
02355  M01S02344.ns2700  ---|  BEGIN                              # FIRST SIZE FITS OR IS LARGEST #
02356  M01S02345.ns2700  ---|  IF VTXMAX NQ TABXMAXONE[0] - 1 OR VTYMAX NQ TABYMAXONE[0] - 1 THEN
02357  M01S02346.ns2700  ---|    BEGIN                            # IF NOT CURRENT SIZE #
02358  M01S02347.ns2700  ---|    VTXMAX = TABXMAXONE[0] - 1;      # SET SIZE ONE #
02359  M01S02348.ns2700  ---|    VTYMAX = TABYMAXONE[0] - 1;
02360  M01S02349.ns2700  ---|    VDCTRL(OUT"SCREENSZ1");
02361  M01S02350.ns2700  ---|    END
02362  M01S02351.ns2700  ---|  IORET                              # RETURN #
02363  M01S02352.ns2700  ---|  END
02364  M01S02353.ns2700  ---|
02365  M01S02354.ns2700  ---|IF (TABXMAXTWO[0] GQ VTI AND TABYMAXTWO[0] GQ VTJ)
02366  M01S02355.ns2700  ---|  OR TABXMAXTHR[0] EQ 0 THEN
02367  M01S02356.ns2700  ---|  BEGIN                              # NEXT SIZE FITS OR IS LARGEST #
02368  M01S02357.ns2700  ---|  IF VTXMAX NQ TABXMAXTWO[0] - 1 OR VTYMAX NQ TABYMAXTWO[0] - 1 THEN
02369  M01S02358.ns2700  ---|    BEGIN                            # IF NOT CURRENT SIZE #
02370  M01S02359.ns2700  ---|    VTXMAX = TABXMAXTWO[0] - 1;      # SET SIZE TWO #
02371  M01S02360.ns2700  ---|    VTYMAX = TABYMAXTWO[0] - 1;
02372  M01S02361.ns2700  ---|    VDCTRL(OUT"SCREENSZ2");
02373  M01S02362.ns2700  ---|    END
02374  M01S02363.ns2700  ---|  IORET                              # RETURN #
02375  M01S02364.ns2700  ---|  END
02376  M01S02365.ns2700  ---|
02377  M01S02366.ns2700  ---|IF (TABXMAXTHR[0] GQ VTI AND TABYMAXTHR[0] GQ VTJ)
02378  M01S02367.ns2700  ---|  OR TABXMAXFOR[0] EQ 0 THEN
02379  M01S02368.ns2700  ---|  BEGIN                              # THIRD SIZE FITS OR IS LARGEST #
02380  M01S02369.ns2700  ---|  IF VTXMAX NQ TABXMAXTHR[0] - 1 OR VTYMAX NQ TABYMAXTHR[0] - 1 THEN
02381  M01S02370.ns2700  ---|    BEGIN                            # IF NOT CURRENT SIZE #
02382  M01S02371.ns2700  ---|    VTXMAX = TABXMAXTHR[0] - 1;      # SET SIZE THREE #
02383  M01S02372.ns2700  ---|    VTYMAX = TABYMAXTHR[0] - 1;
02384  M01S02373.ns2700  ---|    VDCTRL(OUT"SCREENSZ3");
02385  M01S02374.ns2700  ---|    END
02386  M01S02375.ns2700  ---|  IORET                              # RETURN #
02387  M01S02376.ns2700  ---|  END
02388  M01S02377.ns2700  ---|
02389  M01S02378.ns2700  ---|IF VTXMAX NQ TABXMAXFOR[0] - 1 OR VTYMAX NQ TABYMAXFOR[0] - 1 THEN
02390  M01S02379.ns2700  ---|  BEGIN                            # IF NOT CURRENT SIZE #
02391  M01S02380.ns2700  ---|  VTXMAX = TABXMAXFOR[0] - 1;      # SET SIZE FOUR #
02392  M01S02381.ns2700  ---|  VTYMAX = TABYMAXFOR[0] - 1;
02393  M01S02382.ns2700  ---|  VDCTRL(OUT"SCREENSZ4");
02394  M01S02383.ns2700  ---|  END
Line S00007 Modification History
M01 (Added by) ns2700
Seq #  *Modification Id* Act 
----------------------------+
02395  M01S00007.ns2700  +++|TMP2 = 0;
02396  M01S00008.ns2700  +++|TMP3 = -1;
02397  M01S00009.ns2700  +++|TMP4 = 0;
02398  M01S00010.ns2700  +++|TMP5 = 0;
02399  M01S00011.ns2700  +++|FOR TMP1 = 0 STEP 15 WHILE TMP3 LS VTI
02400  M01S00012.ns2700  +++|  AND TMP3 NQ 0 AND TMP1 LS 60 DO
02401  M01S00013.ns2700  +++|  BEGIN                             # FIND BEST COLUMNS FIT #
02402  M01S00014.ns2700  +++|  TMP3 = B<TMP1,8>TABHEADSIX;
02403  M01S00015.ns2700  +++|  IF TMP3 GR TMP4 THEN
02404  M01S00016.ns2700  +++|    BEGIN                           # IF BETTER THAN PREVIOUS BEST #
02405  M01S00017.ns2700  +++|    TMP2 = TMP1;
02406  M01S00018.ns2700  +++|    TMP4 = TMP3;
02407  M01S00019.ns2700  +++|    TMP5 = B<TMP1+8,7>TABHEADSIX;
02408  M01S00020.ns2700  +++|    END
02409  M01S00021.ns2700  +++|  END
02410  M01S00022.ns2700  +++|
02411  M01S00023.ns2700  +++|TMP3 = -1;
02412  M01S00024.ns2700  +++|FOR TMP1 = TMP2 STEP 15 WHILE TMP3 LS VTJ
02413  M01S00025.ns2700  +++|  AND TMP3 NQ 0 AND TMP1 LS 60 DO
02414  M01S00026.ns2700  +++|  BEGIN                              # FIND BEST ROWS FIT #
02415  M01S00027.ns2700  +++|  TMP3 = B<TMP1+8,7>TABHEADSIX;
02416  M01S00028.ns2700  +++|  IF TMP3 GR TMP5 THEN
02417  M01S00029.ns2700  +++|    BEGIN                            # IF BETTER THAN PREVIOUS BEST #
02418  M01S00030.ns2700  +++|    TMP2 = TMP1;
02419  M01S00031.ns2700  +++|    TMP4 = B<TMP1,8>TABHEADSIX;
02420  M01S00032.ns2700  +++|    TMP5 = TMP3;
02421  M01S00033.ns2700  +++|    END
02422  M01S00034.ns2700  +++|  END
02423  M01S00035.ns2700  +++|
02424  M01S00036.ns2700  +++|IF VTXMAX NQ TMP4-1 OR VTYMAX NQ TMP5-1 THEN
02425  M01S00037.ns2700  +++|  BEGIN                              # IF SIZE CHANGE REQUIRED #
02426  M01S00038.ns2700  +++|  VTXMAX = TMP4 - 1;
02427  M01S00039.ns2700  +++|  VTYMAX = TMP5 - 1;
02428  M01S00040.ns2700  +++|  IF TMP2 LS 15 THEN VDCTRL(OUT"SCREENSZ1");
02429  M01S00041.ns2700  +++|  ELSE IF TMP2 LS 30 THEN VDCTRL(OUT"SCREENSZ2");
02430  M01S00042.ns2700  +++|  ELSE IF TMP2 LS 45 THEN VDCTRL(OUT"SCREENSZ3");
02431  M01S00043.ns2700  +++|  ELSE VDCTRL(OUT"SCREENSZ4");
02432  M01S00044.ns2700  +++|  END
02433  M00S02384.virterm +++|
02434  M00S02385.virterm +++|IOEND  # VDTSTD #
02435  M00S02386.virterm +++|CONTROL EJECT;
02436  M00S02387.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
02437  M00S02388.virterm +++|
02438  M00S02389.virterm +++|PROC VDTSTM(MODE,STAT);
02439  M00S02390.virterm +++|
02440  M00S02391.virterm +++|# TITLE VDTSTM - SET TERMINAL MODE. #
02441  M00S02392.virterm +++|
02442  M00S02393.virterm +++|BEGIN  # VDTSTM #
02443  M00S02394.virterm +++|
02444  M00S02395.virterm +++|#
02445  M00S02396.virterm +++|**    VDTSTM - SET TERMINAL MODE.
02446  M00S02397.virterm +++|*
02447  M00S02398.virterm +++|*     THIS PROCEDURE SETS THE TERMINAL MODE TO EITHER SCREEN OR LINE.
02448  M00S02399.virterm +++|*
02449  M00S02400.virterm +++|*     PROC VDTSTM(MODE,STAT)
02450  M00S02401.virterm +++|*
02451  M00S02402.virterm +++|*     ENTRY     MODE       = 1, IF SCREEN MODE REQUESTED.
02452  M00S02403.virterm +++|*                          = 0, IF LINE MODE REQUESTED.
02453  M00S02404.virterm +++|*
02454  M00S02405.virterm +++|*     EXIT      STAT       = 1, IF CURRENT MODE IS SCREEN.
02455  M00S02406.virterm +++|*                          = 0, IF CURRENT MODE IS LINE.
02456  M00S02407.virterm +++|*
02457  M00S02408.virterm +++|*IF UNDEF QTRM
02458  M00S02409.virterm +++|*     CALLS     VDCTRL, VDTBOO, VDTCLO, VDTGSL, VDTITD, VDTPRT$
02459  M00S02410.virterm +++|*               VDTSTR, VDSYNCH, VDTWTO.
02460  M00S02411.virterm +++|*ELSE
02461  M00S02412.virterm +++|*     CALLS     VDTITD, VDSYNCH.
02462  M00S02413.virterm +++|*ENDIF
02463  M00S02414.virterm +++|*
02464  M00S02415.virterm +++|*     USES      VTXMAX, VTYMAX.
02465  M00S02416.virterm +++|*
02466  M00S02417.virterm +++|*     NOTES     VDTSTM DOES NOT SET THE TERMINAL SIZE, THAT
02467  M00S02418.virterm +++|*               TASK IS PERFORMED BY A CALL TO VDTSTD.  THE
02468  M00S02419.virterm +++|*               VDTBOO OUTPUT SEQUENCE INCLUDES THE SEQUENCE
02469  M00S02420.virterm +++|*               NECESSARY TO DISABLE PROTECT FOR THE TERMINAL.
Line S00003 Modification History
M01 (Added by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
02470  M01S00003.ns2524  +++|*               VDTBOO MUST HAVE BEEN CALLED PRIOR TO VDTSTM.
02471  M00S02421.virterm +++|#
02472  M00S02422.virterm +++|
02473  M00S02423.virterm +++|ITEM MODE       I;                   # REQUESTED MODE #
02474  M00S02424.virterm +++|ITEM MODELNAME  C(6);                # *TDU* DEFINED MODEL NAME #
02475  M00S02425.virterm +++|ITEM STAT       I;                   # SELECTED MODE #
02476  M00S02426.virterm +++|
02477  M00S02427.virterm +++|DEF  XONOFF       #O"00164104400100000000"#;  # XPARENT ON AND OFF #
02478  M00S02428.virterm +++|
02479  M00S02429.virterm +++|VDTITD(MODELNAME);                   # INITIALIZE *TDU* DEFINITION #
02480  M00S02430.virterm +++|*IF UNDEF,QTRM
02481  M00S02431.virterm +++|VDTGSL(VTMODEL,STAT);                # GET MODEL AND SCREEN OR LINE #
02482  M00S02432.virterm +++|*ELSE
02483  M00S02433.virterm +++|MODELNAME = NIT$TRNAM[NIT$CON];      # GET MODELNAME #
02484  M00S02434.virterm +++|MODE = 1;
02485  M00S02435.virterm +++|STAT = 1;
02486  M00S02436.virterm +++|*ENDIF
02487  M00S02437.virterm +++|
02488  M00S02438.virterm +++|IF MODELNAME NQ "      " THEN
02489  M00S02439.virterm +++|  BEGIN                              # IF OS MODE IS SCREEN #
02490  M00S02440.virterm +++|  IF MODE EQ 1 THEN
02491  M00S02441.virterm +++|    BEGIN                            # IF SCREEN MODE IS REQUESTED #
02492  M00S02442.virterm +++|    TABLOCKMDE[0] = TABCURADDT[0] EQ 4;
02493  M00S02443.virterm +++|    VDSYNCH;                         # FLUSH ANY OUTPUT #
02494  M00S02444.virterm +++|*IF UNDEF,QTRM
02495  M00S02445.virterm +++|    VDTWTO(XONOFF);                  # XPARENT ON AND OFF #
02496  M00S02446.virterm +++|*ENDIF
02497  M00S02447.virterm +++|    CONTROL IFEQ EDITORVDT,1;
02498  M00S02448.virterm +++|      IF TABTYPHEAD[0] THEN
02499  M00S02449.virterm +++|        BEGIN                        # IF TYPE AHEAD REQUESTED #
02500  M00S02450.virterm +++|        VDTSTR(ENABLEMMSG);          # ENABLE MULTI-MSG TRANSPARENT #
02501  M00S02451.virterm +++|        VDTPRT$(0);                  # PROMPT OFF #
02502  M00S02452.virterm +++|        END
02503  M00S02453.virterm +++|    CONTROL FI;
02504  M00S02454.virterm +++|    VDTTFF(OUT"CLREOL",VTCOUNT);     # TEST CLEAR EOL AND SET FLAG #
02505  M00S02455.virterm +++|    VTCLRFRST[0] = VTCOUNT NQ 0 AND NOT TABLOCKMDE[0];
02506  M00S02456.virterm +++|    IF VTCLRFRST[0] THEN
02507  M00S02457.virterm +++|      BEGIN                          # IF TERMINAL HAS A CLEAR TO EOL #
02508  M00S02458.virterm +++|      VDTTFF(OUT"CURSORSTR",VTCOUNT);
02509  M00S02459.virterm +++|      VTNUMBLNK[0] = VTCOUNT;        # FIND BLANK/VDTPOS THRESHOLD #
02510  M00S02460.virterm +++|      VDTTFF(OUT"CURSORSEC",VTCOUNT);
02511  M00S02461.virterm +++|      VTNUMBLNK[0] = VTNUMBLNK[0] + VTCOUNT;
02512  M00S02462.virterm +++|      VDTTFF(OUT"CURSORTHR",VTCOUNT);
02513  M00S02463.virterm +++|      VTNUMBLNK[0] = VTNUMBLNK[0] + VTCOUNT;
02514  M00S02464.virterm +++|      IF TABCURADDT[0] EQ 3 THEN
02515  M00S02465.virterm +++|        BEGIN                        # IF ANSI #
02516  M00S02466.virterm +++|        IF TABXDECIML[0] EQ 0 THEN
02517  M00S02467.virterm +++|          BEGIN                      # IF NOT FIXED LENGTH X/Y #
02518  M00S02468.virterm +++|          VTNUMBLNK[0] = VTNUMBLNK[0] + 4;
02519  M00S02469.virterm +++|          END
02520  M00S02470.virterm +++|        ELSE
02521  M00S02471.virterm +++|          BEGIN                      # FIXED LENGTH COORDINATES #
02522  M00S02472.virterm +++|          VTNUMBLNK[0] = VTNUMBLNK[0] + TABXDECIML[0] + TABYDECIML[0];
02523  M00S02473.virterm +++|          END
02524  M00S02474.virterm +++|        END
Line S00001 Modification History
M01 (Added by) ns2665
Seq #  *Modification Id* Act 
----------------------------+
02525  M01S00001.ns2665  +++|      ELSE IF TABCURADDT[0] EQ 5 THEN
02526  M01S00002.ns2665  +++|        BEGIN                        # IF 3151 #
02527  M01S00003.ns2665  +++|        VTNUMBLNK[0] = VTNUMBLNK[0] + 4;
02528  M01S00004.ns2665  +++|        END
02529  M00S02475.virterm +++|      ELSE
02530  M00S02476.virterm +++|        BEGIN                        # BINARY OR 721 #
02531  M00S02477.virterm +++|        VTNUMBLNK[0] = VTNUMBLNK[0] + 2;
02532  M00S02478.virterm +++|        END
02533  M00S02479.virterm +++|      END
Line S02480 Modification History
M01 (Removed by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
02534  M01S02480.ns2524  ---|    VDTBOO;                          # BEGIN OUTPUT SEQUENCE #
Line S00004 Modification History
M01 (Added by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
02535  M01S00004.ns2524  +++|    CONTROL IFEQ EDITORVDT,1;
02536  M01S00005.ns2524  +++|      VDTBOO;                        # BEGIN OUTPUT SEQUENCE #
02537  M01S00006.ns2524  +++|    CONTROL FI;
02538  M00S02481.virterm +++|    SCREENMODE = TRUE;               # SCREEN MODE IS TRUE #
02539  M00S02482.virterm +++|    VDCTRL(OUT"SETSCRMODE");         # SET SCREEN MODE #
02540  M00S02483.virterm +++|    VDTTFF(OUT"UNDERLNEON",VTCOUNT); # TEST UNDERLINE AND SET FLAG #
02541  M00S02484.virterm +++|    VTPSUNDREQ[0] = VTCOUNT EQ 0 AND NOT TABLOCKMDE[0];
02542  M00S02485.virterm +++|    STAT = 1;
Line S00001 Modification History
M01 (Added by) virte13
Seq #  *Modification Id* Act 
----------------------------+
02543  M01S00001.virte13 +++|    VDSYNCH;                         # FLUSH OUTPUT #
02544  M00S02486.virterm +++|    END
02545  M00S02487.virterm +++|  ELSE
02546  M00S02488.virterm +++|    BEGIN                            # IF LINE MODE REQUESTED #
02547  M00S02489.virterm +++|    IF SCREENMODE THEN
02548  M00S02490.virterm +++|      BEGIN                          # IF CURRENT MODE IS SCREEN #
02549  M00S02491.virterm +++|      VDSYNCH;                       # FLUSH ANY OUTPUT #
02550  M00S02492.virterm +++|      CONTROL IFEQ EDITORVDT,1;
02551  M00S02493.virterm +++|        IF TABTYPHEAD[0] THEN
02552  M00S02494.virterm +++|          BEGIN                      # IF TYPE AHEAD WAS ON #
02553  M00S02495.virterm +++|          VDTSTR(DISABLMMSG);        # DISABLE MULTI-MSG TRANSPARENT #
02554  M00S02496.virterm +++|          VDTPRT$(1);                # PROMPT ON #
Line S02497 Modification History
M01 (Removed by) virte13
Seq #  *Modification Id* Act 
----------------------------+
02555  M01S02497.virte13 ---|          VDTCLO(0);                 # FLUSH THE OUTPUT BUFFER #
02556  M00S02498.virterm +++|          END
02557  M00S02499.virterm +++|      CONTROL FI;
02558  M00S02500.virterm +++|      VTXMAX = 0;                    # CLEAR SCREEN SIZE #
02559  M00S02501.virterm +++|      VTYMAX = 0;
Line S02502 Modification History
M01 (Removed by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
02560  M01S02502.ns2524  ---|      VDTBOO;                        # BEGIN OUTPUT SEQUENCE #
02561  M00S02503.virterm +++|      SCREENMODE = FALSE;            # SCREEN MODE IS FALSE #
02562  M00S02504.virterm +++|      VDCTRL(OUT"SETLNEMODE");       # SET LINE MODE #
Line S00002 Modification History
M01 (Added by) virte13
Seq #  *Modification Id* Act 
----------------------------+
02563  M01S00002.virte13 +++|      VDSYNCH;                       # FLUSH OUTPUT #
02564  M00S02505.virterm +++|      STAT = 0;
02565  M00S02506.virterm +++|      CONTROL IFEQ EDITORVDT,1;
Line S00003 Modification History
M01 (Added by) virte13
Seq #  *Modification Id* Act 
----------------------------+
02566  M01S00003.virte13 +++|        VDTCLO(0);                   # FLUSH THE OUTPUT BUFFER #
02567  M00S02507.virterm +++|        VTTDUREAD[0] = FALSE;        # CLEAR VALID TABLE READ FLAG #
02568  M00S02508.virterm +++|      CONTROL FI;
02569  M00S02509.virterm +++|      END
02570  M00S02510.virterm +++|    END
Line S02511 Modification History
M01 (Removed by) virte13
Seq #  *Modification Id* Act 
----------------------------+
02571  M01S02511.virte13 ---|  VDSYNCH;                           # FLUSH OUTPUT #
02572  M00S02512.virterm +++|  END
02573  M00S02513.virterm +++|ELSE
02574  M00S02514.virterm +++|  BEGIN                              # OS MODE IS LINE #
02575  M00S02515.virterm +++|  STAT = 0;
02576  M00S02516.virterm +++|  END
02577  M00S02517.virterm +++|
02578  M00S02518.virterm +++|END  # VDTSTM #
02579  M00S02519.virterm +++|CONTROL FI;                          # END OF IF SINGLE USER FSE #
02580  M00S02520.virterm +++|*IF UNDEF,QTRM
02581  M00S02521.virterm +++|CONTROL EJECT;
02582  M00S02522.virterm +++|
02583  M00S02523.virterm +++|PROC VDTSTR(STRING);
02584  M00S02524.virterm +++|
02585  M00S02525.virterm +++|# TITLE VDTSTR - WRITE ONE LINE OF OUTPUT. #
02586  M00S02526.virterm +++|
02587  M00S02527.virterm +++|IOBEGIN(VDTSTR)
02588  M00S02528.virterm +++|
02589  M00S02529.virterm +++|#
02590  M00S02530.virterm +++|**    VDTSTR - WRITE ONE LINE OF OUTPUT.
02591  M00S02531.virterm +++|*
02592  M00S02532.virterm +++|*     THIS PROCEDURES WRITES A STRING OF ASCII8 CHARACTERS.
02593  M00S02533.virterm +++|*
02594  M00S02534.virterm +++|*     PROC VDTSTR(STRING)
02595  M00S02535.virterm +++|*
02596  M00S02536.virterm +++|*     ENTRY     STRING    = ASCII8 STRING, ZERO BYTE TERMINATED.
02597  M00S02537.virterm +++|*
02598  M00S02538.virterm +++|*     USES      VTHOLD.
02599  M00S02539.virterm +++|*
02600  M00S02540.virterm +++|*     CALLS     VDTWTC, VDSYNCH.
02601  M00S02541.virterm +++|#
02602  M00S02542.virterm +++|
02603  M00S02543.virterm +++|ARRAY STRING [0:0] P(1);;            # LINE IMAGE BUFFER #
02604  M00S02544.virterm +++|BASED ARRAY PARM [0:0] P(1);;        # LINE IMAGE BUFFER ADDRESS #
02605  M00S02545.virterm +++|
02606  M00S02546.virterm +++|VTHOLD = LOC(STRING);                # SAVE PARAMETER ADDRESS #
02607  M00S02547.virterm +++|
02608  M00S02548.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE #
02609  M00S02549.virterm +++|
02610  M00S02550.virterm +++|VDSYNCH;
02611  M00S02551.virterm +++|
02612  M00S02552.virterm +++|# START OF NON-REENTRANT CODE SEQUENCE #
02613  M00S02553.virterm +++|
02614  M00S02554.virterm +++|P<PARM> = VTHOLD;                    # RESTORE BUFFER ADDRESS #
02615  M00S02555.virterm +++|VDTWTC(PARM);                        # WRITE LINE OF OUTPUT #
02616  M00S02556.virterm +++|
02617  M00S02557.virterm +++|# END OF NON-REENTRANT CODE SEQUENCE #
02618  M00S02558.virterm +++|
02619  M00S02559.virterm +++|IOEND  # VDTSTR #
02620  M00S02560.virterm +++|*ELSE
02621  M00S02561.virterm +++|CONTROL EJECT;                       # QTRM VARIANT OF VDTSTR #
02622  M00S02562.virterm +++|
02623  M00S02563.virterm +++|PROC VDTSTR(STRING);
02624  M00S02564.virterm +++|
02625  M00S02565.virterm +++|# TITLE VDTSTR - WRITE ONE LINE OF OUTPUT. #
02626  M00S02566.virterm +++|
02627  M00S02567.virterm +++|BEGIN  # VDTSTR #
02628  M00S02568.virterm +++|
02629  M00S02569.virterm +++|#
02630  M00S02570.virterm +++|**    VDTSTR - WRITE ONE LINE OF OUTPUT.
02631  M00S02571.virterm +++|*
02632  M00S02572.virterm +++|*     THIS PROCEDURE WRITES A STRING OF ASCII CHARACTERS.
02633  M00S02573.virterm +++|*
02634  M00S02574.virterm +++|*     PROC VDTSTR(STRING)
02635  M00S02575.virterm +++|*
02636  M00S02576.virterm +++|*     ENTRY     STRING     = ASCII8 STRING, ZERO BYTE TERMINATED.
02637  M00S02577.virterm +++|*
02638  M00S02578.virterm +++|*     USES      VTHOLD.
02639  M00S02579.virterm +++|*
02640  M00S02580.virterm +++|*     CALLS     SFNQUE, VDSYNCH.
02641  M00S02581.virterm +++|#
02642  M00S02582.virterm +++|ARRAY STRING [0:0] P(1);             # LINE IMAGE BUFFER #
02643  M00S02583.virterm +++|  BEGIN
02644  M00S02584.virterm +++|  ITEM STRING$WORD  U(00,00,60);     # BUFFER WORD (INTEGER) #
02645  M00S02585.virterm +++|  END
02646  M00S02586.virterm +++|BASED ARRAY PARM [0:0] P(1);;        # LINE IMAGE BUFFER ADDRESS #
02647  M00S02587.virterm +++|
02648  M00S02588.virterm +++|ITEM BIT        I;                   # BIT POSITION #
02649  M00S02589.virterm +++|ITEM I          I;                   # DUMMY PARAMETER #
02650  M00S02590.virterm +++|ITEM OH$SEVEN   I;                   # SET FOR 0007 IN BYTE 1 #
02651  M00S02591.virterm +++|ITEM NUMCHAR    I;                   # NUMBER OF CHARACTERS #
02652  M00S02592.virterm +++|ITEM WORD       I;                   # BUFFER WORD #
02653  M00S02593.virterm +++|
02654  M00S02594.virterm +++|VTHOLD = LOC(STRING);
02655  M00S02595.virterm +++|VDSYNCH;                             # POSITION TO A WORD BOUNDARY #
02656  M00S02596.virterm +++|P<PARM> = VTHOLD;
02657  M00S02597.virterm +++|WORD = 0;
02658  M00S02598.virterm +++|BIT = 0;
02659  M00S02599.virterm +++|NUMCHAR = 0;
02660  M00S02600.virterm +++|OH$SEVEN = 0;
02661  M00S02601.virterm +++|
02662  M00S02602.virterm +++|IF B<0,12>STRING$WORD[0] EQ O"0007" THEN
02663  M00S02603.virterm +++|  BEGIN                              # IF TRANSPARENT OUTPUT BYTE #
02664  M00S02604.virterm +++|  B<0,12>STRING$WORD[0] = O"0000";
02665  M00S02605.virterm +++|  OH$SEVEN = 1;                      # SET FLAG TO RESTORE 0007 BYTE #
02666  M00S02606.virterm +++|  NUMCHAR = 1;
02667  M00S02607.virterm +++|  BIT = 12;
02668  M00S02608.virterm +++|  END
02669  M00S02609.virterm +++|
02670  M00S02610.virterm +++|VDTSTR1:                             # LOOP FOR A ZERO BYTE #
02671  M00S02611.virterm +++|
02672  M00S02612.virterm +++|  IF B<BIT,12>STRING$WORD[WORD] EQ 0 THEN
02673  M00S02613.virterm +++|    BEGIN                            # IF LAST WORD #
02674  M00S02614.virterm +++|    NIT$CTLC = NUMCHAR;              # STORE STRING INTO QTRM BUFFER #
02675  M00S02615.virterm +++|    SFNQUE("PUT",PARM,I);
02676  M00S02616.virterm +++|    IF OH$SEVEN NQ 0 THEN
02677  M00S02617.virterm +++|      BEGIN                          # IF NEED TO RESTORE 0007 BYTE #
02678  M00S02618.virterm +++|      B<0,12>STRING$WORD[0] = O"0007";
02679  M00S02619.virterm +++|      END
02680  M00S02620.virterm +++|    RETURN;                          # RETURN #
02681  M00S02621.virterm +++|    END
02682  M00S02622.virterm +++|
02683  M00S02623.virterm +++|  NUMCHAR = NUMCHAR + 1;             # POSITION TO NEXT CHARACTER #
02684  M00S02624.virterm +++|  BIT = BIT + 12;
02685  M00S02625.virterm +++|  IF BIT GQ 60 THEN
02686  M00S02626.virterm +++|    BEGIN                            # IF WORD FULL #
02687  M00S02627.virterm +++|    BIT = 0;                         # POSITION TO NEXT WORD #
02688  M00S02628.virterm +++|    WORD = WORD + 1;
02689  M00S02629.virterm +++|    END
02690  M00S02630.virterm +++|
02691  M00S02631.virterm +++|GOTO VDTSTR1;                        # CONTINUE #
02692  M00S02632.virterm +++|
02693  M00S02633.virterm +++|END  # VDTSTR #
02694  M00S02634.virterm +++|*ENDIF
02695  M00S02635.virterm +++|CONTROL EJECT;
02696  M00S02636.virterm +++|
02697  M00S02637.virterm +++|PROC VDTSTS(TABX);
02698  M00S02638.virterm +++|
02699  M00S02639.virterm +++|# TITLE VDTSTS - SET TAB STOP. #
02700  M00S02640.virterm +++|
02701  M00S02641.virterm +++|IOBEGIN(VDTSTS)
02702  M00S02642.virterm +++|
02703  M00S02643.virterm +++|#
02704  M00S02644.virterm +++|**    VDTSTS - SET TAB STOP.
02705  M00S02645.virterm +++|*
02706  M00S02646.virterm +++|*     THIS PROCEDURE SETS A TAB STOP AT POSITION TABX ON THE
02707  M00S02647.virterm +++|*     CURRENT LINE.
02708  M00S02648.virterm +++|*
02709  M00S02649.virterm +++|*     PROC VDTSTS(TABX)
02710  M00S02650.virterm +++|*
02711  M00S02651.virterm +++|*     ENTRY     TABX       = X COORDINATE FOR TAB STOP.
02712  M00S02652.virterm +++|*
02713  M00S02653.virterm +++|*     EXIT      TAB SET AT POSITION (TABX,VTYCUR).
02714  M00S02654.virterm +++|*
02715  M00S02655.virterm +++|*     CALLS     VDCTRL, VDMOVE.
02716  M00S02656.virterm +++|#
02717  M00S02657.virterm +++|
02718  M00S02658.virterm +++|ITEM TABX       I;                   # X COORDINATE FOR TAB STOP #
02719  M00S02659.virterm +++|
02720  M00S02660.virterm +++|# START OF NON-REENTRANT CODE SEQUENCE #
02721  M00S02661.virterm +++|
02722  M00S02662.virterm +++|IF TABX GR VTXMAX OR TABX LS 0 THEN IORET
02723  M00S02663.virterm +++|
02724  M00S02664.virterm +++|#  END OF NON-REENTRANT CODE SEQUENCE  #
02725  M00S02665.virterm +++|
02726  M00S02666.virterm +++|VDMOVE(TABX,VTYCUR);                 # POSITION CURSOR #
02727  M00S02667.virterm +++|
02728  M00S02668.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE #
02729  M00S02669.virterm +++|
02730  M00S02670.virterm +++|VDCTRL(OUT"SETTABSTOP");             # SET TAB STOP #
02731  M00S02671.virterm +++|
02732  M00S02672.virterm +++|IOEND  # VDTSTS #
02733  M00S02673.virterm +++|*IF DEF,QTRM
02734  M00S02674.virterm +++|CONTROL EJECT;                       # QTRM VDTWTO ROUTINE #
02735  M00S02675.virterm +++|
02736  M00S02676.virterm +++|PROC VDTWTO (A);
02737  M00S02677.virterm +++|
02738  M00S02678.virterm +++|# TITLE - WRITE ONE WORD OF OUTPUT. #
02739  M00S02679.virterm +++|
02740  M00S02680.virterm +++|BEGIN  # VDTWTO #
02741  M00S02681.virterm +++|
02742  M00S02682.virterm +++|#
02743  M00S02683.virterm +++|**    VDTWTO - WRITE ONE WORD OF OUTPUT.
02744  M00S02684.virterm +++|*
02745  M00S02685.virterm +++|*     THIS PROCEDURE WRITES ONE WORD OF OUTPUT FROM BUFFER *A*.
02746  M00S02686.virterm +++|*
02747  M00S02687.virterm +++|*     PROC VDTWTO(A)
02748  M00S02688.virterm +++|*
02749  M00S02689.virterm +++|*     ENTRY     A          = THE BUFFER.
02750  M00S02690.virterm +++|*
02751  M00S02691.virterm +++|*     CALLS     SFNQUE.
02752  M00S02692.virterm +++|#
02753  M00S02693.virterm +++|ARRAY A [0:0] P(1);;                 # WORD OF OUTPUT #
02754  M00S02694.virterm +++|ITEM I          I;                   # DUMMY PARAMETER #
02755  M00S02695.virterm +++|
02756  M00S02696.virterm +++|NIT$CTLC = 5;                        # PUT WORD INTO QUEUE #
02757  M00S02697.virterm +++|SFNQUE("PUT",A,I);
02758  M00S02698.virterm +++|
02759  M00S02699.virterm +++|END  # VDTWTO #
02760  M00S02700.virterm +++|*ENDIF
02761  M00S02701.virterm +++|*IF UNDEF,QTRM
02762  M00S02702.virterm +++|CONTROL EJECT;                       # EDITOR CALLABLE ONLY #
02763  M00S02703.virterm +++|
02764  M00S02704.virterm +++|PROC VDSYNCH;
02765  M00S02705.virterm +++|
02766  M00S02706.virterm +++|# TITLE VDSYNCH - INSURE FLUSH OF ONE WORD ACCUMULATOR. #
02767  M00S02707.virterm +++|
02768  M00S02708.virterm +++|IOBEGIN(VDSYNCH)
02769  M00S02709.virterm +++|
02770  M00S02710.virterm +++|#
02771  M00S02711.virterm +++|**    VDSYNCH - INSURE FLUSH OF ONE WORD ACCUMULATOR.
02772  M00S02712.virterm +++|*
02773  M00S02713.virterm +++|*     THIS PROCEDURE FLUSHES PARTIAL WORDS OF OUTPUT AND INITIALIZES
02774  M00S02714.virterm +++|*     THE ACCUMULATOR WORD AND POINTER.
02775  M00S02715.virterm +++|*
02776  M00S02716.virterm +++|*     PROC VDSYNCH
02777  M00S02717.virterm +++|*
02778  M00S02718.virterm +++|*     ENTRY     VTOUTNEXT  = ACCUMULATOR BIT POSITION.
02779  M00S02719.virterm +++|*               VTOUTDATA  = ACCUMULATOR WORD.
02780  M00S02720.virterm +++|*
02781  M00S02721.virterm +++|*     EXIT      VTOUTDATA  = TRANSPARENT OUTPUT WORD.
02782  M00S02722.virterm +++|*               VTOUTNEXT  = 12.
02783  M00S02723.virterm +++|*
02784  M00S02724.virterm +++|*     CALLS     VDTWTO.
02785  M00S02725.virterm +++|*
02786  M00S02726.virterm +++|*     USES      VTOUTDATA, VTOUTNEXT.
02787  M00S02727.virterm +++|#
02788  M00S02728.virterm +++|
02789  M00S02729.virterm +++|IF VTOUTNEXT NQ 0 AND VTOUTDATA NQ XPARENTOUT THEN
02790  M00S02730.virterm +++|  BEGIN                              # IF NOT EMPTY ACCUMULATOR #
02791  M00S02731.virterm +++|  VDTWTO(VTOUTDATA);                 # FLUSH ACCUMULATOR WORD #
02792  M00S02732.virterm +++|  END
02793  M00S02733.virterm +++|VTOUTDATA = XPARENTOUT;              # ASSURE XPARENT OUTPUT #
02794  M00S02734.virterm +++|VTOUTNEXT = 12;                      # SET BIT POSITION #
02795  M00S02735.virterm +++|
02796  M00S02736.virterm +++|IOEND  # VDSYNCH #
02797  M00S02737.virterm +++|*ELSE
02798  M00S02738.virterm +++|CONTROL EJECT;                       # QTRM VERSION OF VDSYNCH #
02799  M00S02739.virterm +++|
02800  M00S02740.virterm +++|PROC VDSYNCH;
02801  M00S02741.virterm +++|
02802  M00S02742.virterm +++|# TITLE VDSYNCH - INSURE FLUSH OF ONE WORD ACCUMULATOR. #
02803  M00S02743.virterm +++|
02804  M00S02744.virterm +++|BEGIN  # VDSYNCH #
02805  M00S02745.virterm +++|
02806  M00S02746.virterm +++|#
02807  M00S02747.virterm +++|**    VDSYNCH - INSURE FLUSH OF ONE WORD ACCUMULATOR.
02808  M00S02748.virterm +++|*
02809  M00S02749.virterm +++|*     THIS PROCEDURE FLUSHES PARTIAL WORDS OF OUPUT FOR QTRM.
02810  M00S02750.virterm +++|*
02811  M00S02751.virterm +++|*     PROC VDSYNCH
02812  M00S02752.virterm +++|*
02813  M00S02753.virterm +++|*     ENTRY     VTOUTNEXT  = ACCUMULATOR BIT POSITION.
02814  M00S02754.virterm +++|*               VTOUTDATA  = ACCUMULATOR WORD.
02815  M00S02755.virterm +++|*
02816  M00S02756.virterm +++|*     EXIT      VTOUTNEXT  = 0.
02817  M00S02757.virterm +++|*               VTOUTDATA  = 0.
02818  M00S02758.virterm +++|*
02819  M00S02759.virterm +++|*     CALLS     SFNQUE.
02820  M00S02760.virterm +++|#
02821  M00S02761.virterm +++|ITEM I         I;                    # DUMMY PARAMETER #
02822  M00S02762.virterm +++|
02823  M00S02763.virterm +++|IF VTOUTNEXT NQ 0 THEN
02824  M00S02764.virterm +++|  BEGIN                              # IF DATA TO ENQUEUE #
02825  M00S02765.virterm +++|  NIT$CTLC = VTOUTNEXT / 12;         # ENQUEUE DATA #
02826  M00S02766.virterm +++|  SFNQUE("PUT",VTOUTDATA,I);
02827  M00S02767.virterm +++|  VTOUTDATA = 0;                     # CLEAR ACCUMULATOR #
02828  M00S02768.virterm +++|  VTOUTNEXT = 0;                     # SET BIT POSITION #
02829  M00S02769.virterm +++|  END
02830  M00S02770.virterm +++|
02831  M00S02771.virterm +++|END  # VDSYNCH #
02832  M00S02772.virterm +++|*ENDIF
02833  M00S02773.virterm +++|CONTROL EJECT;                       # INTERNAL (VIRTERM) PROCEDURES #
02834  M00S02774.virterm +++|
02835  M00S02775.virterm +++|PROC VDCTRL(ORDINAL);
02836  M00S02776.virterm +++|
02837  M00S02777.virterm +++|# TITLE VDCTRL - ISSUE AN OUTPUT CONTROL SEQUENCE BY ORDINAL. #
02838  M00S02778.virterm +++|
02839  M00S02779.virterm +++|IOBEGIN(VDCTRL)
02840  M00S02780.virterm +++|
02841  M00S02781.virterm +++|#
02842  M00S02782.virterm +++|**    VDCTRL - ISSUE AN OUTPUT CONTROL SEQUENCE BY ORDINAL.
02843  M00S02783.virterm +++|*
02844  M00S02784.virterm +++|*     THIS PROCEDURE OUTPUTS 0 TO N CHARACTERS (BY ORDINAL) USING
02845  M00S02785.virterm +++|*     THE ORDINAL AS A POINTER IN THE *TDU* PRODUCED TABLE TO FIND
02846  M00S02786.virterm +++|*     THE CORRECT OUTPUT SEQUENCE FOR THE OUTPUT FUNCTION REQUESTED.
02847  M00S02787.virterm +++|*
02848  M00S02788.virterm +++|*     PROC VDCTRL(ORDINAL)
02849  M00S02789.virterm +++|*
02850  M00S02790.virterm +++|*     ENTRY     ORDINAL    = *TDU* ORDINAL FOR OUTPUT SEQUENCE.
02851  M00S02791.virterm +++|*
02852  M00S02792.virterm +++|*     EXIT      NUMBERBYTE = NUMBER OF BYTES OUTPUT FOR SEQUENCE.
02853  M00S02793.virterm +++|*
Line S02794 Modification History
M01 (Removed by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02854  M01S02794.virte11 ---|*     CALLS     VDGNCP, VDTOUT, VDSYNCH, VDTWRR$.
Line S00001 Modification History
M01 (Added by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02855  M01S00001.virte11 +++|*     CALLS     VDGNCP, VDGNOB, VDTOUT, VDSYNCH, VDTWRR$.
02856  M00S02795.virterm +++|*
02857  M00S02796.virterm +++|*     USES      NUMBERBYTE, VDCHAR, VTCOUNT, VTHOLD, VTI, VTJ.
02858  M00S02797.virterm +++|*
02859  M00S02798.virterm +++|*     NOTES     NUMBERBYTE IS USED BY VARIOUS ROUTINES AFTER VDCTRL
02860  M00S02799.virterm +++|*               IS CALLED TO DETERMINE IF THE FUNCTION IS AVAILABLE.
02861  M00S02800.virterm +++|#
02862  M00S02801.virterm +++|
02863  M00S02802.virterm +++|ITEM ORDINAL    I;                   # ORDINAL #
02864  M00S02803.virterm +++|
02865  M00S02804.virterm +++|ITEM I          I;                   # COUNTER #
02866  M00S02805.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
02867  M00S02806.virterm +++|ITEM RECALL     I = 1;               # RECALL FOR WRITER REQUEST #
02868  M00S02807.virterm +++|ITEM VTPOS      I;                   # BUFFER POSITION #
Line S00002 Modification History
M01 (Added by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02869  M01S00002.virte11 +++|CONTROL FI;                          # END OF IF NOT MULTI USER FSE #
02870  M01S00003.virte11 +++|  CONTROL EJECT;                     # EMBEDDED VDCTRL PROCEDURE #
02871  M01S00004.virte11 +++|
02872  M01S00005.virte11 +++|  PROC VDGNOB;
02873  M01S00006.virte11 +++|
02874  M01S00007.virte11 +++|  # TITLE VDGNOB - GET NEXT OUTPUT BYTE. #
02875  M01S00008.virte11 +++|
02876  M01S00009.virte11 +++|  BEGIN  # VDGNOB #
02877  M01S00010.virte11 +++|
02878  M01S00011.virte11 +++|  #
02879  M01S00012.virte11 +++|  *     VDGNOB - GET NEXT OUTPUT BYTE.
02880  M01S00013.virte11 +++|  *
02881  M01S00014.virte11 +++|  *     THIS PROCEDURE GETS THE NEXT OUTPUT BYTE.
02882  M01S00015.virte11 +++|  *
02883  M01S00016.virte11 +++|  *     EXIT     VTCHAR     = NEXT OUTPUT BYTE.
02884  M01S00017.virte11 +++|  *
02885  M01S00018.virte11 +++|  *     USES     VTCHAR, VTHOLD, VTI, VTJ.
02886  M01S00019.virte11 +++|  #
02887  M01S00020.virte11 +++|
02888  M01S00021.virte11 +++|  VTCOUNT = VTCOUNT - 1;
02889  M01S00022.virte11 +++|  VTI = VTHOLD / 8;
02890  M01S00023.virte11 +++|  VTJ = 7 * (VTHOLD - (VTI * 8));
02891  M01S00024.virte11 +++|  VTCHAR = B<VTJ+4,7>TABFULLWRD[VTI];
02892  M01S00025.virte11 +++|  VTHOLD = VTHOLD + 1;
02893  M01S00026.virte11 +++|
02894  M01S00027.virte11 +++|  END  # VDGNOB #
02895  M01S00028.virte11 +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
02896  M00S02808.virterm +++|  CONTROL EJECT;                     # EMBEDDED VDCTRL PROCEDURE #
02897  M00S02809.virterm +++|
02898  M00S02810.virterm +++|  PROC VDGNCP(VTCUR,VTMAX);
02899  M00S02811.virterm +++|
02900  M00S02812.virterm +++|  # TITLE VDGNCP - GET NEXT CURSOR POSITION. #
02901  M00S02813.virterm +++|
02902  M00S02814.virterm +++|  BEGIN  # VDGNCP #
02903  M00S02815.virterm +++|
02904  M00S02816.virterm +++|  #
02905  M00S02817.virterm +++|  *     VDGNCP - GET NEXT CURSOR POSITION.
02906  M00S02818.virterm +++|  *
02907  M00S02819.virterm +++|  *     THIS PROCEDURE GETS THE NEXT CURSOR POSITION.
02908  M00S02820.virterm +++|  *
02909  M00S02821.virterm +++|  *     ENTRY    VTCUR      = CURRENT CURSOR POSITION.
02910  M00S02822.virterm +++|  *              VTMAX      = MAXIMUM CURSOR POSITION.
02911  M00S02823.virterm +++|  *
02912  M00S02824.virterm +++|  *     EXIT     VTCHAR     = CURSOR COORDINATE.
02913  M00S02825.virterm +++|  *
Line S00029 Modification History
M01 (Added by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02914  M01S00029.virte11 +++|  *     CALLS    VDGNOB.
02915  M01S00030.virte11 +++|  *
02916  M00S02826.virterm +++|  *     USES     VTCHAR, VTHOLD, VTI, VTJ.
02917  M00S02827.virterm +++|  #
02918  M00S02828.virterm +++|
02919  M00S02829.virterm +++|  ITEM VTCUR     I;                  # CURRENT CURSOR POSITION #
02920  M00S02830.virterm +++|  ITEM VTMAX     I;                  # MAXIMUM CURSOR POSITION #
02921  M00S02831.virterm +++|
02922  M00S02832.virterm +++|  IF VTCOUNT NQ 0 THEN
02923  M00S02833.virterm +++|    BEGIN                            # IF SOMETHING TO PROCESS #
Line S02834 Modification History
M01 (Removed by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02924  M01S02834.virte11 ---|    VTCOUNT = VTCOUNT - 1;
02925  M01S02835.virte11 ---|    VTI = VTHOLD / 8;
02926  M01S02836.virte11 ---|    VTJ = 7 * (VTHOLD - (VTI * 8));
02927  M01S02837.virte11 ---|    VTCHAR = B<VTJ+4,7>TABFULLWRD[VTI];
02928  M01S02838.virte11 ---|    VTHOLD = VTHOLD + 1;
Line S00031 Modification History
M01 (Added by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02929  M01S00031.virte11 +++|    VDGNOB;                          # GET NEXT OUTPUT BYTE #
02930  M00S02839.virterm +++|    IF VTCHAR EQ X"7E" THEN
02931  M00S02840.virterm +++|      BEGIN                          # IF USING CURRENT POSITION #
02932  M00S02841.virterm +++|      VTCHAR = VTCUR;
02933  M00S02842.virterm +++|      END
02934  M00S02843.virterm +++|    ELSE
02935  M00S02844.virterm +++|      BEGIN                          # NOT CURRENT POSITION #
02936  M00S02845.virterm +++|      IF VTCHAR EQ X"7F" THEN
02937  M00S02846.virterm +++|        BEGIN                        # IF USING MAXIMUM POSITION #
02938  M00S02847.virterm +++|        VTCHAR = VTMAX;
02939  M00S02848.virterm +++|        END
02940  M00S02849.virterm +++|      END
02941  M00S02850.virterm +++|    END
02942  M00S02851.virterm +++|
02943  M00S02852.virterm +++|  END  # VDGNCP #
02944  M00S02853.virterm +++|CONTROL FI;                          # END OF IF NOT MULTI FSE #
02945  M00S02854.virterm +++|CONTROL EJECT;                       # START OF MAIN CODE FOR VDCTRL #
02946  M00S02855.virterm +++|
02947  M00S02856.virterm +++|VTHOLD = ORDINAL;
02948  M00S02857.virterm +++|
02949  M00S02858.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE #
02950  M00S02859.virterm +++|
02951  M00S02860.virterm +++|NUMBERBYTE = 0;                      # CLEAR NUMBER OF BYTES COUNT #
02952  M00S02861.virterm +++|IF VTHOLD GR OUT"RESERVED" AND VTHOLD LS OUT"LASTOUT" THEN
02953  M00S02862.virterm +++|  BEGIN                              # IF LEGAL OUTPUT ORDINAL #
02954  M00S02863.virterm +++|  VTI = VTHOLD / 5;                  # GET OFFSET FOR ORDINAL #
02955  M00S02864.virterm +++|  VTJ = 12 * (VTHOLD - (VTI * 5));
02956  M00S02865.virterm +++|  VTHOLD = B<VTJ,12>TABFULLWRD[VTI];
02957  M00S02866.virterm +++|  IF VTJ NQ 48 THEN
02958  M00S02867.virterm +++|    BEGIN                            # IF NEXT BYTE IS IN SAME WORD #
02959  M00S02868.virterm +++|    VTCOUNT = B<VTJ+12,12>TABFULLWRD[VTI];
02960  M00S02869.virterm +++|    END
02961  M00S02870.virterm +++|  ELSE
02962  M00S02871.virterm +++|    BEGIN                            # GET BYTE FROM NEXT WORD #
02963  M00S02872.virterm +++|    VTCOUNT = B<0,12>TABFULLWRD[VTI+1];
02964  M00S02873.virterm +++|    END
02965  M00S02874.virterm +++|  VTCOUNT = VTCOUNT - VTHOLD;        # CALCULATE NUMBER OF BYTES #
02966  M00S02875.virterm +++|  NUMBERBYTE = VTCOUNT;              # SAVE NUMBER OF BYTES #
02967  M00S02876.virterm +++|  IF (VTHOLD + VTCOUNT) / 8 LS O"272" THEN
02968  M00S02877.virterm +++|    BEGIN                            # IF WITHIN *TDU* TABLE #
02969  M00S02878.virterm +++|    FOR I = I WHILE VTCOUNT NQ 0 DO
02970  M00S02879.virterm +++|      BEGIN                          # WHILE NOT DONE #
Line S02880 Modification History
M01 (Removed by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02971  M01S02880.virte11 ---|      VTCOUNT = VTCOUNT - 1;
02972  M01S02881.virte11 ---|      VTI = VTHOLD / 8;              # GET OUTPUT BYTE #
02973  M01S02882.virte11 ---|      VTJ = 7 * (VTHOLD - (VTI * 8));
02974  M01S02883.virte11 ---|      VTCHAR = B<VTJ+4,7>TABFULLWRD[VTI];
02975  M01S02884.virte11 ---|      VTHOLD = VTHOLD + 1;
Line S00032 Modification History
M01 (Added by) virte11
Seq #  *Modification Id* Act 
----------------------------+
02976  M01S00032.virte11 +++|      VDGNOB;                        # GET NEXT OUTPUT BYTE #
02977  M00S02885.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
02978  M00S02886.virterm +++|  CONTROL IFEQ QTRMV,0;              # IF NOT QTRM VARIANT #
02979  M00S02887.virterm +++|      IF TABLOCKMDE[0] AND (VTCHAR EQ X"11") THEN
02980  M00S02888.virterm +++|        BEGIN                        # IF BLOCK MODE SBA #
02981  M00S02889.virterm +++|
02982  M00S02890.virterm +++|        CONTROL IFEQ EDITORVDT,0;    # IF NOT EDITOR VIRTERM #
02983  M00S02891.virterm +++|          P<TTYO> = LISTFETPTR;      # SET BASED ARRAY ADDRESS #
02984  M00S02892.virterm +++|        CONTROL FI;                  # END OF NOT EDITOR VIRTERM #
02985  M00S02893.virterm +++|
02986  M00S02894.virterm +++|        VTI = TTYOIN - TTYOOT;
02987  M00S02895.virterm +++|        IF VTI LS 0 THEN
02988  M00S02896.virterm +++|          BEGIN                      # IF *CIRCULAR* INPUT/OUTPUT #
02989  M00S02897.virterm +++|          VTI = VTI + (TTYOLM - TTYOFT);
02990  M00S02898.virterm +++|          END
02991  M00S02899.virterm +++|
02992  M00S02900.virterm +++|        IF VTI GR O"144" THEN
02993  M00S02901.virterm +++|          BEGIN                      # IF NEAR *1MI* BREAK THRESHOLD #
02994  M00S02902.virterm +++|          VDSYNCH;                   # FLUSH BUFFER #
02995  M00S02903.virterm +++|*IF DEF,DEBUG
02996  M00S02904.virterm +++|          VDTDMP$;                   # DUMP BUFFER FOR DEBUG #
02997  M00S02905.virterm +++|*ENDIF
02998  M00S02906.virterm +++|          VDTWRR$(TTYO,RECALL);      # FLUSH BUFFER #
02999  M00S02907.virterm +++|          VTOUTDATA = O"0007 4061 4103 0000 0000";
03000  M00S02908.virterm +++|          VTOUTNEXT = 36;
03001  M00S02909.virterm +++|          END
03002  M00S02910.virterm +++|        END
03003  M00S02911.virterm +++|  CONTROL FI;                        # END OF NOT QTRM VIRTERM #
03004  M00S02912.virterm +++|CONTROL FI;                          # END OF IF NOT MULTI FSE #
03005  M00S02913.virterm +++|      VDTOUT(VTCHAR);                # OUTPUT BYTE #
03006  M00S02914.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
03007  M00S02915.virterm +++|      IF TABLOCKMDE[0] THEN
03008  M00S02916.virterm +++|        BEGIN                        # IF BLOCK MODE TERMINAL #
03009  M00S02917.virterm +++|        IF VTCHAR EQ X"11" OR VTCHAR EQ X"12" OR VTCHAR EQ X"14" THEN
03010  M00S02918.virterm +++|          BEGIN                      # IF SBA, RA OR EUA ORDER #
03011  M00S02919.virterm +++|          VDGNCP(VTYCUR,VTYMAX+1);   # GET ROW COORDINATE #
03012  M00S02920.virterm +++|          VTPOS = VTCHAR * (VTXMAX + 1);
03013  M00S02921.virterm +++|          VDGNCP(VTXCUR,VTXMAX);     # GET COLUMN COORDINATE #
03014  M00S02922.virterm +++|          VTPOS = VTPOS + VTCHAR;
03015  M00S02923.virterm +++|          VDTOUT(RTA3270[B<48,6>VTPOS]);  # OUTPUT BYTE 1 OF ADDRESS #
03016  M00S02924.virterm +++|          VDTOUT(RTA3270[B<54,6>VTPOS]);  # OUTPUT BYTE 2 OF ADDRESS #
03017  M00S02925.virterm +++|          END
Line S00033 Modification History
M01 (Added by) virte11
Seq #  *Modification Id* Act 
----------------------------+
03018  M01S00033.virte11 +++|        ELSE IF VTCHAR EQ X"1D" THEN
03019  M01S00034.virte11 +++|          BEGIN                      # IF START FIELD #
03020  M01S00035.virte11 +++|          VTCHAR = 0;
03021  M01S00036.virte11 +++|          IF VTCOUNT NQ 0 THEN
03022  M01S00037.virte11 +++|            VDGNOB;                  # GET NEXT OUTPUT BYTE #
03023  M01S00038.virte11 +++|          IF ATTGUARDMD[0] THEN
03024  M01S00039.virte11 +++|            BEGIN                    # IF GUARD MODE #
03025  M01S00040.virte11 +++|            VTCHAR = X"3C";          # ASSUME UNPROTECTED #
03026  M01S00041.virte11 +++|            END
03027  M01S00042.virte11 +++|          ELSE
03028  M01S00043.virte11 +++|            BEGIN                    # IF UNGUARDED FIELD #
03029  M01S00044.virte11 +++|            IF VTCHAR EQ X"38" THEN
03030  M01S00045.virte11 +++|              BEGIN                  # IF HIGHLIGHTED FIELD #
03031  M01S00046.virte11 +++|              IF NOT ATTPROTECT[0] THEN VTCHAR = VTCHAR + X"10";
03032  M01S00047.virte11 +++|              END
03033  M01S00048.virte11 +++|            ELSE
03034  M01S00049.virte11 +++|              BEGIN
03035  M01S00050.virte11 +++|              VTCHAR = X"44";        # ASSUME UNPROTECTED AND NORMAL #
03036  M01S00051.virte11 +++|              IF ATTPROTECT[0] THEN VTCHAR = VTCHAR - X"10";
03037  M01S00052.virte11 +++|              END
03038  M01S00053.virte11 +++|            END
03039  M01S00054.virte11 +++|          VDTOUT(VTCHAR);            # OUTPUT FIELD ATTRIBUTE #
03040  M01S00055.virte11 +++|          END
03041  M00S02926.virterm +++|        END
03042  M00S02927.virterm +++|CONTROL FI;                          # END OF IF NOT MULTI FSE #
03043  M00S02928.virterm +++|      END
03044  M00S02929.virterm +++|    END
03045  M00S02930.virterm +++|  END
03046  M00S02931.virterm +++|
03047  M00S02932.virterm +++|IOEND  # VDCTRL #
03048  M00S02933.virterm +++|CONTROL EJECT;
03049  M00S02934.virterm +++|
03050  M00S02935.virterm +++|CONTROL IFEQ SINGLE,1;
03051  M00S02936.virterm +++|PROC VDGETW(WORD,STAT);
03052  M00S02937.virterm +++|
03053  M00S02938.virterm +++|# TITLE VDGETW - GET WORD FROM *TDU* TABLE. #
03054  M00S02939.virterm +++|
03055  M00S02940.virterm +++|BEGIN  # VDGETW #
03056  M00S02941.virterm +++|
03057  M00S02942.virterm +++|#
03058  M00S02943.virterm +++|**    VDGETW - GET WORD FROM *TDU* TABLE.
03059  M00S02944.virterm +++|*
03060  M00S02945.virterm +++|*     THIS PROCEDURE GETS THE NEXT WORD FROM THE *TDU* TABLE FOR
03061  M00S02946.virterm +++|*     EITHER A RESIDENT OR A NON-RESIDENT TABLE.
03062  M00S02947.virterm +++|*
03063  M00S02948.virterm +++|*     PROC VDGETW(WORD,STAT)
03064  M00S02949.virterm +++|*
03065  M00S02950.virterm +++|*     ENTRY     TDUINDEX   = WORD COUNT READ SO FAR OF *TDU* TABLE.
03066  M00S02951.virterm +++|*               TDURESID   = RESIDENT *TDU* TABLE FLAG.
03067  M00S02952.virterm +++|*
03068  M00S02953.virterm +++|*     EXIT      WORD       = THE NEXT WORD FROM THE *TDU* TABLE.
03069  M00S02954.virterm +++|*               STAT       = 0, IF NO ERROR.
03070  M00S02955.virterm +++|*
03071  M00S02956.virterm +++|*     CALLS     VDTREO$.
03072  M00S02957.virterm +++|*
03073  M00S02958.virterm +++|*     USES      TDUINDEX.
03074  M00S02959.virterm +++|#
03075  M00S02960.virterm +++|
03076  M00S02961.virterm +++|ITEM STAT       I;                   # STATUS RETURNED #
03077  M00S02962.virterm +++|ITEM WORD       U;                   # WORD FROM *TDU* TABLE #
03078  M00S02963.virterm +++|
03079  M00S02964.virterm +++|STAT = 0;
03080  M00S02965.virterm +++|IF TDURESID[0] THEN
03081  M00S02966.virterm +++|  BEGIN                              # IF RESIDENT *TDU* TABLE #
03082  M00S02967.virterm +++|  WORD = TEMPWORD[TDUINDEX[0]];      # GET WORD FROM MEMORY #
03083  M00S02968.virterm +++|  END
03084  M00S02969.virterm +++|ELSE
03085  M00S02970.virterm +++|  BEGIN                              # IF NON-RESIDENT *TDU* TABLE #
03086  M00S02971.virterm +++|  VDTREO$(TDUFET,WORD,STAT);         # READ WORD FROM CIO BUFFER #
03087  M00S02972.virterm +++|  END
03088  M00S02973.virterm +++|TDUINDEX[0] = TDUINDEX[0] + 1;       # UPDATE COUNT #
03089  M00S02974.virterm +++|
03090  M00S02975.virterm +++|END  # VDGETW #
03091  M00S02976.virterm +++|CONTROL FI;
03092  M00S02977.virterm +++|CONTROL EJECT;
03093  M00S02978.virterm +++|
03094  M00S02979.virterm +++|PROC VDMOVE(XX,YY);
03095  M00S02980.virterm +++|
03096  M00S02981.virterm +++|# TITLE VDMOVE - CURSOR MOVEMENT. #
03097  M00S02982.virterm +++|
03098  M00S02983.virterm +++|IOBEGIN(VDMOVE)
03099  M00S02984.virterm +++|
03100  M00S02985.virterm +++|#
03101  M00S02986.virterm +++|**    VDMOVE - CURSOR MOVEMENT.
03102  M00S02987.virterm +++|*
03103  M00S02988.virterm +++|*     THIS PROCEDURE PROVIDES CURSOR POSITIONING.
03104  M00S02989.virterm +++|*
03105  M00S02990.virterm +++|*     PROC VDMOVE(XX,YY)
03106  M00S02991.virterm +++|*
03107  M00S02992.virterm +++|*     ENTRY     XX          = DESIRED X COORDINATE.
03108  M00S02993.virterm +++|*               YY          = DESIRED Y COORDINATE.
03109  M00S02994.virterm +++|*
03110  M00S02995.virterm +++|*     EXIT      VTXCUR      = XX.
03111  M00S02996.virterm +++|*               VTYCUR      = YY.
03112  M00S02997.virterm +++|*
03113  M00S02998.virterm +++|*     CALLS     VDCTRL.
03114  M00S02999.virterm +++|*
03115  M00S03000.virterm +++|*     USES      VTXCUR, VTYCUR.
03116  M00S03001.virterm +++|#
03117  M00S03002.virterm +++|
03118  M00S03003.virterm +++|ITEM XX         I;                   # COLUMN POSITION #
03119  M00S03004.virterm +++|ITEM YY         I;                   # LINE POSITION #
03120  M00S03005.virterm +++|
03121  M00S03006.virterm +++|SWITCH CURADDRTYP                    # CURSOR ADDRESSING TYPE #
03122  M00S03007.virterm +++|  NONE,                              # UNDEFINED #
03123  M00S03008.virterm +++|  BINARY,                            # BINARY #
03124  M00S03009.virterm +++|  CDC721,                            # CDC 721 #
03125  M00S03010.virterm +++|  ANSI,                              # ANSI #
Line S03011 Modification History
M01 (Removed by) ns2665
Seq #  *Modification Id* Act 
----------------------------+
03126  M01S03011.ns2665  ---|  IBM3270;                           # 3270 #
Line S00005 Modification History
M01 (Added by) ns2665
Seq #  *Modification Id* Act 
----------------------------+
03127  M01S00005.ns2665  +++|  IBM3270,                           # 3270 #
03128  M01S00006.ns2665  +++|  IBM3151;                           # 3151 #
03129  M00S03012.virterm +++|
03130  M00S03013.virterm +++|VTXCUR = XX;
03131  M00S03014.virterm +++|VTYCUR = YY;
03132  M00S03015.virterm +++|
03133  M00S03016.virterm +++|#  END OF NON-REENTRANT PARAMETER USAGE  #
03134  M00S03017.virterm +++|
03135  M00S03018.virterm +++|VDCTRL(OUT"CURSORSTR");              # ISSUE CURSOR START SEQUENCE #
03136  M00S03019.virterm +++|
03137  M00S03020.virterm +++|GOTO CURADDRTYP[TABCURADDT[0]];      # PROCESS ADDRESSING BY TYPE #
03138  M00S03021.virterm +++|
03139  M00S03022.virterm +++|BINARY:                              # BINARY TYPE ADDRESSING #
03140  M00S03023.virterm +++|
03141  M00S03024.virterm +++|  IF TABXFIRSTY[0] THEN
03142  M00S03025.virterm +++|    BEGIN                            # IF X COORDINATE FIRST #
03143  M00S03026.virterm +++|    VDTOUT(VTXCUR+TABCURBIAS[0]);    # X COORDINATE #
03144  M00S03027.virterm +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03145  M00S03028.virterm +++|    VDTOUT(VTYCUR+TABCURBIAS[0]);    # Y COORDINATE #
Line S03029 Modification History
M01 (Removed by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03146  M01S03029.ns2662  ---|    VDCTRL(OUT"CURSORTHR");          # ISSUE THIRD CURSOR SEQUENCE #
03147  M00S03030.virterm +++|    END
03148  M00S03031.virterm +++|  ELSE
03149  M00S03032.virterm +++|    BEGIN                            # Y COORDINATE FIRST #
03150  M00S03033.virterm +++|    VDTOUT(VTYCUR+TABCURBIAS[0]);    # Y COORDINATE #
03151  M00S03034.virterm +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03152  M00S03035.virterm +++|    VDTOUT(VTXCUR+TABCURBIAS[0]);    # X COORDINATE #
Line S03036 Modification History
M01 (Removed by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03153  M01S03036.ns2662  ---|    VDCTRL(OUT"CURSORTHR");          # ISSUE THIRD CURSOR SEQUENCE #
03154  M00S03037.virterm +++|    END
Line S00001 Modification History
M01 (Added by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03155  M01S00001.ns2662  +++|  VDCTRL(OUT"CURSORTHR");            # ISSUE THIRD CURSOR SEQUENCE #
03156  M00S03038.virterm +++|
03157  M00S03039.virterm +++|  GOTO ENDADDRTYP;
03158  M00S03040.virterm +++|
03159  M00S03041.virterm +++|CDC721:                              # CDC 721 TYPE ADDRESSING #
03160  M00S03042.virterm +++|
Line S00002 Modification History
M01 (Added by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03161  M01S00002.ns2662  +++|  IF NOT TABXFIRSTY[0] THEN
03162  M01S00003.ns2662  +++|    VDTOUT(VTYCUR+TABCURBIAS[0]);    # IF ROW FIRST, Y COORDINATE #
03163  M00S03043.virterm +++|  IF VTXCUR LS 80 THEN
03164  M00S03044.virterm +++|    BEGIN                            # IF CHARACTER POSITION 0 - 79 #
03165  M00S03045.virterm +++|    VDTOUT(VTXCUR+TABCURBIAS[0]);    # X COORDINATE #
03166  M00S03046.virterm +++|    END
03167  M00S03047.virterm +++|  ELSE
03168  M00S03048.virterm +++|    BEGIN                            # IF CHARACTER POSITION PAST 79 #
03169  M00S03049.virterm +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03170  M00S03050.virterm +++|    VDTOUT(VTXCUR+TABCURBIAS[0]-80);  # X COORDINATE #
03171  M00S03051.virterm +++|    END
Line S03052 Modification History
M01 (Removed by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03172  M01S03052.ns2662  ---|  VDTOUT(VTYCUR+TABCURBIAS[0]);      # Y COORDINATE #
Line S00004 Modification History
M01 (Added by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03173  M01S00004.ns2662  +++|  IF TABXFIRSTY[0] THEN
03174  M01S00005.ns2662  +++|    VDTOUT(VTYCUR+TABCURBIAS[0]);    # IF COLUMN FIRST, Y COORDINATE #
03175  M01S00006.ns2662  +++|  VDCTRL(OUT"CURSORTHR");            # ISSUE THIRD CURSOR SEQUENCE #
03176  M00S03053.virterm +++|
03177  M00S03054.virterm +++|  GOTO ENDADDRTYP;
03178  M00S03055.virterm +++|
03179  M00S03056.virterm +++|ANSI:                                # ANSI TYPE ADDRESSING #
03180  M00S03057.virterm +++|
03181  M00S03058.virterm +++|  IF TABXFIRSTY[0] THEN
03182  M00S03059.virterm +++|    BEGIN                            # IF X COORDINATE FIRST #
03183  M00S03060.virterm +++|    VDNUMC(VTXCUR+TABCURBIAS[0]+1,TABXDECIML[0]);  # X COORDINATE #
03184  M00S03061.virterm +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03185  M00S03062.virterm +++|    VDNUMC(VTYCUR+TABCURBIAS[0]+1,TABYDECIML[0]);  # Y COORDINATE #
Line S03063 Modification History
M01 (Removed by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03186  M01S03063.ns2662  ---|    VDCTRL(OUT"CURSORTHR");          # ISSUE THIRD CURSOR SEQUENCE #
03187  M00S03064.virterm +++|    END
03188  M00S03065.virterm +++|  ELSE
03189  M00S03066.virterm +++|    BEGIN                            # Y COORDINATE FIRST #
03190  M00S03067.virterm +++|    VDNUMC(VTYCUR+TABCURBIAS[0]+1,TABYDECIML[0]);  # Y COORDINATE #
03191  M00S03068.virterm +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03192  M00S03069.virterm +++|    VDNUMC(VTXCUR+TABCURBIAS[0]+1,TABXDECIML[0]);  # X COORDINATE #
Line S03070 Modification History
M01 (Removed by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03193  M01S03070.ns2662  ---|    VDCTRL(OUT"CURSORTHR");          # ISSUE THIRD CURSOR SEQUENCE #
03194  M00S03071.virterm +++|    END
Line S00007 Modification History
M01 (Added by) ns2662
Seq #  *Modification Id* Act 
----------------------------+
03195  M01S00007.ns2662  +++|  VDCTRL(OUT"CURSORTHR");            # ISSUE THIRD CURSOR SEQUENCE #
03196  M00S03072.virterm +++|
03197  M00S03073.virterm +++|  GOTO ENDADDRTYP;
03198  M00S03074.virterm +++|
03199  M00S03075.virterm +++|IBM3270:
03200  M00S03076.virterm +++|
03201  M00S03077.virterm +++|  GOTO ENDADDRTYP;
03202  M00S03078.virterm +++|
Line S00007 Modification History
M01 (Added by) ns2665
Seq #  *Modification Id* Act 
----------------------------+
03203  M01S00007.ns2665  +++|IBM3151:
03204  M01S00008.ns2665  +++|
03205  M01S00009.ns2665  +++|  IF TABXFIRSTY[0] THEN
03206  M01S00010.ns2665  +++|    BEGIN                            # IF X COORDINATE FIRST #
03207  M01S00011.ns2665  +++|    VTHOLD = VTXCUR/32;
03208  M01S00012.ns2665  +++|    VDTOUT(VTHOLD+TABCURBIAS[0]);    # X COORDINATE #
03209  M01S00013.ns2665  +++|    VDTOUT(VTXCUR-VTHOLD*32+TABCURBIAS[0]);
03210  M01S00014.ns2665  +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03211  M01S00015.ns2665  +++|    VTHOLD = VTYCUR/32;
03212  M01S00016.ns2665  +++|    VDTOUT(VTHOLD+TABCURBIAS[0]);    # Y COORDINATE #
03213  M01S00017.ns2665  +++|    VDTOUT(VTYCUR-VTHOLD*32+TABCURBIAS[0]+32);
03214  M01S00018.ns2665  +++|    END
03215  M01S00019.ns2665  +++|  ELSE
03216  M01S00020.ns2665  +++|    BEGIN                            # Y COORDINATE FIRST #
03217  M01S00021.ns2665  +++|    VTHOLD = VTYCUR/32;
03218  M01S00022.ns2665  +++|    VDTOUT(VTHOLD+TABCURBIAS[0]);    # Y COORDINATE #
03219  M01S00023.ns2665  +++|    VDTOUT(VTYCUR-VTHOLD*32+TABCURBIAS[0]);
03220  M01S00024.ns2665  +++|    VDCTRL(OUT"CURSORSEC");          # ISSUE SECOND CURSOR SEQUENCE #
03221  M01S00025.ns2665  +++|    VTHOLD = VTXCUR/32;
03222  M01S00026.ns2665  +++|    VDTOUT(VTHOLD+TABCURBIAS[0]);    # X COORDINATE #
03223  M01S00027.ns2665  +++|    VDTOUT(VTXCUR-VTHOLD*32+TABCURBIAS[0]+32);
03224  M01S00028.ns2665  +++|    END
03225  M01S00029.ns2665  +++|  VDCTRL(OUT"CURSORTHR");            # ISSUE THIRD CURSOR SEQUENCE #
03226  M01S00030.ns2665  +++|
03227  M01S00031.ns2665  +++|  GOTO ENDADDRTYP;
03228  M01S00032.ns2665  +++|
03229  M00S03079.virterm +++|NONE:                                # UNDEFINED #
03230  M00S03080.virterm +++|
03231  M00S03081.virterm +++|ENDADDRTYP:                          # END OF ADDRESS TYPE PROCESSING #
03232  M00S03082.virterm +++|
03233  M00S03083.virterm +++|IOEND  # VDMOVE #
03234  M00S03084.virterm +++|CONTROL EJECT;
03235  M00S03085.virterm +++|
03236  M00S03086.virterm +++|PROC VDNUMC(NUM,COUNT);
03237  M00S03087.virterm +++|
03238  M00S03088.virterm +++|# TITLE VDNUMC - NUMBER CONVERSION. #
03239  M00S03089.virterm +++|
03240  M00S03090.virterm +++|IOBEGIN(VDNUMC)
03241  M00S03091.virterm +++|
03242  M00S03092.virterm +++|#
03243  M00S03093.virterm +++|**    VDNUMC - NUMBER CONVERSION.
03244  M00S03094.virterm +++|*
03245  M00S03095.virterm +++|*     THIS PROCEDURE PROVIDES FOR A BINARY NUMBER TO BE CONVERTED
03246  M00S03096.virterm +++|*     TO DECIMAL AND THEN OUTPUT TO ALLOW ANSI X3.64 POSITIONING.
03247  M00S03097.virterm +++|*
03248  M00S03098.virterm +++|*     PROC VDNUMC(NUM,COUNT)
03249  M00S03099.virterm +++|*
03250  M00S03100.virterm +++|*     ENTRY     NUM        = BINARY NUMBER TO BE CONVERTED AND OUTPUT.
03251  M00S03101.virterm +++|*               COUNT      = MINIMUM NUMBER OF CHARACTERS TO OUTPUT.
03252  M00S03102.virterm +++|*
03253  M00S03103.virterm +++|*     CALLS     VDTOUT.
03254  M00S03104.virterm +++|*
03255  M00S03105.virterm +++|*     USES      VTCHARS, VTCOUNT, VTHOLD, VTI.
03256  M00S03106.virterm +++|#
03257  M00S03107.virterm +++|
03258  M00S03108.virterm +++|ITEM NUM        I;                   # BINARY SCREEN COORDINATE #
03259  M00S03109.virterm +++|ITEM COUNT      I;                   # MINIMUM NUMBER OF DIGITS #
03260  M00S03110.virterm +++|
03261  M00S03111.virterm +++|ITEM DB         I;                   # INDUCTION VARIABLE #
03262  M00S03112.virterm +++|
03263  M00S03113.virterm +++|VTI = COUNT - 2;                     # MINIMUM CHARACTER COUNT #
03264  M00S03114.virterm +++|VTCOUNT = - 1;                       # ACTUAL DIGIT COUNTER #
03265  M00S03115.virterm +++|VTHOLD = NUM;                        # SCREEN COORDINATE #
03266  M00S03116.virterm +++|
03267  M00S03117.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE #
03268  M00S03118.virterm +++|
03269  M00S03119.virterm +++|# START OF NON-REENTRANT CODE SEQUENCE #
03270  M00S03120.virterm +++|
03271  M00S03121.virterm +++|FOR DB = DB WHILE VTHOLD GQ 10 DO
03272  M00S03122.virterm +++|  BEGIN
03273  M00S03123.virterm +++|  VTCOUNT = VTCOUNT + 1;             # INCREMENT DIGIT COUNTER #
03274  M00S03124.virterm +++|  C<VTCOUNT>VTCHARS = (VTHOLD - ((VTHOLD/10) * 10));
03275  M00S03125.virterm +++|  VTHOLD = VTHOLD / 10;              # REDUCE BY FACTOR OF TEN #
03276  M00S03126.virterm +++|  VTI = VTI - 1;                     # DECREMENT MINIMUM COUNT #
03277  M00S03127.virterm +++|  END
03278  M00S03128.virterm +++|
03279  M00S03129.virterm +++|# END OF NON-REENTRANT CODE SEQUENCE #
03280  M00S03130.virterm +++|
03281  M00S03131.virterm +++|FOR VTI = VTI STEP - 1 UNTIL 0 DO
03282  M00S03132.virterm +++|  BEGIN                              # ZERO PAD AS NECESSARY #
03283  M00S03133.virterm +++|  VDTOUT(X"30");                     # OUTPUT ZERO CHARACTER #
03284  M00S03134.virterm +++|  END
03285  M00S03135.virterm +++|
03286  M00S03136.virterm +++|VDTOUT(VTHOLD+X"30");                # FIRST (NON-ZERO) DIGIT #
03287  M00S03137.virterm +++|FOR VTCOUNT = VTCOUNT STEP - 1 UNTIL 0 DO
03288  M00S03138.virterm +++|  BEGIN                              # OUTPUT REST OF DIGITS #
03289  M00S03139.virterm +++|  VTHOLD = C<VTCOUNT>VTCHARS;
03290  M00S03140.virterm +++|  VDTOUT(VTHOLD+X"30");
03291  M00S03141.virterm +++|  END
03292  M00S03142.virterm +++|
03293  M00S03143.virterm +++|IOEND  # VDNUMC #
03294  M00S03144.virterm +++|CONTROL EJECT;
03295  M00S03145.virterm +++|
03296  M00S03146.virterm +++|PROC VDNXTI;
03297  M00S03147.virterm +++|
03298  M00S03148.virterm +++|# TITLE VDNXTI - FETCH NEXT INPUT BYTE FROM BUFFER/ACCUMULATOR. #
03299  M00S03149.virterm +++|
03300  M00S03150.virterm +++|IOBEGIN(VDNXTI)
03301  M00S03151.virterm +++|
03302  M00S03152.virterm +++|#
03303  M00S03153.virterm +++|**    VDNXTI - FETCH NEXT INPUT BYTE FROM BUFFER/ACCUMULATOR.
03304  M00S03154.virterm +++|*
03305  M00S03155.virterm +++|*     THIS PROCEDURE GETS THE NEXT INPUT CHARACTER.
03306  M00S03156.virterm +++|*
03307  M00S03157.virterm +++|*     PROC VDNXTI
03308  M00S03158.virterm +++|*
03309  M00S03159.virterm +++|*     ENTRY     VTINPDATA  = ONE WORD INPUT DE-ACCUMULATOR.
03310  M00S03160.virterm +++|*               VTINPNEXT  = CURRENT BIT POSITION IN VTINPDATA.
03311  M00S03161.virterm +++|*
03312  M00S03162.virterm +++|*     EXIT      VTINPNEXT  = INCREMENTED OR RECIRCULATED.
03313  M00S03163.virterm +++|*               VTINPDATA  = POSSIBLE NEW WORD OF TEXT.
03314  M00S03164.virterm +++|*               VTCHAR     = DATA BYTE FETCHED.
03315  M00S03165.virterm +++|*
03316  M00S03166.virterm +++|*     CALLS     VDTRDO.
03317  M00S03167.virterm +++|*
03318  M00S03168.virterm +++|*     USES      VTINPDATA, VTINPNEXT.
03319  M00S03169.virterm +++|#
03320  M00S03170.virterm +++|
03321  M00S03171.virterm +++|IF VTINPNEXT EQ 60 THEN
03322  M00S03172.virterm +++|  BEGIN                              # IF EMPTY WORD #
03323  M00S03173.virterm +++|*IF UNDEF,QTRM
03324  M00S03174.virterm +++|  VDTRDO(VTINPDATA);                 # GET NEXT WORD #
03325  M00S03175.virterm +++|*ELSE
03326  M00S03176.virterm +++|  VTINPDATA = QTRM$WD0[VTINPWORD];   # GET NEXT WORD FROM QUEUE #
03327  M00S03177.virterm +++|  VTINPWORD = VTINPWORD + 1;
03328  M00S03178.virterm +++|*ENDIF
03329  M00S03179.virterm +++|  VTINPNEXT = 0;                     # RESET BIT POSITION #
03330  M00S03180.virterm +++|  END
03331  M00S03181.virterm +++|VTCHAR = B<VTINPNEXT,12>VTINPDATA;   # GET NEXT CHARACTER #
03332  M00S03182.virterm +++|VTCHAR = B<53,7>VTCHAR;              # RIGHT JUSTIFY CHARACTER #
03333  M00S03183.virterm +++|VTINPNEXT = VTINPNEXT + 12;          # INCREMENT BIT POSITION #
03334  M00S03184.virterm +++|
03335  M00S03185.virterm +++|IOEND  # VDNXTI #
03336  M00S03186.virterm +++|CONTROL EJECT;                       # INPUT PROCESSING #
03337  M00S03187.virterm +++|
03338  M00S03188.virterm +++|PROC VDTIINP;
03339  M00S03189.virterm +++|
03340  M00S03190.virterm +++|# TITLE VDTIINP - IDENTIFY NEXT VIRTUAL INPUT EVENT. #
03341  M00S03191.virterm +++|
03342  M00S03192.virterm +++|IOBEGIN(VDTIINP)
03343  M00S03193.virterm +++|
03344  M00S03194.virterm +++|#
03345  M00S03195.virterm +++|**    VDTIINP - IDENTIFY NEXT VIRTUAL INPUT EVENT.
03346  M00S03196.virterm +++|*
03347  M00S03197.virterm +++|*     THIS PROCEDURE IDENTIFIES THE NEXT VIRTUAL TERMINAL INPUT
03348  M00S03198.virterm +++|*     EVENT.  THIS ROUTINE IS INTERNAL AND IS CALLED DIRECTLY BY
03349  M00S03199.virterm +++|*     THE FULL SCREEN EDITOR AFTER VDTPPI HAS BEEN CALLED.
03350  M00S03200.virterm +++|*
03351  M00S03201.virterm +++|*     PROC VDTIINP
03352  M00S03202.virterm +++|*
03353  M00S03203.virterm +++|*     ENTRY     VTINCR     = RESIDUAL CURSOR INCREMENT.
03354  M00S03204.virterm +++|*               VTXMAX     = NUMBER OF COLUMNS ON SCREEN.
03355  M00S03205.virterm +++|*               VTYMAX     = NUMBER OF LINES ON SCREEN.
03356  M00S03206.virterm +++|*
03357  M00S03207.virterm +++|*     EXIT      VTORDN     = EVENT CATEGORY.
03358  M00S03208.virterm +++|*               VTCHAR     = DATA CHARACTER OR FUNCTION KEY INDEX.
03359  M00S03209.virterm +++|*               VTYCUR     = Y COORDINATE OF CURSOR POSITION.
03360  M00S03210.virterm +++|*               VTXCUR     = X COORDINATE OF CURSOR POSITION.
03361  M00S03211.virterm +++|*               VTOYPOS    = OLD Y COORDINATE (HOME ONLY).
03362  M00S03212.virterm +++|*               VTOXPOS    = OLD X COORDINATE (HOME ONLY).
03363  M00S03213.virterm +++|*               VTINCR     = SETUP FOR NEXT VDTINP CALL.
03364  M00S03214.virterm +++|*
03365  M00S03215.virterm +++|*     CALLS     VDNXTI, VDCHECK.
03366  M00S03216.virterm +++|*
03367  M00S03217.virterm +++|*     NOTES     THE INP SWITCH MUST EXACTLY PARALLEL *TDU* PRODUCED
03368  M00S03218.virterm +++|*               INPUT ORDINALS.  IN SOME CASES WHERE COMMON CODE IS
03369  M00S03219.virterm +++|*               USED THE SIMULATED CASE STATEMENT ALLOWS A FALL THRU
03370  M00S03220.virterm +++|*               TO FINISH THE CODE FOR A PARTICULAR FUNCTION.
03371  M00S03221.virterm +++|#
03372  M00S03222.virterm +++|
03373  M00S03223.virterm +++|
Line S00001 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03374  M01S00001.virte12 +++|STATUS OPCODES                       # *TDU* INPUT OPCODES #
03375  M01S00002.virte12 +++|  FAIL,                              # FAIL #
03376  M01S00003.virte12 +++|  LIST,                              # LIST #
03377  M01S00004.virte12 +++|  MANY,                              # MANY ACTION RANGE #
03378  M01S00005.virte12 +++|  SNGL,                              # SINGLE ACTION RANGE #
03379  M01S00006.virte12 +++|  MAXOP;                             # HIGHER THAN ANY VALID CODE #
03380  M01S00007.virte12 +++|
03381  M00S03224.virterm +++|SWITCH INP:INPUTORD                  # INPUT ORDINALS (SEE *COMFVDT*) #
03382  M00S03225.virterm +++|
03383  M00S03226.virterm +++|# START OF CDC DEFINED INPUT/OUTPUT ORDINALS                          #
03384  M00S03227.virterm +++|
03385  M00S03228.virterm +++|  BADINPUT   : BADINPUT,             # UNRECOGNIZED SEQUENCE          #
03386  M00S03229.virterm +++|  INSERTCHAR : INSERTCHAR,           # INSERT CHARACTER               #
03387  M00S03230.virterm +++|  DELETECHAR : DELETECHAR,           # DELETE CHARACTER               #
03388  M00S03231.virterm +++|  INSERTLINE : INSERTLINE,           # INSERT LINE                    #
03389  M00S03232.virterm +++|  INSLNECURL : INSLNECURL,           # INSERT LINE, CURSOR LEFT       #
03390  M00S03233.virterm +++|  DELETELINE : DELETELINE,           # DELETE LINE                    #
03391  M00S03234.virterm +++|  DELINECURL : DELINECURL,           # DELETE LINE, CURSOR LEFT       #
03392  M00S03235.virterm +++|  CLRSCREEN  : CLRSCREEN,            # CLEAR SCREEN                   #
03393  M00S03236.virterm +++|  CLRSCRCURH : CLRSCRCURH,           # CLEAR SCREEN, CURSOR HOME      #
03394  M00S03237.virterm +++|  CLRUNPROT  : CLRUNPROT,            # CLEAR UNPROTECTED              #
03395  M00S03238.virterm +++|  CLREOS     : CLREOS,               # CLEAR TO END OF SCREEN         #
03396  M00S03239.virterm +++|  ERASELINE  : ERASELINE,            # ERASE LINE                     #
03397  M00S03240.virterm +++|  ERASELNECL : ERASELNECL,           # ERASE LINE, CURSOR LEFT        #
03398  M00S03241.virterm +++|  CLREOL     : CLREOL,               # CLEAR TO END OF LINE           #
03399  M00S03242.virterm +++|  NOOP       : CLRFIELD,             # CLEAR UNPROTECTED FIELD        #
03400  M00S03243.virterm +++|  NOOP       : CLRFLDCBOF,           # CLEAR FIELD, CURSOR LEFT       #
03401  M00S03244.virterm +++|  NOOP       : CLREOF,               # CLEAR TO END OF FIELD          #
03402  M00S03245.virterm +++|  ERASECHAR  : ERASECHAR,            # ERASE CHARACTER                #
03403  M00S03246.virterm +++|  CURSORHOME : CURSORHOME,           # CURSOR HOME                    #
03404  M00S03247.virterm +++|  CURSORUP   : CURSORUP,             # CURSOR UP                      #
03405  M00S03248.virterm +++|  CURSORDOWN : CURSORDOWN,           # CURSOR DOWN                    #
03406  M00S03249.virterm +++|  CURSORLEFT : CURSORLEFT,           # CURSOR LEFT                    #
03407  M00S03250.virterm +++|  CURSORIGHT : CURSORIGHT,           # CURSOR RIGHT                   #
03408  M00S03251.virterm +++|  TABFORWARD : TABFORWARD,           # TAB FORWARD                    #
03409  M00S03252.virterm +++|  TABACKWARD : TABACKWARD,           # TAB BACKWARD                   #
03410  M00S03253.virterm +++|  RET        : RET,                  # RETURN                         #
03411  M00S03254.virterm +++|  RESET      : RESET,                # RESET                          #
03412  M00S03255.virterm +++|  INSRTMDEON : INSRTMDEON,           # INSERT MODE ON                 #
03413  M00S03256.virterm +++|  INSRTMDOFF : INSRTMDOFF,           # INSERT MODE OFF                #
03414  M00S03257.virterm +++|  INSRTMDTOG : INSRTMDTOG,           # INSERT MODE TOGGLE             #
Line S03258 Modification History
M01 (Removed by) ns2641
Seq #  *Modification Id* Act 
----------------------------+
03415  M01S03258.ns2641  ---|  NOOP       : CLRTABSTOP,           # CLEAR TAB STOP                 #
03416  M01S03259.ns2641  ---|  NOOP       : CLRALLTABS,           # CLEAR ALL TAB STOPS            #
03417  M01S03260.ns2641  ---|  NOOP       : SETTABSTOP,           # SET TAB STOP                   #
Line S00001 Modification History
M01 (Added by) ns2641
Seq #  *Modification Id* Act 
----------------------------+
03418  M01S00001.ns2641  +++|  CLRTABSTOP : CLRTABSTOP,           # CLEAR TAB STOP                 #
03419  M01S00002.ns2641  +++|  CLRALLTABS : CLRALLTABS,           # CLEAR ALL TAB STOPS            #
03420  M01S00003.ns2641  +++|  SETTABSTOP : SETTABSTOP,           # SET TAB STOP                   #
03421  M00S03261.virterm +++|  CURSORSTR  : CURSORSTR,            # CURSOR POSITION START          #
03422  M00S03262.virterm +++|  CURSORSEC  : CURSORSEC,            # CURSOR POSITION SECOND         #
03423  M00S03263.virterm +++|  CURSORTHR  : CURSORTHR,            # CURSOR POSITION THIRD          #
03424  M00S03264.virterm +++|
03425  M00S03265.virterm +++|# START OF CDC DEFINED INPUT ONLY ORDINALS.                           #
03426  M00S03266.virterm +++|
03427  M00S03267.virterm +++|  EOI        : EOI,                  # END OF INFORMATION             #
03428  M00S03268.virterm +++|  CHARACTER  : CHARACTER,            # OVERSTRIKE CHARACTER           #
03429  M00S03269.virterm +++|  FKEY       : F1,                   # FUNCTION KEY 1                 #
03430  M00S03270.virterm +++|  FKEY       : F2,                   # FUNCTION KEY 2                 #
03431  M00S03271.virterm +++|  FKEY       : F3,                   # FUNCTION KEY 3                 #
03432  M00S03272.virterm +++|  FKEY       : F4,                   # FUNCTION KEY 4                 #
03433  M00S03273.virterm +++|  FKEY       : F5,                   # FUNCTION KEY 5                 #
03434  M00S03274.virterm +++|  FKEY       : F6,                   # FUNCTION KEY 6                 #
03435  M00S03275.virterm +++|  FKEY       : F7,                   # FUNCTION KEY 7                 #
03436  M00S03276.virterm +++|  FKEY       : F8,                   # FUNCTION KEY 8                 #
03437  M00S03277.virterm +++|  FKEY       : F9,                   # FUNCTION KEY 9                 #
03438  M00S03278.virterm +++|  FKEY       : F10,                  # FUNCTION KEY 10                #
03439  M00S03279.virterm +++|  FKEY       : F11,                  # FUNCTION KEY 11                #
03440  M00S03280.virterm +++|  FKEY       : F12,                  # FUNCTION KEY 12                #
03441  M00S03281.virterm +++|  FKEY       : F13,                  # FUNCTION KEY 13                #
03442  M00S03282.virterm +++|  FKEY       : F14,                  # FUNCTION KEY 14                #
03443  M00S03283.virterm +++|  FKEY       : F15,                  # FUNCTION KEY 15                #
03444  M00S03284.virterm +++|  FKEY       : F16,                  # FUNCTION KEY 16                #
03445  M00S03285.virterm +++|  FKEYSHIFT  : F1S,                  # SHIFTED FUNCTION KEY 1         #
03446  M00S03286.virterm +++|  FKEYSHIFT  : F2S,                  # SHIFTED FUNCTION KEY 2         #
03447  M00S03287.virterm +++|  FKEYSHIFT  : F3S,                  # SHIFTED FUNCTION KEY 3         #
03448  M00S03288.virterm +++|  FKEYSHIFT  : F4S,                  # SHIFTED FUNCTION KEY 4         #
03449  M00S03289.virterm +++|  FKEYSHIFT  : F5S,                  # SHIFTED FUNCTION KEY 5         #
03450  M00S03290.virterm +++|  FKEYSHIFT  : F6S,                  # SHIFTED FUNCTION KEY 6         #
03451  M00S03291.virterm +++|  FKEYSHIFT  : F7S,                  # SHIFTED FUNCTION KEY 7         #
03452  M00S03292.virterm +++|  FKEYSHIFT  : F8S,                  # SHIFTED FUNCTION KEY 8         #
03453  M00S03293.virterm +++|  FKEYSHIFT  : F9S,                  # SHIFTED FUNCTION KEY 9         #
03454  M00S03294.virterm +++|  FKEYSHIFT  : F10S,                 # SHIFTED FUNCTION KEY 10        #
03455  M00S03295.virterm +++|  FKEYSHIFT  : F11S,                 # SHIFTED FUNCTION KEY 11        #
03456  M00S03296.virterm +++|  FKEYSHIFT  : F12S,                 # SHIFTED FUNCTION KEY 12        #
03457  M00S03297.virterm +++|  FKEYSHIFT  : F13S,                 # SHIFTED FUNCTION KEY 13        #
03458  M00S03298.virterm +++|  FKEYSHIFT  : F14S,                 # SHIFTED FUNCTION KEY 14        #
03459  M00S03299.virterm +++|  FKEYSHIFT  : F15S,                 # SHIFTED FUNCTION KEY 15        #
03460  M00S03300.virterm +++|  FKEYSHIFT  : F16S,                 # SHIFTED FUNCTION KEY 16        #
03461  M00S03301.virterm +++|  GKEY       : NEXTKEY,              # NEXT KEY                       #
03462  M00S03302.virterm +++|  GKEY       : BACKKEY,              # BACK KEY                       #
03463  M00S03303.virterm +++|  GKEY       : HELPKEY,              # HELP KEY                       #
03464  M00S03304.virterm +++|  GKEY       : STOPKEY,              # STOP KEY                       #
03465  M00S03305.virterm +++|  GKEY       : DOWNKEY,              # DOWN KEY                       #
03466  M00S03306.virterm +++|  GKEY       : UPKEY,                # UP KEY                         #
03467  M00S03307.virterm +++|  GKEY       : FWDKEY,               # FWD KEY                        #
03468  M00S03308.virterm +++|  GKEY       : BKWKEY,               # BKW KEY                        #
03469  M00S03309.virterm +++|  GKEY       : EDITKEY,              # EDIT KEY                       #
03470  M00S03310.virterm +++|  GKEY       : DATAKEY,              # DATA KEY                       #
03471  M00S03311.virterm +++|  GKEYSHIFT  : SHFNEXT,              # SHIFTED NEXT KEY               #
03472  M00S03312.virterm +++|  GKEYSHIFT  : SHFBACK,              # SHIFTED BACK KEY               #
03473  M00S03313.virterm +++|  GKEYSHIFT  : SHFHELP,              # SHIFTED HELP KEY               #
03474  M00S03314.virterm +++|  GKEYSHIFT  : SHFSTOP,              # SHIFTED STOP KEY               #
03475  M00S03315.virterm +++|  GKEYSHIFT  : SHFDOWN,              # SHIFTED DOWN KEY               #
03476  M00S03316.virterm +++|  GKEYSHIFT  : SHFUP,                # SHIFTED UP KEY                 #
03477  M00S03317.virterm +++|  GKEYSHIFT  : SHFFWD,               # SHIFTED FWD KEY                #
03478  M00S03318.virterm +++|  GKEYSHIFT  : SHFBKW,               # SHIFTED BKW KEY                #
03479  M00S03319.virterm +++|  GKEYSHIFT  : SHFEDIT,              # SHIFTED EDIT KEY               #
03480  M00S03320.virterm +++|  GKEYSHIFT  : SHFDATA,              # SHIFTED BKW KEY                #
03481  M00S03321.virterm +++|  BACKSPACE  : BACKSPACE,            # BACK SPACE                     #
Line S03322 Modification History
M01 (Removed by) ns2675
Seq #  *Modification Id* Act 
----------------------------+
03482  M01S03322.ns2675  ---|
Line S00001 Modification History
M01 (Added by) ns2675
Seq #  *Modification Id* Act 
----------------------------+
03483  M01S00001.ns2675  +++|  FKEYX      : F17,                  # FUNCTION KEY 17                #
03484  M01S00002.ns2675  +++|  FKEYX      : F18,                  # FUNCTION KEY 18                #
03485  M01S00003.ns2675  +++|  FKEYX      : F19,                  # FUNCTION KEY 19                #
03486  M01S00004.ns2675  +++|  FKEYX      : F20,                  # FUNCTION KEY 20                #
03487  M01S00005.ns2675  +++|  FKEYX      : F21,                  # FUNCTION KEY 21                #
03488  M01S00006.ns2675  +++|  FKEYX      : F22,                  # FUNCTION KEY 22                #
03489  M01S00007.ns2675  +++|  FKEYX      : F23,                  # FUNCTION KEY 23                #
03490  M01S00008.ns2675  +++|  FKEYX      : F24,                  # FUNCTION KEY 24                #
03491  M01S00009.ns2675  +++|  FKEYXS     : F17S,                 # SHIFTED FUNCTION KEY 17        #
03492  M01S00010.ns2675  +++|  FKEYXS     : F18S,                 # SHIFTED FUNCTION KEY 18        #
03493  M01S00011.ns2675  +++|  FKEYXS     : F19S,                 # SHIFTED FUNCTION KEY 19        #
03494  M01S00012.ns2675  +++|  FKEYXS     : F20S,                 # SHIFTED FUNCTION KEY 20        #
03495  M01S00013.ns2675  +++|  FKEYXS     : F21S,                 # SHIFTED FUNCTION KEY 21        #
03496  M01S00014.ns2675  +++|  FKEYXS     : F22S,                 # SHIFTED FUNCTION KEY 22        #
03497  M01S00015.ns2675  +++|  FKEYXS     : F23S,                 # SHIFTED FUNCTION KEY 23        #
03498  M01S00016.ns2675  +++|  FKEYXS     : F24S,                 # SHIFTED FUNCTION KEY 24        #
03499  M01S00017.ns2675  +++|
03500  M00S03323.virterm +++|# START OF INSTALLATION INPUT ORDINALS DEFINED VIA *TDU*.             #
Line S00018 Modification History
M01 (Added by) ns2675
Seq #  *Modification Id* Act 
----------------------------+
03501  M01S00018.ns2675  +++|
03502  M01S00019.ns2675  +++|  BADINPUT   : IINP1,                # INSTALLATION INPUT SEQUENCE 1  #
03503  M01S00020.ns2675  +++|  BADINPUT   : IINP2,                # INSTALLATION INPUT SEQUENCE 2  #
03504  M01S00021.ns2675  +++|  BADINPUT   : IINP3,                # INSTALLATION INPUT SEQUENCE 3  #
03505  M01S00022.ns2675  +++|  BADINPUT   : IINP4,                # INSTALLATION INPUT SEQUENCE 4  #
03506  M01S00023.ns2675  +++|  BADINPUT   : IINP5,                # INSTALLATION INPUT SEQUENCE 5  #
03507  M01S00024.ns2675  +++|  BADINPUT   : IINP6,                # INSTALLATION INPUT SEQUENCE 6  #
03508  M01S00025.ns2675  +++|  BADINPUT   : IINP7,                # INSTALLATION INPUT SEQUENCE 7  #
03509  M01S00026.ns2675  +++|  BADINPUT   : IINP8,                # INSTALLATION INPUT SEQUENCE 8  #
03510  M01S00027.ns2675  +++|  BADINPUT   : IINP9,                # INSTALLATION INPUT SEQUENCE 9  #
03511  M01S00028.ns2675  +++|  BADINPUT   : IINP10,               # INSTALLATION INPUT SEQUENCE 10 #
03512  M01S00029.ns2675  +++|  BADINPUT   : IINP11,               # INSTALLATION INPUT SEQUENCE 11 #
03513  M01S00030.ns2675  +++|  BADINPUT   : IINP12,               # INSTALLATION INPUT SEQUENCE 12 #
03514  M01S00031.ns2675  +++|  BADINPUT   : IINP13,               # INSTALLATION INPUT SEQUENCE 13 #
03515  M01S00032.ns2675  +++|  BADINPUT   : IINP14,               # INSTALLATION INPUT SEQUENCE 14 #
03516  M01S00033.ns2675  +++|  BADINPUT   : IINP15,               # INSTALLATION INPUT SEQUENCE 15 #
03517  M01S00034.ns2675  +++|  BADINPUT   : IINP16,               # INSTALLATION INPUT SEQUENCE 16 #
03518  M01S00035.ns2675  +++|  BADINPUT   : IINP17,               # INSTALLATION INPUT SEQUENCE 17 #
03519  M01S00036.ns2675  +++|  BADINPUT   : IINP18,               # INSTALLATION INPUT SEQUENCE 18 #
03520  M01S00037.ns2675  +++|  BADINPUT   : IINP19,               # INSTALLATION INPUT SEQUENCE 19 #
03521  M01S00038.ns2675  +++|  BADINPUT   : IINP20,               # INSTALLATION INPUT SEQUENCE 20 #
03522  M00S03324.virterm +++|
03523  M00S03325.virterm +++|# END OF INSTALLATION INPUT ORDINALS.                                 #
03524  M00S03326.virterm +++|
03525  M00S03327.virterm +++|  BADINPUT   : MAXPLUS1;             # LEGAL ORDINALS MUST BE LESS    #
03526  M00S03328.virterm +++|  CONTROL EJECT;                     # EMBEDDED VDTIINP PROCEDURE #
03527  M00S03329.virterm +++|
03528  M00S03330.virterm +++|  PROC VDGETS;
03529  M00S03331.virterm +++|
03530  M00S03332.virterm +++|  # TITLE VDGETS - GET SEPTET. #
03531  M00S03333.virterm +++|
03532  M00S03334.virterm +++|  BEGIN  # VDGETS #
03533  M00S03335.virterm +++|
03534  M00S03336.virterm +++|  #
03535  M00S03337.virterm +++|  *     VDGETS - GET SEPTET.
03536  M00S03338.virterm +++|  *
03537  M00S03339.virterm +++|  *     THIS PROCEDURE GETS THE NEXT SEVEN BITS FROM THE INPUT TABLE.
03538  M00S03340.virterm +++|  *
03539  M00S03341.virterm +++|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE.
03540  M00S03342.virterm +++|  *
03541  M00S03343.virterm +++|  *     EXIT      VTHOLD     = SEPTET.
Line S00008 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03542  M01S00008.virte12 +++|  *               VTCOUNT    = INCREMENTED IF WITHIN TABLE.
03543  M00S03344.virterm +++|  *
03544  M00S03345.virterm +++|  *     USES      VTHOLD.
03545  M00S03346.virterm +++|  #
03546  M00S03347.virterm +++|
03547  M00S03348.virterm +++|  ITEM WORDINDEX  I;                 # WORD INDEX INTO INPUT TABLE #
03548  M00S03349.virterm +++|  ITEM BITPINDEX  I;                 # BIT POSITION INDEX INTO WORD #
03549  M00S03350.virterm +++|
Line S03351 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03550  M01S03351.virte12 ---|  IF VTCOUNT / 8 LS O"272" THEN
Line S00009 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03551  M01S00009.virte12 +++|  WORDINDEX = VTCOUNT / 8;
03552  M01S00010.virte12 +++|  IF WORDINDEX LS (TABSTRNMES[0] - TABSTRINPT[0]) THEN
03553  M00S03352.virterm +++|    BEGIN                            # IF WITHIN *TDU* TABLE #
Line S03353 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03554  M01S03353.virte12 ---|    WORDINDEX = VTCOUNT / 8;
03555  M00S03354.virterm +++|    BITPINDEX = 4 + (7 * ((VTCOUNT - (WORDINDEX * 8))));
03556  M00S03355.virterm +++|    VTHOLD = B<BITPINDEX,7>TABFULLWRD[WORDINDEX + TABSTRINPT[0] - 6 ];
Line S00011 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03557  M01S00011.virte12 +++|    VTCOUNT = VTCOUNT + 1;           # INCREMENT POINTER #
03558  M00S03356.virterm +++|    END
03559  M00S03357.virterm +++|  ELSE                               # IF OUTSIDE OF *TDU* TABLE #
03560  M00S03358.virterm +++|    BEGIN
Line S03359 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03561  M01S03359.virte12 ---|    # WHAT DO WE DO IN THIS CASE, HOW ABOUT RETURNING A STOP KEY #
Line S00012 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03562  M01S00012.virte12 +++|    VTHOLD = -1;                     # RETURN FAIL INDICATION #
03563  M00S03360.virterm +++|    END
03564  M00S03361.virterm +++|
03565  M00S03362.virterm +++|  END  # VDGETS #
03566  M00S03363.virterm +++|  CONTROL EJECT;                     # EMBEDDED VDTIINP PROCEDURE #
03567  M00S03364.virterm +++|
03568  M00S03365.virterm +++|  PROC VDLIST;
03569  M00S03366.virterm +++|
03570  M00S03367.virterm +++|  # TITLE VDLIST - CHECK LIST FOR CHARACTER. #
03571  M00S03368.virterm +++|
03572  M00S03369.virterm +++|  BEGIN  # VDLIST #
03573  M00S03370.virterm +++|
03574  M00S03371.virterm +++|  #
03575  M00S03372.virterm +++|  *     VDLIST - CHECK LIST FOR CHARACTER.
03576  M00S03373.virterm +++|  *
03577  M00S03374.virterm +++|  *     THIS PROCEDURE CHECKS FOR AN INPUT CHARACTER IN A LIST.
03578  M00S03375.virterm +++|  *
Line S03376 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03579  M01S03376.virte12 ---|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE FOR OPCODE.
Line S00013 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03580  M01S00013.virte12 +++|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE FOR LIST SIZE.
03581  M00S03377.virterm +++|  *
03582  M00S03378.virterm +++|  *     EXIT      VTCOUNT    = OFFSET INTO INPUT TABLE FOR ACTION,
03583  M00S03379.virterm +++|  *                            OR NEXT OPCODE IF NO MATCH FOUND.
03584  M00S03380.virterm +++|  *               VTI        = 0, IF NO CHARACTER MATCH FOUND, OR
03585  M00S03381.virterm +++|  *                            NONZERO IF MATCH FOUND.
03586  M00S03382.virterm +++|  *
03587  M00S03383.virterm +++|  *     USES      VTHOLD, VTI.
03588  M00S03384.virterm +++|  #
03589  M00S03385.virterm +++|
Line S03386 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03590  M01S03386.virte12 ---|  VTCOUNT = VTCOUNT + 1;             # GET LIST COUNT #
03591  M01S03387.virte12 ---|  VDGETS;
Line S00014 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03592  M01S00014.virte12 +++|  VDGETS;                            # GET LENGTH OF LIST #
Line S03388 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03593  M01S03388.virte12 ---|  VTI = VTHOLD;
03594  M01S03389.virte12 ---|  VTCOUNT = VTCOUNT + 1;
03595  M00S03390.virterm +++|
Line S03391 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03596  M01S03391.virte12 ---|  SEARCH:                            # SEARCH FOR CHARACTER #
03597  M01S03392.virte12 ---|
Line S00015 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03598  M01S00015.virte12 +++|  FOR VTI = VTHOLD STEP -1 WHILE VTI GR 0 AND VTHOLD GQ 0 DO
03599  M01S00016.virte12 +++|    BEGIN                            # SEARCH FOR CHARACTER #
03600  M00S03393.virterm +++|    VDGETS;                          # GET CHARACTER #
03601  M00S03394.virterm +++|    IF VTCHAR EQ VTHOLD THEN
03602  M00S03395.virterm +++|      BEGIN                          # IF MATCH FOUND #
Line S03396 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03603  M01S03396.virte12 ---|      VTCOUNT = VTCOUNT + 1;         # OFFSET FOR ACTION #
03604  M01S03397.virte12 ---|      VTI = 1;
Line S00017 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03605  M01S00017.virte12 +++|      RETURN;                        # RETURN - CHARACTER FOUND #
03606  M00S03398.virterm +++|      END
03607  M00S03399.virterm +++|    ELSE
03608  M00S03400.virterm +++|      BEGIN                          # NO MATCH #
Line S03401 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03609  M01S03401.virte12 ---|      VTI = VTI - 1;                 # DECREMENT COUNT #
03610  M01S03402.virte12 ---|      VTCOUNT = VTCOUNT + 3;         # INCREMENT OFFSET #
03611  M01S03403.virte12 ---|      IF VTI NQ 0 THEN GOTO SEARCH;  # IF NOT END OF LIST #
Line S00018 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03612  M01S00018.virte12 +++|      VTCOUNT = VTCOUNT + 2;         # INCREMENT OFFSET #
03613  M00S03404.virterm +++|      END
Line S00019 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03614  M01S00019.virte12 +++|    END
03615  M00S03405.virterm +++|
03616  M00S03406.virterm +++|  END  # VDLIST #
03617  M00S03407.virterm +++|  CONTROL EJECT;                     # EMBEDDED VDTIINP PROCEDURE #
03618  M00S03408.virterm +++|
03619  M00S03409.virterm +++|  PROC VDMANY;
03620  M00S03410.virterm +++|
03621  M00S03411.virterm +++|  # TITLE VDMANY - CHECK MANY ACTION RANGE FOR CHARACTER. #
03622  M00S03412.virterm +++|
03623  M00S03413.virterm +++|  BEGIN  # VDMANY #
03624  M00S03414.virterm +++|
03625  M00S03415.virterm +++|  #
03626  M00S03416.virterm +++|  *     VDMANY - CHECK MANY ACTION RANGE FOR CHARACTER.
03627  M00S03417.virterm +++|  *
03628  M00S03418.virterm +++|  *     THIS PROCEDURE CHECKS A MANY ACTION RANGE FOR A CHARACTER.
03629  M00S03419.virterm +++|  *
Line S03420 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03630  M01S03420.virte12 ---|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE FOR OPCODE.
Line S00020 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03631  M01S00020.virte12 +++|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE FOR RANGE PAIR.
03632  M00S03421.virterm +++|  *
03633  M00S03422.virterm +++|  *     EXIT      VTCOUNT    = OFFSET INTO INPUT TABLE FOR ACTION,
03634  M00S03423.virterm +++|  *                            OR NEXT OPCODE IF NO MATCH FOUND.
03635  M00S03424.virterm +++|  *               VTI        = 0, IF NO CHARACTER MATCH FOUND, OR
03636  M00S03425.virterm +++|  *                            NONZERO IF MATCH FOUND.
03637  M00S03426.virterm +++|  *
03638  M00S03427.virterm +++|  *     USES      VTHOLD, VTI.
03639  M00S03428.virterm +++|  #
03640  M00S03429.virterm +++|
Line S03430 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03641  M01S03430.virte12 ---|  VTCOUNT = VTCOUNT + 1;             # GET LOW RANGE CHARACTER #
03642  M01S03431.virte12 ---|  VDGETS;
03643  M01S03432.virte12 ---|  VTI = VTHOLD;
03644  M01S03433.virte12 ---|
03645  M01S03434.virte12 ---|  VTCOUNT = VTCOUNT + 1;             # GET UPPER RANGE CHARACTER #
03646  M01S03435.virte12 ---|  VDGETS;
03647  M01S03436.virte12 ---|  VTJ = VTHOLD;
03648  M01S03437.virte12 ---|
03649  M01S03438.virte12 ---|  IF VTCHAR GQ VTI AND VTCHAR LQ VTJ THEN
03650  M01S03439.virte12 ---|    BEGIN                            # IF CHARACTER WITHIN RANGE #
03651  M01S03440.virte12 ---|    VTJ = VTCHAR - VTI;              # OFFSET FOR ACTION #
03652  M01S03441.virte12 ---|    VTCOUNT = VTCOUNT + (VTJ * 2) + 1;
03653  M01S03442.virte12 ---|    VTI = 1;
03654  M01S03443.virte12 ---|    END
03655  M01S03444.virte12 ---|  ELSE
03656  M01S03445.virte12 ---|    BEGIN                            # OFFSET FOR NEXT OPCODE #
03657  M01S03446.virte12 ---|    VTCOUNT = VTCOUNT + ((VTJ - VTI + 1) * 2) + 1;
03658  M01S03447.virte12 ---|    VTI = 0;
Line S00021 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03659  M01S00021.virte12 +++|  VDGETS;                            # GET LOWER RANGE CHARACTER #
03660  M01S00022.virte12 +++|  IF VTHOLD GQ 0 THEN
03661  M01S00023.virte12 +++|    BEGIN                            # IF GOOD TABLE ENTRY #
03662  M01S00024.virte12 +++|    VTI = VTHOLD;
03663  M01S00025.virte12 +++|    VDGETS;                          # GET UPPER RANGE CHARACTER #
03664  M01S00026.virte12 +++|    IF VTHOLD GQ 0 THEN
03665  M01S00027.virte12 +++|      BEGIN                          # IF GOOD TABLE ENTRY #
03666  M01S00028.virte12 +++|      VTJ = VTHOLD;
03667  M01S00029.virte12 +++|      IF VTCHAR GQ VTI AND VTCHAR LQ VTJ THEN
03668  M01S00030.virte12 +++|        BEGIN                        # IF CHARACTER WITHIN RANGE #
03669  M01S00031.virte12 +++|        VTCOUNT = VTCOUNT + ((VTCHAR - VTI) * 2);  # ACTION OFFSET #
03670  M01S00032.virte12 +++|        VTI = 1;
03671  M01S00033.virte12 +++|        END
03672  M01S00034.virte12 +++|      ELSE
03673  M01S00035.virte12 +++|        BEGIN                        # OFFSET FOR NEXT OPCODE #
03674  M01S00036.virte12 +++|        VTCOUNT = VTCOUNT + ((VTJ - VTI + 1) * 2); # OPCODE OFFSET #
03675  M01S00037.virte12 +++|        VTI = 0;
03676  M01S00038.virte12 +++|        END
03677  M01S00039.virte12 +++|      END
03678  M00S03448.virterm +++|    END
03679  M00S03449.virterm +++|
03680  M00S03450.virterm +++|  END  # VDMANY #
03681  M00S03451.virterm +++|  CONTROL EJECT;                     # EMBEDDED VDTIINP PROCEDURE #
03682  M00S03452.virterm +++|
03683  M00S03453.virterm +++|  PROC VDSNGL;
03684  M00S03454.virterm +++|
03685  M00S03455.virterm +++|  # TITLE VDSNGL - CHECK SINGLE ACTION RANGE FOR CHARACTER. #
03686  M00S03456.virterm +++|
03687  M00S03457.virterm +++|  BEGIN  # VDSNGL #
03688  M00S03458.virterm +++|
03689  M00S03459.virterm +++|  #
03690  M00S03460.virterm +++|  *     VDSNGL - CHECK SINGLE ACTION RANGE FOR CHARACTER.
03691  M00S03461.virterm +++|  *
03692  M00S03462.virterm +++|  *     THIS PROCEDURE CHECKS A SINGLE ACTION RANGE FOR A CHARACTER.
03693  M00S03463.virterm +++|  *
Line S03464 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03694  M01S03464.virte12 ---|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE FOR OPCODE.
Line S00040 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03695  M01S00040.virte12 +++|  *     ENTRY     VTCOUNT    = OFFSET INTO INPUT TABLE FOR RANGE PAIR.
03696  M00S03465.virterm +++|  *
03697  M00S03466.virterm +++|  *     EXIT      VTCOUNT    = OFFSET INTO INPUT TABLE FOR ACTION,
03698  M00S03467.virterm +++|  *                            OR NEXT OPCODE IF NO MATCH FOUND.
03699  M00S03468.virterm +++|  *               VTI        = 0, IF NO CHARACTER MATCH FOUND, OR
03700  M00S03469.virterm +++|  *                            NONZERO IF MATCH FOUND.
03701  M00S03470.virterm +++|  *
03702  M00S03471.virterm +++|  *     USES      VTHOLD, VTI.
03703  M00S03472.virterm +++|  #
03704  M00S03473.virterm +++|
Line S03474 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03705  M01S03474.virte12 ---|  VTCOUNT = VTCOUNT + 1;             # GET LOW RANGE CHARACTER #
03706  M01S03475.virte12 ---|  VDGETS;
03707  M01S03476.virte12 ---|  VTI = VTHOLD;
03708  M01S03477.virte12 ---|
03709  M01S03478.virte12 ---|  VTCOUNT = VTCOUNT + 1;             # GET UPPER RANGE CHARACTER #
03710  M01S03479.virte12 ---|  VDGETS;
03711  M01S03480.virte12 ---|  VTJ = VTHOLD;
03712  M01S03481.virte12 ---|
03713  M01S03482.virte12 ---|  IF VTCHAR GQ VTI AND VTCHAR LQ VTJ THEN
03714  M01S03483.virte12 ---|    BEGIN                            # IF CHARACTER WITHIN RANGE #
03715  M01S03484.virte12 ---|    VTCOUNT = VTCOUNT + 1;           # OFFSET FOR ACTION #
03716  M01S03485.virte12 ---|    VTI = 1;
03717  M01S03486.virte12 ---|    END
03718  M01S03487.virte12 ---|  ELSE
03719  M01S03488.virte12 ---|    BEGIN                            # IF NO MATCH #
03720  M01S03489.virte12 ---|    VTCOUNT = VTCOUNT + 3;           # OFFSET FOR NEXT OPCODE #
03721  M01S03490.virte12 ---|    VTI = 0;
Line S00041 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03722  M01S00041.virte12 +++|  VDGETS;                            # GET LOWER RANGE CHARACTER #
03723  M01S00042.virte12 +++|  IF VTHOLD GQ 0 THEN
03724  M01S00043.virte12 +++|    BEGIN                            # IF GOOD TABLE ENTRY #
03725  M01S00044.virte12 +++|    VTI = VTHOLD;
03726  M01S00045.virte12 +++|    VDGETS;                          # GET UPPER RANGE CHARACTER #
03727  M01S00046.virte12 +++|    IF VTHOLD GQ 0 THEN
03728  M01S00047.virte12 +++|      BEGIN                          # IF GOOD TABLE ENTRY #
03729  M01S00048.virte12 +++|      VTJ = VTHOLD;
03730  M01S00049.virte12 +++|      IF VTCHAR GQ VTI AND VTCHAR LQ VTJ THEN
03731  M01S00050.virte12 +++|        BEGIN                        # IF CHARACTER WITHIN RANGE #
03732  M01S00051.virte12 +++|        VTI = 1;
03733  M01S00052.virte12 +++|        END
03734  M01S00053.virte12 +++|      ELSE
03735  M01S00054.virte12 +++|        BEGIN                        # IF NO MATCH #
03736  M01S00055.virte12 +++|        VTCOUNT = VTCOUNT + 2;       # OFFSET FOR NEXT OPCODE #
03737  M01S00056.virte12 +++|        VTI = 0;
03738  M01S00057.virte12 +++|        END
03739  M01S00058.virte12 +++|      END
03740  M00S03491.virterm +++|    END
03741  M00S03492.virterm +++|
03742  M00S03493.virterm +++|  END  # VDSNGL #
03743  M00S03494.virterm +++|  CONTROL EJECT;                     # EMBEDDED VDTIINP PROCEDURE #
03744  M00S03495.virterm +++|
03745  M00S03496.virterm +++|  PROC VDCHEK;
03746  M00S03497.virterm +++|
03747  M00S03498.virterm +++|  # TITLE VDCHEK - CHECK VIRTUAL TERMINAL INPUT SEQUENCE. #
03748  M00S03499.virterm +++|
03749  M00S03500.virterm +++|  IOBEGIN(VDCHEK)  # VDCHEK #
03750  M00S03501.virterm +++|
03751  M00S03502.virterm +++|  #
03752  M00S03503.virterm +++|  *     VDCHEK - CHECK VIRTUAL TERMINAL INPUT SEQUENCE.
03753  M00S03504.virterm +++|  *
03754  M00S03505.virterm +++|  *     THIS PROCEDURE MAPS INPUT SEQUENCES TO INP ORDINALS.
03755  M00S03506.virterm +++|  *
03756  M00S03507.virterm +++|  *     EXIT      VTORDN     = INPUT EVENT ORDINAL.
03757  M00S03508.virterm +++|  *
03758  M00S03509.virterm +++|  *     CALLS     VDNXTI, VDGETS, VDSNGL, VDMANY, VDLIST.
03759  M00S03510.virterm +++|  *
03760  M00S03511.virterm +++|  *     USES      VTCOUNT, VTHOLD, VTI, VTORDN.
03761  M00S03512.virterm +++|  *
03762  M00S03513.virterm +++|  *     NOTES     OPCODE SWITCH DEPENDS ON *TDU* PRODUCED VALUES.
03763  M00S03514.virterm +++|  #
03764  M00S03515.virterm +++|
03765  M00S03516.virterm +++|  ARRAY ACT [0:0] P(1);              # DEFINED ACTION FOR SEQUENCE #
03766  M00S03517.virterm +++|    BEGIN
03767  M00S03518.virterm +++|    ITEM ACTONE     U(00,46,07);     # FIRST SEPTET OF ACTION #
03768  M00S03519.virterm +++|    ITEM ACTTWO     U(00,53,07);     # SECOND SEPTET OF ACTION #
03769  M00S03520.virterm +++|    ITEM ACTION     I(00,46,14);     # ACTION AS SIGNED INTEGER #
03770  M00S03521.virterm +++|    END
03771  M00S03522.virterm +++|
Line S03523 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03772  M01S03523.virte12 ---|  SWITCH OPCODE                      # *TDU* INPUT OPCODES #
03773  M01S03524.virte12 ---|    FAIL,                            # FAIL #
03774  M01S03525.virte12 ---|    LIST,                            # LIST #
03775  M01S03526.virte12 ---|    MANY,                            # MANY ACTION RANGE #
03776  M01S03527.virte12 ---|    SNGL;                            # SINGLE ACTION RANGE #
Line S00059 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03777  M01S00059.virte12 +++|  SWITCH OPCODE:OPCODES              # BASED ON *TDU* INPUT OPCODES #
03778  M01S00060.virte12 +++|    FAIL:FAIL,                       # FAIL #
03779  M01S00061.virte12 +++|    LIST:LIST,                       # LIST #
03780  M01S00062.virte12 +++|    MANY:MANY,                       # MANY ACTION RANGE #
03781  M01S00063.virte12 +++|    SNGL:SNGL;                       # SINGLE ACTION RANGE #
03782  M00S03528.virterm +++|
03783  M00S03529.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
03784  M00S03530.virterm +++|  IF VTRESINP NQ 0 THEN
03785  M00S03531.virterm +++|    BEGIN                            # IF ONLY SBA ALLOWED #
03786  M00S03532.virterm +++|    VDNXTI;                          # GET NEXT INPUT CHARACTER #
03787  M00S03533.virterm +++|    IF VTCHAR EQ X"11" THEN
03788  M00S03534.virterm +++|      BEGIN                          # IF SBA #
03789  M00S03535.virterm +++|      VTORDN = 33;                   # CURSORSTR #
03790  M00S03536.virterm +++|      END
03791  M00S03537.virterm +++|    ELSE
03792  M00S03538.virterm +++|      BEGIN                          # NOT SBA #
03793  M00S03539.virterm +++|      IF VTCHAR EQ X"00" THEN
03794  M00S03540.virterm +++|        BEGIN                        # IF EOI #
03795  M00S03541.virterm +++|        VTORDN = 36;                 # EOI #
03796  M00S03542.virterm +++|        END
03797  M00S03543.virterm +++|      ELSE
03798  M00S03544.virterm +++|        BEGIN                        # CHARACTER #
03799  M00S03545.virterm +++|        VTORDN = 37;
03800  M00S03546.virterm +++|        END
03801  M00S03547.virterm +++|      END
03802  M00S03548.virterm +++|    IORET
03803  M00S03549.virterm +++|    END
03804  M00S03550.virterm +++|CONTROL FI;                          # END OF IF NOT MULTI FSE #
03805  M00S03551.virterm +++|
03806  M00S03552.virterm +++|  VTCOUNT = 0;                       # SEARCH ENTIRE TABLE #
03807  M00S03553.virterm +++|  VTI = 0;                           # NO MATCH FOUND YET #
03808  M00S03554.virterm +++|
03809  M00S03555.virterm +++|  VDNXTI;                            # GET INPUT #
03810  M00S03556.virterm +++|
03811  M00S03557.virterm +++|  IF TABVTFKLSM[0] EQ 0 AND NOT TABLOCKMDE[0] THEN
03812  M00S03558.virterm +++|    BEGIN                            # IF A CHAR IS A CHAR IS A CHAR #
03813  M00S03559.virterm +++|    IF VTCHAR GQ X"20" AND VTCHAR LQ X"7E" THEN
03814  M00S03560.virterm +++|      BEGIN                          # IF VALID CHARACTER #
03815  M00S03561.virterm +++|      VTORDN = 37;
03816  M00S03562.virterm +++|      IORET                          # RETURN #
03817  M00S03563.virterm +++|      END
03818  M00S03564.virterm +++|    END
Line S03565 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03819  M01S03565.virte12 ---|
03820  M01S03566.virte12 ---|  GOTO PARSE;                        # CHECK TDU SEQUENCE #
03821  M01S03567.virte12 ---|
03822  M01S03568.virte12 ---|  GETINP:
03823  M01S03569.virte12 ---|    VDNXTI;                          # GET INPUT #
03824  M00S03570.virterm +++|
03825  M00S03571.virterm +++|  PARSE:
03826  M00S03572.virterm +++|    VDGETS;                          # GET OPCODE #
Line S03573 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03827  M01S03573.virte12 ---|    GOTO OPCODE[VTHOLD];             # PROCESS BY OPCODE #
Line S00064 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03828  M01S00064.virte12 +++|    IF VTHOLD GQ 0 AND VTHOLD LS OPCODES"MAXOP" THEN
03829  M01S00065.virte12 +++|      GOTO OPCODE[VTHOLD];           # IF OPCODE WITHIN RANGE #
03830  M00S03574.virterm +++|
03831  M00S03575.virterm +++|  FAIL:                              # FAIL #
03832  M00S03576.virterm +++|    VTORDN = 0;                      # UNRECOGNIZED SEQUENCE #
03833  M00S03577.virterm +++|    IORET                            # RETURN #
03834  M00S03578.virterm +++|
03835  M00S03579.virterm +++|  LIST:                              # LIST #
03836  M00S03580.virterm +++|    VDLIST;
03837  M00S03581.virterm +++|    GOTO ENDCASE;
03838  M00S03582.virterm +++|
03839  M00S03583.virterm +++|  MANY:                              # MANY ACTION RANGE #
03840  M00S03584.virterm +++|    VDMANY;
03841  M00S03585.virterm +++|    GOTO ENDCASE;
03842  M00S03586.virterm +++|
03843  M00S03587.virterm +++|  SNGL:                              # SINGLE ACTION RANGE #
03844  M00S03588.virterm +++|    VDSNGL;
03845  M00S03589.virterm +++|
03846  M00S03590.virterm +++|  ENDCASE:
Line S00066 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03847  M01S00066.virte12 +++|    IF VTHOLD LS 0 THEN GOTO FAIL;   # IF TABLE SEARCH FAILED #
03848  M00S03591.virterm +++|    IF VTI EQ 0 THEN GOTO PARSE;     # IF NO MATCH FOUND YET #
03849  M00S03592.virterm +++|
03850  M00S03593.virterm +++|#   START OF NON-REENTRANT CODE SEQUENCE #
03851  M00S03594.virterm +++|
03852  M00S03595.virterm +++|    VDGETS;                          # PUT ACTION INTO VTHOLD #
Line S00067 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03853  M01S00067.virte12 +++|    IF VTHOLD LS 0 THEN GOTO FAIL;   # IF TABLE SEARCH FAILED #
03854  M00S03596.virterm +++|    ACTONE = VTHOLD;
Line S03597 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03855  M01S03597.virte12 ---|    VTCOUNT = VTCOUNT + 1;
03856  M00S03598.virterm +++|    VDGETS;
Line S00068 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03857  M01S00068.virte12 +++|    IF VTHOLD LS 0 THEN GOTO FAIL;   # IF TABLE SEARCH FAILED #
03858  M00S03599.virterm +++|    ACTTWO = VTHOLD;
03859  M00S03600.virterm +++|    VTHOLD = ACTION;
03860  M00S03601.virterm +++|
03861  M00S03602.virterm +++|#   END OF NON-REENTRANT CODE SEQUENCE #
03862  M00S03603.virterm +++|
03863  M00S03604.virterm +++|    IF VTHOLD GQ 0 THEN
03864  M00S03605.virterm +++|      BEGIN                          # IF ACTION IS AN OFFSET #
Line S03606 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03865  M01S03606.virte12 ---|      VTI = 0;                       # RESET MATCH NOT FOUND #
03866  M00S03607.virterm +++|      VTCOUNT = VTHOLD;              # CONTINUE WITH PARSING #
Line S03608 Modification History
M01 (Removed by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03867  M01S03608.virte12 ---|      GOTO GETINP;                   # GET NEXT INPUT BYTE #
Line S00069 Modification History
M01 (Added by) virte12
Seq #  *Modification Id* Act 
----------------------------+
03868  M01S00069.virte12 +++|      VDNXTI;                        # GET NEXT INPUT BYTE #
03869  M01S00070.virte12 +++|      GOTO PARSE;                    # CONTINUE SEQUENCE #
03870  M00S03609.virterm +++|      END
03871  M00S03610.virterm +++|    ELSE
03872  M00S03611.virterm +++|      BEGIN
03873  M00S03612.virterm +++|      VTORDN = ABS(VTHOLD);          # RETURN INP ORDINAL #
03874  M00S03613.virterm +++|      END
03875  M00S03614.virterm +++|
03876  M00S03615.virterm +++|  IOEND  # VDCHEK #
03877  M00S03616.virterm +++|CONTROL EJECT;                       # START OF MAIN CODE FOR VDTIINP #
03878  M00S03617.virterm +++|
03879  M00S03618.virterm +++|IF VTINCR NQ 0 THEN
03880  M00S03619.virterm +++|  BEGIN                              # IF POSITION NEEDS UPDATING #
03881  M00S03620.virterm +++|  VTINCR = 0;
03882  M00S03621.virterm +++|  VTXCUR = VTXCUR + 1;               # INCREMENT X POSITION #
03883  M00S03622.virterm +++|  IF VTXCUR GR VTXMAX THEN
03884  M00S03623.virterm +++|    BEGIN                            # IF PAST COLUMN BOUNDARY #
03885  M00S03624.virterm +++|    IF TABRGHTCHR[0] GQ CURSORMOVE"SPIRAL" THEN
03886  M00S03625.virterm +++|      BEGIN                          # IF WRAP OR SPIRAL #
03887  M00S03626.virterm +++|      VTXCUR = 0;                    # CLEAR X POSITION #
03888  M00S03627.virterm +++|      IF TABRGHTCHR[0] EQ CURSORMOVE"SPIRAL" THEN
03889  M00S03628.virterm +++|        BEGIN                        # IF SPIRAL #
03890  M00S03629.virterm +++|        VTYCUR = VTYCUR + 1;         # INCREMENT Y POSITION #
03891  M00S03630.virterm +++|        IF VTYCUR GR VTYMAX THEN
03892  M00S03631.virterm +++|          BEGIN                      # IF PAST LINE BOUNDARY #
03893  M00S03632.virterm +++|          IF TABLASTPOS[0] EQ CURSORMOVE"SPIRAL" THEN
03894  M00S03633.virterm +++|            BEGIN                    # IF SPIRAL #
03895  M00S03634.virterm +++|            VTYCUR = 0;              # CLEAR Y POSITION #
03896  M00S03635.virterm +++|            END
03897  M00S03636.virterm +++|          ELSE                       # STOP, WRAP OR SCROLL #
03898  M00S03637.virterm +++|            BEGIN
03899  M00S03638.virterm +++|            VTYCUR = VTYMAX;         # SET Y TO LAST LINE #
03900  M00S03639.virterm +++|            IF TABLASTPOS[0] EQ CURSORMOVE"SCROLL" THEN
03901  M00S03640.virterm +++|              BEGIN                  # IF SCROLL #
03902  M00S03641.virterm +++|              VTORDN = SCREENST"CLRPAG";
03903  M00S03642.virterm +++|              IORET                  # RETURN SOFT CLEAR PAGE #
03904  M00S03643.virterm +++|              END
03905  M00S03644.virterm +++|            END
03906  M00S03645.virterm +++|          END
03907  M00S03646.virterm +++|        END
03908  M00S03647.virterm +++|      END
03909  M00S03648.virterm +++|    ELSE
03910  M00S03649.virterm +++|      BEGIN                          # IF STOP #
03911  M00S03650.virterm +++|      VTXCUR = VTXMAX;               # SET X TO LAST COLUMN #
03912  M00S03651.virterm +++|      END
03913  M00S03652.virterm +++|    END
03914  M00S03653.virterm +++|  END
03915  M00S03654.virterm +++|
03916  M00S03655.virterm +++|VDCHEK;                              # CHECK INPUT SEQUENCE #
03917  M00S03656.virterm +++|
03918  M00S03657.virterm +++|IF VTORDN LS INPUTORD"MAXPLUS1" THEN GOTO INP[VTORDN];
03919  M00S03658.virterm +++|
03920  M00S03659.virterm +++|                                     # FALL THROUGH TO FAIL CASE #
03921  M00S03660.virterm +++|
03922  M00S03661.virterm +++|  BADINPUT:                          # UNRECOGNIZED SEQUENCE #
03923  M00S03662.virterm +++|    IF VTCHAR EQ X"14" THEN
03924  M00S03663.virterm +++|      BEGIN                          # IF CONTROL-T #
03925  M00S03664.virterm +++|      VTORDN = SCREENST"GKEY";       # RETURN GENERIC STOP #
03926  M00S03665.virterm +++|      VTCHAR = 4;
03927  M00S03666.virterm +++|      END
03928  M00S03667.virterm +++|    ELSE
03929  M00S03668.virterm +++|      BEGIN                          # NOT CONTROL-T #
03930  M00S03669.virterm +++|      VTORDN = SCREENST"BAD";        # BAD INPUT #
03931  M00S03670.virterm +++|      END
03932  M00S03671.virterm +++|    IORET                            # RETURN #
03933  M00S03672.virterm +++|CONTROL EJECT;
03934  M00S03673.virterm +++|
03935  M00S03674.virterm +++|  NOOP:                              # CURRENTLY NON OPERATIONAL #
03936  M00S03675.virterm +++|    VTORDN = SCREENST"NOOP";
03937  M00S03676.virterm +++|    IORET                            # RETURN #
03938  M00S03677.virterm +++|
03939  M00S03678.virterm +++|  INSERTCHAR:                        # INSERT CHARACTER #
03940  M00S03679.virterm +++|    VTCHAR = X"20";                  # BLANK #
03941  M00S03680.virterm +++|    VTORDN = SCREENST"INSC";
03942  M00S03681.virterm +++|    IORET                            # RETURN #
03943  M00S03682.virterm +++|
03944  M00S03683.virterm +++|  DELETECHAR:                        # DELETE CHARACTER #
03945  M00S03684.virterm +++|    VTORDN = SCREENST"DELC";
03946  M00S03685.virterm +++|    IORET                            # RETURN #
03947  M00S03686.virterm +++|
03948  M00S03687.virterm +++|  INSLNECURL:                        # INSERT LINE, CURSOR LEFT #
03949  M00S03688.virterm +++|    VTXCUR = 0;                      # FALL THROUGH TO COMMON CODE #
03950  M00S03689.virterm +++|
03951  M00S03690.virterm +++|  INSERTLINE:                        # INSERT LINE #
03952  M00S03691.virterm +++|    VTORDN = SCREENST"INSL";
03953  M00S03692.virterm +++|    IORET                            # RETURN #
03954  M00S03693.virterm +++|
03955  M00S03694.virterm +++|  DELINECURL:                        # DELETE LINE, CURSOR LEFT #
03956  M00S03695.virterm +++|    VTXCUR = 0;                      # FALL THROUGH TO COMMON CODE #
03957  M00S03696.virterm +++|
03958  M00S03697.virterm +++|  DELETELINE:                        # DELETE LINE #
03959  M00S03698.virterm +++|    VTORDN = SCREENST"DELL";
03960  M00S03699.virterm +++|    IORET
03961  M00S03700.virterm +++|
03962  M00S03701.virterm +++|  CLRSCRCURH:                        # CLEAR SCREEN, CURSOR HOME #
03963  M00S03702.virterm +++|    VTOXPOS = VTXCUR;                # SAVE CURSOR POSITION #
03964  M00S03703.virterm +++|    VTOYPOS = VTYCUR;
03965  M00S03704.virterm +++|    IF TABVTHOMEU[0] THEN VTYCUR = 0; ELSE VTYCUR = VTYMAX;
03966  M00S03705.virterm +++|    VTXCUR = 0;                      # FALL THROUGH TO COMMON CODE #
03967  M00S03706.virterm +++|
Proceed to Part 2