DDFILE
          IDENT  DDFILE,FETS,DDFILE 
          ABS 
          SST 
          SYSCOM B1 
          ENTRY  DDFILE 
          ENTRY  MFL= 
          ENTRY  SSJ= 
          TITLE  DDFILE - DDF UTILITY FUNCTION PROCESSOR. 
*COMMENT  DDFILE - DDF UTILITY FUNCTION PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DDF      SPACE  4,10 
***       DDFILE - *DDF* UTILITY FUNCTION PROCESSOR.
* 
*         J. J. EIKUM.       74/04/06.
 DDF      SPACE  4,10 
***              *DDFILE* PROCESSES FUNCTIONS RELATING TO THE LISTING 
*         FILE FOR *DDF*.  *DDFILE* IS LOADED AUTOMATICALLY BY *DDF*. 
          SPACE  4,10,15
***       DAYFILE MESSAGES. 
* 
*         * LISTING FILE DOES NOT EXIST.* = THERE WAS NO LISTING
*                FILE TO BE RELEASED. 
 DDF      SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCMAC 
*CALL     COMSDSP 
*CALL     COMSPRD 
*CALL     COMSSSD 
*CALL     COMSSSJ 
 DDF      SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 DBUFL    EQU    102B 
 OBUFL    EQU    1001B
  
 D        EQU    5           CPU STATUS WORD
  
****
 DDF      SPACE  4,10 
**        FETS. 
  
  
          ORG    101B 
 FETS     BSS    0
 O        BSS    0
 OUTPUT   FILEB  OBUF,OBUFL,(FET=7),(EPR) 
          SPACE  4,10 
*         *SSJ=* SPECIAL ENTRY POINT. 
  
  
 SSJ=     BSS    0           SPECIAL SYSTEM JOB PARAMETER BLOCK 
          VFD    36/0,12/LSCS,12/IRSI 
          BSSZ   SSJL-1 
 DDF      TITLE  MAIN PROGRAM.
**        DDF - MAIN PROGRAM. 
  
  
 DDF      SX6    3RDDF       WAIT FOR REQUEST 
          LX6    42 
          SA6    D
          RECALL A6 
          SA1    D           GET FUNCTION NUMBER
          SX2    X1 
          AX2    1
          SA3    TFCN+X2
          SB2    X3 
          JP     B2          JUMP TO PROCESSOR
 TFCN     SPACE  4,10 
**        TFCN - TABLE OF FUNCTION PROCESSORS.
  
  
 TFCN     BSS    0           FUNCTION PROCESSORS. 
          LOC    0
          CON    END         END PROGRAM
          CON    PRT         PRINT
          CON    COF         CHANGE LISTING FILE NAME 
          CON    OUT         RELEASE LISTING FILE TO QUEUE
          CON    REW         REWIND LISTING FILE
          CON    SKP         SKIP TO EOI
          CON    RET         RETURN FILE
          CON    SID         SETID
          LOC    *O 
 DDF      TITLE  FUNCTION PROCESSORS. 
 END      SPACE  4,10 
**        FUNCTION 0 - END PROGRAM. 
  
  
 END      RJ     CMF         COMPLETE FILE
          ENDRUN
 PRT      SPACE  4,10 
**        FUNCTION 1 - PRINT. 
* 
*         ENTRY  (DBUF) = 12/EQ,12/TK,12/SC,24/CONTROL BYTES. 
*                (DBUF+1) = 12/(TRT),12/TRACK BITS,18/ ,18/ADDRESS. 
*                (DBUF+2 - DBUF+65) = CONTENTS OF SECTOR. 
  
  
*         OUTPUT PAGE HEADER. 
  
 PRT      CLOCK  PRTF        TIME 
          DATE   PRTE        DATE 
          SA5    DBUF 
          MX0    -12
          LX5    12 
          BX1    -X0*X5 
          RJ     COD         CONVERT EST ORDINAL
          BX7    X4 
          LX5    12 
          LX7    9*6
          BX1    -X0*X5 
          SA7    PRTB 
          RJ     COD         TRACK
          SA1    PRTC 
          MX2    5*6
          BX4    X2*X1
          BX3    -X2*X6 
          LX5    12 
          BX6    X3+X4
          SA6    A1 
          BX1    -X0*X5 
          RJ     COD         SECTOR 
          MX1    9*6
          SX2    1R.
          LX6    6
          BX3    X1*X6
          BX6    X3+X2
          LX6    5*6
          LX5    24 
          MX0    -24
          SA6    PRTD 
          BX1    -X0*X5 
          RJ     WOD         LINKAGE BYTES
          MX0    -24
          BX1    -X0*X7 
          SX2    2R 
          LX7    6*6
          BX3    -X0*X7 
          LX2    4*6
          LX3    6*6
          BX4    X1+X2
          SA1    DBUF 
          BX6    X4+X3
          MX0    -12
          SA6    PRTH 
          BX2    -X0*X1 
          AX1    12 
          SA5    =3R
          BX1    -X0*X1 
          SA4    PRTI 
          NZ     X1,PRT2     IF NOT EOF OR EOI
          SX7    B0+
          NZ     X2,PRT1     IF NOT EOI 
          SX5    3REOI
          EQ     PRT3        PRINT EOI
  
 PRT1     SX5    3REOF
          EQ     PRT3        PRINT EOF
  
 PRT2     SX3    X2-100B
          SX7    X2+
          ZR     X3,PRT3     IF NOT EOR 
          SX5    3REOR
 PRT3     MX0    7*6
          SA7    PRTN        SAVE WORD COUNT
          BX2    X0*X4
          BX6    X2+X5
          SA6    A4 
          WRITEC O,PRTA 
          WRITEC O,PRTJ 
          WRITEC O,PRTG 
          WRITEC O,PRTJ 
          WRITEC O,PRTJ 
  
*         OUTPUT ONE CM WORD. 
  
          SA0    B0+
 PRT4     SX1    A0 
          RJ     COD         CM WORD NUMBER 
          SX1    5
          SX2    A0 
          IX3    X1*X2
          SB2    X6+
          SX1    X3+2 
          RJ     WOD         BYTE NUMBER
          MX1    -4*6 
          MX3    -3*6 
          BX4    -X1*X7 
          SX2    B2+
          SA1    PRTK 
          BX5    -X3*X2 
          LX4    6
          LX5    7*6
          IX7    X4+X1
          BX6    X5+X7
          WRITEO O           PRINT WORD AND BYTE NUMBERS
          SA1    A0+DBUF+2   OUTPUT CONTENTS OF NEXT CM WORD
          RJ     WOD         CONVERT WORD 
          MX1    4*6
          BX0    X7 
          BX2    X1*X6
          LX6    4*6
          BX3    X1*X6
          SA1    PRTL 
          LX2    9*6
          LX3    4*6
          BX4    X2+X3
          BX5    X6 
          BX6    X4+X1
          WRITEO O
          LX5    4*6
          MX1    2*6
          BX3    X1*X0
          BX2    X1*X5
          LX3    8*6
          LX0    2*6
          MX1    4*6
          BX4    X2+X3
          BX2    X1*X0
          SA1    PRTL 
          LX4    9*6
          LX2    4*6
          BX5    X2+X4
          BX6    X5+X1
          WRITEO O
          LX0    4*6
          MX2    4*6
          BX1    X2*X0
          RJ     ZTB         BLANK FILL 
          SA1    PRTN 
          SX2    A0 
          LX6    9*6
          IX3    X2-X1
          NZ     X3,PRT5     IF NOT AT WORD COUNT 
          MX2    30 
          SA1    PRTM 
          BX3    X2*X6
          BX6    X3+X1
 PRT5     WRITEO O
          SA1    A0+DBUF+2   OUTPUT DISPLAY CODE
          RJ     ZTB         BLANK FILL 
          WRITEO O
  
*         ADVANCE TO NEXT WORD. 
  
          SA1    PRTO 
          NZ     X1,PRT6     IF JUST PRINTED SECOND HALF OF LINE
          SX7    40B
          SA2    =10H 
          SA0    A0+40B 
          SA7    A1 
          BX6    X2 
          WRITEO O
          SA2    =10H 
          BX6    X2 
          WRITEO O
          EQ     PRT4        LOOP TO PRINT SECOND HALF OF LINE
  
 PRT6     MX6    0
          SA0    A0-40B+1 
          SA6    A1 
          WRITEO O           TERMINATE LINE 
          SX1    A0-40B 
          ZR     X1,PRT7     IF END OF BUFFER 
          LX1    15 
          SX2    X1 
          NZ     X2,PRT4     IF NO BLANK LINE NEEDED
          SX6    1R0
          LX6    9*6
          WRITEO O
          EQ     PRT4        LOOP 
  
 PRT7     SA0    B1 
          EQ     DDF         RETURN 
  
  
 PRTA     DATA   10H1 EST ORD.
 PRTB     DATA   10H EE 
 PRTC     DATA   10HTRACK TTTT
          DATA   10H   SECTOR 
 PRTD     DATA   10HNNNN. 
          DATA   30H
 PRTE     DATA   10H DATE 
 PRTF     DATA   10H TIME 
          DATA   2C 
 PRTG     DATA   20H-  LINKAGE BYTES =
 PRTH     DATA   10HNNNN  NNNN
 PRTI     DATA   10H.      EOI
          DATA   2C 
 PRTJ     VFD    12/2R- ,48/0 
 PRTK     VFD    18/0,12/2R (,24/0,6/1R)
 PRTL     VFD    6/1R ,24/0,6/1R ,24/0
 PRTM     VFD    30/0,30/5R#####
 PRTN     CON    0           WORD COUNT 
 PRTO     CON    0           POINTER BIAS 
 COF      SPACE  4,10 
**        FUNCTION 2 - CHANGE LISTING FILE NAME.
* 
*         ENTRY  (DBUF) = 42/FILE NAME,18/0.
  
  
 COF      RJ     CMF         FLUSH BUFFER IF NECCESSARY 
          SA1    DBUF 
          SX2    B1 
          BX6    X1+X2
          SA6    O           SET NEW FILE NAME
          EQ     DDF         RETURN 
 OUT      SPACE  4,10 
**        FUNCTION 3 - RELEASE LISTING FILE TO QUEUE. 
  
  
 OUT      RJ     CMF         COMPLETE FILE
          SA5    O           SAVE FET+0 
          STATUS O           CHECK IF FILE EXISTS 
          BX6    X5 
          MX3    -11
          SA1    X2 
          SA6    X2 
          LX3    12-11
          BX3    -X3*X1 
          ZR     X3,OUT1     IF FILE DOES NOT EXIST 
          MX6    42 
          BX6    X6*X1
          SA6    OUTA        SET FILE NAME IN *DSP* PARAMETER BLOCK 
          ROUTE  OUTA,R 
          SA1    OUTA+1      CLEAR *TID* FLAG BIT 
          SX3    FRTI 
          BX6    -X3*X1 
          SA6    A1 
          EQ     DDF         RETURN 
  
 OUT1     MESSAGE  (=C* LISTING FILE DOES NOT EXIST.*),3,R
          EQ     DDF         RETURN 
  
  
 OUTA     VFD    42/0LOUTPUT,18/0 
          VFD    24/0,12/2HPR,6/0,18/FRDC+FRCS
          BSSZ   5
 REW      SPACE  4,10 
**        FUNCTION 4 - REWIND LISTING FILE. 
  
  
 REW      RJ     CMF         COMPLETE FILE
          REWIND O
          EQ     DDF         RETURN 
 SKP      SPACE  4,10 
**        FUNCTION 5 - SKIP TO EOI. 
  
  
 SKP      SB2    A0 
          NZ     B2,DDF      IF CURRENTLY WRITING ON FILE 
          SKIPEI O
          EQ     DDF         RETURN 
 RET      SPACE  4,10 
**        FUNCTION 6 - RETURN FILE. 
  
  
 RET      RJ     CMF         COMPLETE FILE
          RETURN O
          EQ     DDF         RETURN 
 SID      SPACE  4,10 
**        FUNCTION 7 - SETID. 
* 
*         ENTRY  (DBUF) = ID. 
  
  
 SID      SA1    DBUF 
          SA2    OUTA+1      SET *TID* FLAG BIT 
          SX3    FRTI 
          BX6    X2+X3
          SA6    A2 
          BX6    X1          SET *TID* FIELD
          SA6    A6+B1
          EQ     DDF         RETURN 
 DDF      TITLE  SUBROUTINES. 
 CMF      SPACE  4,10 
**        CMF - COMPLETE FILE.
* 
*         ENTRY  (A0) .NE. 0 IF BUFFER FLUSH REQUIRED.
* 
*         EXIT   (A0) = 0.
* 
*         USES   B - 2. 
* 
*         MACROS WRITER.
  
  
 CMF      SUBR               ENTRY/EXIT 
          SB2    A0 
          ZR     B2,CMFX     IF WRITE NOT NEEDED
          WRITER O,R
          SA0    B0 
          EQ     CMFX        RETURN 
 DDF      SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCCIO 
*CALL     COMCCOD 
*CALL     COMCLFM 
*CALL     COMCSYS 
*CALL     COMCWOD 
*CALL     COMCWTC 
*CALL     COMCWTO 
*CALL     COMCWTW 
*CALL     COMCZTB 
 DDF      SPACE  4,10 
*         BUFFERS.
  
  
          USE    BUFFERS
 DBUF     EQU    *
 OBUF     EQU    DBUF+DBUFL 
 EBUF     EQU    OBUF+OBUFL  END OF BUFFERS 
  
 MFL=     EQU    EBUF+8      MINIMUM MEMORY REQUIRED FOR PROGRAM
 PRS      TITLE  PRESET.
 PRS      SPACE  4,10 
**        PRS - PRESET. 
* 
*         EXIT   (RA+2) = POINTER TO OUTPUT FILE. 
*                (RA+3) = POINTER TO *DBUF*.
*                (RA+4) = LWA+1 OF *DDFILE*.
*                (A0) = 0.
  
  
 DDFILE   BSS    0
 PRS      SA1    O           SET UP POINTERS
          SB1    1
          MX2    42 
          SX3    A1 
          SX7    DBUF 
          BX4    X2*X1
          BX6    X4+X3
          SA6    B1+B1
          SA7    A6+B1
          SX6    MFL= 
          SA6    A7+B1
          SA0    B0          DESELECT WRITE FLAG
          EQ     DDF         ENTER LOOP 
          SPACE  4,10 
          END 
