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