COMCFLD 
COMMON
          CTEXT  COMCFLD - FORMAT *L* DISPLAY.
          SPACE  4,10 
          IF     -DEF,QUAL$ 
          QUAL   COMCFLD
 QUAL$    ENDIF 
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       COMCFLD - FORMAT *L* DISPLAY. 
* 
*         S. P. BOOTH        80/12/31.
*         B. J. OLIPHANT     81/05/18.
          SPACE  4,10 
***       *COMCFLD* WILL FORMAT DATA FOR EITHER THE *L* DISPLAY 
*         OR A LINE PRINTER.
          SPACE  4,10 
*         WORKING STORAGE.
  
*         GENERAL EQUATES.
  
 NWIS     EQU    100B        NUMBER OF WORDS IN SECTOR
  
*         CONSTANTS.
  
 LCTR     CON    0           LINE COUNTER 
 NEJC     DATA   10H              NO PAGE EJECT 
 PEJC     DATA   10H1             PAGE EJECT
 YBEG     CON    7756B       BEGINNING Y COORDINATE 
 YINC     CON    10          LINE INCREMENT 
 FLB      SPACE  4,10 
**        FLB - FORMAT *L* DISPLAY. 
* 
*         *FLB* IS USED TO FORMAT L-DISPLAYS WITH 
*         THE APPROPRIATE SPACING FOR THE CONSOLE TYPE. 
* 
*         USES   X - 1, 4, 6, 7.
*                A - 1, 4, 6, 7.
* 
*         ENTRY  SAME CONDITIONS AS FOR *FLD*.
* 
*         EXIT   SAME CONDITIONS AS FOR *FLD*.
* 
*         CALLS  FLD. 
* 
*         MACROS CSTATUS. 
  
  
 FLB      SUBR               ENTRY/EXIT 
          SA6    FLBC        SAVE REGISTERS 
          BX6    X1 
          SA6    FLBA 
          BX6    X2 
          SA6    FLBB 
          CSTATUS  FLBD 
          SA1    FLBC        RESTORE REGISTERS
          BX6    X1 
          SA1    FLBA 
          SA2    FLBB 
          SX7    FLBG        RESET BEGINNING Y COORDINATE 
          SA7    YBEG 
          SA4    FLBD 
          NZ     X4,FLB1     IF CDC 721 CONSOLE 
          SX7    FLBE        RESET BEGINNING Y COORDINATE 
          SA7    YBEG 
          SX7    FLBF        RESET Y COORDINATE INCREMENT 
          SA7    YINC 
 FLB1     RJ     FLD         FORMAT *L* DISPLAY 
          EQ     FLBX        RETURN 
  
  
 FLBA     CON    0           STORAGE FOR REGISTER 
 FLBB     CON    0           STORAGE FOR REGISTER 
 FLBC     CON    0           STORAGE FOR REGISTER 
 FLBD     CON    0           PARAMETER FOR *CSTATUS* MACRO
 FLBE     EQU    7707B       CC545 BEGINNING Y COORDINATE 
 FLBF     EQU    15          CC545 Y COORDINATE INCREMENT 
 FLBG     EQU    7726B       721 BEGINNING Y COORDINATE 
 FLD      SPACE  4,20 
**        FLD - FORMAT *L* DISPLAY. 
* 
*         ENTRY  (X1) = FWA OF BUFFER TO MANIPULATE.
*                (X2) = OUTPUT FET ADDRESS, IF FORMATTED FOR PRINTER. 
*                       .EQ. 0, IF FORMATTING DATA FOR *L* DISPLAY. 
*                (X3) = CHARACTER TYPE. 
*                       .EQ. 0, IF SIMPLE DISPLAY CODE OR BINARY DATA.
*                               (OUTPUT WILL BE IN OCTAL DUMP FORMAT) 
*                       .NE. 0, IF ZERO BYTE TERMINATED LINES.
*                (X6) = LWA OF DATA TO TRANSFER.
*                (B2) = FWA TO PLACE CONVERTED DATA, IF *L* DISPLAY.
*                (B3) = X COORDINATE OF *L* DISPLAY LINE, IF *L*
*                       DISPLAY.
*                (B4) = Y COORDINATE OF *L* DISPLAY LINE, IF *L*
*                       DISPLAY.
*                (B6) = LWA+1 OF BUFFER TO RECEIVE CONVERTED DATA, IF 
*                       *L* DISPLAY.
* 
*         EXIT   (B2) = LWA OF STORED DATA.(ZERO WORD)
*                (B4) = NEXT Y COORDINATE.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - 2, 3, 4, 6, 7. 
* 
*         CALLS  SFN, TOD.
* 
*         XREF   COMCCPM, COMCCMD, COMCSFN, COMCWOD, COMCWTC, COMCWTO,
*                COMCWTW, COMCZTB.
* 
*         MACROS GETPP, WRITEC, WRITEO, WRITEW. 
* 
*         NOTES  FETS MUST BE RECALLED BEFORE ENTERING ROUTINE. 
*                BUFFER INTO WHICH FORMATTED DATA IS TO BE PLACED 
*                FOR LINE PRINTER MUST BE EMPTY.
  
  
 FLD      PS                 ENTRY/EXIT 
          SA6    FLDA        SAVE LWA OF DATA TO TRANSFER 
          BX6    X1 
          BX7    X3 
          SA6    FLDB        SAVE FWA OF BUFFER TO PROCESS
          SA6    FLDK 
          SX6    B2 
          SA7    FLDC        SAVE CHARACTER TYPE
          SX7    B3 
          SA6    FLDD        FWA OF BUFFER TO STORE CONVERTED DATA
          SX6    B6 
          SA6    FLDL        LWA+1 OF BUFFER TO STORE CONVERTED DATA
          SA7    FLDI        SAVE X COORDINATE
          SX6    B4 
          SA6    FLDJ        SAVE Y COORDINATE
          BX6    X2          GET FET ADDRESS
          SA6    FLDP        FLAG IF FORMATTING DATA FOR *L* DISPLAY
          ZR     X2,FLD5     IF NOT FORMATTING FOR PRINTER
          SA6    FLDE        SAVE FET ADDRESS 
          GETPP  FLDM,FLDN,FLDO  GET PAGE PARAMETERS
          SA2    FLDE        GET FET POINTER
          WRITEW X2,FLDO,B1  WRITE PRINT DENSITY
          SA3    FLDC        RESTORE CHARACTER TYPE 
          NZ     X3,FLD2     IF DATA IS IN LINE FORMAT
          SX6    B0+         INITIALIZE LINE COUNTER
          SA3    PEJC        GET PAGE EJECT 
          SA6    LCTR 
 FLD1     BX6    X3 
          WRITEO X2 
          SA2    FLDB 
          SA3    LCTR 
          SA1    X2 
          SX7    X3+B1
          SX6    A1+B1
          SA7    A3 
          SA6    A2+
          SB2    FLDF 
          RJ     TOD         TRANSLATE WORD TO OCTAL DUMP FORMAT
          SA2    FLDE        RESTORE FET ADDRESS
          WRITEC X2,FLDF
          SA1    FLDB 
          SA4    LCTR 
          SA3    NEJC        GET NO PAGE EJECT
          SX6    X4-NWIS
          NG     X6,FLD1     IF NOT DONE
          EQ     FLD         RETURN 
  
 FLD2     SA3    PEJC        GET PAGE EJECT 
 FLD3     BX6    X3 
          WRITEO X2 
          SA3    X2+2        SAVE LENGTH OF OLD LINE
          SX6    X3+
          SA1    FLDB 
          SA6    FLDF 
          WRITEC X2,X1
          SA3    FLDF 
          SA4    X2+2        GET NEW LINE LENGTH
          SA1    FLDB        GET LAST STARTING POINT
          IX6    X4-X3       CALCULATE NUMBER OF WORDS TRANSFERRED
          SB6    X6          CHECK IF BUFFER HAS BEEN FLUSHED 
          GT     B6,FLD4     IF BUFFER NOT FLUSHED
          SA3    X2+1        CALCULATE BUFFER LENGTH
          SA4    X2+4 
          SX3    X3+
          SX4    X4+
          IX3    X4-X3       LIMIT - FIRST
          IX6    X6+X3       ADD IN BUFFER LENGTH 
 FLD4     IX7    X1+X6       CALCULATE NEW STARTING POINT 
          SA4    FLDA        GET LWA
          IX6    X4-X7
          SA3    NEJC        GET NO PAGE EJECT
          SA7    A1+         SAVE NEW STARTING POINT
          PL     X6,FLD3     IF NOT DONE
          EQ     FLD         RETURN 
  
  
*         FORMAT LINE FOR *L* DISPLAY.
  
 FLD5     SX4    B3+         CALCULATE X/Y COORDINATES
          SX2    FLDG 
          SX1    8
          SA3    YBEG        GET BEGINNING Y COORDINATE 
          IX4    X4*X1
          SA1    YINC        GET Y COORDINATE INCREMENT 
          IX2    X4+X2
          SX4    B4 
          LX2    12-0 
          IX4    X4*X1
          IX3    X3-X4
          IX6    X2+X3
          LX6    59-23       LEFT JUSTIFY COORDINATES 
          SB4    6           NUMBER OF WORDS PER LINE (64 CHARACTERS) 
          SA3    FLDC 
          SA6    B2+
          NZ     X3,FLD6     IF DATA IS IN LINE FORMAT
          SA2    FLDB        RESET FWA OF UNCONVERTED DATA
          SB2    FLDF 
          SX6    B2 
          SA1    X2 
          SA6    A2+
          RJ     TOD         TRANSLATE TO OCTAL DUMP FORMAT 
 FLD6     SA1    FLDB        GET ADDRESS OF DATA TO BE CONVERTED
          MX2    -12
          SA3    X1          GET DATA 
          SA4    FLDD        GET ADDRESS OF CONVERTED DATA
          BX6    -X2*X3 
          SA4    X4          GET CONVERTED DATA 
          SA6    FLDE 
          SB3    24 
          NZ     X6,FLD8     IF TEN CHARACTERS
          LX3    0-12 
          BX1    -X2*X3 
          ZR     X1,FLD7     IF NO CHARACTER OVERFLOW 
          BX3    X2*X3       REMOVE EXCESS CHARACTERS 
          LX3    -12         REPOSITION CHARACTERS
          BX6    X3+X4
          LX1    -12         CHARACTERS OVERFLOW INTO NEXT WORD 
          SA2    FLDB        UPDATE UNCONVERTED DATA ADDRESS
          SA6    A4 
          SX6    A6+B1       CHECK FOR CONVERTED DATA BUFFER OVERFLOW 
          SA3    FLDL        GET LWA+1 OF *L* DISPLAY BUFFER
          IX3    X3-X6
          ZR     X3,FLD13    IF PAST END OF BUFFER
          SX6    X2+B1
          SA6    A2 
          BX6    X1 
          SA2    FLDP 
          ZR     X2,FLD6.1   IF DATA FORMATTED FOR *L* DISPLAY
          RJ     SFN         SPACE FILL NAME
 FLD6.1   SA6    A4+B1
          SX6    A6+B1       UPDATE CONVERTED DATA ADDRESS
          SA3    FLDL        GET LWA+1 OF *L* DISPLAY BUFFER
          SB7    X3 
          SB6    X6 
          EQ     B6,B7,FLD13 IF PAST END OF BUFFER
          SA6    FLDD 
          EQ     FLD11       GET NEXT LINE OF DATA
  
 FLD7     LX3    0-24-0+12   POSITION CHARACTERS
          BX6    X3+X4
          SA2    FLDP 
          ZR     X2,FLD7.1   IF FORMATTING DATA FOR *L* DISPLAY 
          BX1    X6 
          RJ     SFN         SPACE FILL NAME
 FLD7.1   SX3    B0+
          EQ     FLD9        UPDATE POINTERS
  
 FLD8     LX6    -B3,X3 
          MX2    24 
          BX6    -X2*X6      REMOVE POSSIBLE SIGN FILL
          BX6    X4+X6       MERGE IN DATA
 FLD9     SA1    FLDB 
          MX2    -24
          SA6    A4 
          SX6    X1+B1       UPDATE UNCONVERTED DATA ADDRESS
          BX7    -X2*X3 
          SA1    FLDE        GET END OF LINE FLAG 
          LX7    59-23       POSITION LAST 4 CHARACTERS FOR NEXT WORD 
          SA6    FLDB 
          SX6    A4+B1       UPDATE CONVERTED DATA ADDRESS
          SA3    FLDL        GET LWA+1 OF *L* DISPLAY BUFFER
          SB7    X3 
          SB6    X6 
          EQ     B6,B7,FLD13 IF PAST END OF BUFFER
          SA6    FLDD 
          ZR     X1,FLD11    IF END OF LINE 
          SB4    B4-1        DECREMENT WORDS PER LINE 
          ZR     B4,FLD10    IF LINE IS FULL
          SA7    X6+         STORE NEXT 4 CHARACTERS
          EQ     FLD6        PROCESS NEXT WORD
  
 FLD10    BX6    X7          ADD LAST 4 CHARACTERS
          SA2    FLDP 
          ZR     X2,FLD10.1  IF FORMATTING DATA FOR *L* DISPLAY 
          BX1    X6 
          RJ     SFN         SPACE FILL NAME
 FLD10.1  SA1    FLDD        GET CONVERTED DATA ADDRESS 
          SA6    X1+
          SX6    X1+1        UPDATE CONVERTED DATA ADDRESS
          SA6    A1+
 FLD11    SA3    FLDC 
          SA4    FLDB 
          SA1    FLDJ        UPDATE Y COORDINATE
          SB6    X4+
          NZ     X3,FLD12    IF IF DATA IS IN LINE FORMAT 
          SA3    FLDK        UPDATE FWA OF UNCONVERTED DATA 
          SX6    X3+B1
          SA6    A4 
          SB6    X6 
          SA6    A3 
 FLD12    SX6    X1+B1
          SA2    FLDI        GET X COORDINATE 
          SA6    A1 
          SA1    FLDA        GET LWA TO TRANSFER
          SB4    X6 
          SB7    X1 
          SA3    FLDD 
          SB3    X2 
          SB2    X3          RETURN LWA OF CONVERTED DATA 
          LE     B6,B7,FLD5  IF MORE WORDS TO PROCESS 
          SX6    B0          TERMINATE L-DISPLAY BUFFER WITH ZERO WORD
          SA6    X3 
          EQ     FLD         RETURN 
  
*         EXIT PROCESSOR FOR *L* DISPLAY BUFFER OVERFLOW CONDITION. 
  
 FLD13    SX7    B0          TERMINATE L-DISPLAY BUFFER WITH ZERO WORD
          SA7    X6-1 
          SB2    A7          RETURN LWA OF CONVERTED DATA BUFFER
          SA1    FLDJ        UPDATE Y COORDINATE
          SX7    X1+B1
          SA7    A1 
          EQ     FLD         RETURN 
  
  
 FLDA     CON    0           LWA OF DATA TO TRANSFER
 FLDB     CON    0           ADDRESS OF DATA TO BE CONVERTED
 FLDC     CON    0           DATA TYPE
 FLDD     CON    0           ADDRESS OF CONVERTED DATA
 FLDE     CON    0           END OF LINE FLAG 
 FLDF     BSS    5           STORAGE AREA FOR *TOD* DATA
          CON    0           END OF LINE INDICATOR
 FLDG     EQU    6000B       CONSTANT X COORDINATE IS ADDED TO
 FLDI     CON    0           X COORDINATE 
 FLDJ     CON    0           Y COORDINATE 
 FLDK     CON    0           UNCONVERTED DATA 
 FLDL     CON    0           LWA+1 CONVERTED DATA (*L* DISPLAY BUFFER)
 FLDM     BSSZ   2           *GETPP* RESPONSE BLOCK 
 FLDN     CON    0           PAGE SIZE
 FLDO     CON    0           PRINT DENSITY
 FLDP     CON    0           FLAG IF DATA FORMATTED FOR *L* DISPLAY 
TOD       SPACE  4,15 
**        TOD - TRANSLATE WORD TO OCTAL DUMP FORMAT.
* 
*         ENTRY  (X1) = WORD OF DATA TO BE CHANGED. 
*                (B2) = FWA TO PLACE CONVERTED DATA IN DUMP FORMAT. 
* 
*         EXIT   WORD STORED. 
*                (B2) = LWA+1 OF STORED DATA. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 2. 
* 
*         CALLS  WOD, ZTB.
  
  
 TOD      PS                 ENTRY/EXIT 
          RJ     ZTB         CHANGE ZEROES TO BLANKS
          SA6    TODA        SAVE RESULTS 
          RJ     WOD         CHANGE WORD TO OCTAL DISPLAY 
          SA2    TODB        SAVE DATA IN OCTAL DUMP FORMAT 
          SA6    B2 
          BX6    X2 
          SA7    A6+B1
          SA2    TODA 
          SA6    A7+B1
          SA1    TODC 
          BX7    X2 
          BX6    X1 
          SA7    A6+B1
          SA6    A7+B1
          SB2    A6+1 
          EQ     TOD         RETURN 
  
 TODA     CON    0
 TODB     DATA   10H
 TODC     DATA   1L 
          BASE   *
          IF     -DEF,QUAL$ 
          QUAL   *
 FLB      EQU    /COMCFLD/FLB 
 FLD      EQU    /COMCFLD/FLD 
 QUAL$    ENDIF 
          ENDX
