*DECK FFSCLST 
          IDENT  FFSCLST
*CALL COPYRITE
          ENTRY  FFSCLST
          SST 
          SYSCOM B1 
          TITLE  FFSCLST - RETRIEVE AND FORMAT CATALOG LIST.
          COMMENT  FFSCLST - RETRIEVE AND FORMAT CATALOG LIST.
          COMMENT - COPYRIGHT CONTROL DATA SYSTEMS INC. 1994. 
          SPACE  4,10 
***       FFSCLST - RETRIEVE AND FORMAT CATALOG LIST. 
 FFSCLST   SPACE  4,25
***       FFSCLST - RETRIEVE AND FORMAT CATALOG LIST. 
* 
*         *FFSCLST* RETRIEVES AND FORMATS PERMANENT FILE CATALOG
*         ENTRIES.
* 
*         *SYMPL* CALL -
* 
*         FFSCLST(PBUF, RETSTAT, FET);
* 
*         ENTRY  (FET)    = FILE ENVIRONMENT TABLE ADDRESS. 
*                (CLFULL) = FULL OR NAME ONLY CATLIST (COMMON). 
*                (CLHEAD) = CATLIST HEADER REQUIRED (COMMON). 
* 
*         EXIT   (PBUF)   = TRANSLATED ENTRIES. 
*                (WDCNT)  = NUMBER OF WORDS IN PBUF (COMMON). 
*                (RETSTAT)= 0 IF FINISHED,
*                         = 1 IF MORE AVAILABLE.
*                (STATMSG)= ERROR STATUS (COMMON).
*                (INPBUF) = ERROR TEXT (COMMON).
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 6, 7. 
*                B - 1, 6, 7. 
* 
*         CALLS  FCE. 
* 
*         MACROS CATLIST, FILEB, GETSSM, READW. 
  
  
 OPL      XTEXT  COMSMLS     MULTI-LEVEL SECURITY 
 OPL      XTEXT  COMSPFM     PERMANENT FILE MANAGER 
 OPL      XTEXT  COMCFCE     FORMAT CATLIST ENTRY 
  
 FCELL    EQU    /COMCFCE/FCELL  OUTPUT BUFFER LINE LENGTH
 FCELA    EQU    /COMCFCE/FCELA  OUTPUT BUFFER THIRD LINE LENGTH
 FCELB    EQU    /COMCFCE/FCELB  OUTPUT BUFFER FOURTH LINE LENGTH 
 INPSIZ   EQU    273
 CRECLEN  EQU    4
  
*         INPUT BUFFER FROM NAM 
  
          USE    /INPBUFF/
          BSS    1           FILL TO INPBUF 
 INPBUF   BSS    INPSIZ 
          USE    *
  
*         CONTROL RECORD BUFFER 
*         - USED FOR EASY COMMUNICATION WITH SYMPL CALLERS
  
          USE    /CTRLREC/
  
 NXTBWRD  BSS    1           NEXT WORD IN BUFFER
 BUFFAD   BSS    1           INPUT/OUTPUT BUFFER ADDRESS
 WDCNT    BSS    1           TOTAL WORDS IN BUFFER FROM ZERO
 WHCNT    BSS    1           TOTAL WHOLE WORDS IN BUFFER
 BYTESIN  BSS    1           TOTAL BYTES ON INPUT FILE
 BYTESOUT BSS    1           TOTAL BYTES ON OUTPUT FILE 
 CURRIN   BSS    1           CURRENT INPUT BYTE COUNT 
 CURROUT  BSS    1           CURRENT OUTPUT BYTE COUNT
 OUTFCR   BSS    1           FLOW CONTROL RELEASE INDICATOR 
 STATMSG  BSS    1           MESSAGE NUMBER TO RETURN TO CALLER 
 CLHEAD   BSS    1           CATLIST HEADER REQD FLAG (1=YES) 
 CLFULL   BSS    1           FULL CATLIST REQUIRED
  
 OUCREC   BSS    CRECLEN     BUFFER FOR CONTROL RECORD
 OUCHDDR  EQU    OUCREC      HEADER WORD
 OUCBCNT  EQU    OUCREC+1    BYTE COUNT ON FILE (BITS 47-0) 
 OUCKSUM  EQU    OUCREC+2    FILE CHECKSUM
 OUCPSUM  EQU    OUCREC+3    FILE CHECKSUM TO LAST FULL WORD
  
          USE    *
 BUFRCATL EQU    500B        RAW CATLIST BUFFER LENGTH
 PBUFL    EQU    2000B       OUTPUT BUFFER LENGTH 
 WBL      EQU    28D         WORKING BUFFER LENGTH
  
 FFSCLST  SUBR               ENTRY/EXIT 
          SB1    1
  
*         SAVE FORMAL PARAMETER ADDRESSES.
  
          SA3    A1+B1       ADDRESS OF *RETSTAT* 
          SA2    A3+B1       ADDRESS OF *FET* 
          SX6    X1          SAVE ADDRESS OF PBUF BUFFER
          SA6    OUTADDR
          SX6    X3          SAVE ADDRESS OF *RETSTAT*
          BX7    X2          (X2) = FET ADDRESS 
          SA6    RETSADDR 
          SA7    FETADDR
          MX7    0           SET *RETSTAT* TO FALSE 
          SA7    X3 
          MX0    42          PUT ADDR OF *INPBUF* IN *ERAD* FET FIELD 
          SA5    X2+12B 
          SX1    INPBUF 
          BX6    X5*X0       CLEAR *ERAD* FIELD 
          BX6    X6+X1       INSERT *INPBUF* ADDRESS
          SA6    A5          STORE IN FET 
          SA5    X2+11B      SAVE USER NAME 
          BX7    X5*X0
          SA7    UN 
          MX6    0
          SA6    X1          ZERO WORD 0 OF ERROR MESSAGE AREA
  
*         SET UP THE FET SO THAT *CATLIST* CAN WRITE IN 
*         MULTIPLE CATALOG ENTRIES. 
  
          SA1    BUFRCAT     SET FET POINTERS 
          SX7    A1 
          MX0    42D
          SA3    X2+1 
          BX6    X3*X0
          BX6    X6+X7
          SA6    A3           FIRST = *BUFRCAT*+0 
          SA7    X2+2         IN = *BUFRCAT*+0
          SA7    X2+3         OUT = *BUFRCAT*+0 
          SX7    X7+BUFRCATL  LIMIT = *BUFRCAT*+LENGTH+1
          SX7    X7+B1
          SA7    X2+4 
          SA3    X2+10B      CLEAR OUT MODE 
          BX6    X3*X0
          SA6    A3 
  
*         SET UP THE FAKE FET SO THAT *WRITEH* CAN COPY A 
*         ZERO BYTE TERMINATED RECORD INTO *PBUF*.
  
          SA1    OUTADDR
          BX7    X1 
          SA7    FAKEFET+1   FIRST = *PBUF*+0 
          SA7    FAKEFET+2   IN = *PBUF*+0
          SA7    FAKEFET+3   OUT = *PBUF*+0 
          SX7    X7+PBUFL    LIMIT = *PBUF*+LENGTH+1
          SX7    X7+B1
          SA7    FAKEFET+4
  
*         READ MULTIPLE CATALOG ENTRIES INTO *BUFRCAT*
*         RETURN ANY ERROR STATUS TO CALLER.
  
          CATLIST  X2        GET CATLIST DATA 
  
          MX0    8D          EXTRACT *AT* FIELD FROM FET
          SA1    X2 
          LX0    18D
          BX6    X0*X1
          LX6    60D-10D
          SA6    STATMSG
          NZ     X6,CLT6     IF *AT* FIELD NON-ZERO 
          GETSSM SSM         GET SYSTEM SECURITY MODE 
  
*         READ ONE CATALOG ENTRY INTO *RENTBUF*.
*         IF HEADER REQUIRED THEN WRITE IT INTO *PBUF*
  
 CLT1     SA2    FETADDR
          READW  X2,RENTBUF,NWCE
          NG     X1,CLT5     IF BUFFER EMPTY
          SA1    CLHEAD 
          ZR     X1,CLT2
          WRITEH FAKEFET,/COMCFCE/CHDR1,FCELL  FIRST LINE 
          WRITEH FAKEFET,/COMCFCE/CHDR2,FCELL  SECOND LINE
          WRITEH FAKEFET,/COMCFCE/CHDR3,FCELA  THIRD LINE 
          WRITEH FAKEFET,/COMCFCE/CHDR4,FCELB  FOURTH LINE
          WRITEH FAKEFET,BLANKL,1              BLANK LINE 
          SX6    B0 
          SA6    CLHEAD        NO MORE HEADERS
  
*         IF NAME ONLY THEN WRITE FILE NAME INTO *PBUF*.
  
 CLT2     SA1    CLFULL 
          NZ     X1,CLT3     IF FULL CATLIST REQUIRED 
          MX0    42D
          SA1    RENTBUF     PICK UP FILE NAME
          BX7    X1*X0
          SA7    FNAME
          WRITEH FAKEFET,FNAME,1  FIRST LINE
          EQ     CLT1 
  
*         FULL CATLIST REQUIRED.
*         CALL *FCE* TO FORMAT CATLIST INFORMATION INTO *WB*. 
  
 CLT3     SX2    B0          ASSUME NOT AN ALTERNATE USER 
          SA1    UN 
          ZR     X1,CLT4     IF NO ALTERNATE USER SPECIFIED 
          SX2    B1          ALTERNATE USER 
 CLT4     SA3    SSM         SYSTEM SECURITY MODE 
          SX4    B1          LENGTH IN *PRUS* 
          SX6    B0          DO NOT PROVIDE USER INDEX
          SX7    B0          PROVIDE LINE NUMBERS 
          SB6    RENTBUF     TAKE RAW DATA FROM *RENTBUF* 
          SB7    WB          PUT THE FORMATTED ENTRY IN *WB*
          RJ     FCE         FORMAT CATALOG ENTRY 
  
*         WRITE CATLIST INFORMATION INTO *PBUF*.
  
          WRITEH FAKEFET,WB,FCELL          FIRST LINE 
          WRITEH FAKEFET,WB+FCELL,FCELL    SECOND LINE
          WRITEH FAKEFET,WB+2*FCELL,FCELA  THIRD LINE 
          WRITEH FAKEFET,WB+3*FCELL,FCELB  FOURTH LINE
          WRITEH FAKEFET,BLANKL,1          BLANK LINE 
          EQ     CLT1 
  
*         END OF CATALOG ENTRIES IN *RENTBUF*.
  
 CLT5     SX1    X1+B1
          NG     X1,CLT6     IF END OF CATLIST DATA 
          SA1    RETSADDR    SET MORE TO TRUE 
          SX7    B1 
          SA7    X1 
  
*         CALCULATE NUMBER OF WORDS IN *PBUF* 
  
 CLT6     MX0    42D
          SA1    FAKEFET+1
          BX2    -X0*X1 
          SA3    FAKEFET+2
          BX3    -X0*X3 
          IX7    X3-X2       NUMBER OF WORDS IN PBUF
          SA7    WDCNT
          EQ     FFSCLSTX     RETURN
  
  
 BUFRCAT  BSS    BUFRCATL    RAW CATLIST BUFFER 
 WB       BSS    WBL         WORKING BUFFER 
 FAKEFET  FILEB  WB,WBL,FET=5  FET FOR BUILDING ZERO BYTE RECORDS 
 OUTADDR  BSS    1           ADDRESS OF FORMAL PARAMETER *PBUF* 
 RETSADDR BSS    1           ADDRESS OF FORMAL PARAMETER *RETSTAT*
 FETADDR  BSS    1           ADDRESS OF FORMAL PARAMETER *FET*
 FNAME    BSS    1           FILE NAME ONLY 
 UN       BSS    1           USER NAME
 SSM      CON    0           SYSTEM SECURITY MODE 
 BLANKL   CON    55550000000000000000B
 RENTBUF  BSS    NWCE        RAW CATLIST ENTRY BUFFER 
  
 OPL      XTEXT  COMCCDD
 OPL      XTEXT  COMCCOD
 OPL      XTEXT  COMCEDT
 OPL      XTEXT  COMCSCB
 OPL      XTEXT  COMCSFN
 OPL      XTEXT  COMCZTB
 OPL      XTEXT  COMSSFM
  
          END 
