          IDENT  RHABEIO
          TITLE  RHA$NOSBE MACRO INTERFACE - NOSBE REQUEST/ATTACH/CATALOG
          SYSCOM B1
          LIST   F
*copyc dsa$cybil_if_macros
          IF     DEF,RA.ORG,1
OPL       XTEXT  PFCOM
          ENTRY  RHPREQ,RHPATT,RHPCAT
          SPACE  2
*     THE PURPOSE OF THIS ROUTINE IS TO PROVIDE AN INTERFACE
* BETWEEN A CYBIL PROCEDURE AND THE NOS/BE REQUEST MACRO.
*
*         RHPREQ  (REQUEST_PARAMETER_BLOCK)

RHPREQ    BSS
          IF     DEF,RA.ORG,3
          RJ     =XPXSAVE
          REQUEST  X1
          EQ     =XZSMRRET         RETURN TO CALLING CYBIL PROGRAM
          SPACE  3,10
*     THE NEXT 2 ROUTINES PERFORM GET/REPLACE PF ACTIVITY FOR
* NOS/BE. THE NOS VERSION PROVIDES THE ENTRY POINTS ONLY FOR
* COMPATIBILITY AND PROTECTION DURING LOAD AND EXECUTION.
*
*         RHPATT (LFN,PFN,ID,CYCLE,PW1,PW2,CONDITION)
*         RHPCAT (LFN,PFN,ID,CYCLE,PW1,PW2,CONDITION)
* *** WARNING *** LFN 'ZZZZPFP' SHOULD NOT BE USED ANY TIME.

NOSSYS    IF     -DEF,RA.ORG
RHPATT    BSS    0
RHPCAT    SHORTEX                  QUICK RETURN TO CYBIL
NOSSYS    ELSE

FINDRC    MACRO
          SA2    FDB
          MX6    51
          AX2    9
          BX6    -X6*X2
          ENDM

BYZ  MACRO  INPUT,BLNKS,FIVES,MASKX,OUTPT
     SX_MASKX  B1
     BX_OUTPT  X_INPUT-X_BLNKS
     IX_MASKX  X_OUTPT-X_MASKX
     BX_OUTPT  -X_MASKX+X_OUTPT
     BX_MASKX  X_FIVES*X_OUTPT
     BX_OUTPT  X_MASKX
     LX_OUTPT  55D
     IX_OUTPT  X_MASKX-X_OUTPT
     BX_MASKX  X_MASKX+X_OUTPT
     BX_OUTPT  X_MASKX*X_INPUT
BYZ  ENDM

          ENTRY  PFM=              SATISFY UNUSED (NOS) ENTRY
PFM=      BSS    1                 DO NOTHING
          SHORTEX
RHPATT    RJ     =XPXSAVE
          MX7    0                 FLAG ATTACH OPERATION
          EQ     MAIN
RHPCAT    RJ     =XPXSAVE
          MX7    54                FLAG NON-ATTACH (CATALOG)
*--- SET ATTACH/CATALOG FLAG .FALSE. FOR ATTACH
MAIN      SA7    CATFLAG
*--- CONVERT CYCLE TO BINARY AND SAVE ( 4TH PARAMETER )
          SA2    X2                FETCH CYCLE IN DISPLAY CODE
          MX6    0                 PRESET BINARY VALUE
          MX7    54
          SB3    3                 LOOP COUNTER
CYLOOP    LX2    6
          BX1    -X7*X2
          SX1    X1-55B
          ZR     X1,CYOUT          BLANK MEANS TERMINATOR
          SX1    X1+22B            BINARY FOR DIGIT
          LX6    1
          IX1    X1+X6
          LX6    2
          IX6    X6+X1             GIVES PREVIOUS * 10 + LAST DIGIT
          SB3    B3-B1
          GT     B3,CYLOOP
CYOUT     LX6    6                 ALLOW FOR KEY TO BE ADDED
          SB4    X6                SAVE CYCLE * 100B
          SX6    X6+CYKEY
          SA6    FDB+2             CYCLE PROCESSING COMPLETE
*--- FDB[0] = LFN     ( 1ST PARAMETER )
          SA1    B5                FETCH LFN
          MX7    42D
          SA4    =10H              - BLANKS -
          LX1    18D
          BX6    X1*X7
          BX1    -X7*X4            3R BLANKS
          BX6    X6+X1
          SA6    FDB
*--- FDB[-4..-1] = PFN     ( 2ND PARAMETER )
          SA1    B5+B1             FETCH PFN
          SA1    X1
          SA2    A1+B1
          BX6    X1
          BX7    X2
          SA1    A2+B1
          SA6    FDB-4
          SA2    A1+B1
          SA7    A6+B1
          BX6    X1
          SA6    A7+B1
          MX7    6
          BX1    -X7*X4            9R BLANKS
          BX7    X7*X2
          BX7    X7+X1
          SA7    A6+B1             PFN IS NOW STORED IN FDB[-4..-1]
          SA2    =10H5555555555
*--- BLANK_TO_ZERO LFN
          MX7    6
          SA1    FDB
          BX6    X1-X4
          BX6    X6*X7
          ZR     X6,NOLFN
          BYZ    1,4,2,0,6
NOLFN     SA6    A1                LFN IS NOW ZERO PADDED
*--- FOR I = 1 TO 4 DO
*---     IF FDB[-I].BYTE0 = BLANK THEN  FDB[-I] = 0
*---                              ELSE BLANK_TO_ZERO FDB[I]
*---                                   EXIT FOR_LOOP
*---     IFEND
*--- FOREND
          SB3    4                 LOOP COUNTER
NEXTPFN   SA1    A1-B1
          BX6    X1-X4
          MX7    6
          BX6    X6*X7
          NZ     X6,PFNDONE        FOUND PFN WORD WITH SIGNIFICANCE
          SA6    A1
          SB3    B3-B1
          GT     B3,NEXTPFN
          EQ     NOPFN
PFNDONE   BYZ    1,4,2,0,6
          SA6    A1                PFN PROCESSING COMPLETED
*--- REFORMAT ID     ( 3RD PARAMETER )
*--- FDB[1] = ID + 14B
NOPFN     SA1    =XPARSV
          SB5    =XPARSV+3         PW2 POINTER
          SA1    X1                GET ID
          RJ     FORMAT
          SX1    IDKEY
          BX6    X6+X1
          SA6    FDB+1             ID PROCESSING COMPLETED
* NOW CHECK FOR LFN/PFN NONZERO AND SET DEFAULT IF ZERO.
*--- IF FDB[0]=0 THEN FDB[0]=MASK(42).AND.FDB[-4]
*--- IF FDB[-4]=0 THEN FDB[-4]=FDB[0]
          SA1    FDB               LFN
          SA3    FDB-4             1ST WORD OF PFN
          NZ     X1,HAVELFN
          MX6    42
          BX6    X6*X3
          SA6    A1
HAVELFN   NZ     X3,HAVEPFN
          BX6    X1
          SA6    A3
HAVEPFN   SA1    A1
          BX6    X1
          SA6    SAVELFN
*--- REFORMAT TURNKEY   ( 5TH PARAMETER )
          SA1    B5-B1             FETCH TURNKEY PARAMETER
          SA1    X1
          RJ     FORMAT
*--- INDEX = 3;  KEY = 20B
          SB3    3
          SX5    PWKEY
*--- IF TURNKEY <> 0 THEN  FDB[INDEX] = TURNKEY + 04B
*---                       FDB[INDEX+1] = TURNKEY + KEY
*---                       INDEX = INDEX + 2
*---                       KEY = KEY + 1
          ZR     X6,NOPW1          TURNKEY OR 1ST PASSWORD NOT THERE
          SX1    TKKEY
          BX7    X6+X1             ADD TK KEY
          SA7    FDB+B3
          BX6    X6+X5             ADD PW KEY
          SA6    A7+B1
          SX5    X5+B1             INCREMENT PW KEY
          SB3    B3+2              INCREMENT INDEX
*--- REFORMAT PASSWORD     ( 6TH PARAMETER )
NOPW1     SA1    B5
          SA1    X1
          RJ     FORMAT
*--- IF PASSWORD <> 0 THEN  FDB[INDEX] = PASSWORD + 10B
*---                        FDB[INDEX+1] = PASSWORD + KEY
*---                        INDEX = INDEX + 2
*---             IF CATALOG THEN FDB[INDEX-2] = FDB[INDEX-2] + 03B
          ZR     X6,NOPW2          NO 2ND PASSWORD
          SB3    B3+2              INCREMENT INDEX
          SX1    RDKEY
          BX7    X6+X5             ADD PW KEY
          BX6    X6+X1             ADD RD KEY
          SA3    CATFLAG
          PL     X3,WASATT
          SX1    XRKEY-RDKEY
          IX6    X6+X1             CHANGE RD KEY INTO XR KEY
WASATT    SA6    FDB-2+B3
          SA7    A6+B1
*--- FDB[INDEX] = 0   ( TERMINATOR )
          MX6    0
NOPW2     SA6    FDB+B3
*
* END OF FDB SETUP FOR BOTH ATTACH AND CATALOG.
*
          REPRIEVE RPVPARM,SETUP,20B
          SA3    CATFLAG
          MI     X3,CATALOG
          ATTACH FDB,RC,RT
          FINDRC
          NZ     X6,GOSETRC
          PERM   FDB,RC
          FINDRC
          BX7    X6
          MX6    0
          LX7    59-0              READ PERMISSION BIT
          NG     X7,GOSETRC
          SX6    71B
GOSETRC   SA1    B5+B1             FETCH RC POINTER
          SA6    X1                STORE CYBIL CONDITION CODE
          EQ     =XZSMRRET         RETURN TO CALLING CYBIL PROGRAM
CATALOG   ZR     B4,GOCAT          ZERO OR NO CYCLE SPECIFIED
GOPURGE   SA1    TEMPLFN
          MX7    1
          LX7    18D
          BX6    X1
          IX7    X7+X1
          SA6    FDB
          SA7    A1
          PURGE  FDB,RC,RT
          FINDRC                   GET RETURN CODE IN X6
          ZR     X6,GOCAT
          SX7    X6-12B            FILE NOT CATALOGUED
          NZ     X7,GOSETRC
GOCAT     SA1    SAVELFN
          BX6    X1
          SA6    FDB               RESTORE GOOD LFN
          SX7    B4+CYKEY
          SA7    FDB+2             RESTORE GOOD CYCLE
          CATALOG FDB,RC,RT
          FINDRC                   GET RETURN CODE IN X6
          SX7    X6-4              NO ROOM FOR EXTRA CYCLE
          NZ     X7,GOSETRC
          SX7    LCKEY+100B
          SA7    FDB+2             SET LC=1
          EQ     GOPURGE
*
FORMAT    BSSZ   1
          BX6    X1-X4
          MX7    6
          BX6    X6*X7
          LX7    12
          ZR     X6,FORMAT         LEADING BLANK DETECTED
          MX6    54
          BX3    -X6*X4            ONE BLANK RIGHT JUSTIFIED
          BX1    X6*X1             LEFT 54 BITS
          BX1    X1+X3
          BYZ    1,4,2,0,6
CHZERO    BX3    X7*X6
          NZ     X3,FORMAT         IS RIGHT JUSTIFIED TO BIT 6 NOW
          LX6    54
          EQ     CHZERO
*
RPVPARM   VFD    42/31B,18/0       * REPRIEVE  *
          VFD    60/MYRPV          * PARAMETER *
          BSSZ   27B               *   BLOCK   *
MYRPV     BSS    0
          REPRIEVE RPVPARM,RESUME,77B
*
TEMPLFN   VFD    42/0LZZZZPFP,18/0
CATFLAG   BSS    1
SAVELFN   BSS    5                 KEEP THESE 2 LINES TOGETHER
FDB       BSSZ   8                 ---------------------------
* FOLLOWING KEYS ARE LISTED IN THE NOS/BE 1 RM CHAPTER 7
*            UNDER THE *FDB* MACRO (CURRENTLY PAGE 7-86).
CYKEY     EQU    03B
TKKEY     EQU    04B
RDKEY     EQU    10B
XRKEY     EQU    13B
IDKEY     EQU    14B
PWKEY     EQU    20B
LCKEY     EQU    31B
NOSSYS    ENDIF
          END
