*DECK DB$PVCR 
USETEXT CDCSCTX 
USETEXT JLPCMTX 
      PROC DB$PVCR((FUNCODE));
  BEGIN 
 #
* *   DB$PVCR                                    PAGE  1
* *   PERFORM RECORD LEVEL PRIVACY CHECK
* *   W P CEAGLIO                                DATE  2/25/76
* 
* DC  PURPOSE 
* 
*     VERIFY THAT A RUN-UNIT HAS ACCESS RIGHTS FOR A SPECIFIED RECORD 
* 
* DC  ENTRY CONDITIONS
* 
*           FUNCODE     FUNCTION CODE 
* 
*                         1 = DELETE
*                         3 = GET (READ)
*                         4 = MODIFY (REWRITE)
*                         5 = STORE (WRITE) 
* 
*     CDCS COMMON 
* 
*           P<RSARBLK>  = CURRENT AREA CONTROL BLOCK
*           P<RSRECBLK> = CURRENT RECORD CONTROL BLOCK
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL -- CURRENT REQUEST FOR RUN-UNIT ALLOWED TO CONTINUE
* 
*     ABNORMAL -- PRIVACY BREACH ATTEMPT MESSAGE GENERATED AND RUN-UNIT 
*                 PROCESSING IS TERMINATED
* 
* DC  CALLING ROUTINES
* 
*     CONTROL SYMBIONTS 
* 
* DC  CALLED ROUTINES 
* 
*     DB$ERR     GENERATE ERROR MESSAGE 
*     DB$FLOP    GENERATE FLOW POINT
*     DB$JLH     INITIALIZE JOURNAL LOG RECORD HEADER 
*     DB$JLO     OUTPUT A JOURNAL LOG RECORD
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     CDCS COMMON 
* 
*     JOURNAL LOG COMMON
* 
* DC  DESCRIPTION 
* 
*     -   USE THE INPUT FUNCTION CODE TO REFERENCE THE PROPER PRIVACY 
*         BIT IN THE PRIVACY OPTIONS FIELD. 
*     -   IF THE REFERENCED PRIVACY BIT IS SET TO 1, THEN RETURN
*         (ACCESS PERMITTED).  OTHERWISE, INDICATE THAT A PRIVACY 
*         BREACH WAS ATTEMPTED AND TERMINATE PROCESSING FOR THE RUN-
*         UNIT.  CONTROL IS NOT RETURNED TO THE CALLING SYMBIONT. 
* 
 #
      CONTROL NOLIST;        # CSTARDCLS, CSTRCDCLS                    #
*CALL CSTARDCLS 
*CALL CSTRCDCLS 
      CONTROL LIST; 
  
  
# FORMAL PARAMETERS                                                    #
  
      ITEM FUNCODE;                     # FUNCTION CODE                #
  
# EXTERNAL REFERENCES                                                  #
  
      XREF PROC DB$ERR;                 # GENERATE ERROR MESSAGE       #
      XREF PROC DB$FLOP;                # GENERATE FLOW POINT          #
      XREF PROC DB$JLH;                 # INITIALIZE LOG RECORD HEADER #
      XREF PROC DB$JLO;                 # OUTPUT A JOURNAL LOG RECORD  #
      CONTROL EJECT;
  
  
# S T A R T  O F  D B $ P V C R  E X E C U T A B L E  C O D E          #
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("PVCR   "); 
      CONTROL ENDIF;
  
# CHECK PRIVACY BIT USING INPUT FUNCTION CODE                          #
  
      IF B<FUNCODE-1,1>RSRCPRIV [0] EQ 1  THEN
  
# CHECK PASSED--RETURN TO CALLER                                       #
  
        BEGIN 
        RETURN; 
        END 
  
# CHECK FAILED--GENERATE ERROR MESSAGE AND TERMINATE RUN-UNIT          #
  
      IF SASCJAFG[SALX] THEN
        BEGIN 
        PARLEN = DFJLSZPA;   # SIZE OF PRIVACY LOG RECORD              #
        DB$JLH;              # INITIALIZE JOURNAL LOG RECORD HEADER    #
  
        JLHDWDA[0] = DFJLWDAPA; 
        JLPVFLLR[0] = " ";   # RESERVED                                #
        JLPVSCIT[0] = "    ";  # RESERVED                              #
        JLPVSSIT[0] = "    ";  # RESERVED                              #
        JLPVSCNM[0] = CSFSCNAM[0];  # SCHEMA NAME                      #
        JLPVSBNM[0] = CSFSBNAM[0];  # SUBSCHEMA NAME                   #
        P<CSAREBLK> = P<CSFIXED> + RSARCSTP[0];  # CST AREA WORK BLOCK #
        JLPVARNM[0] = C<0,CSANAMLW[0]*10> CSANAME[0];  # AREA NAME     #
        P<CSRECBLK> = P<CSFIXED> + RSRCCSTP[0];  # CST REC WORK BLOCK  #
        JLPVRCNM[0] = C<0,CSRNAMLW[0]*10> CSRNAME[0];  # RECORD NAME   #
        TRLRLEN = 0;
        DB$JLO;              # OUTPUT A JOURNAL LOG RECORD             #
  
        END 
  
      DB$ERR (23);
  
  END 
      TERM
