FSELIB
          IDENT  GETUTAB
          ENTRY  GETUTAB
          SYSCOM B1 
          TITLE  GETUTAB - GET USER TABLE.
*COMMENT  GETUTAB - GET USER TABLE. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 GUT      SPACE  4,10 
***       GETUTAB - GET USER TABLE. 
* 
*         G.K. CHACE.        83/02/03.
 GUT      SPACE  4,10 
***       GETUTAB READS A PACKED SMFEX USER TABLE ENTRY INTO
*         AN EXPANDED VECTOR.  THE SYMPL CODE IN SMFEX MUST AGREE 
*         WITH THIS ALGORITHM AS TO FORMAT OF EACH ARRAY. 
* 
*         THE VECTOR HAS ONE WORD PER VALUE.  ONE-BIT VALUES
*         ARE IN THE SIGN BITS. LARGER FIELDS ARE AT RIGHT OF WORD. 
 GUT      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         GETUTAB(UTAB,VECTOR); 
* 
*                UTAB = PACKED USER TABLE.
*                           FIRST WORD OF USERTABLE ENTRY 
*                                  FOURTEEN 1-BIT FIELDS
*                                  FOUR UNUSED BITS 
*                                  THREE SIX-BIT FIELDS 
*                                  TWO TWELVE BIT FIELDS
*                           SECOND WORD OF USERTABLE ENTRY
*                                  TWO TWELVE BIT FIELDS
*                                  ONE THIRTY-BIT FIELD 
*                                  SIX UNUSED BITS
*                VECTOR = ONE WORD PER FIELD. 
 GUT      SPACE  4,10 
**        GETUTAB - GET USER TABLE. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 2, 3, 4, 6, 7.
*                A - 2, 3, 4, 6, 7. 
*                B - 1, 2, 7. 
  
  
 GETUTAB  SUBR               ENTRY/EXIT 
  
          SB1    1
          SA2    A1+B1       GET ADDR SECOND PARM 
          SA3    X1          READ FIRST TABLE WORD
          SA4    X1+B1       READ SECOND (LAST) TABLE WORD
          SB7    X2          ADDRESS OF VECTOR
  
          SB2    14          LOOP COUNT 
          MX0    1           MASK 
 LOOP1    BX7    X3*X0       ISOLATE ONE BIT TO SIGN
          LX3    1           BRING UP ANOTHER BIT 
          SA7    B7          STORE IT 
          SB2    B2-B1       DECREMENT LOOP COUNT 
          SB7    B7+B1       INCREMENT VECTOR POINTER 
          NZ     B2,LOOP1    UNTIL ALL 14 FLAGS COPIED
  
          LX3    4+6         WASTE UNUSED BITS AND GET 6 BITS TO RIGHT
          MX0    -6          MASK TO ISOLATE 6 BITS AT BOTTOM 
          SB2    3           LOOP COUNT 
  
 LOOP2    BX7    -X0*X3      ISOLATE 6 BITS AT RIGHT
          LX3    6           BRING UP NEXT 6 BITS 
          SA7    B7          STORE IT 
          SB2    B2-B1       DECREMENT LOOP COUNT 
          SB7    B7+B1       INCREMENT VECTOR POINTER 
          NZ     B2,LOOP2    UNTIL ALL 3 FIELDS COPIED
  
          LX3    6           ROTATE TO ALIGN 12 BITS AT BOTTOM
          MX0    -12         MASK TO ISOLATE 12 BITS AT BOTTOM
  
          BX6    -X0*X3      ISOLATE FIRST 12-BIT FIELD 
          LX3    12          BRING UP LAST 12-BIT FIELD OF FIRST WORD 
          SA6    B7          SAVE 
          BX7    -X0*X3      ISOLATE LAST DATA OF FIRST WORD
          SA7    A6+B1       SAVE LAST DATA FROM FIRST WORD 
  
          LX4    12          BRING FIRST DATA OF SECOND WORD TO RIGHT 
          BX6    -X0*X4 
          LX4    12          BRING SECOND 12-BIT FIELD OF SECOND WORD 
          BX7    -X0*X4 
          SA6    A7+B1
          SA7    A6+B1
  
          LX4    30          BRING 30-BIT FIELD TO BOTTOM 
          MX0    -30
          BX7    -X0*X4 
          SA7    A7+B1
  
          EQ     GETUTAB     RETURN 
          END 
          IDENT  SAVUTAB
          ENTRY  SAVUTAB
          SYSCOM B1 
          TITLE  SAVUTAB - SAVE USER TABLE ENTRY. 
*COMMENT  SAVUTAB - SAVE USER TABLE ENTRY.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 SUT      SPACE  4,10 
***       SAVUTAB - SAVE USER TABLE ENTRY.
* 
*         G.K. CHACE.        83/02/03.
 SUT      SPACE  4,10 
***       *SAVUTAB* PRODUCES A COMPACTED USER TABLE FOR *SMFEX* 
*         FROM THE EXPANDED VECTOR FORMAT.  THE DEFINITIONS AND CODE
*         IN SMFEX MUST AGREE WITH THIS ROUTINE.
* 
*         THE EXPANDED TABLE USES ONE WORD PER ENTRY, WITH ONE-BIT
*         FIELDS AT THE SIGN BITS, ALL LARGER FIELDS RIGHT-JUSTIFIED. 
 SUT      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SAVUTAB(UTAB,VECTOR); 
* 
*                UTAB = PACKED USER TABLE.
*                           FIRST WORD OF USERTABLE ENTRY 
*                                  FOURTEEN 1-BIT FIELDS
*                                  FOUR UNUSED BITS 
*                                  THREE SIX-BIT FIELDS 
*                                  TWO TWELVE BIT FIELDS
*                           SECOND WORD OF USERTABLE ENTRY
*                                  TWO TWELVE BIT FIELDS
*                                  ONE THIRTY-BIT FIELD 
*                                  SIX UNUSED BITS
*                VECTOR = ONE WORD PER FIELD. 
* 
*                ORDINAL  = TERMINAL MODEL NUMBER (1-5).
*                MNEMONIC = USER, VKX, 722, VT100, OR Z19.
 SUT      SPACE  4,10 
**        SAVUTAB - SAVE USER TABLE ENTRY.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 1, 2, 7.
*                A - 1, 2, 7. 
*                B - 1, 2, 7. 
  
  
 SAVUTAB  SUBR               ENTRY/EXIT 
  
          SB1    1
          SA2    A1+B1       GET ADDR SECOND PARM 
          SB7    X1 
  
          SA1    X2          START FETCHING VECTOR WORDS
          SA2    A1+B1
  
          MX7    0           CLEAR ACCUMULATOR
          MX0    1           FIELD ISOLATION MASK 
          SB2    7           LOOP COUNTER 
 LOOP1    BX1    X1*X0       PURIFY DATA
          BX7    X7+X1       ACCUMULATE A FLAG
          SA1    A2+B1       PREFETCH ANOTHER 
          LX7    1           MAKE ROOM FOR MORE DATA
          BX2    X2*X0
          BX7    X7+X2       ACCUMULATE ANOTHER FLAG
          SA2    A1+B1       PREFETCH ANOTHER 
          SB2    B2-B1       DECREMENT LOOP COUNT 
          LX7    1           MAKE ROOM FOR MORE DATA
          NZ     B2,LOOP1    UNTIL 14 FLAGS COPIED
  
          LX7    4+6         ALLOW FOUR SPARES, ALLOCATE 6 BITS 
          MX0    -6          FIELD ISOLATION MASK 
  
          BX1    -X0*X1      PURIFY DATA - FIRST 6-BIT FIELD
          BX7    X7+X1       ACCUMULATE 
          SA1    A2+B1       PREFETCH ANOTHER 
          LX7    6           ROOM FOR NEXT
          BX2    -X0*X2      SAME SEQUENCE - SECOND 6-BIT 
          BX7    X7+X2
          SA2    A1+B1
          LX7    6
          BX1    -X0*X1      SAME - THIRD AND LAST 6-BIT FIELD
          BX7    X7+X1
          SA1    A2+B1
  
          LX7    12          NOW MAKE ROOM FOR 12-BITS
          MX0    -12         FIELD ISOLATION MASK 
  
          BX2    -X0*X2      ISOLATE FIRST 12-BIT FIELD 
          BX7    X7+X2
          SA2    A1+B1
          LX7    12 
          BX1    -X0*X1      SECOND 12-BIT FIELD
          BX7    X7+X1
          SA1    A2+B1
  
          SA7    B7          STORE FIRST PACKED WORD
          MX7    0           CLEAR NEW ACCUMULATOR
  
          BX2    -X0*X2      ISOLATE NEXT 12-BIT FIELD
          BX7    X7+X2
          SA2    A1+B1
          LX7    12 
          BX1    -X0*X1      ISOLATE LAST 12-BIT FIELD
          BX7    X7+X1
  
          LX7    30          ALLOCATE 30 BITS 
          MX0    -30         ISOLATION MASK 
  
          BX2    -X0*X2      ISOLATE 30-BIT DATA FIELD
          BX7    X7+X2
  
          LX7    6           FINAL BIT ALIGNMENT IN SECOND WORD 
          SA7    A7+B1
  
          EQ     SAVUTAB     RETURN 
          END 
          IDENT  FINDBIT
          ENTRY  FINDBIT
          SYSCOM B1 
          TITLE  FINDBIT - FIND BIT ON IN SMFEX BITMAP. 
*COMMENT  FINDBIT - FIND BIT ON IN SMFEX BITMAP.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FBO      SPACE  4,10 
***       FINDBIT - FIND BIT ON IN SMFEX BITMAP.
* 
*         G.K. CHACE.        83/02/03.
 FBO      SPACE  4,10 
***       *FINDBIT* SEARCHES AN *SMFEX* BITMAP TO FIND THE FIRST BIT
*         WHICH IS ON.  WE CHECK UP TO *LIMIT* WORDS TO FIND A BIT ON.
*         IF WE DONT FIND ANY, WE RETURN -1.  THE NORMAL FUNCTION 
*         RESULT IS A BIT INDEX.  THE FORMAT IS 32 BITS PER WORD, 
*         STARTING 12 BITS FROM THE LEFT.  THE BOTTOM 16 BITS MUST BE 
*         ZERO.  THIS FORMAT ALLOWS EFFICIENT SCANNING OF THE WORD
*         WITH NORMALIZE AND ALSO ALLOWS EASY SPLITTING OF THE BIT
*         POSITION INTO WORD OFFSET AND BIT-WITHIN-WORD OFFSET.  THE
*         RESULT MUST BE SATISFIED BY BOTH BITMAP AND BITMASK.
 FBO      SPACE  4,10 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         INDEX=FINDBIT(LIMIT,BITMAP,BITMASK);
* 
*                LIMIT    = NUMBER OF WORDS IN BITMAP AND BITMASK.
*                BITMAP   = ALLOCATION BITS.
*                BITMASK  = ADDITIONAL BITS AND-ED WITH BITMAP. 
 FBO      SPACE  4,10 
**        FINDBIT - FIND BIT ON IN SMFEX BITMAP.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4.
*                B - 1, 6, 7. 
  
  
 FINAL    SB6    B6+B1       CORRECT WORD OFFSET
          SX7    B7-B6       COMPUTE WORD OFFSET
          LX7    5           MULT BY 32 TO MERGE BIT OFFSET 
          IX6    X6+X7       FINAL RESULT 
  
 FINDBIT  SUBR               ENTER HERE 
          SB1    1
          SA2    A1+B1       X2->BITMAP 
          SA1    X1          X1=LIMIT 
          SA3    A2+B1       X3->BITMASK
  
          MX0    1           GEN 2000 MASK
          LX0    59 
          SB6    X1          REMEMBER 
          SB7    X1          DITTO
  
          SA1    X2          START PREFETCH BOTH ARRAYS 
          SA3    X3 
          SA2    A1+B1
          SA4    A3+B1
  
 LOOP     BX6    X1*X3       MERGE MAP,MASK IN SCRATCH REG
          SA1    A2+B1       PREFETCH MORE
          SA3    A4+B1       DITTO
          BX7    X2*X4       SAME SEQUENCE
          SA2    A1+B1
          SA4    A3+B1
          BX6    X6+X0       MERGE 2000 DUMMY EXPONENTS 
          BX7    X7+X0
          NX5    X6,B4       SEARCH FOR BIT ON
          SB6    B6-B1       CHECK LOOP EXPIRED 
          MI     B6,EXHAUST 
          SX6    B4          TENTATIVE RESULT 
          NZ     X5,FINAL    IF REALLY FOUND ONE
          NX5    X7,B4       SAME SEQUENCE
          SB6    B6-B1
          MI     B6,EXHAUST 
          SX6    B4 
          NZ     X5,FINAL 
          EQ     LOOP        AND GO AROUND
  
 EXHAUST  SX6    -1 
          EQ     FINDBIT
  
          END 
          IDENT  SPREAD 
          ENTRY  SPREAD 
          SYSCOM B1 
          TITLE  SPREAD - SPREAD RETURN JUMP WORDS TO ENTRIES.
*COMMENT  SPREAD - SPREAD RETURN JUMP WORDS TO ENTRIES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 SRJ      SPACE  4,10 
***       SPREAD - SPREAD RETURN JUMP WORDS TO ENTRIES. 
* 
*         G.K. CHACE.        83/02/03.
 SRJ      SPACE  4,10 
***       *SPREAD* IS A SPECIAL-PURPOSE ROUTINE FOR THE SMFEX 
*         SUBSYSTEM.  SMFEX CALLS SPREAD JUST BEFORE INVOKING A NEW 
*         USER SUBTASK, TO RESTORE ALL RETURN JUMP WORDS TO THEIR 
*         PREVIOUS STATE.  WE ASSUME THE STACK WAS USED IN THE GATHER 
*         ROUTINE EARLIER TO SAVE THE RJ WORDS.  THE STACK CONSISTS 
*         OF SINGLE-WORD ENTRIES.  THE UPPER 30 BITS ARE THE
*         MACHINE-GENERATED *EQ* INSTRUCTION USED TO RETURN OUT OF
*         THE SUBROUTINE.  THE LOWEST 18 BITS ARE THE ADDRESS OF THE
*         SUBROUTINE. 
 SRJ      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SPREAD(RSTKPTR,RENTSTK);
* 
*                RSTKPTR  = NUMBER OF WORDS IN STACK ARRAY. 
*                RENTSTK  = THE STACK ARRAY BUILT BY GATHER ROUTINE.
 SRJ      SPACE  4,10 
**        SPREAD - SPREAD RETURN JUMP WORDS TO ENTRIES. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - 1, 2, 4, 7.
  
  
 SPREAD   SUBR
          SB1    1
          SA2    A1+B1       GET ADDR STACK 
          SA1    X1          GET VALUE STACK LEVEL
          SB2    B1+B1       CONSTANT 2 
          SB4    B2+B2       CONSTANT 4 
          SB7    X1          LOOP CONTROL 
          SA1    X2          START PREFETCH 
          SA2    X2+B1
          SA3    A1+B2
          SA4    A2+B2
  
 LOOP     BX6    X1 
          SB7    B7-B1
          SA1    A1+B4       PREFETCH ANOTHER 
          ZR     B7,SPREAD   CHECK IF DONE
          SA6    X6 
          BX7    X2 
          SB7    B7-B1
          SA2    A2+B4
          ZR     B7,SPREAD
          SA7    X7 
          BX6    X3 
          SB7    B7-B1
          SA3    A3+B4
          ZR     B7,SPREAD
          SA6    X6 
          BX7    X4 
          SB7    B7-B1
          SA4    A4+B4
          ZR     B7,SPREAD
          SA7    X7 
          EQ     LOOP 
  
          END 
          IDENT  GATHER 
          ENTRY  GATHER 
          SYSCOM B1 
          TITLE  GATHER - GATHER RETURN JUMP WORDS FROM ENTRIES.
*COMMENT  GATHER - GATHER RETURN JUMP WORDS FROM ENTRIES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 GRJ      SPACE  4,10 
***       GATHER - GATHER RETURN JUMP WORDS FROM ENTRIES. 
* 
*         G.K. CHACE.        83/02/03.
 GRJ      SPACE  4,10 
***       *GATHER* SCANS AN ARRAY WHICH STACKS THE ADDRESSES OF THE 
*         ENTRY POINTS FOR ALL ACTIVE *SYMPL* SUBROUTINES.  THE SMFEX 
*         SUBSYSTEM AND FSE EDITOR ARE ONLY CAPABLE OF KEEPING ENTRY
*         POINT ADDRESSES, AND CANNOT KEEP RETURN ADDRESSES, DUE TO 
*         THE CODE-GENERATION LIMITATIONS OF THE SYMPL COMPILER.
*         SMFEX CALLS GATHER WHEN HALTING ONE USER SUBTASK.  GATHER 
*         SCANS THE VECTOR OF ENTRY ADDRESSES, AND READS UP THE 
*         RETURN JUMP WORDS AT EACH ENTRY POINT, THEN PACKS THE 
*         RETURN JUMP BACK INTO THE VECTOR.  THE ENHANCED VECTOR THEN 
*         CONTAINS ENTRY/EXIT CODE IN THE TOP 30 BITS OF EACH ENTRY,
*         AND THE ADDRESS FOR RESTORATION OF THAT CODE, IN THE LOWER
*         18 BITS.  SMFEX SAVES THIS VECTOR AND USES THE *SPREAD* 
*         ROUTINE TO RESTORE THE ENTRY POINTS FOR RESUMPTION OF THE 
*         SUBTASK.
 GRJ      SPACE  4,10 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         GATHER(RSTKPTR,RENTSTK);
* 
*                RSTKPTR  = NUMBER OF WORDS IN STACK. 
*                RENTSTK  = THE REENTRANCY STACK. 
 GRJ      SPACE  4,10 
**        GATHER - GATHER RETURN JUMP WORDS FROM ENTRIES. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 2, 3, 4, 6, 7.
*                B - 1, 2, 6, 7.
  
  
 GATHER   SUBR
          SB1    1
          SA2    A1+B1       GET ADDR STACK 
          SA1    X1          GET VALUE STACKLEVEL 
          SB2    B1+B1       CONSTANT 2 
          SB6    X2+B2       BRACKETED BY PRE AND POST PROCESSES
          SB7    X1          LOOP CONTROL 
          SA1    X2          START PREFETCH 
          SA2    X2+B1
          SA3    A1+B2
          SA4    A2+B2
          MX0    30 
  
 LOOP     SA1    X1          NOW LOAD RJ-GENERATED WORDS
          SA2    X2 
          SA3    X3 
          SA4    X4 
          SX6    A1          PREPARE TO MERGE HALVES
          SX7    A2 
          BX1    X1*X0       PURIFY 
          BX2    X2*X0
          IX6    X6+X1       MERGE ENTRY AND RETURN ADDRESSES 
          IX7    X7+X2
          SA1    B6+B2       PREFETCH MORE FROM STACK 
          SB7    B7-B1       LOOPCONTROL
          SA2    A1+B1
          ZR     B7,GATHER   WHEN DONE
          SB7    B7-B1
          SA6    B6-B2
          ZR     B7,GATHER
          SA7    A6+B1
          SB6    B6+B2
          SX6    A3          PREPARE OTHER MERGES 
          SX7    A4 
          BX3    X3*X0
          BX4    X4*X0
          IX6    X6+X3
          IX7    X7+X4
          SA3    B6+B2
          SB7    B7-B1
          SA4    A3+B1
          ZR     B7,GATHER
          SB7    B7-B1
          SA6    B6-B2
          ZR     B7,GATHER
          SA7    A6+B1
          SB6    B6+B2
          EQ     LOOP 
  
          END 
          IDENT  READECS
          ENTRY  READECS
          SYSCOM B1 
          TITLE  READECS - READ EXTENDED MEMORY BLOCK.
*COMMENT  READECS - READ EXTENDED MEMORY BLOCK. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 REM      SPACE  4,10 
***       READECS - READ EXTENDED MEMORY BLOCK. 
* 
*         G.K. CHACE.        83/02/03.
 REM      SPACE  4,10 
***       *READECS* READS A BLOCK OF TEXT FROM THE EXTENDED MEMORY
*         FIELD LENGTH AND REPORTS THE SUCCESS OR FAILURE.
 REM      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         READECS(NWORDS,FROMECS,TOCM,ERRFLG);
* 
*                NWORDS   = NUMBER OF WORDS IN BLOCK. 
*                FROMECS  = EXTENDED MEMORY ARRAY OF TEXT.
*                TOCM     = CENTRAL MEMORY ARRAY TO RECEIVE TEXT. 
*                ERRFLG   = SUCCESS/FAILURE RESULT. 
*                           0 = SUCCESSFUL ON FIRST TRY.
*                           1 = SUCCESSFUL AFTER ONE RETRY. 
*                           2 = SUCCESS AFTER WORD-BY-WORD RETRY. 
*                           3 = FAILURE.
 REM      SPACE  4,10 
**        READECS - READ EXTENDED MEMORY BLOCK. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6.
*                A - 0, 1, 2, 3, 4, 6.
*                B - 1, 2, 7. 
  
  
 TOP      SA6    X4          STORE RESULT FLAG
          SA0    B2          RESTORE A0 
  
 READECS  SUBR               ENTRY/EXIT 
          SB1    1
          SA2    A1+B1       ->FROMECS
          SA3    A2+B1       ->TOCM 
          SA4    A3+B1       ->ERRFLG 
          SA1    X1          =NWORDS
          SB2    A0          SAVE FOR LANGUAGES 
          BX0    X2          ->ECS
          SA0    X3          ->CM 
          SB7    X1          =NWORDS
          MX6    0           NORMAL ERRFLAG 
          RE     B7          FAST TRANSFER
          EQ     ERROR       IF TROUBLE 
          EQ     TOP         NORMAL EXIT
 ERROR    SX6    X6+B1       BAD NEWS 
          RE     B7          TRY ENTIRE BLOCK AGAIN 
          EQ     ERROR2      IF SECOND ERROR
          EQ     TOP         NORMAL EXIT
 ERROR2   SX6    X6+B1       WORSE NEWS 
          SX1    B1          60-BIT ONE 
 LOOP     RE     B1          TRY SINGLE WORD LOOP 
          EQ     ERROR3      TERRIBLE 
          SA0    A0+B1       INCREMENT POINTERS 
          IX0    X0+X1
          SB7    B7-B1       DECREMENT WORD COUNT 
          GT     B7,LOOP
          EQ     TOP
 ERROR3   SX6    X6+B1       HIGHER ERROR LEVEL 
          EQ     TOP
          END 
          IDENT  WRITECS
          ENTRY  WRITECS
          SYSCOM B1 
          TITLE  WRITECS - WRITE EXTENDED MEMORY BLOCK. 
*COMMENT  WRITECS - WRITE EXTENDED MEMORY BLOCK.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 WEM      SPACE  4,10 
***       WRITECS - WRITE EXTENDED MEMORY BLOCK.
* 
*         G.K. CHACE.        83/02/03.
 WEM      SPACE  4,10 
***       *WRITECS* COPIES A BLOCK OF TEXT FROM CENTRAL MEMORY TO 
*         THE EXTENDED MEMORY FIELD LENGTH. 
 WEM      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         WRITECS(NWORDS,TOECS,FROMCM,ERRFLG);
* 
*                NWORDS   = NUMBER OF WORDS IN BLOCK. 
*                TOECS    = EXTENDED MEMORY ARRAY TO RECEIVE TEXT.
*                FROMCM   = CENTRAL MEMORY ARRAY OF TEXT. 
*                ERRFLG   = SUCCESS/FAILURE RESULT. 
*                           0 = SUCCESSFUL ON FIRST TRY.
*                           1 = SUCCESSFUL AFTER ONE RETRY. 
*                           2 = SUCCESS AFTER WORD-BY-WORD RETRY. 
*                           3 = FAILURE.
 WEM      SPACE  4,10 
**        WRITECS - WRITE EXTENDED MEMORY BLOCK.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6.
*                A - 0, 1, 2, 3, 4, 6.
*                B - 1, 2, 7. 
  
  
 TOP      SA6    X4          STORE RESULT FLAG
          SA0    B2          RESTORE A0 
  
 WRITECS  SUBR               ENTRY/EXIT 
          SB1    1
          SA2    A1+B1       ->FROMCM 
          SA3    A2+B1       ->TOECS
          SA4    A3+B1       ->ERRFLG 
          SA1    X1          =NWORDS
          SB2    A0          SAVE FOR LANGUAGES 
          BX0    X3          ->ECS
          SA0    X2          ->CM 
          SB7    X1          =NWORDS
          MX6    0           NORMAL ERRFLAG 
          WE     B7          FAST TRANSFER
          EQ     ERROR       IF TROUBLE 
          EQ     TOP         NORMAL EXIT
 ERROR    SX6    X6+B1       BAD NEWS 
          WE     B7          TRY ENTIRE BLOCK AGAIN 
          EQ     ERROR2      IF SECOND ERROR
          EQ     TOP         NORMAL EXIT
 ERROR2   SX6    X6+B1       WORSE NEWS 
          SX1    B1          60-BIT ONE 
 LOOP     WE     B1          TRY SINGLE WORD LOOP 
          EQ     ERROR3      TERRIBLE 
          SA0    A0+B1       INCREMENT POINTERS 
          IX0    X0+X1
          SB7    B7-B1       DECREMENT WORD COUNT 
          GT     B7,LOOP
          EQ     TOP
 ERROR3   SX6    X6+B1       HIGHER ERROR LEVEL 
          EQ     TOP
          END 
          IDENT  FLDLEN 
          ENTRY  FLDLEN 
          SYSCOM B1 
          TITLE  FLDLEN - CHANGE FIELD LENGTH.
*COMMENT  FLDLEN - CHANGE FIELD LENGTH. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CFL      SPACE  4,10 
***       FLDLEN - CHANGE FIELD LENGTH. 
* 
*         G.K. CHACE.        83/02/03.
 CFL      SPACE  4,10 
***       *FLDLEN* CHANGES THE JOB*S FIELD LENGTH.
 CFL      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FLDLEN(CMWORDS);
* 
*                CMWORDS  = DESIRED FIELD LENGTH. 
 CFL      SPACE  4,10 
**        FLDLEN - CHANGE FIELD LENGTH. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2
*                A - 2
* 
*         MACROS MEMORY.
  
  
 FLDLEN   BSS    1           STAT,WORDS 
          SA2    X1          GET DESIRED SIZE 
          MEMORY CM,,R,X2 
          EQ     FLDLEN 
          END 
          IDENT  TESTECS
          ENTRY  TESTECS
          SYSCOM B1 
          TITLE  TESTECS - TEST FOR ECS AVAILABILITY. 
*COMMENT  TESTECS - TEST FOR ECS AVAILABILITY.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 TEC      SPACE  4,10 
***       TESTECS - TEST FOR ECS AVAILABILITY.
* 
*         G.K. CHACE.        83/02/03.
 TEC      SPACE  4,10 
***       *TESTECS* DETERMINES HOW LARGE OF AN EXTENDED MEMORY FIELD
*         LENGTH THE JOB IS VALIDATED TO OBTAIN AND THE SYSTEM IS 
*         ABLE TO DELIVER.
 TEC      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         TESTECS(FLAG) 
* 
*                FLAG .NE. 0  IF USER ECS ENABLED AND VALIDATED.
 TEC      SPACE  4,10 
**        TESTECS - TEST FOR ECS AVAILABILITY.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
*                B - 1. 
* 
*         MACROS MEMORY.
  
  
 TESTECS  SUBR
          SB1    1
          BX6    X1          SAVE PARAMETER ADDRESS 
          SA6    SAVE 
          MX6    29          GENERATE -1 IN UPPER HALF
          SA6    STAT 
          MEMORY ECS,STAT,R 
          SA1    STAT        WILL RETURN UPPER HALF 
          SA2    SAVE 
          MX6    30 
          BX6    X6*X1
          SA6    X2 
          EQ     TESTECS
  
 SAVE     BSSZ   1
 STAT     BSSZ   1
          END 
          IDENT  FLDLENE
          ENTRY  FLDLENE
          SYSCOM B1 
          TITLE  FLDLENE - CHANGE ECS FIELD LENGTH. 
*COMMENT  FLDLENE - CHANGE ECS FIELD LENGTH.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CFL      SPACE  4,10 
***       FLDLENE - CHANGE ECS FIELD LENGTH.
* 
*         G.K. CHACE.        83/02/03.
 CFL      SPACE  4,10 
***       *FLDLENE* CHANGES THE JOB*S FIELD LENGTH. 
 CFL      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FLDLENE(ECSWORDS);
* 
*                ECSWORDS  = DESIRED FIELD LENGTH.
 CFL      SPACE  4,10 
**        FLDLENE - CHANGE ECS FIELD LENGTH.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2. 
*                A - 2. 
*                B - 1. 
* 
*         MACROS MEMORY.
  
  
 FLDLENE  SUBR
          SB1    1
          SA2    X1          GET DESIRED SIZE 
          MEMORY ECS,STAT,R,X2
          EQ     FLDLENE
 STAT     DATA   1
          END 
          IDENT  LINESZ 
          ENTRY  LINESZ 
          EXT    FATAL
          EXT    LINSIZ 
          SYSCOM B1 
          TITLE  LINESZ - MEASURE LINE SIZE AND REPAIR. 
*COMMENT  LINESZ - MEASURE LINE SIZE AND REPAIR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 MLS      SPACE  4,10 
***       LINESZ - MEASURE LINE SIZE AND REPAIR.
* 
*         G.K. CHACE.        83/02/03.
 MLS      SPACE  4,10 
***       *LINESZ* SCANS A TEXT LINE, CODED IN INTERNAL CHARACTER 
*         SET, TO MEASURE ITS LENGTH IN WORDS.  THIS ROUTINE ALSO 
*         REPAIRS THE TOP FOUR BITS OF EACH WORD IN THE LINE IMAGE, 
*         SO THAT THE SIGN BIT INDICATES WHETHER A WORD IS THE LAST 
*         WORD OF A LINE. 
* 
*         THE FULL SCREEN EDITOR INTERNAL CHARACTER SET USES 7 BITS 
*         PER CHARACTER, 8 CHARACTERS PER WORD, WITH THE TOP FOUR 
*         BITS OF EACH WORD NOT BELONGING IN ANY CHARACTER FIELD. 
*         THE SIGN BIT IS A FLAG FOR THE LAST WORD IN EACH LINE 
*         IMAGE, AND THE NEXT THREE BITS ARE RESERVED AND NORMALLY
*         ZEROED.  EACH LINE IMAGE IS TERMINATED BY A CHARACTER WHOSE 
*         SEVEN BITS ARE ALL ONES.  THE EDITING CODE NORMALLY 
*         MAINTAINS THE END OF LINE CHARACTER BUT NEGLECTS THE LAST 
*         WORD SIGN BIT, WHILE THE WORKFILE MANAGER LOOKS ONLY FOR
*         THE SIGN BIT. 
* 
*         THE ALGORITHM IS TO *AND* A WORD AGAINST ITSELF SHIFTED 
*         EVERY BIT SUCCESSIVELY, THEN *AND* IT WITH A MASK 
*         CONTAINING 1'S AT THE TOP BIT FOR EACH SEVEN-BIT CHARACTER
*         POSITION.  IF THE RESULT IS NON-ZERO, THEN THE WORD MUST
*         HAVE CONTAINED A 177 CHARACTER. 
 MLS      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         NUMWORDS=LINESZ(LINEBUF); 
* 
*                LINEBUF  = INTERNALLY FORMATTED LINE BUFFER. 
 MLS      SPACE  4,10 
**        LINESZ - MEASURE LINE SIZE AND REPAIR.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 4, 5, 6, 7.
*                B - 1, 2, 3, 5, 6. 
* 
*         CALLS  LINSIZ, FATAL. 
  
  
 FINAL    BX7    X1+X0       SET LAST WORD FLAG 
          SX6    A1-B5       COMPUTE FUNCTION RESULT
          SA7    A1          STORE FLAGGED WORD 
          SX6    X6+B1       FIX FUNCTION RESULT
  
 LINESZ   SUBR               ENTRY POINT
          SA5    MASK        TOP BIT EACH CHARACTER 
          SA4    LINSIZ      LIMITATION 
          SB1    1
          SB5    X1          ADDR OF TEXT LINE
          SA1    X1          START FETCHING DATA
          SA2    B5+B1       FETCH MORE 
          SB2    B1+B1       2
          SB3    B2+B1       3
          SB6    X4          MAX NUM WORDS
  
 LOOP     MX0    1           WILL FIX TOP BIT WORD 1
          BX6    -X0*X1 
          BX0    X2          MERELY SAVE SECOND WORD
          SA6    A1 
          LX3    X1,B1       COPY AND SHIFT 1 
          LX4    X2,B1       DITTO
          BX6    X1*X3       FIRST MERGE
          BX7    X2*X4       DITTO
          SA1    A1+B2       PREFETCH NEXT
          SA2    A2+B2       DITTO
          LX3    X6,B2       START FUNNY CUT AND PASTE
          LX4    X7,B2
          BX6    X6*X3
          BX7    X7*X4
          LX3    X6,B3
          LX4    X7,B3
          BX6    X6*X3
          BX7    X7*X4
          BX6    X6*X5       ISOLATE CRUCIAL BITS 
          BX7    X7*X5       DITTO
          EQ     B6,B0,ERROR NO CHANCE
          NZ     X6,FOUND1
          EQ     B6,B1,ERROR LAST CHANCE
          NZ     X7,FOUND2
          SB6    B6-B2       DECREMENT LOOP 
          MX6    1           NOW CAN FIX TOP BIT 2ND WORD 
          BX7    -X6*X0 
          SA7    A2-B2
          EQ     LOOP 
  
 FOUND1   SA1    A1-B2       RE-FETCH LAST WORD TO FIX
          MX0    1           NEED TO FIX TOP BIT AGAIN
          EQ     FINAL
  
 FOUND2   SA1    A2-B2       AS ABOVE 
          MX0    1           NEED TO FIX TOP BIT AGAIN
          EQ     FINAL
  
 ERROR    SA1    PARM 
          RJ     FATAL
  
  
 MASK     DATA   02010040201004020100B
 PARM     CON    STRING 
 STRING   DATA   C*LINESZ TOO LONG$*
  
          END 
          IDENT  LENGTH 
          ENTRY  LENGTH 
          EXT    FATAL
          EXT    LINSIZ 
          SYSCOM B1 
          TITLE  LENGTH - COUNT CHARACTERS IN LINE. 
*COMMENT  LENGTH - COUNT CHARACTERS IN LINE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CCL      SPACE  4,10 
***       LENGTH - COUNT CHARACTERS IN LINE.
* 
*         G.K. CHACE.        83/02/03.
 CCL      SPACE  4,10 
***       *LENGTH* SCANS A TEXT LINE, CODED IN INTERNAL CHARACTER 
*         SET, TO MEASURE ITS LENGTH IN CHARACTERS.  THIS LENGTH
*         VALUE IS EQUIVALENT TO THE ZERO-BASED CHARACTER POSITION
*         OF THE END OF LINE CHARACTER. 
* 
*         THE FULL SCREEN EDITOR INTERNAL CHARACTER SET USES 7 BITS 
*         PER CHARACTER, 8 CHARACTERS PER WORD, WITH THE TOP FOUR 
*         BITS OF EACH WORD NOT BELONGING IN ANY CHARACTER FIELD. 
*         THE SIGN BIT IS A FLAG FOR THE LAST WORD IN EACH LINE 
*         IMAGE, AND THE NEXT THREE BITS ARE RESERVED AND NORMALLY
*         ZEROED.  EACH LINE IMAGE IS TERMINATED BY A CHARACTER WHOSE 
*         SEVEN BITS ARE ALL ONES.  THE EDITING CODE NORMALLY 
*         MAINTAINS THE END OF LINE CHARACTER BUT NEGLECTS THE LAST 
*         WORD SIGN BIT, WHILE THE WORKFILE MANAGER LOOKS ONLY FOR
*         THE SIGN BIT.  *LENGTH* DOES NO REPAIR OF THE SIGN BITS,
*         WHILE THE *LINESZ* ROUTINE DOES REPAIR THE SIGN BITS. 
* 
*         THE ALGORITHM IS TO *AND* A WORD AGAINST ITSELF SHIFTED 
*         EVERY BIT SUCCESSIVELY, THEN *AND* IT WITH A MASK 
*         CONTAINING 1'S AT THE TOP BIT FOR EACH SEVEN-BIT CHARACTER
*         POSITION.  IF THE RESULT IS NON-ZERO, THEN THE WORD MUST
*         HAVE CONTAINED A 177 CHARACTER.  WITH THE LAST WORD FOUND,
*         THE LAST PHASE OF THE ALGORITHM ROTATES THE LAST WORD ON
*         A CHARACTER BY CHARACTER BASIS TO IDENTIFY THE END OF LINE. 
 CCL      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         NUMCHARS=LENGTH(LINEBUF); 
* 
*                LINEBUF  = INTERNALLY FORMATTED LINE BUFFER. 
 CCL      SPACE  4,10 
**        LENGTH - COUNT CHARACTERS IN LINE.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 4, 5.
*                B - 1, 2, 3, 5, 6. 
* 
*         CALLS  FATAL, LINSIZ. 
  
  
 FOUND1   LX7    X6,B0       SPECIFY PARTIAL RESULT 
          SX6    A1-B2       SPECIFY WORD OFFSET
          LX7    57          GET IT A CHAR POS OFF
  
 FINAL    IX6    X6-X0       WORD OFFSET
          LX6    3           CHAR OFFSET
          SB5    B0-B1       GEN CONSTANT -1
          SX6    X6+B5       TRICK OFFSET DOWN 1
 FINLOOP  LX7    7           TEST NEXT CHAR FLAG
          SX6    X6+B1
          PL     X7,FINLOOP 
  
  
 LENGTH   SUBR               ENTRY POINT
          SA4    LINSIZ      LIMITATION 
          SA5    MASK        TOP BIT EACH CHARACTER 
          SB1    1
          SX0    X1          ADDR OF TEXT LINE
          SA1    X1          START FETCHING DATA
          SA2    X0+B1       FETCH MORE 
          SB2    B1+B1       2
          SB3    B1+B2       3
          SB6    X4          MAX NUM WORDS
  
 LOOP     LX3    X1,B1       COPY AND SHIFT 1 
          LX4    X2,B1       DITTO
          BX6    X1*X3       FIRST MERGE
          BX7    X2*X4       DITTO
          SA1    A1+B2       PREFETCH NEXT
          SA2    A2+B2       DITTO
          LX3    X6,B2       START FUNNY CUT AND PASTE
          LX4    X7,B2
          BX6    X6*X3
          BX7    X7*X4
          LX3    X6,B3
          LX4    X7,B3
          BX6    X6*X3
          BX7    X7*X4
          BX6    X6*X5       ISOLATE CRUCIAL BITS 
          BX7    X7*X5       DITTO
          EQ     B6,B0,ERROR NO CHANCE
          NZ     X6,FOUND1
          EQ     B6,B1,ERROR LAST CHANCE
          NZ     X7,FOUND2
          SB6    B6-B2       DECREMENT LOOP 
          EQ     LOOP 
  
 FOUND2   LX7    57          SPECIFY PARTIAL RESULT 
          SX6    A2-B2       NEED WORD OFFSET 
          EQ     FINAL
  
 ERROR    SA1    PARM 
          RJ     FATAL
  
  
 MASK     DATA   02010040201004020100B
 PARM     CON    STRING 
 STRING   DATA   C*LENGTH TOO LONG$*
  
          END 
          IDENT  NOSWDSZ
          ENTRY  NOSWDSZ
          SYSCOM B1 
          TITLE  NOSWDSZ - MEASURE ZERO BYTE TERMINATOR.
*COMMENT  NOSWDSZ - MEASURE ZERO BYTE TERMINATOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 MZB      SPACE  4,10 
***       NOSWDSZ - MEASURE ZERO BYTE TERMINATOR. 
* 
*         G.K. CHACE.        83/02/03.
 MZB      SPACE  4,10 
***       *NOSWDSZ* DETERMINES THE LENGTH IN WORDS OF A DISPLAY CODE
*         LINE OF TEXT.  IF IT NO END OF LINE IS FOUND WITHIN THE 
*         SIZE LIMIT, THE VALUE RETURNED IS ONE MORE THAN THE LIMIT.
*         THE ALGORITHM IS SIMPLY TO LOOK FOR A WORD WITH THE LAST 12 
*         BITS ZERO.
 MZB      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         NUMWORDS=NOSWDSZ(LIMIT,LINEBUF);
* 
*                LIMIT    = MAXIMUM ALLOWABLE LINE SIZE.
*                LINEBUF  = THE LINE BUFFER.
 MZB      SPACE  4,10 
**        NOSWDSZ - MEASURE ZERO BYTE TERMINATOR. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4.
*                B - 1, 2, 4, 6, 7. 
  
  
 FOUND    SX6    B6-B7       INDICATE WORD COUNT
          MI     B7,EXHAUST  IN CASE SLIPPING OFF END 
  
 NOSWDSZ  SUBR               ENTRY EXIT 
          SB1    1           CONSTANT 
          SA2    A1+B1       GET TEXT ADDR
          SA1    X1          GET LIMIT VALUE
          SB2    B1+B1       CONSTANT 
          SB4    B2+B2       CONSTANT 
          SB6    X1          REMEMBER FOR FINAL COMPUTATION 
          SB7    X1          COUNTS EACH WORD DOWN
          SA1    X2          START PREFETCH 
          SA2    X2+B1       DITTO
          SA3    A1+B2       DITTO
          SA4    A2+B2       DITTO
  
 LOOP     MX0    -12         GEN MASK 
          BX5    -X0*X1      FOR TESTING FIRST EOL
          SA1    A1+B4       START ANOTHER PREFETCH 
          BX6    -X0*X2      SAME SEQUENCE
          SA2    A2+B4
          BX7    -X0*X3 
          SA3    A3+B4
          BX0    -X0*X4 
          SA4    A4+B4
          SB7    B7-B1       DECR FOR FIRST TEST
          ZR     X5,FOUND    THIS IS FIRST EOL TEST 
          SB7    B7-B1       SAME SEQUENCE
          ZR     X6,FOUND 
          SB7    B7-B1
          ZR     X7,FOUND 
          SB7    B7-B1
          ZR     X0,FOUND 
          GT     B7,LOOP     WHILE NOT OUTRIGHT EXHAUSTED 
  
 EXHAUST  SX6    B6+B1       SHOW LIMIT+1 
          EQ     NOSWDSZ     NOW GET OUT
  
          END 
          IDENT  MOVELN 
          ENTRY  MOVELN 
          EXT    LINSIZ      MAX LENGTH OF LINE 
          SYSCOM B1 
          TITLE  MOVELN - MOVE AND MEASURE INTERNAL LINE. 
*COMMENT  MOVELN - MOVE AND MEASURE INTERNAL LINE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 MML      SPACE  4,10 
***       MOVELN - MOVE AND MEASURE INTERNAL LINE.
* 
*         G.K. CHACE.        83/02/03.
 MML      SPACE  4,10 
***       *MOVELN* MOVES A LINE IMAGE FROM ONE BUFFER TO ANOTHER, AND 
*         MEASURES THE NUMBER OF WORDS.  THE LINE IMAGES MUST BE
*         CODED IN THE FULL SCREEN EDITOR INTERNAL CHARACTER SET, AND 
*         MUST BE IN THE REPAIRED FORMAT AS PRODUCED BY THE *LINESZ*
*         ROUTINE.  THE INTERNAL CHARACTER SET USES SEVEN BITS PER
*         CHARACTER, EIGHT CHARACTER PER WORDS, WITH THE 56 DATA BITS 
*         RIGHT JUSTIFIED IN EACH WORD.  ONCE REPAIRED BY *LINESZ*, 
*         THE SIGN BIT OF EACH WORD INDICATES THE LAST WORD OF EACH 
*         LINE. 
* 
*         THIS ROUTINE PERFORMS THE MEASUREMENT FUNCTION ONLY, WITH 
*         NO MOVE, IF THE TARGET ADDRESS IS ZERO. 
 MML      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         NUMWORDS=MOVELN(FROM,TO); 
* 
*                FROM     = SOURCE BUFFER, INTERNAL CHARACTER SET.
*                TO       = TARGET BUFFER, INTERNAL CHARACTER SET.
 MML      SPACE  4,10 
**        MOVELN - MOVE AND MEASURE INTERNAL LINE.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 1, 2, 3, 4, 5, 7.
*                B - 1, 3.
* 
*         CALLS  FATAL, LINSIZ. 
  
  
 EOL      SB3    -B3
          SX6    X5+B3
  
  
 MOVELN   SUBR
          SB1    1
          SA5    LINSIZ 
          SA4    A1+B1       ADDR OF TO 
          SA1    X1          START PREFETCH 
          SA2    A1+B1
          SA3    A2+B1
          SB3    X5          INIT LOOP COUNTER
  
          ZR     X4,SCAN     ONLY COMPUTE SIZE IF NULL TARGET 
  
          BX7    X1          STORE FIRST WORD 
          SA7    X4 
          SA4    A3+B1       ONE LAST PREFETCH
  
 LOOP     SB3    B3-B1       HERE GOES
          MI     X7,EOL 
          BX7    X2 
          SA1    A4+B1
          SA7    A7+B1
  
          SB3    B3-B1
          MI     X7,EOL 
          BX7    X3 
          SA2    A1+B1
          SA7    A7+B1
  
          SB3    B3-B1
          MI     X7,EOL 
          BX7    X4 
          SA3    A2+B1
          SA7    A7+B1
  
          SB3    B3-B1
          MI     X7,EOL 
          BX7    X1 
          SA4    A3+B1
          SA7    A7+B1
  
          LE     B3,FULL     IF OVERFLOWED LIMIT
          EQ     LOOP 
  
 SCAN     SB3    B3-B1       DECREMENT COUNT
          MI     X1,EOL      WHEN DONE
          SA1    A3+B1       PICK UP NEXT WORD
          SB3    B3-B1
          MI     X2,EOL 
          SA2    A1+B1
          SB3    B3-B1
          MI     X3,EOL 
          SA3    A2+B1
          EQ     SCAN        SCAN ANOTHER THREE WORDS IN PARALLEL 
  
 FULL     SA1    PARM 
          RJ     =XFATAL
  
 PARM     CON    MSG
 MSG      DIS    ,/MOVELN - LINE TOO LONG$/ 
          END 
          IDENT  FASTCNI
          ENTRY  FASTCNI
          SYSCOM B1 
          TITLE  FASTCNI - CONVERT NORMAL INPUT.
*COMMENT  FASTCNI - CONVERT NORMAL INPUT. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CNI      SPACE  4,10 
***       FASTCNI - CONVERT NORMAL INPUT. 
* 
*         G.K. CHACE.        83/02/03.
 CNI      SPACE  4,10 
***       *FASTCNI* PROVIDES AN OPTIMIZED ALGORITHM TO CONVERT LINE 
*         IMAGES FROM THE DISPLAY CODE CHARACTER SET AND ZERO-BYTE
*         TERMINATION, TO THE FULL SCREEN EDITOR INTERNAL CHARACTER 
*         SET AND END OF LINE CHARACTER TERMINATION.  THE FSE 
*         CHARACTER SET USES SEVEN BITS PER CHARACTER AND EIGHT 
*         CHARACTERS PER WORD, WITH THE 56 DATA BITS RIGHT JUSTIFIED
*         IN EACH WORD.  END OF LINE IS SIGNALLED BY A CHARACTER OF 
*         ALL ONE BITS.  THE REMAINING BITS OF THE LAST WORD ARE
*         RANDOM.  CHARACTER VALUES ARE IDENTICAL.
 CNI      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FASTCNI(FSELINE,NOSLINE,FSEWORDS,NOSWORDS); 
* 
*                FSELINE  = FSE-FORMAT LINE BUFFER. 
*                NOSLINE  = NOS-FORMAT LINE BUFFER. 
*                FSEWORDS = MAXIMUM CAPACITY OF FSELINE.
*                NOSWORDS = MAXIMUM CAPACITY OF NOSLINE.
 CNI      SPACE  4,10 
**        FASTCNI - CONVERT NORMAL INPUT. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 2, 3, 4, 5, 6, 7. 
*                A - 2, 3, 4, 5, 6. 
*                B - ALL. 
  
  
 FASTCNI  SUBR
          SB1    1
*                            X1->FSELINE
          SA2    A1+B1       X2->NOSLINE
          SA3    A2+B1       X3->FSELIMIT 
          SA4    A3+B1       X4->NOSLIMIT 
          SA3    X3          X3=FSELIMIT
          SA4    X4          X4=NOSLIMIT
          SB3    X3          REMEMBER 
          SB4    X4          REMEMBER 
          SB7    X1          REMEMBER OUTPUT ADDR 
          SA5    X2          FETCH FIRST INPUT
          SA4    A5+B1       EXTRA PREFETCH 
          SX7    10          USEFUL CONSTANT
          SB5    X7          INPUT CHAR COUNT 
          SB6    8           OUTPUT CHAR COUNT
          MX6    0           CLEAR OUTPUT ACCUM 
          MX0    6           INPUT CHAR ISOLATION 
          SB2    55          INITAL ROTATE COUNT
  
 LOOP     ZR     B5,NXTINPT  NO INPUT TO USE
          ZR     B6,NXTOUTP  MUST CLEAR OUTPUT
          BX3    X5*X0       ISOLATE INPUT CHAR 
          ZR     X3,COLON    TO TELL COLON FROM EOL 
 DOCHAR   LX3    B2          LINE UP UNDER NOSWORD
          BX5    -X0*X5      REMOVE INPUT CHAR
          BX6    X6+X3       ADD OUTPUT CHAR
          LX5    6           NEXT INPUT CHAR
          SB2    B2-7        NEXT ROTATE COUNT
          SB5    B5-B1       DECR CHAR COUNTS 
          SB6    B6-B1
          EQ     LOOP        DO MORE CHARACTERS 
  
* NXTOUTP IS RIGHT AFTER THE LOOP, BEFORE NXTINPT, SINCE
* IT USED FIRST AND MORE OFTEN, THE STACK PREFETCH WILL 
* WORK WELL AND A CYBER175 WILL NEVER VOID STACK TILL COLON.
  
 NXTOUTP  SA6    B7          STORE THE FULL WORD
          SB7    B7+B1       POINT TO NEXT
          MX6    0           CLEAR FOR MORE ACCUM 
          SB3    B3-B1       DECR LIMIT 
          SB6    8           RESET CHAR CTR 
          SB2    55          RESET ROTATE CTR 
          LE     B3,FORCEOL  WE ARE IN TROUBLE
          EQ     LOOP        USUAL EXIT 
  
 NXTINPT  BX5    X4          BRING UP PREFETCHED
          SA4    A4+B1       PREFETCH ANOTHER 
          SB5    X7          RESET CHAR CTR 
          SB4    B4-B1       CHECK LIMIT
          LE     B4,GOTEOL   NO MORE INPUT
          EQ     LOOP        USUAL EXIT 
  
 COLON    NZ     X5,DOCHAR   DEFINITELY NOT EOL 
          SX0    B5-B1       SEE IF 10-TH CHAR
          NZ     X0,GOTEOL   DEFINITELY EOL 
          MX0    6           REBUILD MASK 
          NZ     X4,DOCHAR   NOT EOL IF NXT WORD NOT EOL
 GOTEOL   MX3    7           GEN AN EOL FSE CHAR
          LX3    B2          LINE UP
          LX3    1           LINE UP
          BX6    X6+X3       ACCUMULATE IT
          SA6    B7          STORE IT 
          EQ     FASTCNI     NORMAL COMPLETION
  
 FORCEOL  MX6    7           EMERGENCY TERMINATE
          LX6    56 
          SA6    B7-B1       STORE AGAIN IN LAST WORD 
          EQ     FASTCNI
  
          END 
          IDENT  FASTCNO
          ENTRY  FASTCNO
          SYSCOM B1 
          TITLE  FASTCNO - CONVERT NORMAL OUTPUT. 
*COMMENT  FASTCNO - CONVERT NORMAL OUTPUT.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CNO      SPACE  4,10 
***       FASTCNO - CONVERT NORMAL OUTPUT.
* 
*         G.K. CHACE.        83/02/03.
 CNO      SPACE  4,10 
***       *FASTCNO* PROVIDES AN OPTIMIZED ALGORITHM TO CONVERT LINE 
*         IMAGES FROM THE FULL SCREEN EDITOR CHARACTER SET TO THE NOS 
*         DISPLAY CODE CHARACTER SET.  THE FSE CHARACTER SET USES 
*         SEVEN BITS PER CHARACTER, EIGHT CHARACTERS PER WORD, WITH 
*         THE 56 DATA BITS RIGHT JUSTIFIED.  END OF LINE IS INDICATED 
*         BY A CHARACTER CONTAINING ALL ONE BITS.  THE NOS LINE 
*         FORMAT USES DISPLAY CODE WITH A ZERO BYTE TERMINATOR.  THE
*         CHARACTER VALUES ARE IDENTICAL. 
 CNO      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FASTCNO(FSELINE,NOSLINE,FSEWORDS,NOSWORDS); 
* 
*                FSELINE  = FSE-FORMAT LINE IMAGE BUFFER. 
*                NOSLINE  = NOS-FORMAT LINE IMAGE BUFFER. 
*                FSEWORDS = MAXIMUM CAPACITY OF FSELINE.
*                NOSWORDS = MAXIMUM CAPACITY OF NOSLINE.
 CNO      SPACE  4,10 
**        FASTCNO - CONVERT NORMAL OUTPUT.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 2, 3, 4, 5, 6. 
*                B - ALL. 
  
  
 FASTCNO  SUBR
          SB1    1
*                            X1->FSELINE
          SA2    A1+B1       X2->NOSLINE
          SA3    A2+B1       X3->FSELIMIT 
          SA4    A3+B1       X4->NOSLIMIT 
          SA3    X3          X3=FSELIMIT
          SA4    X4          X4=NOSLIMIT
          SB3    X3          REMEMBER 
          SB4    X4          REMEMBER 
          SB7    X2          REMEMBER FIRST OUT ADDR
          SA5    X1          PREFETCH FIRSTINPUT
          SA4    A5+B1       PREFETCH EXTRA 
          MX6    0           CLEAR OUTPUT ACCUMULATOR 
          SX7    8           USEFUL CONSTANT
          SB5    X7          INPUT CHAR CTR 
          SB6    10          OUTPUT CHAR CTR
          MX0    7           ISOLATION MASK 
          MX1    59          CLEAR SEVENTH BIT AWAY 
          LX0    56 
          SB2    60          INITIAL ROTATE CTR 
  
 LOOP     ZR     B5,NXTINPT  IF NEED MORE INPUT 
          ZR     B6,NXTOUTP  IF MUST CLEAR OUTPUT 
          BX3    X5*X0       ISOLATE INPUT
          BX2    X3-X0       SEE IF ALL ONES - EOL
          ZR     X2,GENEOL
          LX3    5           TO TOP AND SPILL SURPLUS BIT 
          LX5    7           NEXT INPUT CHAR
          BX3    X3*X1       GET RID OF SEVENTH BIT 
          LX3    B2          NOW ALIGN UNDER ACCUM
          SB2    B2-6        NEXT ROTATE COUNT
          BX6    X6+X3       ACCUMULATE IT
          SB5    B5-B1       DECR CHAR CTRS 
          SB6    B6-B1
          EQ     LOOP        DO ANOTHER CHAR
  
* NXTINPT COMES NEXT AND BEFORE NXTOUTO, SINCE NXTINPT IS 
* FIRST AND MORE OFTEN, THE STACK PREFETCH WILL GET BOTH
* NXTINPT AND NXTOUTP INTO THE STACK QUICKLY ENOUGH THAT
* WE NEVER VOID THE CYBER175 STACK. 
  
 NXTINPT  BX5    X4          BRING UP PREFETCHED
          SA4    A4+B1       PREFETCH ANOTHER 
          SB5    X7          RESET CHAR CTR TO 8
          SB3    B3-B1       CHEC LIMIT 
          LE     B3,GENEOL   EMERGENCY EXIT 
          EQ     LOOP        USUAL EXIT 
  
 NXTOUTP  SA6    B7          STORE
          SB7    B7+B1       POINT TO NEXT
          MX6    0           CLEAR ACCUM
          SB4    B4-B1       CHECK LIMIT
          SB6    10          RESET CHAR CTR 
          SB2    60          RESET ROTATE CTR 
          LE     B4,FORCEOL  EMERGENCY EXIT 
          EQ     LOOP        NORMAL EXIT
  
 GENEOL   SA6    B7          STORE WHAT WE HAVE 
          MX0    48          ASSURE 12 BIT ENDOFLINE
          BX6    -X0*X6 
          ZR     X6,FASTCNO 
          MX6    0           PREVIOUS WORD NOT EOL ITSELF 
          SA6    B7+B1
          EQ     FASTCNO
  
 FORCEOL  MX6    0           CLOBBER AN EOL 
          SA6    B7-B1       STORE AGAIN TO ASSURE EOL
          EQ     FASTCNO
  
          END 
          IDENT  FASTCAI
          ENTRY  FASTCAI
          SYSCOM B1 
          TITLE  FASTCAI - CONVERT ASCII INPUT. 
*COMMENT  FASTCAI - CONVERT ASCII INPUT.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CAI      SPACE  4,10 
***       FASTCAI - CONVERT ASCII INPUT.
* 
*         G.K. CHACE.        83/02/03.
 CAI      SPACE  4,10 
***       *FASTCAI* PROVIDES AN OPTIMIZED ALGORITHM TO CONVERT LINE 
*         IMAGES FROM THE NOS LINE FORMAT WITH 6/12 ASCII CHARACTERS, 
*         TO THE FULL SCREEN EDITOR INTERNAL FORMAT AND CHARACTER 
*         SET.  THE FSE CHARACTER SET USES SEVEN BITS PER CHARACTER 
*         AND EIGHT CHARACTERS PER WORD, WITH THE 56 DATA BITS RIGHT
*         JUSTIFIED IN EACH WORD.  END OF LINE IS DENOTED BY A
*         CHARACTER OF ALL ONE BITS, AND THE REST OF THE LAST WORD
*         MAY BE RANDOM.
* 
*         THE TOP BIT OF EACH FSE CHARACTER IS AN ESCAPE FLAG WHICH 
*         EFFECTIVELY MIMICS THE UPARROW OF THE 6/12 FORMAT.  THE 
*         LOWER SIX BITS OF EACH FSE CHARACTER EQUAL THE DISPLAY CODE 
*         VALUES OF THE 6/12 FORMAT.  UNTRANSLATABLE CHARACTERS ARE 
*         CHANGED TO COMMERCIAL AT SYMBOLS.  A STATUS CODE IS RETURNED
*         TO THE CALLER TO INDICATE WHETHER UNTRANSLATABLE CHARACTERS 
*         AND/OR 00B FORMAT COLONS WERE ENCOUNTERED.
 CAI      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FASTCAI(FSELINE,NOSLINE,FSELIMIT,NOSLIMIT,ZEROFLG); 
* 
*                FSELINE  = FSE-FORMAT LINE IMAGE BUFFER. 
*                NOSLINE  = 6/12 NOS ASCII LINE IMAGE BUFFER. 
*                FSELIMIT = MAXIMUM CAPCITY OF FSELINE. 
*                NOSLIMIT = MAXIMUM CAPACITY OF NOSLINE.
*                ZEROFLG  = BAD CHARACTER AND/OR 00B COLON STATUS.
 CAI      SPACE  4,10 
**        FASTCAI - CONVERT ASCII INPUT.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         EXIT   NOSLINE CONTAINS CONVERTED LINE IN INTERNAL FORMAT.
*                ZEROFLG = 0 IF NO BAD CHARACTERS OR 00B COLONS FOUND.
*                        = 1 IF 00B COLON(S) FOUND. 
*                        = 2 IF BAD CHARACTER CODE(S) CHANGED.
*                        = 3 IF BOTH 00B COLON(S) AND BAD CHARACTER(S). 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - ALL. 
  
  
 FASTCAI  SUBR
          SB1    1
  
          SA2    A1+B1       X1->FSELINE, X2->NOSLINE 
          SA3    A2+B1       X3->FSELIMIT 
          SA4    A3+B1       X4->NOSLIMIT 
          SA5    A4+B1       GET ZEROFLG
  
          SA3    X3          X3=FSELIMIT
          SA4    X4          X4=NOSLIMIT
          BX6    X5          SAVE POINTER TO ZEROFLG
          SA6    SAVADDR
  
          MX7    0           CLEAR ACCUMULATOR
          SA7    SAVBADC     CLEAR FLAGS
          SA7    SAVZCOL
          SB7    X1          OUTPUT POINTER 
          SB3    X3          REMEMBER LIMIT COUNTERS
          SB4    X4          DITTO
  
          SA5    X2          PREFETCH FIRST NOS WORD
          SA4    A5+B1       ADDITIONAL PREFETCH
  
          MX0    6           6-BIT MASK 
          SB6    8           NUM FSE CHAR/WORD
          SB5    8           NUM NOS CHAR/WORD MINUS PRE-FETCH
  
          SB2    49          INIT ALIGNMENT SHIFTER 
  
          LX0    6           WE WILL WORK AT BOTTOM OF WORD 
          LX5    6           DITTO
  
          BX1    X0*X5       PRELOAD FIRST TWO CHARS
          BX5    -X0*X5 
          LX5    6
          BX2    X0*X5
          BX5    -X0*X5 
          LX5    6
  
 LOOP     ZR     B5,NXTINPT  IF NEED ANOTHER CM READ
          ZR     B6,NXTOUTP  IF NEED ANOTHER CM WRITE 
          ZR     X1,COLON    SPECIAL CASE 
          SX3    X1-1R@      SPECIAL CASE 
          ZR     X3,ATSIGN
          SX3    X1-1R^      PARTLY SPECIAL 
          NZ     X3,GENCHAR 
          SX1    X2+100B     SHIFTED ALPHA CHAR 
          SX2    X2-77B      CHECK FOR *US* CONTROL CHARACTER 
          ZR     X2,BADCHAR  IF *US* CONTROL CHARACTER MUST DISCARD 
 EXTRACH  BX2    X0*X5       GEN NEXT CHAR
          BX5    -X0*X5 
          LX5    6
          SB5    B5-B1       DECR CHAR/WORD 
          NZ     B5,GENCHAR  IF NORMAL
          RJ     GETINPT     IF ENDING WORD 
 GENCHAR  LX1    B2          ALIGN FSE CHAR UNDER ACCUM 
          SB2    B2-7 
          BX7    X7+X1       ACCUMULATE 
          BX1    X2          ADVANCE THE TWO CHARACTERS 
          BX2    X0*X5
          BX5    -X0*X5 
          LX5    6
          SB6    B6-B1       DECR CHAR/WORD COUNTERS
          SB5    B5-B1
          EQ     LOOP 
  
 NXTOUTP  SA7    B7          WRITE A RESULT WORD
          SB7    B7+B1       INCR PTR FOR NXT 
          MX7    0           CLEAR ACCUM
          SB3    B3-B1       CHECK LIMIT
          SB6    8
          SB2    49 
          LE     B3,FORCEOL  IF IN TROUBLE
          EQ     LOOP 
  
 NXTINPT  BX5    X4          ADVANCE PREFETCH 
          SA4    A4+B1       PREFETCH ANOTHER 
          SB5    10          RESET COUNTER
          SB4    B4-B1       CHECK LIMIT
          LX5    6           PRE-SHIFT TO BOTTOM
          LE     B4,GOTEOL
          EQ     LOOP 
  
 GETINPT  BSSZ   1
          BX5    X4          ADVANCE PREFETCHED 
          SA4    A4+B1       PREFETCH ANOTHER 
          SB5    10          RESET COUNTERS 
          SB4    B4-B1       CHECK LIMIT
          LX5    6           PRE-SHIFT TO BOTTOM
          LE     B4,GOTEOL
          EQ     GETINPT
  
 ATSIGN   SX3    X2-1RA      CHECK FOUR KNOWN SEQUENCES 
          ZR     X3,ATSIGNA 
          SX3    X2-1RB 
          ZR     X3,ATSIGNB 
          SX3    X2-1RD 
          ZR     X3,ATSIGND 
          SX3    X2-1RG 
          ZR     X3,ATSIGNG 
 BADCHAR  SX6    2           NOTE THAT BAD CHARACTER OCCURRED 
          SA6    SAVBADC
 ATSIGNA  SX1    74B
          EQ     EXTRACH
  
 ATSIGNB  SX1    76B
          EQ     EXTRACH
  
 ATSIGND  SX1    0
          EQ     EXTRACH
  
 ATSIGNG  SX1    100B        FSE ACCENT-GRAVE 
          EQ     EXTRACH
  
 ZERCHAR  SX6    B1          NOTE THAT 00B FORMAT COLON OCCURRED
          SA6    SAVZCOL
          MX1    0           REGENERATE INTERNAL CHARACTER VALUE
          EQ     GENCHAR     PROCEED TO GENERATE THE COLON
  
 COLON    NZ     X2,ZERCHAR  IF NEXT CHAR NOT ALSO COLON
          SX3    B5-10       SEE IF LAST 2 CHARS OF WORD
          ZR     X3,GOTEOL   THATS THE WHOLE STORY
          NZ     X5,ZERCHAR  IF MORE TO CHECK 
*         EQ     GOTEOL      DRIFT INTO END-OF-LINE 
  
 GOTEOL   SX1    177B        FSE EOL CHAR 
          LX1    B2          POSITION UNDER ACCUM 
          BX7    X7+X1
 SETFLAG  SA3    SAVBADC     GET BAD CHARACTER FLAG 
          SA2    SAVZCOL     GET 00B COLON FLAG 
          SA7    B7          PUT LINE TERMINATOR IN PLACE 
          SA1    SAVADDR     GET STATUS WORD ADDRESS
          BX7    X2+X3       RETURN 00B COLON / BAD CHARACTER STATUS
          SA7    X1+
          EQ     FASTCAI     NORMAL EXIT
  
 FORCEOL  SX7    177B        EMERGENCY EXIT 
          LX7    49 
          SB7    B7-B1       BACK UP ONE WORD 
          EQ     SETFLAG     SET 00B COLON AND BAD CHARACTER FLAGS
  
 SAVADDR  CON    0           ADDRESS OF STATUS RETURN WORD
 SAVBADC  CON    0           BAD CHARACTER FLAG 
 SAVZCOL  CON    0           00B FORMAT COLON FLAG
  
          END 
          IDENT  FASTCAO
          ENTRY  FASTCAO
          SYSCOM B1 
          TITLE  FASTCAO - CONVERT ASCII OUTPUT.
*COMMENT  FASTCAO - CONVERT ASCII OUTPUT. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CAO      SPACE  4,10 
***       FASTCAO - CONVERT ASCII OUTPUT. 
* 
*         G.K. CHACE.        83/02/03.
 CAO      SPACE  4,10 
***       *FASTCAO* COPIES AND CONVERTS A LINE IMAGE FROM THE FULL
*         SCREEN EDITOR CHARACTER SET AND LINE FORMAT, TO THE 6/12
*         ASCII NOS CHARACTER SET AND LINE FORMAT.  THE FSE CHARACTER 
*         SET USES SEVEN BITS PER CHARACTER, EIGHT CHARACTERS PER 
*         WORD, WITH THE 56 DATA BITS RIGHT JUSTIFIED.  THE END OF
*         LINE IS DENOTED BY A CHARACTER OF ALL ONE BITS.  THE TOP
*         BIT OF EACH CHARACTER MIMICS THE UPARROW ESCAPE CONVENTION
*         OF THE 6/12 CHARACTER SET, AND THE LOWER SIX BITS OF EACH 
*         CHARACTER EQUAL THE DISPLAY CODES.  THE 6/12 LINE IMAGE 
*         USES THE NOS ZERO BYTE TERMINATOR.
 CAO      SPACE  4,10 
*         *SYMPL* CALL -
* 
*         FASTCAO(FSELINE,NOSLINE,FSELIMIT,NOSLIMIT); 
* 
*                FSELINE  = FSE-FORMAT LINE IMAGE BUFFER. 
*                NOSLINE  = 6/12 ASCII LINE IMAGE BUFFER. 
*                FSELIMIT = MAXIMUM CAPACITY OF FSELINE.
*                NOSLIMIT = MAXIMUM CAPACITY OF NOSLINE.
 CAO      SPACE  4,10 
**        FASTCAO - CONVERT ASCII OUTPUT. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 0, 2, 3, 4, 5, 7.
*                B - ALL. 
  
  
 FASTCAO  SUBR
          SB1    1
  
          SA2    A1+B1       X1->FSELINE, X2->NOSLINE 
          SA3    A2+B1       X3->FSELIMIT 
          SA4    A3+B1       X4->NOSLIMIT 
          SA5    A4+B1       X5->COLONFLG 
  
          SB7    X2          REMEMBER OUTPUT ADDR 
          SA3    X3          X3=FSELIMIT
          SA4    X4          X4=NOSLIMIT
          SA5    X5          X5=COLONFLG
  
          MX0    7           ISOLATE FSE CHARACTER
          LX0    56          IN POSITION
          SB2    54          INITIAL ROTATE COUNT 
          SB5    8           CHAR/WORD
          SB6    10          CHAR/WORD
          SA0    -6          USEFUL CONSTANT
  
          SB3    X3          REMEMBER 
          SB4    X4 
          BX6    X5 
  
          SA5    X1          PREFETCH FIRST FSE WORD
          SA4    A5+B1       PREFETCH ANOTHER 
  
          MX7    0           CLEAR ACCUMULATOR
          MX3    54          HELPS FIND SPECIAL CHARS 
  
          EQ     LOOP        START ITERATION
  
  
 GENCHAR  LX1    B2          POSITION THE CHARACTER 
          SB2    B2+A0       DECR SHIFT COUNT 
          BX7    X7+X1       ACCUMULATE IT
          LX5    7           BRING UP NEXT FSE CHAR 
          SB6    B6-B1       DECR CHAR/WORD 
          SB5    B5-B1       DECR CHAR/WORD 
  
 LOOP     ZR     B5,NXTINPT 
          ZR     B6,NXTOUTP 
          BX1    X0*X5       ISOLATE CURRENT FSE CHAR 
          BX2    X1-X0       CHECK FOR FSE EOL CHAR 
          ZR     X2,GENEOL
          LX1    11          PUT IT AT BOTTOM OF WORD 
  
          BX2    -X3*X1      LOOK FOR COLON + ACCENT
          ZR     X2,SPECIAL 
          SX2    X2-73B      LOOK FOR OTHER SPECIALS
          PL     X2,SPECIAL  SOME WILL COME RIGHT BACK
  
 TSTSHFT  SX2    X1-100B     NOW LOOK FOR SHIFTED 
          MI     X2,GENCHAR  NORMAL 
          SX2    1R^         ESTABLISH SHIFT CHAR 
          LX2    B2          GEN EXTRA CHAR 
          SB6    B6-B1       DECR COUNTER 
          SB2    B2+A0       DECR SHIFT COUNTER 
          BX7    X7+X2       ACCUMULATE POSITIONED CHAR 
          BX1    -X3*X1      GET RID OF SHIFT BIT IN CHAR 
          NZ     B6,GENCHAR  IF USUAL CASE, GENERATE OTHER CHAR 
          EQ     GENOUTP     WHEN CROSSING WORDS RIGHT NOW
  
  
 NXTINPT  BX5    X4          ADVANCE PREFETCHED 
          SA4    A4+B1       PREFETCH ANOTHER 
          SB5    8           RESET CHAR/WORD
          SB3    B3-B1       CHECK LIMIT
          LE     B3,GENEOL
          EQ     LOOP 
  
 NXTOUTP  SA7    B7          STORE IT 
          SB7    B7+B1
          MX7    0           CLEAR ACCUM
          SB4    B4-B1       CHECK LIMIT
          SB6    10          RESET CHAR/WORD
          SB2    54          RESET POSITIONER 
          LE     B4,FORCEOL  ABNORMAL SITUATION 
          EQ     LOOP 
  
 GENOUTP  SA7    B7 
          SB7    B7+B1
          MX7    0
          SB4    B4-B1
          SB6    10 
          SB2    54 
          LE     B4,FORCEOL 
          EQ     GENCHAR
  
  
 SPECIAL  ZR     X1,COLON 
          SX2    X1-1R@      CHECK EACH SPECIAL CASE
          ZR     X2,ATSIGN
          SX2    X1-1R^ 
          ZR     X2,UPARROW 
          SX2    X1-100B
          ZR     X2,ACCENT
          EQ     TSTSHFT     ONE OF THE NORMAL CHARS 73-77
  
 COLON    ZR     X6,GENCHAR  IF GEN 00
          SX1    04B         IF GEN 7404
          SX2    74B
          EQ     GENSPEC
  
 ATSIGN   SX2    74B
          SX1    01B
          EQ     GENSPEC
  
 UPARROW  SX2    74B
          SX1    02B
          EQ     GENSPEC
  
 ACCENT   SX2    74B
          SX1    07B
*         EQ     GENSPEC
  
 GENSPEC  LX2    B2          ALIGN UNDER ACCUM
          SB6    B6-B1       DECR COUNTERS
          SB2    B2+A0
          BX7    X7+X2
          NZ     B6,GENCHAR  IF USUAL CASE
          EQ     GENOUTP     WHEN CROSSING WORD BOUNDARY
  
  
 GENEOL   SA7    B7          STORE CURRENT WORD 
          MX0    48          ASSURE 12 BIT ENDOFLINE
          BX7    -X0*X7 
          ZR     X7,FASTCAO 
          MX7    0           PREVIOUS WORD NOT EOL ITSELF 
          SA7    A7+B1
          EQ     FASTCAO
  
 FORCEOL  MX7    0           GENERATE CRISIS END-OF-LINE
          SA7    B7-B1       STORE LAST WORD AGAIN
          EQ     FASTCAO
  
          END 
          IDENT  FASTFND
          ENTRY  FASTFND
          SYSCOM B1 
          TITLE  FASTFND - FIND STRING IN LINE. 
*COMMENT  FASTFND - FIND STRING IN LINE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FSL      SPACE  4,10 
***       FASTFND - FIND STRING IN LINE.
* 
*         G.K. CHACE.        83/02/03.
 FSL      SPACE  4,10 
***       *FASTFND* SEARCHES AN INTERNALLY FORMATTED LINE IMAGE FOR A 
*         CHARACTER STRING.  THE INTERNAL LINE FORMAT USES SEVEN BITS 
*         PER CHARACTER AND EIGHT CHARACTERS PER WORD, WITH THE 56
*         DATA BITS RIGHT JUSTIFIED.  THE CALLER PROVIDES BOUNDARIES
*         FOR THE FIRST AND LAST CHARACTER POSITIONS WITHIN THE LINE
*         WHERE THE SEARCH CAN BE ATTEMPTED.  THE CALLER PROVIDES A 
*         MASK WHICH EFFECTIVELY DETERMINES WHETHER THE TOP BIT OF
*         EACH CHARACTER (THE LOWER CASE FLAG) SHALL BE CHECKED OR
*         IGNORED.  THIS ROUTINE RETURNS A TRUE/FALSE FUNCTION VALUE
*         FOR THE SUCCESS OR FAILURE OF THE SEARCH, PLUS A CHARACTER
*         POSITION WHERE THE SEARCH SUCCEEDS. 
 FSL      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SUCCESS=FASTFND(LINE,LAST,FIRST,STRING,STRLEN,SLTS,POS,MASK); 
* 
*                SUCCESS  = BOOLEAN SEARCH RESULT.
*                LINE     = LINE IMAGE BUFFER.
*                LAST     = LAST POSITION TO SEARCH IN. 
*                FIRST    = FIRST POSITION TO SEARCH IN.
*                STRING   = LINE IMAGE BUFFER WITH SEARCH KEY.
*                STRLEN   = NUMBER OF SEVEN-BIT CHARACTERS IN STRING. 
*                SLTS     = LENGTH OF STRING LESS TRAILING SPACES.
*                POS      = IF SEARCH SUCCEEDS, POSITION WHERE FOUND. 
*                MASK     = UPPER/LOWER SIGNIFICANCE BITMASK. 
 FSL      SPACE  4,10 
**        FASTFND - FIND STRING IN LINE.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         EXIT   (X6) = 0, IF STRING NOT FOUND. 
*                (X6) = 1, IF STRING FOUND. 
*                (POS) = POSITION OF STRING IN LINE, IF STRING FOUND. 
* 
*         USES   X - ALL. 
*                A - 0, 1, 2, 3, 4, 5, 6. 
*                B - ALL. 
  
  
 FASTFND  BSS    1
          SB1    1
          SX6    A1+
          SA6    FNDA 
*                            X1 = LINE
          SA2    A1+B1       X2 = LEN 
          SA3    A2+B1       X3 = START 
          SA5    A3+B1       X5 = FOR 
          SA4    A5+B1       X4 = FORLEN
          SA2    X2          X2 =  LEN
          SA3    X3          X3 =  START
          SA5    X5          X5 =  FOR[0] 
          SX6    X3          X6 = WHERE (INIT TO START) 
          SA3    A4+B1
          SA4    X4          X4 = FORLEN
          SA3    X3          X3 = FORLEN LESS TRAILING SPACES 
          PL     X3,FND0     IF SOME NON-SPACE CHARACTERS 
          BX3    X3-X3
 FND0     NG     X4,FND12    IF NULL KEY
          IX0    X2-X6       GET NUMBER TO LOOK FOR IN OUTER
          IX0    X0-X3
          SB6    X0+B1
          LE     B6,FND12    IF NOT ENOUGH CHARACTERS 
          LX3    30 
          BX4    X4+X3       X4 = FORLEN-T.S.(59-30), FORLEN(29-0)
          BX7    X6          X7 = START/8 
          AX7    3
          MX0    -3          X0 = MOD(START,8)
          BX0    -X0*X6 
          SB3    X7          A3,X3 = LINE[START/8]
          SA3    X1+B3
          SA1    A1+7        READ CHARACTER MASK ADDRESS
          SA1    X1+
          BX7    X1          X7 = CHAR MASK 
          BX1    X4          X1 = FORLEN-T.S.(59-30), FORLEN(29-0)
          ZR     X0,FND1     IF ON WORD BOUNDRY 
          SX2    8           B2 = # CHARS LEFT IN WORD
          IX2    X2-X0
          SB2    X2 
          BX2    X3          X2 = LINE[START/8] 
          SX3    7                LEFT SHIFTED MOD(START,8) CHARS 
          IX3    X3*X0
          SB3    X3 
          LX2    B3 
          SA3    A3+1        ENTER BYTE LOOP
          SB6    B6-B2
          GT     B6,FND2     IF NOT LAST WORD 
          SB2    B6+B2       FIX LAST WORD
          SB6    X0+B2
          SB6    -B6
          EQ     FND2        BEGIN FIRST BYTE COMPARISON
  
 FND1     LE     B6,FND12    IF END OF LINE 
          BX2    X3          GET NEXT WORD
          SB2    8
          SA3    A3+B1
          GE     B2,B6,FND4  IF ON THE LAST WORD
          SB6    B6-B2
 FND2     BX0    X5-X2       COMPARE CHAR 
          BX0    X0*X7
          ZR     X0,FND5     IF FIRST CHARACTERS MATCH
 FND3     SX6    X6+1        STEP TO NEXT CHARACTER 
          LX2    7
          SB2    B2-B1
          NE     B2,FND2     IF WORD NOT EXHAUSTED
          EQ     FND1        GET NEXT WORD
  
 FND4     SB2    B6          FIX UP LAST WORD 
          SB6    -B6
          EQ     FND2        CONTINUE FIRST BYTE COMPARISON 
  
 FND5     SB7    X1+
          LX1    30 
          SB4    B2+X1
          LX1    30 
          LT     B6,FND6     IF WORKING ON LAST WORD
          SB4    B4+B6
 FND6     GT     B4,B7,FND7  IF MORE LEFT THAN STRING LENGTH
          SB7    B4-1        ONLY COMPARE REMAINDER 
 FND7     LE     B7,FND13    IF ZERO STRING LENGTH
          BX4    X5          X4 = WORKING FOR WORD
          SB5    A5+B1       B5 = WORKING FOR ADDR
          SB4    8           B4 = # CHARS LEFT IN X4
          SA0    B2+         SAVE B2
          BX3    X2          SAVE X2
          SB3    A3          B3 = WORKING LINE ADDR 
          GE     B6,FND8     IF NOT LAST WORD 
          SB2    B4+B2       CORRECT CHAR COUNT OF X2 
          SB2    B2+B6
 FND8     LX2    7           SHIFT LINE WORD
          SB2    B2-B1
          NE     B2,FND9     IF NOT END OF WORD 
          SA2    B3 
          SB3    B3+B1
          SB2    8
 FND9     LX4    7           SHIFT FOR WORD 
          SB4    B4-B1
          NE     B4,FND10    IF NOT END OF WORD 
          SA4    B5 
          SB5    B5+B1
          SB4    8
 FND10    BX0    X4-X2       COMPARE CHARS
          BX0    X0*X7
          NZ     X0,FND11    IF COMPARISON FAILED 
          SB7    B7-1 
          NE     B7,FND8     IF MORE TO COMPARE 
          EQ     FND13       EXIT WITH STRING MATCH 
  
 FND11    BX2    X3          RESTORE X2 
          SA3    A3          START UP PREFETCH
          SB2    A0+
          EQ     FND3        REENTER OUTER LOOP 
  
 FND12    SX6    B0+         FASTFND = FALSE
          EQ     FASTFND     RETURN 
  
 FND13    SA1    FNDA        RETURN DISP OF FOUND STRING
          SA1    X1+6        IN *POS* PARM
          SA6    X1 
          SX6    B1          FASTFND = TRUE 
          EQ     FASTFND     RETURN 
  
  
 FNDA     BSS    1           PARAMETER LIST ADDRESS 
  
          END 
          IDENT  FASTRLC
          ENTRY  FASTRLC
          SYSCOM B1 
          TITLE  FASTRLC - RELOCATE VALUES IN VECTOR. 
*COMMENT  FASTRLC - RELOCATE VALUES IN VECTOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RLC      SPACE  4,10 
***       FASTRLC - RELOCATE VALUES IN VECTOR.
* 
*         G.K. CHACE.        83/02/03.
 RLC      SPACE  4,10 
***       *FASTRLC* PROVIDES AN OPTIMIZED ALGORITHM TO CHECK A VECTOR 
*         OF INTEGERS FOR VALUES EQUAL TO OR GREATER THAN A THRESHOLD 
*         AND INCREMENT OR DECREMENT THOSE VALUES BY AN OFFSET. 
 RLC      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FASTRLC(STACK,NWORDS,THRESH,INCR);
* 
*                STACK    = THE ARRAY OF RELOCATABLE VALUES.
*                NWORDS   = SIZE OF STACK.
*                THRESH   = THRESHOLD VALUE FOR RELOCATION TO OCCUR.
*                INCR     = OFFSET TO BE ADDED. 
 RLC      SPACE  4,10 
**        FASTRLC - RELOCATE VALUES IN VECTOR.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 2, 3, 4, 5, 7.
*                A - 2, 3, 4, 7.
*                B - 1, 2.
  
  
 FASTRLC  SUBR
*                            A1->PARMS, X1->STACK 
          SA2    A1+1        X2->NWORDS 
          SA3    A1+2        X3->CURL 
          SA4    A1+3        X4->INCR 
  
          SB1    1
  
          SA2    X2          X2=NWORDS
          SA3    X3          X3=CURL
          SA4    X4          X4=INCR
  
          SB2    X2          B2=NWORDS, X2 FREE 
          SA2    X1          X2=FIRST WORD, X1 FREE 
          MX0    30          USEFUL MASK
  
 LOOP     BX1    X2          BRING IN THE PREFETCHED WORD 
          SA2    A2+B1       PREFETCH NEXT
          SB2    B2-B1       DECREMENT LOOP COUNT 
          IX5    X1-X3       COMPARE FOR RELOCATION 
          NG     B2,FASTRLC  WHEN EXHAUSTED 
          NG     X5,LOOP     IF NEEDS NO HELP 
          IX7    X1+X4       RELOCATE IT
          SA7    A2-B1       RE-STORE IT
          EQ     LOOP 
  
          END 
          IDENT  MOVEWD 
          ENTRY  MOVEWD 
          SYSCOM B1 
          TITLE  MOVEWD - MOVE WORDS. 
*COMMENT  MOVEWD - MOVE WORDS.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 MVW      SPACE  4,10 
***       MOVEWD - MOVE WORDS.
* 
*         G.K. CHACE.        83/02/03.
 MVW      SPACE  4,10 
***       *MOVEWD* MOVES A BLOCK OF CENTRAL MEMORY TO ANOTHER LOCATION. 
 MVW      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         MOVEWD(LENGTH,FROM,TO); 
* 
*                LENGTH   = NUMBER OF WORDS.
*                FROM     = SOURCE ARRAY. 
*                TO       = TARGET ARRAY. 
 MVW      SPACE  4,10 
**        MOVEWD - MOVE WORDS.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - ALL. 
  
  
 MOVEWD   BSS    1
          SB1    1
          SA2    A1+B1
          SA3    A2+B1
          SA1    X1 
  
*         NOW X1=COUNT, X2 POINTS FROM, X3 POINTS WHERE 
  
          ZR     X1,MOVEWD   IF NULL COUNT
          SB5    X1          B5 = COUNT 
          SB6    X2          B6 POINTS FROM 
          SB7    X3          B7 POINTS TO 
  
          SB3    B7-B6       ADDRESS OFFSET 
          ZR     B3,MOVEWD   IF NULL OFFSET 
          PL     B3,HIGHER   IF MOVE TO HIGHER ADDRESS
  
          SB2    1
          SB3    2
          SB4    8
          EQ     START
  
 HIGHER   SB2    -1 
          SB3    -2 
          SB4    -8 
          SB6    B6+B5
          SB7    B7+B5
          SB6    B6-B1       LWA OF FROM
          SB7    B7-B1       LWA OF TO
  
 START    SA1    B6          START PREFETCH OF DATA 
          SA2    A1+B2
          SA3    A2+B2
          SA4    A3+B2
  
          SB5    B5-8        SEE IF ALREADY NEAR DONE 
          NG     B5,FINAL 
  
 LOOP     BX6    X1 
          SA1    A3+B3       PREFETCH MORE
          BX7    X2 
          SA2    A4+B3
          SA6    B7 
          SA7    B7+B2
          BX6    X3 
          SA3    A1+B3
          BX7    X4 
          SA4    A2+B3
          SA6    A6+B3
          SA7    A7+B3
          BX6    X1 
          SA1    A3+B3
          BX7    X2 
          SA2    A4+B3
          SA6    A6+B3
          SA7    A7+B3
          BX6    X3 
          SA3    A1+B3
          BX7    X4 
          SA4    A2+B3
          SA6    A6+B3
          SA7    A7+B3
          SB5    B5-8        DECREMENT COUNT
          SB7    B7+B4       INCREMENT OUTPUT ADDRESS 
          PL     B5,LOOP     IF NOT WITHIN 7 OR LESS WORDS
  
*         HANDLE LAST 1 TO 7 WORDS IN LINE
  
 FINAL    SB5    B5+8 
          ZR     B5,MOVEWD
  
          BX6    X1 
          SB5    B5-B1
          SA6    B7 
          ZR     B5,MOVEWD
  
          BX6    X2 
          SB5    B5-B1
          SA6    A6+B2
          ZR     B5,MOVEWD
  
          BX6    X3 
          SB5    B5-B1
          SA6    A6+B2
          ZR     B5,MOVEWD
  
          BX6    X4 
          SB5    B5-B1
          SA6    A6+B2
          ZR     B5,MOVEWD
  
          SA1    A3+B3
          BX6    X1 
          SB5    B5-B1
          SA6    A6+B2
          ZR     B5,MOVEWD
  
          SA2    A4+B3
          BX6    X2 
          SB5    B5-B1
          SA6    A6+B2
          ZR     B5,MOVEWD
  
          SA3    A1+B3
          BX6    X3 
          SB5    B5-B1
          SA6    A6+B2
  
          EQ     MOVEWD 
  
          END 
          IDENT  ZEROWD 
          ENTRY  ZEROWD 
          SYSCOM B1 
          TITLE  ZEROWD - ZERO WORDS. 
*COMMENT  ZEROWD - ZERO WORDS.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 ZWD      SPACE  4,10 
***       ZEROWD - ZERO WORDS.
* 
*         G.K. CHACE.        83/02/03.
 ZWD      SPACE  4,10 
***       *ZEROWD* ZEROES OUT A BLOCK IN MEMORY.
 ZWD      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         ZEROWD(ARRAY,LENGTH); 
* 
*                ARRAY    = TARGET ADDRESS. 
*                LENGTH   = NUMBER OF WORDS.
 ZWD      SPACE  4,10 
**        ZEROWD - ZERO WORDS.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2, 6.
*                A - 2, 6.
*                B - 1, 2.
  
  
 ZEROWD   BSS    1           FROM,NW
          SB1    1           MAKE SURE
          SA2    A1+B1       X2=NW ADR
          MX6    0           GET A ZERO 
          SA2    X2          X2=NW
          SB2    X2-1        B2=MAX OFFSET
 ZEROWD1  MI     B2,ZEROWD
          SA6    X1+B2       ZERO TOPMOST WORD
          SB2    B2-B1       DECREMENT
          EQ     ZEROWD1     LOOP 
          END 
          IDENT  FIXCTL 
          ENTRY  FIXCTL 
          SYSCOM B1 
          TITLE  FIXCTL - FIX CONTROL BYTES.
*COMMENT  FIXCTL - FIX CONTROL BYTES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FCB      SPACE  4,10 
***       FIXCTL - FIX CONTROL BYTES. 
* 
*         G.K. CHACE.        83/02/03.
 FCB      SPACE  4,10 
***       *FIXCTL* SCANS A ZERO-TERMINATED LINE IMAGE IN EITHER 
*         DISPLAY CODE OR 6/12 ASCII, SUPPRESSING ANY CONTROL BYTES 
*         BY CHANGING THEIR COLONS TO SEMICOLONS. 
 FCB      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FIXCTL(LIMIT,LINE); 
* 
*                LIMIT    = MAXIMUM CAPACITY OF LINE BUFFER.
*                LINE     = THE LINE BUFFER.
 FCB      SPACE  4,10 
**        FIXCTL - FIX CONTROL BYTES. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 4, 5, 7. 
*                B - 1, 2, 3, 4, 6, 7.
* 
*         CALLS  NOSWDSZ. 
  
  
 FIXCTL   SUBR
          SX7    A1          SAME PARAMETER LIST ADDR 
          SA7    SAVPARM
          RJ     =XNOSWDSZ   GET LENGTH IN WORDS
  
          SB1    1
          SB6    X6          SAVE LENGTH COMPUTED BY NOSWDSZ
          MX6    0           DEFAULT RESULT IS NO CTL BYTES 
          MX0    48          USEFUL MASK
  
 START    SA1    SAVPARM
          SA1    X1+B1
          SB2    B6          THIS IS LENGTH OF LINE 
          SA1    X1          FETCH FIRST DATA 
          SA2    A1+B1       PREFETCH ANOTHER 
  
 OUTLOOP  SB7    60          BIT POINTER FOR REPAIR 
          BX7    X1          SAVE VIRGIN COPY DATA FOR REPAIR 
 INLOOP   ZR     X1,ENDWORD  SEE IF ANYTHING TO DO
          LX1    12          ROTATE NEXT DOUBLE BYTE
          BX3    -X0*X1      ISOLATE
          BX1    X0*X1       REMOVE 
          SX4    X3-0001B    LOWEST CONTROL BYTE
          SX5    X3-0016B    LARGEST PLUS ONE 
          BX4    -X4*X5      LOOK FOR X4 PLUS, X5 MINUS 
          MI     X4,GOT      THIS IS A CONTROL BYTE 
 NOGOT    SB7    B7-12       ADJUST BIT POINTER 
          EQ     INLOOP 
  
 ENDWORD  BX1    X2          BRING UP PREFETCHED DATA 
          SA2    A2+B1       PREFETCH MORE
          SB2    B2-B1       DECREMENT WORD COUNT 
          NZ     B2,OUTLOOP 
          EQ     FIXCTL      WHEN ALL DONE
  
 GOT      SA4    MASK        CONTROLS WHICH TESTS 
          SB3    X3          NEED ORDINAL FOR ROTATE COUNT
          LX4    B3          EOL FLAG TO SIGN BIT 
          PL     X4,GOT2     NOT INTERESTED IN EOL
          NZ     X1,NOGOT    DEFINITELY NOT EOL 
          SB4    B7-12
          NZ     B4,GOT2     DEFINITELY IS EOL
          NZ     X2,NOGOT    NOT EOL
 GOT2     LX4    20          BOW FLAG TO SIGN 
          PL     X4,GOT3     NOT INTERESTED IN BEGIN-WORD 
          SB4    B7-60
          NZ     B4,NOGOT    NOT BEGIN OF WORD
 GOT3     LX4    20          BOL FLAG TO SIGN 
          PL     X4,ZAP      NOT INTERESTED IN BEGIN-LINE 
          SA5    SAVPARM
          SA5    X5+B1
          SB4    X5 
          SB4    A2-B4       COMPARE ADDRESSES
          SB4    B4-B1
          NZ     B4,NOGOT    IF NOT BEGIN OF LINE 
  
 ZAP      MX6    -1          SHOW SOME WERE FOUND 
          MX5    6           GENERATE A SEMICOLON 
          LX5    B7          LINE UP TO POINTED BIT 
          BX7    X7+X5       INSERT SEMICOLON 
          SA7    A2-B1       STORE BACK WHERE CAME FROM 
          EQ     START       RE-SCAN ALL OVER 
  
 SAVPARM  BSSZ   1
 MASK     DATA   37132000751000130000B
  
          END 
          IDENT  FASTLNB
          ENTRY  FASTLNB
          SYSCOM B1 
          TITLE  FASTLNB - IDENTIFY LAST NON BLANK. 
*COMMENT  FASTLNB - IDENTIFY LAST NON BLANK.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 LNB      SPACE  4,10 
***       FASTLNB - IDENTIFY LAST NON BLANK.
* 
*         G.K. CHACE.        83/02/03.
 LNB      SPACE  4,10 
***       *FASTLNB* COMPUTES THE NUMBER OF TRAILING BLANKS IN AN FSE
*         LINE BUFFER.  THESE CODED LINES ARE IN THE SPECIAL
*         CHARACTER SET AND LINE FORMAT USED INTERNALLY BY FSE. 
* 
*         *FASTLNB* THEN SUBTRACTS THIS FROM THE LINE LENGTH, ALREADY 
*         COMPUTED VIA LENGTH FUNCTION, TO SHOW WHERE AN END-OF-LINE
*         CHARACTER MAY BE OVERWRITTEN TO TRIM THE LINE BUFFER. 
 LNB      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         LASTNON=FASTLNB(LINE);
* 
*                LASTNON  = FUNCTION RESULT IS POSITION OF NON BLANK. 
*                LINE     = LINE IMAGE BUFFER, FSE INTERNAL FORMAT. 
 LNB      SPACE  4,10 
**        FASTLNB - IDENTIFY LAST NON BLANK.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5. 
*                B - ALL. 
* 
*         CALLS  LENGTH.
  
  
 TOP      SX6    B7-B6       SUBTRACT TRAIL COUNT FROM LENGTH 
  
 FASTLNB  SUBR
          SX6    X1          SAVE TEXT POINTER
          SA6    SAVPARM
          RJ     =XLENGTH    CALL LENGTH FUNCTION, SAME PARM
          SA1    SAVPARM     REBUILD PARM CHAIN 
          SB1    1
          SB2    -8          USEFUL CONSTANT
  
*         X6=LENGTH IN CHARACTERS 
  
          ZR     X6,FASTLNB  IF NOTHING TO DO 
          BX4    X6          BREAK TOTAL INTO WORDS, CHARS
          MX0    57D
          AX4    3
          BX5    -X0*X6 
          SB4    X4          B4=WORDS-1 
          SB5    X5          B5=EXTRA CHARS 
  
          SB6    B0          NOW B6 IS RESULT ACCUMULATOR 
          SB7    X6+8        OFFSET LENGTH BY 8 ... 
          SB7    B7-B5       ... AND BY SURPLUS CHARACTERS
  
          SA3    X1+B4       LOAD ENDING WORD 
          SA4    DIVIDE      USEFUL FOR DIVISION
          SA5    FLIP        USEFUL TO CHANGE 055 TO 000
          SA1    A3-B1       PREFETCH MORE WORDS DOWN FROM TOP
          SA2    A1-B1       DITTO
  
          SX6    B5          NEED TO MULTIPLY CHAR COUNT BY 7 
          SX0    7
          IX6    X6*X0
          MX7    4           WILL BE 4+7*CHARS LONG 
          SX0    B1          FOR FUTURE 60-BIT DECREMENT
          SB3    X6          GET VARIABLE BIT COUNT 
          AX7    B3          THIS IS 4+7*CHARS BITS LONG
  
          BX3    X3-X5       CONVERT ANY 055 FIELD TO 000 
          BX3    X3*X7       FORCE TRAILER TO ARTIFICIAL BLANKS 
          IX6    X3-X0       CHANGE LOW ZEROES TO LOW ONES
          BX3    X3-X6       ELIMINATE MOST SIGNIFICANT UPPER BITS
          BX3    X3*X4       CONSIDER ONLY TOPS OF CHAR FIELDS
          CX3    X3          HOW MANY REAL+ARTIFICAL TRAIL BLANKS 
          SB6    B6+X3       ACCUMULATE RESULT
  
          SX3    X3+B2       SEE IF ALL EIGHT BLANKS
          ZR     B4,TOP      IF NO OTHER WORDS TO DO
          NZ     X3,TOP      DONT DO MORE IF NON-BLANK
  
 LOOP     BX6    X1          MOVE PREFETCHED TO SCRATCH 
          BX7    X2          DITTO
          SA1    A2-B1       PREFETCH MORE
          SA2    A1-B1       DITTO
          BX6    X6-X5       CONVERT 055 FIELDS TO 000
          BX7    X7-X5       DITTO
          IX3    X6-X0       CHANGE LOW ZEROES TO LOW ONES
          BX6    X6-X3       REMOVE MOST UPPER BITS 
          IX3    X7-X0       CHANGE LOW ZEROES TO LOW ONES
          BX7    X7-X3       REMOVE MOST UPPER BITS 
          BX6    X6*X4       CONSIDER ONLY TOPS OF CHAR FIELDS
          BX7    X7*X4       DITTO
          CX6    X6          COUNT TRAILING BLANKS
          CX7    X7          DITTO
          SB6    B6+X6       ACCUMULATE RESULT
          SX6    X6+B2       SEE IF ALL EIGHT WERE BLANKS 
          SB4    B4-B1       DECREMENT WORD COUNT 
          NZ     X6,TOP      NO, NOTHING MORE TO DO 
          ZR     B4,TOP      WHEN ALL WORDS DONE
          SB6    B6+X7       ACCUMULATE ANOTHER RESULT
          SX7    X7+B2       SEE IF ALL EIGHT BLANKS
          SB4    B4-B1       DECREMENT WORD COUNT 
          NZ     X7,TOP      MUST NOT DO MORE SINCE A NON-BLANK 
          ZR     B4,TOP      WHEN ALL WORDS DONE
          EQ     LOOP        DO SOME MORE 
  
 SAVPARM  BSSZ   1
 FLIP     VFD    4/0,7/55B,7/55B,7/55B,7/55B,7/55B,7/55B,7/55B,7/55B
 DIVIDE VFD 4/0,7/100B,7/100B,7/100B,7/100B,7/100B,7/100B,7/100B,7/100B 
  
          END 
          IDENT  EXCHWD 
          ENTRY  EXCHWD 
          SYSCOM B1 
          TITLE  EXCHWD - EXCHANGE BLOCKS OF WRODS. 
*COMMENT  EXCHWD - EXCHANGE BLOCKS OF WRODS.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 XCH      SPACE  4,10 
***       EXCHWD - EXCHANGE BLOCKS OF WRODS.
* 
*         G.K. CHACE.        83/02/03.
 XCH      SPACE  4,10 
***       *EXCHWD* EXCHANGES THE TEXT BETWEEN TWO BLOCKS OF WORDS 
*         IN CENTRAL MEMORY.
 XCH      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         EXCHWD(LENGTH,ARRAY1,ARRAY2); 
* 
*                LENGTH   = NUMBER OF WORDS.
*                ARRAY1, ARRAY2  = THE TWO AREAS TO EXCHANGE. 
 XCH      SPACE  4,10 
**        EXCHWD - EXCHANGE BLOCKS OF WRODS.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - 1, 2, 5. 
  
  
 EXCHWD   SUBR
          SB1    1
          SA2    A1+B1       X2 -> A
          SA3    A2+B1       X3 -> B
          SA1    X1          X1 = N 
          SB2    B1+B1
          ZR     X1,EXCHWD
          MI     X1,EXCHWD
          SB5    X1          B5 = N 
  
          SA1    X2          PREFETCH DATA
          SA3    X3 
          SA2    A1+B1
          SA4    A3+B1
  
 LOOP     BX6    X1 
          SA1    A1+B2
          BX7    X3 
          SA3    A3+B2
          SB5    B5-B1
          SA6    A3-B2
          SA7    A1-B2
          ZR     B5,EXCHWD
          BX6    X2 
          SA2    A2+B2
          BX7    X4 
          SA4    A4+B2
          SB5    B5-B1
          SA6    A4-B2
          SA7    A2-B2
          ZR     B5,EXCHWD
          EQ     LOOP 
  
          END 
          IDENT  SFMSSTF
          ENTRY  SFMSSTF
          SYSCOM B1 
          TITLE  SFMSSTF - USE SFM TO ENABLE SUBSYSTEM. 
*COMMENT  SFMSSTF - USE SFM TO ENABLE SUBSYSTEM.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 SST      SPACE  4,10 
***       SFMSSTF - USE SFM TO ENABLE SUBSYSTEM.
* 
*         G.K. CHACE.        83/02/03.
 SST      SPACE  4,10 
***       *SFMSSTF* CALLS *SFM* WITH THE *SSTF* FUNCTION CODE TO
*         SET THE SUBSYSTEM ACCESSABILITY FLAG. 
 SST      SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMSSFM 
 SST      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SFMSSTF;
 SST      SPACE  4,10 
**        SFMSSTF - USE SFM TO ENABLE SUBSYSTEM.
* 
*         USES   B - 1. 
* 
*         MACROS SYSTEM.
  
  
 SFMSSTF  SUBR
          SB1    1
          SYSTEM SFM,R,XXX,SSTF*100B
          EQ     SFMSSTF
  
 XXX      CON    0
          END 
          IDENT  SFMCSTF
          ENTRY  SFMCSTF
          SYSCOM B1 
          TITLE  SFMCSTF - USE SFM TO DISABLE SUBSYSTEM.
*COMMENT  SFMCSTF - USE SFM TO DISABLE SUBSYSTEM. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CST      SPACE  4,10 
***       SFMCSTF - USE SFM TO DISABLE SUBSYSTEM. 
* 
*         G.K. CHACE.        83/02/03.
 CST      SPACE  4,10 
***       *SFMCSTF* CALLS *SFM* WITH THE *CSTF* FUNCTION CODE TO
*         CLEAR THE SUBSYSTEM ACCESSABILITY FLAG. 
 CST      SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMSSFM 
 CST      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SFMCSTF;
 CST      SPACE  4,10 
**        SFMCSTF - USE SFM TO DISABLE SUBSYSTEM. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS SYSTEM.
  
  
 SFMCSTF  SUBR
          SB1    1
          SYSTEM SFM,R,XXX,CSTF*100B
          EQ     SFMCSTF
  
 XXX      CON    0
          END 
          IDENT  SETNAD 
          ENTRY  SETNAD 
          SYSCOM B1 
          TITLE  SETNAD - SET NO AUTO DROP FLAG.
*COMMENT  SETNAD - SET NO AUTO DROP FLAG. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 NAD      SPACE  4,10 
***       SETNAD - SET NO AUTO DROP FLAG. 
* 
*         G.K. CHACE.        83/02/03.
 NAD      SPACE  4,10 
***       *SETNAD* USES *LFM* TO SET THE NO-AUTO-DROP FLAG ON 
*         THE SPECIFIED FILE. 
 NAD      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SETNAD(FET);
* 
*                FET      = FET FOR THE FILE TO BE PROCESSED. 
 NAD      SPACE  4,10 
**        SETNAD - SET NO AUTO DROP FLAG. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2. 
*                B - 1. 
* 
*         MACROS SETFS. 
  
  
 SETNAD   SUBR
          SB1    1
          BX2    X1 
          SETFS  X2,NAD 
          EQ     SETNAD 
          END 
          IDENT  SETAUC 
          ENTRY  SETAUC 
          SYSCOM B1 
          TITLE  SETAUC - COMPUTE AND SET APPLICATION UNIT CHARGE.
*COMMENT  SETAUC - COMPUTE AND SET APPLICATION UNIT CHARGE. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 AUC      SPACE  4,10 
***       SETAUC - COMPUTE AND SET APPLICATION UNIT CHARGE. 
* 
*         G.K. CHACE.        83/05/27.
 AUC      SPACE  4,10 
***       *SETAUC* USES *CPM* TO SET THE APPLICATION UNIT CHARGE. 
 AUC      SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMCCMD 
*CALL     COMSSRU 
 AUC      SPACE  4,10 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SETAUC(CIO,SECTOR,TERMINAL);
* 
*                CIO      = NUMBER OF CIO CALLS.
*                SECTOR   = NUMBER OF SECTORS TRANFERRED VIA CIO. 
*                TERMINAL = NUMBER OF WORDS OF TERMINAL OUTPUT. 
 AUC      SPACE  4,10 
**        SETAUC - COMPUTE AND SET APPLICATION UNIT CHARGE. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 2, 3, 6, 7. 
*                B - 1. 
* 
*         MACROS SETAUC.
  
  
 SETAUC   SUBR               ENTRY/EXIT 
          SB1    1
          SA2    A1+B1
          SA3    A2+B1
          SA1    X1          NUMBER OF CIO CALLS
          SA2    X2          NUMBER OF PRU-S
          SA3    X3+         NUMBER OF WORDS OF TERMINAL OUTPUT 
          SX0    IMRD        READ OPERATION CHARGE
          IX1    X1*X0
          LX2    IMPT        PRU TRANSFER CHARGE
          IX6    X1+X2       MS UNITS 
          SX0    1000        TEMPORARY SCALE TO PREVENT TRUNCATION
          IX3    X3*X0
          SA6    AUCD 
          SX0    IFCO        CPU PER OUTPUT, MSEC PER WORD
          IX3    X3*X0
          SX0    "IFCO_D" 
          IX6    X3/X0       CP TIME
          SA6    AUCC 
 AUC1     SA1    AUCC        GET CP TIME
          SA2    A1+B1       GET MS UNITS 
          IX3    X1+X2
          ZR     X3,SETAUCX  IF NO MORE INCREMENTS
          SX6    B0 
          BX3    X3-X3
          SA2    AUCE        MAXIMUM CP TIME
          ZR     X1,AUC2     IF NO MORE CP TIME 
          IX6    X1-X2
          BX3    X2 
          PL     X6,AUC2     IF MAXIMUM CP TIME EXCEEDED
          BX3    X1          CP TIME INCREMENT
          SX6    B0          NO MORE CP TIME
 AUC2     SA6    A1          CP TIME OVERFLOW 
          SX7    B0 
          SA2    AUCA 
          SA7    A2+B1       WORD ZERO
          BX6    X2+X3
          SA6    A7+1        CP TIME WORD ONE 
          SA1    AUCD        MS UNITS 
          SX2    1777B       MAXIMUM MS UNITS 
          BX3    X3-X3
          SX6    B0 
          ZR     X1,AUC3     IF NO MORE MS UNITS
          IX6    X1-X2
          BX3    X2 
          PL     X6,AUC3     IF MAXIMUM MS UNITS EXCEEDED 
          SX6    B0          NO MORE MS UNITS 
          BX3    X1          MS UNITS INCREMENT 
 AUC3     SA6    AUCD        MS UNITS OVERFLOW
          LX3    40-0 
          BX6    X3 
          SA6    AUCB+2      MS UNITS WORD TWO
          SX7    B0 
          SA7    A6+B1       WORD THREE 
          SA7    A7+1        WORD FOUR
          SETAUC AUCB        APPLY CHARGES
          EQ     AUC1        LOOP FOR NEXT INCREMENT
  
 AUCA     VFD    6/1,54/0 
 AUCB     BSSZ   5           SETAUC PARAMETER BLOCK 
 AUCC     CON    0           CP TIME
 AUCD     CON    0           MS UNITS 
 AUCE     CON    37777777777B  MAXIMUM CP TIME INCREMENT
  
*CALL     COMCCPM 
  
          END 
          IDENT  ONSW 
          ENTRY  ONSW 
          SYSCOM B1 
          TITLE  ONSW - SET SENSE SWITCHES. 
*COMMENT  ONSW - SET SENSE SWITCHES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 ONS      SPACE  4,10 
***       ONSW - SET SENSE SWITCHES.
* 
*         G.K. CHACE.        83/02/03.
 ONS      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         ONSW(PARAMETER);
* 
*                PARAMETER    = PARAMETER TO PASS TO ONSW MACRO.
 ONS      SPACE  4,10 
**        ONSW - SET SENSE SWITCHES.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1. 
*                A - 1. 
*                B - 1. 
* 
*         MACROS ONSW.
  
  
 TOP      ONSW X1 
 ONSW     SUBR
          SB1    1
          SA1    X1 
          EQ     TOP
          END 
          IDENT  DISSJ
          ENTRY  DISSJ
          SYSCOM B1 
          TITLE  DISSJ - DISABLE/ENABLE SSJ=. 
*COMMENT  DISSJ - DISABLE/ENABLE SSJ=.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DISSJ    SPACE  4,10 
***       DISSJ - DISABLE/ENABLE SSJ=.
* 
*         E.D. REDIG.        84/03/01.
 DISSJ    SPACE  4,15 
**        COMMON DECKS. 
  
  
*CALL     COMCMAC 
 DISSJ    SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         DISSJ(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO DISSJ MACRO. 
*                             = 2, DISABLE SSJ= PRIVILEGES. 
*                             = 3, ENABLE SSJ= PRIVILEGES.
 DISSJ    SPACE  4,10 
**        DISSJ - DISABLE/ENABLE SSJ=.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1. 
*                A - 1. 
*                B - 1. 
* 
*         MACROS DISSJ. 
  
  
 DISSJ    SUBR               ENTRY/EXIT 
          SB1    1
          SA1    X1+
          DISSJ  X1 
          EQ     DISSJX      RETURN 
  
          END 
          IDENT  SETRFLE
          ENTRY  SETRFLE
          SYSCOM B1 
          TITLE  SETRFLE - SET RFL FOR EXTENDED MEMORY. 
*COMMENT  SETRFLE - SET RFL FOR EXTENDED MEMORY.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RFL      SPACE  4,10 
***       SETRFLE - SET RFL FOR EXTENDED MEMORY.
* 
*         G.K. CHACE.        83/02/03.
 RFL      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SETRFLE(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO SETRFL MACRO.
 RFL      SPACE  4,10 
**        SETRFLE - SET RFL FOR EXTENDED MEMORY.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1. 
*                A - 1. 
*                B - 1. 
* 
*         MACROS SETRFL.
  
  
 TOP      SETRFL ,X1
 SETRFLE  SUBR
          SB1    1
          SA1    X1 
          EQ     TOP
          END 
          IDENT  GETFLCE
          ENTRY  GETFLCE
          SYSCOM B1 
          TITLE  GETFLCE - DETERMINE EXTENDED MEMORY FIELD LENGTH.
*COMMENT  GETFLCE - DETERMINE EXTENDED MEMORY FIELD LENGTH. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FLC      SPACE  4,10 
***       GETFLCE - DETERMINE EXTENDED MEMORY FIELD LENGTH. 
* 
*         G.K. CHACE.        83/02/03.
 FLC      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         GETFLCE(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO GETFLC MACRO.
 FLC      SPACE  4,10 
**        GETFLCE - DETERMINE EXTENDED MEMORY FIELD LENGTH. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS GETFLC.
  
  
 TOP      GETFLC ,X1
 GETFLCE  SUBR
          SB1    1
          EQ     TOP
          END 
          IDENT  PROTEON
          ENTRY  PROTEON
          SYSCOM B1 
          TITLE  PROTEON - PROTECT EXTENDED MEMORY FIELD LENGTH.
*COMMENT  PROTEON - PROTECT EXTENDED MEMORY FIELD LENGTH. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 PRO      SPACE  4,10 
***       PROTEON - PROTECT EXTENDED MEMORY FIELD LENGTH. 
* 
*         G.K. CHACE.        83/02/03.
 PRO      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         PROTEON(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO PROTECT MACRO. 
 PRO      SPACE  4,10 
**        PROTEON - PROTECT EXTENDED MEMORY FIELD LENGTH. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS PROTECT. 
  
  
 TOP      PROTECT ON
 PROTEON  SUBR
          SB1    1
          EQ     TOP
          END 
          IDENT  GETFNT 
          ENTRY  GETFNT 
          SYSCOM B1 
          TITLE  GETFNT - ACCESS LOCAL FNT-S. 
*COMMENT  GETFNT - ACCESS LOCAL FNT-S.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FNT      SPACE  4,10 
***       GETFNT - ACCESS LOCAL FNT-S.
* 
*         G.K. CHACE.        83/02/03.
 FNT      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         GETFNT(PARAMETER);
* 
*                PARAMETER    = PARAMETER TO PASS TO GETFNT MACRO.
 FNT      SPACE  4,10 
**        GETFNT - ACCESS LOCAL FNT-S.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2. 
*                B - 1. 
* 
*         MACROS GETFNT.
  
  
 TOP      GETFNT X2 
 GETFNT   SUBR
          SB1    1
          BX2    X1 
          EQ     TOP
          END 
          IDENT  FILINFO
          ENTRY  FILINFO
          SYSCOM B1 
          TITLE  FILINFO - ACCESS FILE INFORMATION. 
*COMMENT  FILINFO - ACCESS FILE INFORMATION.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FIL      SPACE  4,10 
***       FILINFO - ACCESS FILE INFORMATION.
* 
*         G.K. CHACE.        83/02/03.
 FIL      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         FILINFO(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO FILINFO MACRO. 
 FIL      SPACE  4,10 
**        FILINFO - ACCESS FILE INFORMATION.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2. 
*                B - 1. 
* 
*         MACROS FILINFO. 
  
  
 TOP      FILINFO X2
 FILINFO  SUBR
          SB1    1
          BX2    X1 
          EQ     TOP
          END 
          IDENT  GETJO
          ENTRY  GETJO
          SYSCOM B1 
          TITLE  GETJO - GET JOB ORIGIN.
*COMMENT  GETJO - GET JOB ORIGIN. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 GJO      SPACE  4,10 
***       GETJO - GET JOB ORIGIN. 
* 
*         G.K. CHACE.        83/02/03.
 GJO      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         GETJO(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO GETJO MACRO. 
 GJO      SPACE  4,10 
**        GETJO - GET JOB ORIGIN. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS GETJO. 
  
  
 TOP      GETJO X1
 GETJO    SUBR
          SB1    1
          EQ     TOP
          END 
          IDENT  USERNUM
          ENTRY  USERNUM
          SYSCOM B1 
          TITLE  USERNUM - GET USER NUMBER. 
*COMMENT  USERNUM - GET USER NUMBER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 GUN      SPACE  4,10 
***       USERNUM - GET USER NUMBER.
* 
*         G.K. CHACE.        83/02/03.
 GUN      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         USERNUM(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO USERNUM MACRO. 
 GUN      SPACE  4,10 
**        USERNUM - GET USER NUMBER.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS USERNUM. 
  
  
 TOP      USERNUM X1
 USERNUM  SUBR
          SB1    1
          EQ     TOP
          END 
          IDENT  GETSS
          ENTRY  GETSS
          SYSCOM B1 
          TITLE  GETSS - GET SUBSYSTEM TYPE.
*COMMENT  GETSS - GET SUBSYSTEM TYPE. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 GSS      SPACE  4,10 
***       GETSS - GET SUBSYSTEM TYPE. 
* 
*         G.K. CHACE.        83/02/03.
 GSS      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         GETSS(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO GETSS MACRO. 
 GSS      SPACE  4,10 
**        GETSS - GET SUBSYSTEM TYPE. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS GETSS. 
  
  
 TOP      GETSS X1
 GETSS    SUBR
          SB1    1
          EQ     TOP
          END 
          IDENT  SETLOF 
          ENTRY  SETLOF 
          SYSCOM B1 
          TITLE  SETLOF - SET LIST OF FILES.
*COMMENT  SETLOF - SET LIST OF FILES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 LOF      SPACE  4,10 
***       SETLOF - SET LIST OF FILES. 
* 
*         G.K. CHACE.        83/02/03.
 LOF      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SETLOF(PARAMETER);
* 
*                PARAMETER    = PARAMETER TO PASS TO SETLOF MACRO.
 LOF      SPACE  4,10 
**        SETLOF - SET LIST OF FILES. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   B - 1. 
* 
*         MACROS SETLOF.
  
  
 TOP      SETLOF X1 
 SETLOF   SUBR
          SB1    1
          EQ     TOP
          END 
          IDENT  EXCST
          ENTRY  EXCST
          SYSCOM B1 
          TITLE  EXCST - EXECUTE CONTROL STATEMENT. 
*COMMENT  EXCST - EXECUTE CONTROL STATEMENT.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 XCS      SPACE  4,10 
***       EXCST - EXECUTE CONTROL STATEMENT.
* 
*         G.K. CHACE.        83/02/03.
 XCS      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         EXCST(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO EXCST MACRO. 
 XCS      SPACE  4,10 
**        EXCST - EXECUTE CONTROL STATEMENT.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 2. 
*                B - 1. 
* 
*         MACROS EXCST. 
  
  
 TOP      SYSTEM TCS,R,X1,X2
 EXCST    SUBR
          SB1    1
          SX2    500B 
          EQ     TOP
          END 
          IDENT  DISTCON
          ENTRY  DISTCON
          SYSCOM B1 
          TITLE  DISTCON - DISABLE TERMINAL CONTROL.
*COMMENT  DISTCON - DISABLE TERMINAL CONTROL. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DTC      SPACE  4,10 
***       DISTCON - DISABLE TERMINAL CONTROL. 
* 
*         G.K. CHACE.        83/02/03.
 DTC      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         DISTCON(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO DISTC MACRO. 
 DTC      SPACE  4,10 
**        DISTCON - DISABLE TERMINAL CONTROL. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 5. 
*                B - 1. 
* 
*         MACROS DISTC. 
  
  
 DISTCON  SUBR
          SB1    1
          BX5    X1 
          DISTC  ON,X5
          EQ     DISTCON
          END 
          IDENT  CSETA
          ENTRY  CSETA
          SYSCOM B1 
          TITLE  CSETA - SET 6/12 ASCII CHARACTER SET.
*COMMENT  CSETA - SET 6/12 ASCII CHARACTER SET. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CSA      SPACE  4,10 
***       CSETA - SET 6/12 ASCII CHARACTER SET. 
* 
*         G.K. CHACE.        83/02/03.
 CSA      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         CSETA;
 CSA      SPACE  4,10 
**        CSETA - SET 6/12 ASCII CHARACTER SET. 
* 
*         USES   B - 1. 
* 
*         MACROS CSET.
  
  
 CSETA    SUBR
          SB1    1
          CSET   ASCII
          EQ     CSETA
          END 
          IDENT  CSETN
          ENTRY  CSETN
          SYSCOM B1 
          TITLE  CSETN - SET NORMAL CHARACTER SET.
*COMMENT  CSETN - SET NORMAL CHARACTER SET. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CSN      SPACE  4,10 
***       CSETN - SET NORMAL CHARACTER SET. 
* 
*         G.K. CHACE.        83/02/03.
 CSN      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         CSETN;
 CSN      SPACE  4,10 
**        CSETN - SET NORMAL CHARACTER SET. 
* 
*         USES   B - 1. 
* 
*         MACROS CSET.
  
  
 CSETN    SUBR
          SB1    1
          CSET   NORMAL 
          EQ     CSETN
          END 
          IDENT  TSTATUS
          ENTRY  TSTATUS
          SYSCOM B1 
          TITLE  TSTATUS - GET TERMINAL STATUS. 
*COMMENT  TSTATUS - GET TERMINAL STATUS.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 GTS      SPACE  4,10 
***       TSTATUS - GET TERMINAL STATUS.
* 
*         G.K. CHACE.        83/02/03.
 GTS      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         TSTATUS(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO TSTATUS MACRO. 
 GTS      SPACE  4,10 
**        TSTATUS - GET TERMINAL STATUS.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 5. 
*                B - 1. 
* 
*         MACROS TSTATUS. 
  
  
 TSTATUS  SUBR
          SB1    1
          BX5    X1 
          TSTATUS  X5 
          EQ     TSTATUS
          END 
          IDENT  SYSREQ 
          ENTRY  SYSREQ 
          SYSCOM B1 
          TITLE  SYSREQ - PARAMETERIZED SYSTEM REQUEST. 
*COMMENT  SYSREQ - PARAMETERIZED SYSTEM REQUEST.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 SYS      SPACE  4,10 
***       SYSREQ - PARAMETERIZED SYSTEM REQUEST.
* 
*         G.K. CHACE.        83/02/03.
 SYS      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         SYSREQ(STRING,R,PARM1,PARM2); 
* 
*                STRING   = THREE-CHARACTER NAME OF RA+1 REQUEST. 
*                R        = ZERO OR ONE FOR AUTO RECALL.
*                PARM1    = FIRST PARAMETER.
*                PARM2    = SECOND PARAMETER. 
 SYS      SPACE  4,10 
**        SYSREQ - PARAMETERIZED SYSTEM REQUEST.
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 0, 1, 2, 4, 6. 
*                A - 1, 2, 3, 4.
*                B - 1. 
* 
*         MACROS SYSTEM.
  
  
 TOP      LX2    40 
          LX4    18 
          BX6    X1+X2
          BX6    X6+X3
          BX6    X6+X4
          SYSTEM
 SYSREQ   SUBR
          SB1    1
          SA2    A1+1 
          SA3    A1+2 
          SA4    A1+3 
          SA1    X1 
          SA2    X2 
          SA3    X3 
          SA4    X4 
          MX0    18 
          BX1    X0*X1
          EQ     TOP
          END 
          IDENT  EESET
          ENTRY  EESET
          SYSCOM B1 
          TITLE  EESET - ENABLE EVENT.
*COMMENT  EESET - ENABLE EVENT. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 EES      SPACE  4,10 
***       EESET - ENABLE EVENT. 
* 
*         G.K. CHACE.        83/02/03.
 EES      SPACE  4,15 
***       CALLING SEQUENCE. 
* 
*         *SYMPL* CALL -
* 
*         EESET(PARAMETER); 
* 
*                PARAMETER    = PARAMETER TO PASS TO EESET MACRO. 
 EES      SPACE  4,10 
**        EESET - ENABLE EVENT. 
* 
*         ENTRY  (A1) = FWA OF FORMAL PARAMETER LIST. 
* 
*         USES   X - 1. 
*                A - 1. 
*                B - 1. 
* 
*         MACROS EESET. 
  
  
 TOP      EESET X1
 EESET    SUBR
          SB1    1
          SA1    X1 
          EQ     TOP
          END 
