AAML
          IDENT  AAML 
          SST 
          ENTRY  CLOSE
          ENTRY  DBCOMIT
          ENTRY  DBEGIN 
          ENTRY  DBFREE 
          ENTRY  DBSTAT 
          ENTRY  DELETE 
          ENTRY  LOCK 
          ENTRY  FLOCK
          ENTRY  OPEN 
          ENTRY  READ 
          ENTRY  READL
          ENTRY  READM
          ENTRY  READN
          ENTRY  READNL 
          ENTRY  REWIND 
          ENTRY  REWRITE
          ENTRY  SKIPBL 
          ENTRY  SKIPFL 
          ENTRY  START
          ENTRY  UNLOCK 
          ENTRY  UNFLOCK
          ENTRY  WRITE
          SYSCOM B1 
          TITLE  AAML - ADVANCED ACCESS METHODS LIBRARY.
*COMMENT  AAML - ADVANCED ACCESS METHODS LIBRARY. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 AAM      SPACE  4,10 
*****     AAM - ADVANCED ACCESS METHODS.
* 
*         G. W. PROPP.       78/08/07.
*         L. E. LOVETT.      80/05/01.
* 
*         AAM IS AN USER LIBRARY INTERFACE FOR COBOL5 AND FORTRAN TASKS 
*         MAKING ADVANCED ACCESS METHOD CYBER RECORD MANAGER REQUESTS 
*         OF THE TRANSACTION FACILITY.  DECK *AAML* IS PLACED ON THE
*         TRANSACTION USER LIBRARY CALLED *TRANLIB*.  THE COBOL5
*         *ENTER* VERB AND THE FORTRAN *CALL* STATEMENT INTERFACE USER
*         TASKS TO THE TRANSACTION FACILITY.
* 
*         AAML HAS BEEN MODIFIED TO PROVIDE TASK LEVEL
*         INTERFACE TO THE TRANSACTION FACILITY FOR 
*         DATA BASE RECOVERY CALLS. 
* 
***       THE REQUESTS FOR *TAF CMR* ARE AS FOLLOWS - 
* 
*         TO CLOSE A FILE FOR A TASK -
*         ENTER CLOSE USING FILE,TSTAT,CSTAT. 
*         CALL CLOSE(FILE,TSTAT,CSTAT). 
* 
*         TO COMMIT AN UPDATE SEQUENCE -
*         ENTER DBCOMIT USING TSTAT.
*         CALL DBCOMIT(TSTAT) 
* 
*         TO BEGIN AN UPDATE SEQUENCE - 
*         ENTER DBEGIN USING UBID,TSTAT.
*         CALL DBEGIN(UBID,TSTAT) 
* 
*         TO FREE AN UPDATE SEQUENCE -
*         ENTER DBFREE USING TSTAT. 
*         CALL DBFREE(TSTAT)
* 
*         TO OBTAIN STATUS OF UPDATE SEQUENCE(S) -
*         ENTER DBSTAT USING PBID,TSTAT,CBID. 
*         CALL DBSTAT(PBID,STAT,CBID) 
* 
*         TO DELETE A RECORD -
*         ENTER DELETE USING FILE,TSTAT,CSTAT,KEYA,KEYP.
*         CALL DELETE(FILE,TSTAT,CSTAT,KEYA,KEYP) 
* 
*         TO LOCK A RECORD -
*         ENTER LOCK USING FILE,TSTAT,KEYA,KEYP.
*         CALL(FILE,TSTAT,KEYA,KEYP). 
* 
*         TO LOCK A FILE -
*         ENTER FLOCK USING FILE,TSTAT. 
*         CALL FLOCK(FILE,TSTAT). 
* 
*         TO OPEN A FILE FOR A TASK - 
*         ENTER OPEN USING FILE,TSTAT,CSTAT.
*         CALL OPEN(FILE,TSTAT,CSTAT).
* 
*         TO READ A RECORD BY KEY - 
*         ENTER READ USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA,KEYP-
*               ,FSTAT,ALTKEY,KEYR,KEYL-. 
*         CALL READ(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA,KEYP-,FSTAT 
*              ,ALTKEY,KEYR,KEYL-). 
* 
*         TO READ A RECORD BY KEY WITH LOCK - 
*         ENTER READL USING FILE TSTAT,CSTAT,WSA,WSAL,RL,KEYA,KEYP- 
*               ,FSTAT,ALTKEY,KEYR,KEYL-. 
*         CALL READL(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA,KEYP-,FSTAT
*              ,ALTKEY,KEYR,KEYL-). 
* 
*         TO READ A RECORD BY MAJOR KEY - 
*         ENTER READM USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,
*              KEYL,KEYA,KEYP,MKEYL-,FSTAT,ALTKEY-. 
*         CALL READM(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR, 
*              KEYL,KEYA,KEYP,MKEYL-,FSTAT,ALTKEY-).
* 
*         TO READ NEXT RECORD - 
*         ENTER READN USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,KEYL- 
*               ,FSTAT-.
*         CALL READN(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,KEYL-,FSTAT-). 
* 
*         TO READ NEXT RECORD WITH LOCK - 
*         ENTER READNL USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,KEYL-
*               ,FSTAT-.
*         CALL READNL(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,KEYL-,FSTAT-).
* 
*         TO REWIND A FILE -
*         ENTER REWIND USING FILE,TSTAT,CSTAT.
*         CALL REWIND(FILE,TSTAT,CSTAT).
* 
*         TO REWRITE A RECORD - 
*         ENTER REWRITE USING FILE,TSTAT,CSTAT,WSA,RL,KEYA,KEYP.
*         CALL REWRITE(FILE,TSTAT,CSTAT,WSA,RL,KEYA,KEYP).
* 
*         TO SKIP A LOGICAL RECORD BACKWARD - 
*         ENTER SKIPBL USING FILE,TSTAT,CSTAT,COUNT.
*         CALL SKIPBL(FILE,TSTAT,CSTAT,COUNT).
* 
*         TO SKIP A LOGICAL RECORD FORWARD -
*         ENTER SKIPFL USING FILE,TSTAT,CSTAT,COUNT.
*         CALL SKIPFL(FILE,TSTAT,CSTAT,COUNT).
* 
*         TO SET THE STARTING POSITION -
*         ENTER START USING FILE,TSTAT,CSTAT,REL,KEYA,KEYP-,FSTAT 
*               ,ALTKEY,MKEYL-. 
*         CALL START(FILE,TSTAT,CSTAT,REL,KEYA,KEYP-,FSTAT,ALTKEY 
*              ,MKEYL-).
* 
*         TO UNLOCK A RECORD -
*         ENTER UNLOCK USING FILE,TSTAT,KEYA,KEYP.
*         CALL UNLOCK(FILE,TSTAT,KEYA,KEYP).
* 
*         TO UNLOCK A FILE -
*         ENTER UNFLOCK USING FILE,TSTAT. 
*         CALL UNFLOCK(FILE,TSTAT). 
* 
*         TO WRITE A RECORD - 
*         ENTER WRITE USING FILE,TSTAT,CSTAT,WSA,RL,KEYA,KEYP-,KEYR 
*               ,KEYL-. 
*         CALL WRITE(FILE,TSTAT,CSTAT,WSA,RL,KEYA,KEYP-,KEYR,KEYL-).
* 
*         PARAMETERS ENCLOSED IN -  - ARE OPTIONAL. 
* 
***       THE PARAMETERS FOR *TAF CRM* REQUESTS ARE DEFINED BELOW - 
* 
*         FILE   FILE NAME SELECTED BY DATA BASE ADMINISTRATOR.  THE
*                FILE NAME MUST BEGIN ON A WORD BOUNDARY AND CONSIST OF 
*                2-7 CHARACTERS WITH BLANK OR BINARY ZERO FILL. 
*                COBOL5 - 01 LEVEL DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         TSTAT  TRANSACTION FACILITY STATUS.  SEE DECK *COMKTER* . 
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         CSTAT  *CRM* STATUS.
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         WSA    WORKING STORAGE AREA LARGE ENOUGH TO CONTAIN RECORD. 
*                COBOL5 - 01 LEVEL DATA NAME. 
*                FORTRAN - INTEGER ARRAY. 
* 
* 
*         WSAL   WORKING STORAGE AREA LENGTH IN CHARACTERS. 
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         KEYR   KEY RETURN AREA LARGE ENOUGH TO CONTAIN PRIMARY KEY
*                COBOL5 - 01 LEVEL DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         KEYL   KEY RETURN AREA LENGTH IN CHARACTERS.
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         MKEYL  MAJOR KEY LENGTH IN CHARACTERS.
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         KEYP   KEY CHARACTER POSITION WITH RESPECT TO *KEYA*.  *KEYP* 
*                STARTS AT ONE FOR FIRST CHARACTER OF *KEYA*. 
*                COBOL5 - 01 COMPUTATIONAL-1  DATA NAME.
*                FORTRAN - INTEGER. 
* 
*         KEYA   KEY AREA.  THIS IS A DATA NAME CONTAINING THE KEY
*                VALUE. 
*                COBOL5 - 01 LEVEL DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         RL     RECORD LENGTH IN CHARACTERS.  ON AN INPUT REQUEST
*                THE TRANSACTION FACILITY RETURNS THE LENGTH.  ON 
*                OUTPUT THE TASK MUST SPECIFY THE LENGTH. 
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA NAME. 
*                FORTRAN - INTEGER. 
* 
*         COUNT  COUNT OF LOGICAL RECORDS TO SKIP.
*                COBOL5 - 01 LEVEL COMPUTATIONAL-1 DATA ANME. 
*                FORTRAN - INTEGER. 
* 
*         UBID   USER SUPPLIED BEGIN IDENTIFIER.
*                ON A DBEGIN REQUEST THE USER SUPPLIES A 5 CHARACTER
*                BEGIN IDENTIFIER.
*                COBOL5 - 01 LEVEL ALPHANUMERIC DATA NAME.
*                FORTRAN - INTEGER. 
* 
*         PBID   BEGIN IDENTIFIER OF THE (LAST) SUCCESSFULLY
*                COMPLETED UPDATE SEQUENCE. ON A DBSTAT REQUEST THE 
*                TRANSACTION FACILITY WILL RETURN THIS IDENTIFIER 
*                IN THE UPPER 30 BITS OF THE WORD, THE LOWER 30 BITS
*                REMAIN UNCHANGED.
*                COBOL5 - 01 LEVEL ALPHANUMERIC DATA NAME.
*                FORTRAN - INTEGER. 
* 
*         CBID   BEGIN IDENTIFIER OF THE CURRENT UPDATE SEQUENCE. 
*                ON A DBSTAT REQUEST THE TRANSACTION FACILITY WILL
*                RETURN THIS IDENTIFIER IN THE UPPER 30 BITS OF THE 
*                WORD, THE LOWER 30 BITS REMAIN UNCHANGED.
*                COBOL5 - 01 LEVEL ALPHANUMERIC DATA NAME.
*                FORTRAN - INTEGER. 
* 
*         REL    CODE GOVERNING POSITION RELATIVE TO GIVEN KEY AFTER
*                OPERATION. 
*                VALUES      EQ, GE, GT.
*                COBOL5 -    01 LEVEL DATA NAME.
*                FORTRAN -   INTEGER DISPLAY CODE LEFT JUSTIFIED. 
* 
*         FSTAT  FILE POSITION INFORMATION. 
*                RETURNED VALUES   0. 
*                                  1    NOT ON KEY. 
*                                  10B  END OF KEY. 
*                                  100B END OF INFORMATION. 
*                COBOL5 -  01 LEVEL COMPUTATIONAL-1 DATA NAME.
*                FORTRAN - INTEGER. 
* 
*         ALTKEY ORDINAL OF ALTERNATE KEY FOR OPERATION 
*                VALUES     -1   NO CHANGE FROM CURRENT.
*                            0   PRIMARY KEY. 
*                            N   ALTERNATE KEY N. 
*                COBOL5 -  01 LEVEL COMPUTATIONAL-1 DATA NAME.
*                FORTRAN - INTEGER. 
          SPACE  4,10 
  
  
*         COMMON DECKS. 
  
*CALL     COMKTAF 
*CALL     COMKIPR 
*CALL     COMKTDM 
*CALL     COMCMAC 
*CALL     COMKFLD 
 BEGINT   BSS    0
          LIST   X
*CALL     COMKCRM 
          SPACE  4,10 
          ORG    BEGINT      DO NOT RESERVE SPACE FOR *TAF CRM* TABLES
          LIST   -X 
**        RTN - RETURN ADDRESS FOR ENTRY POINTS.
*         *RTN* GENERATES RETURN ADDRESS FOR ROUTINE ISSUING
*         *CRM* REQUEST.  THE MACRO ALSO ENSURES THE RETURN 
*         ADDRESS IS POSITIONED CORRECTLY IN THE TABLE OF 
*         RETURN ADDRESSES. 
* 
*         ENTRY  CODE = TASK REQUEST CODE.
*                RETN = ENTRY POINT TO PROCESS TASK REQUEST.
*                (.1) = RETURN ADDRESS TABLE COUNTER. 
* 
*         EXIT   RETURN ADDRESS *RETN* IS PLACED IN TABLE.
*                (.1) = (.1) + 1. 
  
  
          PURGMAC RTN 
  
 RTN      MACRO  CODE,RETN
          ERRNZ  .1-CODE     IF REQUEST CODE NOT IN ORDER 
          VFD    12/0,18/RETN 
 .1       SET    .1+1 
          ENDM
          TITLE  TASK INTERFACE ROUTINES. 
 CLOSE    SPACE  4,10 
**        CLOSE - CLOSE FILE. 
* 
*         ENTRY  ENTER CLOSE USING FILE,TSTAT,CSTAT.
*                CALL CLOSE(FILE,TSTAT,CSTAT).
* 
*         EXIT   TO *ISR*  TO ISSUE REQUEST.
* 
*         USES   X - 1. 
  
  
          VFD    42/0LAAML,18/CLOSE  IDENTIFY DECK
 CLOSE    SUBR               ENTRY/EXIT 
          SX1    TRCL        CLOSE FILE FOR TASK
          EQ     ISR         ISSUE REQUEST
          SPACE  4,10 
**        DBCOMIT - DATA BASE COMMIT REQUEST. 
* 
*         ENTRY  ENTER DBCOMIT USING TSTAT. 
*                CALL DBCOMIT(TSTAT)
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
 DBCOMIT  SUBR               ENTRY/EXIT 
          SX1    TRDC        DATA BASE COMMIT REQUEST 
          EQ     ISR         ISSUE REQUEST
          SPACE  4,10 
**        DBEGIN - DATA BASE BEGIN REQUEST. 
* 
*         ENTRY  ENTER DBEGIN USING UBID,TSTAT. 
*                CALL DBEGIN(UBID,TSTAT)
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
 DBEGIN   SUBR               ENTRY/EXIT 
          SX1    TRDB        DATA BASE BEGIN REQUEST
          EQ     ISR         ISSUE REQUEST
          SPACE  4,10 
**        DBFREE - DATA BASE FREE REQUEST.
* 
*         ENTRY  ENTER DBFREE USING TSTAT.
*                CALL DBFREE(TSTAT) 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
 DBFREE   SUBR               ENTRY/EXIT 
          SX1    TRDF        DATA BASE FREE REQUEST 
          EQ     ISR         ISSUE REQUEST
          SPACE  4,10 
**        DBSTAT - DATA BASE STATUS REQUEST.
* 
*         ENTRY  ENTER DBSTAT USING PBID,TSTAT,CBID.
*                CALL DBSTST(PBID,TSTAT,CBID) 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
 DBSTAT   SUBR               ENTRY/EXIT 
          SX1    TRDS        DATA BASE STATUS REQUEST 
          EQ     ISR         ISSUE REQUEST
 DELETE   SPACE  4,10 
**        DELETE - DELETE RECORD. 
* 
*         ENTRY  ENTER DELETE USING FILE,TSTAT,CSTAT,KEYA,KEYP. 
*                CALL DELETE(FILE,TSTAT,CSTAT,KEYA,KEYP). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 DELETE   SUBR               ENTRY/EXIT 
          SX1    TRDE        DELETE RECORD
          EQ     ISR         ISSUE REQUEST
 LOCK     SPACE  4,10 
 LOCK     SPACE  4,10 
**        LOCK - LOCK RECORD. 
* 
*         ENTRY  ENTER LOCK USING FILE,TSTAT,KEYA,KEYP. 
*                CALL(FILE,TSTAT,KEYA,KEYP).
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 LOCK     SUBR               ENTRY/EXIT 
          SX1    TRLC        LOCK RECORD
          EQ     ISR         ISSUE REQUEST
 FLOCK    SPACE  4,10 
**        FLOCK - LOCK FILE.
* 
*         ENTRY  ENTER FLOCK USING FILE,TSTAT.
*                CALL FLOCK(FILE,TSTAT).
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 FLOCK    SUBR               ENTRY/EXIT 
          SX1    TRLF        LOCK FILE
          EQ     ISR         ISSUE REQUEST
 OPEN     SPACE  4,10 
**        OPEN - OPEN FILE FOR TASK.
* 
*         ENTRY  ENTER OPEN USING FILE,TSTAT,CSTAT. 
*                CALL OPEN(FILE,TSTAT,CSTAT). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 OPEN     SUBR               ENTRY/EXIT 
          SX1    TROP        OPEN FILE FOR TASK 
          EQ     ISR         ISSUE REQUEST
 READ     SPACE  4,10 
**        READ - READ BY KEY. 
* 
*         ENTRY  ENTER READ USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA,
*                      KEYP-,FSTAT,ALTKEY-. 
*                CALL READ(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA,KEYP-, 
*                      FSTAT,ALTKEY-).
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 READ     SUBR               ENTRY/EXIT 
          SX1    TRRD        READ BY KEY
          EQ     ISR         ISSUE REQUEST
 READL    SPACE  4,10 
**        READL - READ BY KEY WITH LOCK.
* 
*         ENTRY  ENTER READL USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA, 
*                      KEYP-,FSTAT,ALTKEY-. 
*                CALL READL(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYA,KEYP- 
*                      ,FSTAT,ALTKEY-). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST
* 
*         USES   X - 1. 
  
  
 READL    SUBR               ENTRY/EXIT 
          SX1    TRRL        READ BY KEY WITH LOCK
          EQ     ISR         ISSUE REQUEST
 READM    SPACE  4,10 
**        READM - READ BY MAJOR KEY.
* 
*         ENTRY  ENTER READM USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR, 
*                      KEYRL,KEYA,KEYP,MKEYL-,FSTAT,ALTKEY-.
*                CALL READM(FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,KEYRL,
*                      KEYA,KEYP,MKEYL-,FSTAT,ALTKEY-). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 READM    SUBR               ENTRY/EXIT 
          SX1    TRRM        READ BY MAJOR KEY
          EQ     ISR         ISSUE REQUEST
 READN    SPACE  4,10 
**        READN - READ NEXT RECORD. 
* 
*         ENTRY  ENTER READN USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR, 
*                      KEYL-,FSTAT-.
*                CALL READN(FILE,TSTAT,CSTAT,WSA,RL,KEYR,KEYL-,FSTAT-). 
* 
*         ENIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 READN    SUBR               ENTRY/EXIT 
          SX1    TRRN        READ NEXT RECORD WITHOUT LOCK
          EQ     ISR         ISSUE REQUEST
 READNL   SPACE  4,10 
**        READNL - READ NEXT RECORD WITH LOCK.
* 
*         ENTRY  ENTER READNL USING FILE,TSTAT,CSTAT,WSA,WSAL,RL,KEYR,
*                      KEYL-,FSTAT-.
*                CALL READNL(FILE,TSTAT,CSTAT,WSA,RL,KEYR,KEYL- 
*                      ,FSTAT-).
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 READNL   SUBR               ENTRY/EXIT 
          SX1    TRRO        READ NEXT RECORD WITH LOCK 
          EQ     ISR         ISSUE REQUEST
 REWIND   SPACE  4,10 
**        REWIND - REWIND FILE. 
* 
*         ENTRY  ENTER REWIND USING FILE,TSTAT,CSTAT. 
*                CALL REWIND(FILE,TSTAT,CSTAT). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST
* 
*         USES   X - 1. 
  
  
 REWIND   SUBR               ENTRY/EXIT 
          SX1    TRRP        REWIND FILE
          EQ     ISR         ISSUE REQUEST
 REWRITE  SPACE  4,10 
**        REWRITE - REWRITE RECORD. 
* 
*         ENTRY  ENTER REWRITE USING FILE,TSTAT,CSTAT,WSA,RL,KEYA,
*                      KEYP.
*                CALL REWRITE(FILE,TSTAT,CSTAT,WSA,RL,KEYA,KEYP). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 REWRITE SUBR                ENTRY/EXIT 
          SX1    TRRW        REWRITE RECORD 
          EQ     ISR         ISSUE REQUEST
 SKIPBL   SPACE  4,10 
**        SKIPBL - SKIP BACKWARD LOGICAL RECORDS. 
* 
*         ENTRY  ENTER SKIPBL USING FILE,TSTAT,CSTAT,COUNT. 
*                CALL SKIPBL(FILE,TSTAT,CSTAT,COUNT). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 SKIPBL   SUBR               ENTRY/EXIT 
          SX1    TRSB        SKIP LOGICAL RECORDS BACKWARD
          EQ     ISR         ISSUE REQUEST
 SKIPFL   SPACE  4,10 
**        SKIPFL - SKIP FORWARD LOGICAL RECORDS.
* 
*         ENTRY  ENTER SKIPFL USING FILE,TSTAT,CSTAT,COUNT. 
*                CALL SKIPFL(FILE,TSTAT,CSTAT,COUNT). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 SKIPFL   SUBR               ENTRY/EXIT 
          SX1    TRSF        SKIP FORWARD LOGICAL RECORD
          EQ     ISR         ISSUE REQUEST
 UNLOCK   SPACE  4,10 
**        UNLOCK - UNLOCK RECORD. 
* 
*         ENTRY  ENTER UNLOCK USING FILE,TSTAT,KEYA,KEYP. 
*                CALL UNLOCK(FILE,TSTAT,KEYA,KEYP). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 UNLOCK   SUBR               ENTRY/EXIT 
          SX1    TRUC        UNLOCK RECORD
          EQ     ISR         ISSUE REQUEST
 UNFLOCK  SPACE  4,10 
**        UNFLOCK - UNLOCK FILE.
* 
*         ENTRY  ENTER UNFLOCK USING FILE,TSTAT.
*                CALL UNFLOCK(FILE,TSTAT).
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 UNFLOCK  SUBR               ENTRY/EXIT 
          SX1    TRUF        UNLOCK FILE
          EQ     ISR         ISSUE REQUEST
 WRITE    SPACE  4,10 
**        WRITE - WRITE RECORD BY KEY.
* 
*         ENTRY  ENTER WRITE USING FILE,TSTAT,CSTAT,WSA,RL,KEYA,
*                      KEYP-,KEYR,KEYL-.
*                CALL WRITE(FILE,TSTAT,CSTAT,WSA,RL,KEYA,KEYP-,KEYR 
*                     ,KEYL-).
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
  
 WRITE    SUBR               ENTRY/EXIT 
          SX1    TRWR        WRITE RECORD BY KEY
          EQ     ISR         ISSUE REQUEST
 START    SPACE  4,20 
**        START - SET STARTING POSITION.
* 
*         ENTRY  ENTER START USING FILE,TSTAT,CSTAT,REL,KEYA,KEYP-
*                      ,FSTAT,ALTKEY,MKEYL-.
* 
*                CALL START(FILE,TSTAT,CSTAT,REL,KEYA,KEYP-,FSTAT 
*                      ,ALTKEY,MKEYL-). 
* 
*         EXIT   TO *ISR* TO ISSUE REQUEST. 
* 
*         USES   X - 1. 
  
 START    SUBR               ENTRY/EXIT 
          SX1    TRST        SET STARTING POSITION
          EQ     ISR         ISSUE REQUEST
          TITLE  REQUEST ROUTINE. 
 ISR      SPACE  4,10 
**        ISR - ISSUE REQUEST.
* 
*         ENTRY  (X1) = REQUEST CODE. 
*                (A1) = ADDRESS OF REQUEST PARAMETERS.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 2. 
*                B - 1, 7.
* 
*         EXIT   (B1) = 1.
* 
*         CALLS  SYS=.
  
  
 ISR      SB1    1
  
*         DETERMINE RETURN ADDRESS OF CALLER. 
  
          SX2    X1          COMPUTE WORD INDEX INTO *TRTN* TABLE 
          LX1    59-0        DETERMINE LOWER OR UPPER TABLE ENTRY 
          AX2    1           DIVIDE BY 2
          SA2    X2+TRTN
          NG     X1,ISR1     IF UPPER ENTRY 
          LX2    30 
 ISR1     SX0    X2          RETURN ADDRESS 
  
*         SET UP REQUEST. 
  
          SX6    3RAAM
          SX7    A1          PARAMETER ADDRESS
          LX6    59-17
          BX6    X7+X6
          LX1    23-5+1      REQUEST CODE 
          BX6    X6+X1
          RJ     =XSYS=      ISSUE REQUEST
          SB7    X0          RETURN ADDRESS 
          JP     B7          RETURN 
 TRTN     SPACE  4,10 
**        TRTN - TABLE OF RETURN ADDRESS FOR REQUESTS.
*         TWO RETURN ADDRESS ARE PACKED PER WORD TO SAVE CORE.
*         THE TABLE MUST BE IN ASCENDING ORDER ACCORDING
*         TO REQUEST CODE GIVEN IN *COMKCRM*. 
* 
*T        12/0,18/ RTN1,12/0,18/ RTN2 
* 
*                RTN1 - ODD REQUEST CODE RETURN ADDRESS.
*                RTN2 - EVEN REQUEST CODE RETURN ADDRESS. 
  
  
 .1       SET    0           REQUEST CODE SEQUENCE COUNTER
 TRTN     BSS    0           TABLE OF RETURN ADDRESS FOR REQUESTS 
          RTN    TRCL,CLOSE 
          RTN    TRDE,DELETE
          RTN    TRLC,LOCK
          RTN    TRLF,FLOCK 
          RTN    TROP,OPEN
          RTN    TRRD,READ
          RTN    TRRL,READL 
          RTN    TRRM,READM 
          RTN    TRRN,READN 
          RTN    TRRO,READNL
          RTN    TRRP,REWIND
          RTN    TRRW,REWRITE 
          RTN    TRSB,SKIPBL
          RTN    TRSF,SKIPFL
          RTN    TRUC,UNLOCK
          RTN    TRUF,UNFLOCK 
          RTN    TRWR,WRITE 
          RTN    TRST,START 
          RTN    TRDB,DBEGIN
          RTN    TRDC,DBCOMIT 
          RTN    TRDF,DBFREE
          RTN    TRDS,DBSTAT
          ERRNZ  .1-.TREQL   IF ALL TASK REQUESTS NOT IN TABLE
          END 
