ASMB
  HED  TRANSACTION SPECIFICATION MEMORY MANAGEMENT SUBROUTINE 
      NAM TSMG,7  92903-16530 REV.1913  790105
  SPC 2 
*     NAME:    TSMG      TS MEM. MANAGEMENT MODULE
*     SOURCE:  &TSMG'    92903-18531
*     BINARY:  %TSMG'    ----NONE---    PART OF  %TSMG  92903-16530 
* 
*     PGMR:   FRANCOIS GAULLIER 
      SPC 2 
*     **************************************************************
*     * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
*     * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
*     * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
*     * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
*     **************************************************************
   SKP
* 
*     THIS PROGRAM IS A PART OF THE:
* 
*                      DATA CAPTURE SOFTWARE
*                        ( D A T A C A P )
* 
*     IT USES FEATURES OF THE TERMINAL MONITOR SOFTWARE (TMS).
* 
*     THIS MODULE: TSMG IS A T.U.S. OF THE TMP
*                   (TRANSACTION MONITOR PROGRAM) 
* 
*            TSMG MANAGE THE MEMORY (ALLOCATION/DEALLOACTION) FOR 
*            ALL THE TRANSATION SPECIFICATIONS (THE WORKING SET)
*            OF A TMP COPY. TSMG ALSO RETURN A STATE OF A TRANSACTION 
*            SPECIFICATION WHEN 'ZTMP' NEED IT. 
* 
* 
*     PARAMETERS ARE IN THE 2ND COMMON BLOCK: 
* 
*       TSNUM     T.S. NUMBER 
*       SQUAL     STATE QUALIFIER 
*       J         STATE INDEX 
*       ERRCD     STATUS RETURNED TO CALLING PROGRAM
*       STATE(38) BUFFER TO RETURN THE STATE PARAMETERS 
*       STLEN     STATE LENGTH RETURNED TO THE USER 
* 
*     SQUAL = -1   DELETE A TRANS. SPEC. FROM THE WORKING SET 
*                  THE TS# MUST BE DEFINED IN 'TSNUM' AND BE NEGATIVE 
*                  THE HEADER IS RETURN TO TE CALLER INTO STATE 
*             -2   ADD A TRANS. SPEC. TO THE WORKING SET
*                  TS (5 WORDS) IS DEFINED IN STATE[1:5]
*                  MEDIA (4 WORDS) IS DEFINED IN STATE[6:9] 
*             -3   LOAD ALL TRANS. SPEC. CONTAINED ON THE MEDIA 
*             -4   GET DIRECTORY FOR LISTING PURPOSE
*                  STATE(1) IS THE FIRST ENTRY NUMBER RETURNED
*            -10   RETURN HEADER OF THE 1ST NEGATIVE TS # 
*            -11   SET THE TS# FORM NEGATIVE TO POSITIVE OR VICE VERSA
*                  TO MAKE THAT TS ACCESSIBLE OR NOT FORM THE 
*                  DATACAPTURE TERMINALS. 
*                  'TSNUM' IS SET WITH THE TS#
* 
*           >      ---> SQUAL IS DEFINED ON BIT 7-0 ONLY
*                  DEPENDING ON THE VALUE OF BIT 8 (0/1), THE STATE 
*                  WILL BE MOVE FROM FROM/TO 'TSMG' TO/FROM THE CALLER
* 
*              0   SEARCH STATE QUAL. = 0 AND STATE INDEX = J 
*              1   SEARCH STATE QUAL. = 1 AND STATE INDEX = J 
*              2   SEARCH STATE QUAL. = 2 AND STATE INDEX = J 
*             10   OPEN A T.S.
*                  TS (5 WORDS) IS DEFINED IN STATE[1:5]
*                  'TSNUM' IS SET WITH THE TS#
*             11   CLOSE A T.S. 
*             12   OPEN A T.S. FOR THE STORAGE
*             13   CLOSE A T.S. FOR THE STORAGE 
* 
*     ERRCD =  0   OPERATION SUCCESFULLY EXECUTED 
*            NOT 0 DEFINE THE TYPE OF THE ERROR.
* 
* 
***********************************************  F. GAULLIER  (HPG)  ***
* 
  HED  WORKING STORAGE DESCRIPTIONS 
* 
*                        ***********************
*  ADDRESS     --------->*                     *
*              !         *                     *
*    !     F   !         *                     *
*    !     O   !         *                     *
*    !     R   !         *    TR. SP.    A     *
*    !     M   !         *                     *
*    !         !         *                     *
*    !         !         *                     *
*    ! +   S   !         *                     *
*    !     P   !         ***********************
*    !     E   !  ------>*                     *
*    !     C   !  !      *                     *
*    !     I   !  !      *                     *
*    !     F   !  !      *    TR. SP.    C     *
*  \ ! /   I   !  !      *                     *
*   \!/    C   !  !      *                     *
*    .     A   !  !      *                     *
*          T   !  !      ***********************
*          I   !  !  --->*                     *
*          O   !  !  !   *                     *
*          N   !  !  !   *                     *
*          S   !  !  !   *    TR. SP.    B     *
*              !  !  !   *                     *
*              !  !  !   *                     *
*              !  !  !   *                     *
*              !  !  !   ***********************
*              !  !  !   *          !          *<-----  FWA 
*              !  !  !   *          !          *
*              !  !  !   *         \!/         *
*              !  !  !   *          .          *
*              !  !  !   *                     *
*              !  !  !   *   AVAILABLE         *   LENWS = LWA - FWA + 1
*              !  !  !   *          SPACE      *
*              !  !  !   *                     *
*              !  !  !   *          .          *
*              !  !  !   *         /!\         *
*              !  !  !   *          !          *
*              !  !  !   *          !          *<-----  LWA 
*              !  !  !   ***********************
*          D   !  !  !   * "IN USE"  COUNTER   *
*          I   !  !  ----+ POINTER TO T.S. B   *
*          R   !  !      * T.S. # OF T.S. B    *
*          E   !  !      ***********************
*          C   !  !      * "IN USE"  COUNTER   *
*          T   !  -------+ POINTER TO T.S. C   *
*          O   !         * T.S. # OF T.S. C    *
*          R   !         ***********************
*          Y   !         * "IN USE"  COUNTER   *
*              ----------+ POINTER TO T.S. A   *
*                        * T.S. # OF T.S. A    *
*                        ***********************
*                                               <-----  .DIRE 
* 
  HED TRANSACTION SPECIFICATIONS MANAGEMENT SUBROUTINE
      ENT TSMG
      EXT .ENTR,&MVW,EXEC,TMDFN 
      EXT TSRD
* 
A     EQU 0 
B     EQU 1 
      SUP 
  SPC 2 
      COM TSNUM,SQUAL,J,ERRCD,STLEN,STATE(80) 
      COM .COM. 
* 
MEDIA EQU STATE+5 
  SPC 3 
TSMG  NOP 
      JSB .ENTR 
      DEF TSMG
  SPC 2 
  IFZ 
      EXT .DBUG 
      JSB .DBUG 
  XIF 
  SPC 2 
      CLA,RSS 
      JMP TSMG0 
      STA *-2       CLEAR FIRST TIME FLAG 
* 
      JSB EXEC
      DEF *+3 
      DEF D22 
      DEF D3        SWAP THE WHOLE PARTITION
  SPC 1 
*     EXT COR.A 
*   XEQT  EQU 1717B 
*   AVMEM EQU 1751B 
*   BGLWA EQU 1777B 
* 
*     LDA XEQT      GET ID SEG ADDR 
*     JSB COR.A     GET FWA 
*     STA FWA 
*     CMA,INA 
*     LDB BGLWA     GET BACKGROUND LWA
*     ADA AVMEM     CHECK IF PROGRAM RUN IN FORGR./BACKGR.
*     SSA,RSS       FOREGROUND ?
*     LDB AVMEM     YES, USE FORGROUND LWA
*     ADB DM2 
*     LDA FWA       B=LWA 
*     CMA,INA 
*     INA 
*     STB .DIRE 
*     ADB DM1 
*     STB LWA 
*     ADA B 
*     STA LENWS 
  SPC 2 
      JSB EXEC      MEMORY SIZE REQUEST 
      DEF *+5 
      DEF D26 
      DEF FWA       FIRST WORDS AVAILABLE 
      DEF LENWS     # OF WORDS AVAILABLE
      DEF TEMP1     PARTITION LENGTH
* 
      LDB FWA       RECALL 1ST WORD AVAIL.
      ADB LENWS     TO INTIT DIRECTORY POINTER
      STB .DIRE 
      ADB DM1 
      STB LWA 
  SPC 2 
TSMG0 JSB TMDFN     LINK WITH TMS 
      DEF *+6 
      DEF TSNUM     NO CB # 0 
      DEF TSNUM     NO CB # 1 
      DEF TSNUM     NO CB # 2 
      DEF TSNUM     CB # 3
      DEF .COM.     CB END
  SPC 2 
      CCB           SET 'MEDIA OPEN FLAG' TO
      STB MDOPN     MEDIA IS CLOSE
* 
      LDA SQUAL     GET THE STATE QUALIFIER 
      SSA           IS IT TO ACCESS OR ADD/DELETE OPERATION 
      JMP CHANG     ADD / DELETE OPERATIONS 
      AND RBYTE     ISOLATE SQUAL 
      CPA D10       OPEN A TRANSACTION SPECIFICATION ?
      JMP TSOPN     YES 
      ALF,RAL       IT IS A STATE QUALIFIER 
      IOR J         MERGE WITH STATE INDEX
      STA TEMP2 
* 
      LDA TSNUM     SEARCH IN DIRECTORY 
      JSB DIREC 
      JMP NOTIN     TRANSACTION NOT PRESENT, ERROR = -1 
* 
      LDA SQUAL     RECALL STATE QUALIFIER
      AND RBYTE     ISOLATE SQUAL 
      CPA D11       CLOSE A TRANSACTION SPECIFICATION ? 
      JMP TSCLS     YES 
      CPA D12       OPEN FOR STORAGE ?
      JMP OPENS 
      CPA D13       CLOSE FOR STORAGE 
      JMP CLOSS     YES 
  SPC 2 
      LDX PTFOM     NOW, SEARCH A SPECIFIC STATE
      DSX 
      LDB LENB1 
      INB 
NEXST STB A 
      LBX B,I       GO TO NEXT LINK 
      SZB,RSS       END OF TRANSACTION ?
      JMP NOSQ      YES, STATE & INDEX NOT FOUND. 
      INA 
      STA TEMP1 
      LAX A,I       GET  SQ & J 
      AND RBYTE 
      CPA TEMP2     IS IT THIS STATE ?
      RSS           YES, RETURN STATE PARAMETERS TO USER
      JMP NEXST     NO, LOOP UNTIL END OF TRANSACTION 
  SPC 1 
      LDA TEMP1     SETUP TO MOVE THE STATE VECTOR
      CMA,INA 
      ADA B 
      STA STLEN     WORD COUNT FOR THE STATE
      ADA =D-81 
      SSA,RSS 
      JMP INTER     INTERNAL ERROR !! 
      CCA 
      ADA TEMP1 
* 
MVSTA ADA PTFOM     ABSOLUTE ADDR OF THIS STATE 
      LDB SQUAL     MOVE DATA FROM/TO 'TSMG'
      CLE,SSB       NEGATIVE SQUAL ?
      JMP MVST3     YES, ALWAYS FROM 'TSMG' 
      BLF,BLF       TO/FROM CALLER
      ERB           SET MOVE SENSE INTO E REG.
MVST3 LDB .STAT     GET TO ADDR.
      SEZ           MOVE INTO THE WORKING SET ? 
      SWP           YES, REVERSE SENSE OF THE MOVE
      MVW STLEN 
      JMP EXIOK     RETURN WITH GOOD STATUS 
  SPC 2 
NOSQ  JMP WSOVF     ERROR = -2
RBYTE OCT 377 
  HED OPEN / CLOSE A TRANSACTION SPECIFICATIONS 
TSOPN JSB SRCTS     SEARCH THE TS IN THE WORKING SET
      ISZ B,I       BUMP 'IN USE' COUNTER 
* 
TSOP4 LDA B,I       GET 'IN USE' COUNTER
      ADB D2        TO GET THE TS#
      LDB B,I 
      STB TSNUM     SET 'TSNUM' VARIABLE
      LDX J         GET DATACATURE TERMINAL LU
      SBX .LUTB     AND SAVE TS# INTO LUTABLE 
      STA J         RETURN THE 'IN USE' COUNTER 
* 
      LDB LENB1 
      ADB DM1 
      STB STLEN     SAVE LENGTH FOR THE MOVE
      INB           LEAVE ROOM FOR THE LU COUNT 
      ADB .STAT     --> ABSOLUTE ADDR 
      CLE,ELB       --> BYTE ADDR 
      STB TEMP1 
* 
      LDX D63       RETURN ALL LU USING THIS TS#
TSO10 LAX .LUTB 
      CPA TSNUM     TS # COMPARE ?
      RSS           YES 
      JMP TSO15     NO, GO TO NEXT LU 
      CXA           STORE THAT LU INTO STATE
      SBT           AS A BYTE 
TSO15 DSX           END OF LU TABLE ? 
      JMP TSO10     NO, CONTINUE
* 
      LDA TEMP1     YES, CALCULATE THE NUMBER 
      CMA,INA       OF LU USING THIS TS 
      ADA B         AND STORE IN INTO  STATE(STLEN+1) 
      LDX STLEN 
      SAX .STAT,I 
* 
      CLA,INA 
      JMP MVSTA     PERFORM THE MOVE. 
* 
LENB1 DEC 37
  SPC 2 
TSCLS CLA           CLOSE THE TRANSACTION 
      LDX J         CLEAR THE TS# INTO THE LU TABLE 
      SAX .LUTB 
      CCA           DECREMENT THE 
CLOS2 ADA B,I       "IN USE" COUNTER, 
      STA B,I       B WAS SET BY DIREC SUBROUTINE !!
      JMP EXIOK     RETURN WITH GOOD STATUS 
* 
OPENS LDA =B400     (+1) ON LEFT BYTE 
      JMP CLOS2 
CLOSS LDA =B177400  (-1) ON LEFT BYTE 
      JMP CLOS2 
  SPC 2 
TEMP1 NOP 
TEMP2 NOP 
D5    DEC 5 
D10   DEC 10
D11   DEC 11
D12   DEC 12
D13   DEC 13
D26   DEC 26
D63   DEC 63
DM2   DEC -2
* 
.LUTB EQU * 
      REP 64
      DEC 0 
  HED   LOAD / ADD   TRANSACTION SPECIFICATIONS PROCESS 
CHANG CPA =D-1      DELETE A TS FORM THE WORKING SET ?
      JMP DEL       YES 
      CPA =D-4      GET DIRECTORY OF THE WORKING SET ?
      JMP DIR       YES 
      CPA =D-10     GET 1ST NEG TS # ?
      JMP SRHNG     YES 
      CPA =D-11     MAKE THIS TS ACCESSIBLE ? 
      JMP CHTSN     YES 
  SPC 3 
*     DETAILS OF THE  LOAD-A-TRANSACTION-SPECIFICATIONS LIBRARY 
  SPC 1 
*     1)  READ IN TRANSACTION SPECIFICATIONS USING 'TSRD' PROGRAM 
*         OPTION:  MAXIMUM BUFFER LENGTH FOR BINARY RECORD
*                  REWIND MEDIA 
*     2)  MOVE LIBRARY NAME INTO THE TS HEADER. 
*     3)  SET MEDIA DESCRIPTOR TO NOT REWIND IT NEXT TIME 
*     4)  CHECK IF THIS TRANSACTION IS NOT ALREADY IN THE WORKING SET 
*     5)  ADD A DIRECTORY ENTRY IN THE TRANSACTION DIRECTORY
*     6)  UPDATE POINTER TO AVAILABLE SPACE 
*           ( FWA , LWA , LENWS ) 
*     7)  IF NOT THE END-OF-FILE  GOTO STEP 1.
*     8)  RETURN GOOD STATUS TO THE CALLING PROGRAM.
  SPC 3 
LD00  LDA LENWS     GET FREE SPACE LEN
      ADA =D-20     SECURITY !
      SSA 
      JMP WSOVF     WORKING SET OVERFLOW
      STA INDIC 
  SPC 1 
      JSB TSRD      READ THE TRANSACTION SPECIFICATION
      DEF *+9 
.MEDI DEF MEDIA     MEDIA 
      DEF INDIC     MAXIMUM LENGTH
      DEF IST       STATUS RETURNED HERE
.STAT DEF STATE     TS NAME / NUMBER / SC 
      DEF FWA,I     BUFFER ADDR FOR BINARY
      DEF SOUBU     BUFFER ADDR FOR SOURCE (11 WORDS ONLY)
      DEF IDCB      IDCB BUFFER 
      DEF * 
* 
      CLB           SET 'MEDIA OPEN FLAG' TO
      STB MDOPN     MEDIA IS OPEN.
  SPC 1 
      LDA MEDIA     RESET THE LIBRARY NAME TO POSITIVE
      SSA           TO STORE LIBNAME INTO TS HEADER 
      CMA,INA 
      STA MEDIA 
* 
      CLA           RESET THE ERROR FLAG IN THE TS HEADER 
      JSB STER. 
      INB           MOVE THE LIBRARY NAME INTO THE TS 
      LDA .MEDI     HEADER WHERE IT SUPOSE TO BE
      MVW D4
* 
      LDA IST       RECALL 'TSRD' STATUS
      SZA 
      JSB ER        ERROR ! 
* 
      LDA MEDIA     RECALL FIRST WORD OF MEDIA
      SSA,RSS       AND MAKE IT NEGATIVE TO NOT 
      CMA,INA       OPEN OR REWIND THE MEDIA
      STA MEDIA 
* 
      LDA FWA       RECALL THE TS# OF THE TS JUST LOADED
      ADA D4
      LDA A,I 
      CMA,INA       MAKE IT NEGATIVE, SO NOBODY CAN ACCESS IT 
      STA FNUM      SET TS# FOR THE DIRECTORY 
      CMA,INA       SET IT POSITIVE AGAIN TO SEARCH FOR DUPLICATE 
      JSB DIREC     IS THIS TS ALREADY IN THE WORKING SET ? 
      JMP LD090     NO, NO DUPLICATE, CONTINUE
* 
      LDA =D-3      YES, SET ERROR INTO THE TS HEADER 
                                                              