+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+381
         STW,ACC  LBUF              SAVE BUFFER SIZE
+553
         LW,C     LBUF              GET BUFFER SIZE
         STW,C    LBUFFER           SAVE
+1190
         LW,ACC   LBUF              GET BUFFER SIZE
         STW,ACC  LBUFFER           SAVE BUFFER SIZE
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*                PROCEDURE ASIS RESETS OUTPUT POINTER.  THIS
+*                MAY CAUSE  PROBLEMS SINCE INFORMATION MAY ALREADY
+*                BE STORED IN THE OUTPUT BUFFER.
+549,549
+571,571
         AI,PTR   -1                LAST CHAR IS A LF SO REMOVE
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+680
         MTW,0    PRHEAD            CHECK PRINT HEAD POSITION
         IF,LZ
*
*   HERE FOR SPECIAL CASE IF LAST (NON-BLANK,NON-BACKSPACE) CHAR WAS
*   IN COL 0 LEAVING GTH 'THINKING' IT IS NOW PHYSICALLY POSITIONED
*   IN A COL TO THE LEFT OF COL 0
*
         MTW,1    PRHEAD            INCR PRINT POSITION
         ELS
+681
         FI
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+104
         SYSTEM   GTHDATA           GET EXTERNAL DATA AREA DEFS
         PAGE
*
*
* PROCEDURE: DATA
*
* PROCEDURE TO SET EVEN OR ODD PARITY.  THIS PROC WILL GENERATE AN EVEN
* OR ODD PARITY BIT (WHEN NECESSARY) IN BIT POSITION 0 OF EACH BYTE OF
* THE HEX CONSTANT ARGUMENT.
*
* REFERENCE LINE:
*
*
* WHERE N IS THE NUMBER OF BYTES IN THE HEX CONSTANT
*
*
* NOTE:  TO SET EVEN OR ODD PARITY, USE ONE OF THE FOLLOWING EQUATES:
*
*        PARITY   EQU     EVEN
*        PARITY   EQU     ODD
*
*
         OPEN     DATA
         OPEN     MASK,I,F,FF
         OPEN     FL,VL,II,N,NN
MASK     EQU      X'FF00000000000000'
DATA     CNAME
         PROC
LF       EQU      $
N        SET      NUM(AF)
NN       SET      S:S(CF(2)>0,4,CF(2))
VL       SET      0
FL       SET      0
I        DO       NN
FL(I)    SET      8
VL(I)    SET      PARITY
         FIN
         DO       N<=0
         GEN,FL   VL
         ELSE
II       DO       N
F        SET      AF(II)
I        DO       NN
FF(I)    SET      (F&(MASK**-(8*(I-1))))**-(8*(8-I))
FF(I)    SET      PAR(FF(I))
         FIN
         GEN,FL   FF
         FIN
         FIN
         PEND
         CLOSE    MASK,I,F,FF
         CLOSE    FL,VL,II,N,NN
+130
         CLOSE    DATA
*
+148
AC1      EQU      12                WORK REGISTER
AC2      EQU      13                WORK REGISTER
AC3      EQU      14                WORK REGISTER
+153,153
+887
         CALL     SETPAR            SET PARITY
+1000
         STW,CHAR POS               STORE NEW PAGE POSITION
         CALL     SETPAR
+1002,1002
+1078,1079
         LW,CHAR  PL                GET PAGE LENGTH
         CALL     SETPAR            SET PARITY (EVEN)
         STB,CHAR RBUFPGWD,PTR      STORE PAGE LENGTH IN BUFFER
+1120
         TITLE    '                       SET PARITY'
****************   SET PARITY   *************************
*********************************************************
*
* SETS EVEN OR ODD PARITY DEPENDING ON SYMBOL 'PARITY'
*
* INPUT:
* CHAR CONTAINS CHARACTER TO BE SET
*
* OUTPUT:
* CHAR CONTAINS CHARACTER WITH PARITY SET
*
* USES:
* CHAR - ACC - AC1 - AC2 - AC3
*
         LOCAL    $10
*
SETPAR   RES      0
         LI,ACC   8                 LOOP COUNT
         LW,AC1   CHAR              GET CHARACTER
         LI,AC3   0                 INIT ACCUM
$10      RES      0
         SLD,AC1  -1                GET NEXT BIT
         SLS,AC2  -24
         AW,AC3   AC2               ACCUMULATE NUMBER OF BITS
         BDR,ACC  $10               CONTINUE
         AND,AC3  L(X'80')          FIND EVEN OR ODD
         EOR,AC3  L(PARITY)         DETERMINE PARITY BIT
         OR,CHAR  AC3               OR PARITY BIT INTO CHAR
         EXIT
*
*
         TITLE    '                    SET PHYSICAL TABS'
*********************************************************
****************   SET PHYSICAL TABS ********************
*********************************************************
*
* SETS PHYSICAL TABS ACCORDING TO M:UC TABS
*
* INPUT:
* NONE
*
* OUTPUT:
* NONE
*
* USES:
* PTR - CHAR - T
*
         LOCAL    $10
*
SETPTABS RES      0
         STW,SRTN SAVE1             SAVE RETURN ADDRESS
         LI,PTR   0                 SET OUTPUT POINTER TO 0
         PUTP     NUL#,NUL#         GET AROUND TIMING PROBLEMS
         LI,T     -16               SET UP LOOP INDEX
$10      RES      0
         MTB,0    M:UC+19,T         GET NEXT TAB
         IF,GZ
         PUTP     ESC#,HT#          PUT 1ST 2 CHARS OF ABS TABS
         LB,CHAR  M:UC+19,T         GET TAB POSITION
         AW,CHAR  LEFTMAR           COMPENSATE FOR LEFT MARGIN
         CALL     SETPAR            SET PARITY
         CALL     PUTP              PUT COLUMN POSITION
         PUTP     ESC#,1#           PUT ESC 1 (SET PHY TAB
         BIR,T    $10               CONTINUE
         FI
         PUTP     CR#               PUT CR AS LAST CHAR
         M:WRITE  *FPT,(BUF,OUTBUF),(SIZE,*PTR),(WAIT)
         B        *SAVE1            RETURN
*
+1137
         LOCAL
*
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+744,744
         LW,PT    FCBUF             GET BUF POSITION OF 1ST CHAR
+1266,1267
         AI,LPC   1                 INCREMENT CARRIAGE POSITION
         STW,LPC  COUNT             STORE POSITION OF 1ST PRINTABLE CHAR
         STW,PT   FCBUF             STORE BUF POSITION OF 1ST CHAR
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+342
         LW,ACC   VER               YES, SAVE VERTICAL TAB SETTING
         STW,ACC  VERSAVE
         MTW,0    PL                CHECK FOR PAGE LENGTH = 0
         IF,LEZ
         MTW,1    VER               TURN VERTICAL TABBING OFF
         FI
+516
         LW,ACC   VERSAVE           GET SAVED VERTICAL TAB SETTING
         STW,ACC  VER               RESET VERTICAL TAB FLAG
+991
         IF,LEZ   OR                DO IF PAGE SIZE = 0
+1070
         CALL     SETPTABS          SET PHYSICAL TABS
         MTW,0    PL                CHECK FOR INFINITE PG LENGTH
         IF,LEZ
         M:WRITE *FPT,(BUF,RRBUF),(SIZE,RRBUFSZ),(WAIT)
         ELS
+1080
         FI
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*   -----        THE INTERMEDIATE INPUT BUFFER (BUF) IS OVERFLOWING
+*                INTO ADJACENT DATA, CAUSING TRAPS.
+*
+*                ALTHOUGH TEXT WILL ONLY SEND 140 (INCIDENTLY,
+*                EVEN THIS IS NOT CHECKED), TABLANK WILL SUBSTITUTE
+*                ACTUAL BLANKS FOR ANY TABS.  THEREFORE, THE INTERMEDIATE
+*                BUFFER CAN GROW WELL BEYOND THE INITIAL 140 SIZE.
+*
+*                INDICATED FIXES:
+*                (1)  CHECK THE INCOMING LENGTH.  IF GREATER THAN
+*                     140, TRIM TO 140.
+*                (2)  EXPAND THE INTERMEDIATE SIZE TO ALLOW FOR THIS
+*                     REALIZATION.  OUTPUT SHOULD BE EXPANDED ACCORDINGLY,
+*                     BUT, FOR NOW, JUST TRY TO GET TEXT TO WORK (IT DOES
+*                     NOT INHIBIT ABS TABS, WHICH ALLOWS RECOMPRESSION).
+*                (3)  CHECK THE FORMATTED WRITE SIZE; IT MAY BE NECESSARY
+*                     TO DO TWO WRITES TO GET THE FINAL THING OUT.
+*
+*  CORRECTION TO GTH1:C  (04/08/76 - JEQ)
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+291,291                                                              *B-GTH1
*        FLOW:    PROCESS THE FPT, KEEPING INFO WE CAN USE, AND       *B-GTH1
+310                                                                  *B-GTH1
*                 SINCE THE GTH CAN (POTENTIALLY) REDUCE THE INPUT    *B-GTH1
*                    BYTE COUNT BY THE TIME AN ACTUAL TERMINAL WRITE  *B-GTH1
*                    IS DONE, THE INITIAL LENGTH CHECK SHOULD BE      *B-GTH1
*                    PUSHED TO LATER IN THE PROCESS.  THIS WOULD      *B-GTH1
*                    ALLOW SOME LONGER LINES TO BE WRITTEN, DESPITE   *B-GTH1
*                    THE SYSTEM LIMIT.                                *B-GTH1
+380                                                                  *B-GTH1
         IF,G     MAXTBCNT,ACC      LIMIT INITIAL INPUT TO            *B-GTH1
         LV,ACC   MAXTBCNT            MAX TERMINAL TRANSFER SIZE.     *B-GTH1
         FI                                                           *B-GTH1
+500                                                                  *B-GTH1
         LV,ACC   0                                                   *B-GTH1
         STW,ACC  LBUFFER           SIZE OF SECOND WRITE              *B-GTH1
+502                                                                  *B-GTH1
         IF,G     MAXTBCNT,PTR      CHECK FINAL OUTPUT SIZE           *B-GTH1
         AV,PTR   -MAXTBCNT         REDUCE IF GREATER,                *B-GTH1
         STW,PTR  LBUFFER             AND SAVE FOR 2ND WRITE.         *B-GTH1
         LV,PTR   MAXTBCNT          USE MAX FOR 1ST WRITE             *B-GTH1
         FI                                                           *B-GTH1
+507,507                                                              *B-GTH1
+514                                                                  *B-GTH1
         LW,PTR   LBUFFER           SEE IF ANY REMAINS                *B-GTH1
         IF,NZ                      DOIF SOME DOES                    *B-GTH1
         LV,T     MAXTWCNT          UPDATE BUFFER ADDRESS             *B-GTH1
         AWM,T    FPT+1,PT            .                               *B-GTH1
         STW,PTR  FPT+2,PT          SET NEW SIZE                      *B-GTH1
         M:WRITE,E FPT              WRITE IT OUT                      *B-GTH1
         FI                                                           *B-GTH1
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*   -----        THE TABLANK ROUTINE WILL ACCESS OUTSIDE THE PASSED
+*                USER BUFFER AREA IF THE INPUT IS A SINGLE CARRIAGE
+*                RETURN.  THIS CAN TRAP OR MAKE DECISIONS BASED ON
+*                GARBAGE.
+*
+*  CORRECTION TO GTH1:C  (04/07/76 - JEQ)
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+1167                                                                 *B-GTH1
*                 PRINT IS INITIALLY 0                                *B-GTH1
+1233                                                                 *B-GTH1
         IF,GEZ                     (MIGHT HAVE BEEN ONLY CHARACTER)  *B-GTH1
+1235,1235                                                            *B-GTH1
         THEF,EQ  LF,ACC            IS IT A LINEFEED?                 *B-GTH1
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*   -----        A LEFT-MARGIN SPECIFICATION IS IGNORED IF THE FIRST
+*                PRINT LINE ON A 'PAGE' BEGINS IN RELATIVE COLUMN 0
+*
+*                PROBLEM OCCURS BECAUSE TEST AT BEGINNING OF 'HORTAB'
+*                (# SPACES TO MOVE) IS NOT PROPERLY ANTICIPATED BY
+*                THE INITIAL CALLS IN 'FORWARD' AND 'BACKWARD'.
+*
+*                THIS INVOLVES A CHANGE IN THE FUNCTION OF THE
+*                'PRHEAD' CELL.  PREVIOUSLY, IT WAS RELATIVE
+*                TO THE LEFT MARGIN; NOW, IT MUST BE RELATIVE TO
+*                PHYSICAL COLUMN 0.
+*
+*  CORRECTION TO GTH1:C  (03/29/76 - JEQ)
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+439                                                                  *B-GTH1
         PUTP     ESC#,5#           FORCE FORWARD TO START            *B-GTH1
         LW,ACC   LEFTMAR           GET TO LEFT MARGIN BEFORE         *B-GTH1
         SW,ACC   PRHEAD            UNKNOWN STUFF                     *B-GTH1
         AWM,ACC  PRHEAD                                              *B-GTH1
         CALL     HORTAB                                              *B-GTH1
+466                                                                  *B-GTH1
         SW,ACC   LEFTMAR           REMOVE MARGIN BIAS                *B-GTH1
+476                                                                  *B-GTH1
         AW,CHAR  LEFTMAR           REMOVE MARGIN BIAS                *B-GTH1
+634,636                                                              *B-GTH1
         LW,ACC   LEFTMAR           1ST PHYSICAL COLUMN + '1ST'       *B-GTH1
         AW,ACC   LPC                 RELATIVE PRINTING COLUMN.       *B-GTH1
         SW,ACC   PRHEAD            DECREASE BY WHERE WE ARE          *B-GTH1
         AWM,ACC  PRHEAD            UPDATE POSITION                   *B-GTH1
+739,739                                                              *B-GTH1
         LW,ACC   LEFTMAR           1ST PHYSICAL COLUMN + 1ST         *B-GTH1
         AW,ACC   COUNT               RELATIVE PRINTING COLUMN.       *B-GTH1
+859,859                                                              *B-GTH1
*                 PRHEAD IS 'TO BE' (0-ORIGIN) POSITION OF PRINTER    *B-GTH1
+864,864                                                              *B-GTH1
+885,885                                                              *B-GTH1
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*   -----        LEADING BLANK LINES ON A 'TEXT' HEADING WILL BE LOST
+*                IN PRINT-CONTINUOUS MODE, AS THE LINEFEED
+*                ROUTINE WILL NOT GO PAST THE TOP OF THE
+*                NEXT PAGE.
+*
+*                FIX APPEARS TO BE, 1) GO TO NEXT PAGE, AND
+*                2) DO VERTICAL TAB FOR ANY REMAINING LINES.
+*
+*  CORRECTION TO GTH1:C  (03/24/76 - JEQ)
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+965,966                                                              *B-GTH1
*   IF THE COUNT WOULD TAKE US PAST A PAGE, ISSUE A FORM-FEED         *B-GTH1
*   TO GET TO THE NEXT PAGE, AND THEN OUTPUT THE REQUIRED             *B-GTH1
*   CONTROLS TO GET US DOWN TO THE REST OF THE COUNT .                *B-GTH1
+984,984                                                              *B-GTH1
         LOCAL    $05,$10                                             *B-GTH1
$05      RES      0                                                   *B-GTH1
+1013,1014                                                            *B-GTH1
         LI,SRTN  1                                                   *B-GTH1
         STW,SRTN POS               FIRST LINE                        *B-GTH1
         SW,ACC   PL                (BOTTOM OF PAGE IS PL, BUT        *B-GTH1
         AV,ACC   -1                  TOP OF NEXT PAGE IS PL+1)       *B-GTH1
         STW,ACC  PLFCT             SAVE NUMBER YET TO DO             *B-GTH1
         BNEZ     $05               GO BACK, IF ANY                   *B-GTH1
*                                                                     *B-GTH1
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*
+*  SIDR NO.      DIFFICULTY
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+*   -----        IN A00, THE RESET FUNCTION WAS DESIGNED TO FLUSH
+*                ANY PENDING LINEFEEDS, PRIOR TO PERFORMING THE RESET
+*                SEQUENCE.  SINCE THE RESET SEQUENCE CONTAINS AN
+*                UNCONDITIONAL FORM-FEED, THIS CAUSES EJECTION OF A
+*                BLANK PAGE WHEN 'LINEFEED' ALREADY JUST TOOK THINGS TO
+*                THE TOP OF THE NEXT PAGE.
+*
+*                THERE MAY BE SOME ARGUMENT, BUT IT SEEMS BEST
+*                TO HAVE RESET MEAN ONLY THAT: GET TO A NEW
+*                PAGE - FORGET ABOUT ANY CONTINUING ENVIRONMENT.
+*
+*  CORRECTION TO GTH1:C  (02/12/76 - JEQ)
+*                +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+1053,1053                                                            *B-GTH1
+1058,1059                                                            *B-GTH1
+1071,1076                                                            *B-GTH1
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
+END
