ASMB,R,L,C HED DS GET SUBROUTINE * (C) HEWLETT-PACKARD CO. 1979* NAM D65GT,7 91740-16025 REV 1913 781027 SPC 1 ENT D65GT SPC 1 EXT .ENTR,EXEC,#PLOG EXT $OPSY,#REQU * * NAME: D65GT * SOURCE: 91740-18025 * RELOC: 91740-16025 * PGMR: CHUCK WHELAN DEC 1976 ** ** ALTERED TO RETURN AT LEAST THE FIRST SEVEN WORDS OF ANY REQUEST ** TO CALLER [10-27-78] CEJ. * * MODIFIED BY: LYLE WEIMAN, AUG '78 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * * D65GT CALLING SEQUENCE: * * JSB D65GT * DEF *+6 * DEF CLASS CLASS FOR GET SUSPEND * DEF RQBUF REQUEST BUFFER ADDRESS. * DEF RQLEN MAX REQUEST LENGTH * DEF DABUF DATA BUFFER ADDRESS * DEF DALEN MAX DATA BUFFER LENGTH (0 IF NO DATA). * A & B HAVE ASCII ERROR CODE * A= RCVD REQUEST LEN, B= RCVD DATA LEN * * * * * D65GT OPERATION: * D65GT IS CALLED BY ROUTINES WAITING TO RECEIVE REQUESTS ( & POSSIBLY * DATA) ON THEIR CLASS NUMBERS. D65GT DOES THE FOLLOWING: * 1. PERFORMS A ZERO-LENGTH "GET" ON THE PASSED CLASS NUMBER * 2. MOVES DATA TO USER BUFFER USING LENGTH= MIN(USER LEN,RCVD LEN) * 3. IF SPECIFIED REQUEST LENGTH EXCEEDED, RETURNS A "DS03" * 4. MOVES THE REQUEST INTO THE USERS BUFFER (UP TO THE * # OF WORDS SPECIFIED IN CALL. * 5. IF SPECIFIED DATA LENGTH EXCEEDED, RETURNS A "DS03" * 6. IF PLOG IS ENABLED, RETHREADS THE REQUEST TO PLOG'S CLASS * OTHERWISE, DEALLOCATES THE BUFFER IN SAM * 7. RETURNS THE RECEIVED REQUEST AND DATA SIZES IN THE B AND A REGS * * * D65GT ERROR RETURNS: * * "DS03" - ILLEGAL RECORD SIZE - REQ OR DATA EXCEEDS BUFFER * SKP CLASS NOP RQBUF NOP RQLEN NOP DABUF NOP DALEN NOP * D65GT NOP JSB .ENTR GET PARAMETER ADDRESSES DEF CLASS * CLB LDA $OPSY GET OP SYSTEM TYPE RAR,SLA STB MOD1 IT'S A MAPPED SYSTEM, MODIFY PGM * LDA CLASS,I IOR B6000 BUFR SAVE, NO DEALLOCATE STA CLASS * JSB EXEC DO "GET" ON PASSED CLASS # DEF *+7 DEF D21 DEF CLASS DEF DABUF,I DATA BUFR ADDR DEF K0 DATA LENGTH DEF PARAM REQUEST BUFR ADDR IN SAM RETURNED DEF LENGT RCVD REQUEST BUFFER LENGTH * STB BRTN SAVE RECEIVED DATA LENGTH LDA 1 CMB,INB ADB DALEN,I USER LENGTH - RETURNED LENGTH SSB LDA DALEN,I USER'S LENGTH LESS, USE IT STA ARTN SZA,RSS SHOULD WE MOVE ANY? JMP DOREQ NO! LDB DABUF ADDR OF USER'S DATA BUFFER LDA BRTN CMA,INA REQ ADDR (SAM) - DATA LENGTH = ADA PARAM DATA ADDR (SAM) JSB MOVER DO THE DATA MOVE FROM S.A.M. * DOREQ CLA SET LENGTH ERROR FLAG TO FALSE (0). STA FLAG * LDB LENGT RCVD REQUEST BUFFER LENGTH STB ARTN CMB,INB,SZB,RSS JMP ZRET ZERO LENGTH REQUEST, RETURN NOW ADB RQLEN,I CHECK VS REQUESTED LENGTH SSB,RSS WAS IT LARGER? JMP OKAY NO, CONTINUE WITH NORMAL MOVE. * STB FLAG YES, SET LENGTH ERROR FLAG TO TRUE (<0) LDA D7 AND LENGTH OF REQUEST TO MOVE TO SEVEN. STA ARTN * * MOVE REQUEST BUFFER FROM SAM TO USER AREA OKAY LDB RQBUF USER REQUEST BUFFER ADDRESS LDA PARAM SAM BUFFER ADDRESS JSB MOVER NOW MOVE THE REQUEST * LDA FLAG WAS THERE A REQUEST LENGTH ERROR? SSA JMP ERR03 YES - GIVE "DS03" ERROR. * LDB BRTN DATA LENGTH CMB,INB ADB DALEN,I SSB DATA TOO LARGE? JMP ERR03 YES, GIVE "DS03" * ISZ D65GT BUMP TO SUCCESSFUL RETURN * * RETHREAD TO PLOG'S CLASS IF IT'S ENABLED * LOGIT LDA #PLOG SZA,RSS PLOG ENABLED? JMP CLSAM NO STA PARAM * JSB #REQU RETHREAD TO PLOG DEF *+3 DEF CLASS DEF PARAM * SSA,RSS ANY ERROR? JMP RETRN NO, RETURN JMP CLSAM YES, RELEASE BUFFER * ZRET ISZ D65GT DO NORMAL RETURN FOR ZERO LENGTH REQ * * DEALLOCATE THE BUFFER IN SAM * CLSAM LDA CLASS ALR,RAR CLEAR "SAVE BUFFER" FLAG STA CLASS * JSB EXEC DO DUMMY GET TO RELEASE BUFFER DEF *+5 DEF D21 DEF CLASS DEF DABUF,I DEF K0 * * RETURN TO USER RETRN LDB BRTN LDA ARTN JMP D65GT,I * * * ERROR ROUTINES * ERR03 DLD DS03 ILLEGAL RECORD SIZE DST ARTN ERROR CODE RETURNED IN A & B JMP LOGIT FIRST DEALLOCATE BUFFER * * SUBROUTINE TO MOVE BLOCK OF WORDS FROM S.A.M. TO USER BUFFER * MOVER NOP MOD1 JMP NODMS "NOP" HERE IF DMS SYSTEM LDX ARTN PUT LENGTH IN X REG MWF MOVE WORDS FROM ALTERNATE (SYSTEM) MAP JMP MOVER,I RETURN * NODMS MVW ARTN DO "MVW" FROM S.A.M. JMP MOVER,I RETURN * * DATA AREA * ARTN NOP BRTN NOP PARAM NOP LENGT NOP FLAG NOP K0 OCT 0 D7 DEC 7 D21 DEC 21 B6000 OCT 060000 DS03 ASC 2,DS03 * SIZE BSS 0 * END