*DECK QUEXIT                                                              001930
          IDENT  QU$EXIT
QU$EXIT   TITLE  QU$EXIT- LINKAGE FOR OLD-STYLE DATA BASE PROCEDURES
* 
*  THIS RELOCATABLE ROUTINE SHOULD BE EDITLIB-ED INTO THE LIBRARY 
*  -SYSMISC-. IT IS THE LINKAGE MECHANISM BETWEEN QU-S ABSOLUTE OVERLAYS
*  AND OLD-STYLE DATABASE PROCEDURES (PARAMETERS IN COMMON BLOCKS IN- 
*  STEAD OF USING NEW-STYLE PARAMETER LISTS). THIS ROUTINE MOVES THE
*  INFORMATION FROM THE PARAMETER LIST INTO THE COMMON BLOCK. UPON
*  RETURNING FROM THE DATA BASE PROCEDURE, THE RETURN CODE IS MOVED 
*  FROM THE COMMON BLOCK TO THE PARAMETER LOCATION SO QU CAN GET IT.
* 
*  THIS ROUTINE IS LOADED FROM SYSMISC IF OLD-STYLE CRM ( CYBER RECORD
*  MANAGER ) LINKAGE ENTRY POINTS ARE USED (EG. QUOPEN, QUGET, ETC. ).
*  -XCOMMON- IS A SPECIAL ENTRY POINT THAT TELLS QU THAT OLD-STYLE
*  DATA BASE PROCEDURES ARE BEING USED. IF SO, CALLS TO THE DATA BASE 
*  PROCEDURES WILL GO INDIRECTLY THROUGH QU$EXIT, THE OTHER ENTRY POINT 
*  PASSED TO QU.
* 
          SPACE  2
*         CALLING SEQUENCE -
*                       QU$EXIT(DBPADDR,P1,P2,P3,P4,P5,P6,P7,P8,P9) 
          SPACE  4
          PURGMAC MAP 
 MAP      MACRO  FROM,TO
*                FOR PURPOSES OF CAUSING AN ENTRY POINT IN QUEXITS TO 
*                TRANSLATE INTO AN ENTRY POINT ALREADY DEFINED IN QU. 
*                ALTHOUGH ENTRY POINTS DEFINED HERE MAP TO THE ACTUAL 
*                NAMES (EG.GETN, NOT Q$GETN), THE ADDRESS PASSLOC-D FOR 
*                THE NAME IS THE SPECIAL QU ENTRY POINT (EG.GETN HAS A
*                PASSLOC-ASSOCIATED ADDRESS OF Q$GETN). 
*                MAPPING GOES FROM A QUEXITS E.P. TO A REAL NAME. 
*                EG.  MAP QUGETN,GETN 
          ENTRY  FROM 
FROM      JP     *+1S17 
          RJ     =X_TO
          EQ     FROM 
          ENDM
          MAP    QUOPEN,OPENM 
          MAP    QUCLOSE,CLOSEM 
          MAP    QUGET,GET
          MAP    QUGETN,GETN
          MAP    QUPUT,PUT
          MAP    QUDLTE,DLTE
          MAP    QUREPLC,REPLC
          MAP    QUFIS,FILEIS 
          MAP    QUFDA,FILEDA 
          MAP    QUFSQ,FILESQ 
          EJECT 
*CALL MACRO 
*CALL COMMOV
          LIST   -L *CALL NUMOPT FOLLOWS
*CALL NUMOPT
          LIST   L
          EJECT 
QU$EXIT   TITLE 
          SPACE  3                                                      002110
*  DESCRIPTION OF THE COMMON BLOCK CCOMMON                              002120
          ENTRY  XCOMMON
          USE    /CCOMMON/                                              002140
XCOMMON   BSS    0                 TO ALLOW QU TO GET CCOMMON ADDRESS 
ECRC      BSS    1               ENTRY CODE, RETURN CODE                002160
DIRCODE   BSS    1               DIRECTIVE CODE                         002170
 FIT      BSS    LFIT        FILE INFORMATION TABLE FOR CRM FILES 
KEYLG     BSS    1               LENGTH OF KEY                          002190
KEYAREA   BSS    COMKEYL         CURRENT RECORD KEY                     002200
*                                SIZE IS ASSEMBLY PARAMETER IN NUMOPT   002210
RECLG     BSS    1               LENGTH OF RECORD                       002220
RECAREA   BSS    0               BEGINNING OF RECORD AREA               002230
*                                NO ROOM PROVIDED, SO THAT THIS IS THE  002240
*                                SHORTEST POSSIBLE CCOMMON              002250
          USE    *                 BACK TO THE PROGRAM BLOCK
  
PLIST     DATA   0                 WILL CONTAIN PARAMETER LIST POINTER
  
  
 RJ$DBP   RJ     *+1S17 
          SA1    CLIST             CONVERSION PARAM LIST
          RJ     =XQUCONF          CONVERT FLOATING TO INTEGER
          SA1    PLIST             (X1) = POINTER TO PARAMETER LIST 
          SA0    X1                (A0) = FWA OF PARAMETER LIST 
          SA1    A0+2              (X1) = ADDR OF RETURN CODE 
          MOVE   ECRC,1,X1
          SA1    A0+3              (X1) = ADDR OF DIRECTIVE CODE
          MOVE   DIRCODE,1,X1 
          SA1    A0+4        (X1) = ADDRESS OF FIT
          MOVE   FIT,LFIT,X1
          SA1    A0+5              (X1) = ADDR OF RECORD AREA 
          SA2    RECLG             (X2) = CURRENT RECORD CHAR LENGTH
          SX2    X2+9 
          SX3    10D
          IX2    X2/X3             (X2) = WORD LENGTH OF RECORD 
          MOVE   RECAREA,X2,X1
          SA1    A0+6              (X1) = ADDR OF RECORD LENGTH 
          MOVE   RECLG,1,X1 
          SA1    A0+7              (X1) = ADDR OF KEY 
          SA2    KEYLG             (X2) = CHAR LENGTH OF KEY
          SX2    X2+9 
          SX3    10D
          IX2    X2/X3             (X2) = WORD LENGTH OF KEY
          MOVE   KEYAREA,X2,X1
          SA1    A0+9              (X1) = ADDR OF KEY LENGTH
          MOVE   KEYLG,1,X1 
  
  
          ENTRY  QU$EXIT
  
 QU$EXIT  JP     *+1S17            ENTRY POINT FOR INDIRECT CALL TO DBP 
          SX6    A1 
          SA6    PLIST             (X6) = FWA OF PARAMETER LIST 
          MX0    12 
          SA2    RJ$DBP            (X2) = LEFT JUSTIFIED -RJ SOMEWHERE- 
          BX6    X0*X2             (X6) = LEFT JUSTIFIED -RJ 0- 
          SA3    X1                (X3) = DBPADDR 
          LX3    30                (X3) = DBPADDR POSITIONED FOR RJ 
          BX6    X6+X3             (X6) = RJ -DBPADDR-
          SA6    A2                REPLACE -RJ- 
          SA0    A1                (A0) = POINTER TO PARAMETER LIST 
          SA1    A0+1              (X1) = ADDRESS OF ENTRY CODE 
          MOVE   X1,1,ECRC
          SA1    A0+3              (X1) = ADDRESS OF DIRECTIVE CODE 
          MOVE   X1,1,DIRCODE 
          SA1    A0+4              (X1) = ADDRESS OF FIT
          MOVE   X1,LFIT,FIT
          SA1    A0+9              (X1) = ADDRESS OF KEY LENGTH 
          MOVE   X1,1,KEYLG 
          SA1    A0+7              (X1) = ADDRESS OF CURRENT KEY
          MOVE   X1,COMKEYL,KEYAREA 
          SA1    A0+6              (X1) = ADDRESS OF RECORD LENGTH
          MOVE   X1,1,RECLG 
          SA1    A0+5              (X1) = ADDRESS OF CURRENT RECORD 
          SA2    RECLG
          SX2    X2+9 
          SX3    10D
          IX2    X2/X3             (X2) = NUMBER OF WHOLE WORDS IN RECD 
          MOVE   X1,X2,RECAREA
          SX1    KEYAREA
          STORE  FIT,KA=X1   STORE USERS KA IN FIT
          SX1    RECAREA
          STORE  FIT,WSA=X1  STORE USERS WSA IN FIT 
          SA1    CLIST             CONVERSION PARAM LIST
          RJ     =XQUCIN1          CONVERT INTEGERS TO COMP-1 
          EQ     RJ$DBP 
*         --
  
 CLIST    BSS    0                 FWA OF CONVERSION PARAM LIST 
          VFD    60/ECRC
          VFD    60/DIRCODE 
          VFD    60/KEYLG 
          VFD    60/RECLG 
          VFD    60/0              END OF PARAM LIST
  
  
  
          END                                                           002800
