ASMB,R,Q,C HED <#GET> DS MSG GET SUBROUTINE * (C) HEWLETT-PACKARD CO. 1980 NAM #GET,7 91750-1X009 REV 2013 800726 ALL SPC 1 ENT #GET SPC 1 EXT .ENTR,EXEC,#PLOG,$OPSY EXT .LDX,.MVW,#LOGR * * NAME: #GET * SOURCE: 91750-18225 * RELOC: 91750-16225 * PGMR: TOM MILNER APR 1980 * * MODIFICATIONS: * --------------- * REQUEST LENGTH INCREMENTED (BY #LSZ) BEFORE CALL, AND * DECREMENTED (BY #LSZ) AFTER CALL -- TKM 05.31.79 * SIGN BIT ON CLASS CLEARED LOCALLY -- TKM 07.24.79 * DELETED 'D65GT' ENTRY POINT AND CHECK * FOR MSG OF LENGTH 1 (MA REQUEST FOR RETRY) -- TKM 09.11.79 * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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. * ****************************************************************** * * * '#GET' CALLING SEQUENCE: * * JSB #GET * 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 * * * * * '#GET' OPERATION: * '#GET' IS CALLED BY ROUTINES WAITING TO RECEIVE REQUESTS ( & POSSIBLY * DATA) ON THEIR CLASS NUMBERS. THE MESSAGE RECEIVED CONSISTS OF 2 * BUFFERS; THE DATA & THE REQUEST (HEADER) BUFFERS. '#GET' * 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 DATA LENGTH EXCEEDED, RETURNS A "DS03" * 4. MOVES THE REQUEST INTO THE USERS BUFFER USING * LENGTH = MIN (RQLEN, 7) * 5. IF SPECIFIED REQUEST 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 & * * * '#GET' ERROR RETURNS: * * "DS03" - ILLEGAL RECORD SIZE - REQ OR DATA EXCEEDS BUFFER * "DS09" - ILLEGAL PARAMETERS. * A EQU 0 B EQU 1 * * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV XXXX 790531 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, LSTEN, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * * ****************************************************************** * ***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!*** #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. * #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP #GET NOP CLA STA DABUF INITALIZE POINTERS STA DALEN LDA #GET STA ENTRY JMP ENTRY+1 * CLASS NOP RQBUF NOP RQLEN NOP DABUF NOP DALEN NOP * ENTRY NOP JSB .ENTR GET PARAMETER ADDRESSES DEF CLASS * CLB CONFIGURE DMS/NON-DMS INSTRS LDA $OPSY GET OPSYSTEM TYPE RAR,SLA ROTATE DMS BIT STB MOD1 IT'S A DMS SYSTEM, MODIFY INSTR * LDA CLASS,I IOR CONS1 BUFR SAVE, NO DEALLOCATE RAL,CLE,ERA CLEAR BIT 15 (NO WAIT) STA CLASS * LDA DABUF SZA,RSS JMP DS096 LDA RQLEN,I LDB DALEN,I SSB,RSS NEGATIVE? SSA NEGATIVE? JMP DS095 YES, ONE OF 'EM WAS. BAD, BAD, BAD * ADA C#LSZ INCREMENT REQUEST SIZE STA RQLEN CMA,INA ADA C#MXR LARGER THAN MAX SSA ALLOWED? JMP DS033 NO, DS03(3) ERROR. * JSB EXEC DO "GET" ON PASSED CLASS # DEF *+7 DEF D21N DEF CLASS DEF DABUF,I DATA BUFR ADDR DEF D0 DATA LENGTH DEF RQADR REQUEST BUFR ADDR IN SAM RETURNED DEF LENGT RCVD REQUEST BUFFER LENGTH JMP ENTRY,I RETURN TO CALLER, IO00 ERROR IN A,B * STB BRTN SAVE RECEIVED DATA LENGTH LDA B CMB,INB ADB DALEN,I DATA LENGTH - RETURNED LENGTH SSB LDA DALEN,I USER'S DATA 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 RQADR DATA ADDR (SAM) JSB MOVER DO THE DATA MOVE FROM S.A.M. * DOREQ EQU * * LDB LENGT RCVD REQUEST BUFFER LENGTH STB ARTN CPB D1 CHECK FOR LENGTH 1 MSG JMP ZRET CMB,INB,SZB,RSS JMP ZRET ZERO LENGTH REQUEST, RETURN NOW ADB C#MXR IS THERE MORE THAN OUR BUFFER CAN HOLD? SSB JMP DS034 YES, DS03(4) ERROR. * * * MOVE REQUEST BUFFER FROM SAM TO USER AREA LDB RQBUF USER REQUEST BUFFER ADDRESS LDA RQADR SAM BUFFER ADDRESS JSB MOVER NOW MOVE THE REQUEST * LDB RQBUF ADB C#EC1 --> #EC1 LDA B,I CHECK FOR ERRORS ELA,CLE,ERA IF ERRORS THEN CPA "DS" IGNORE BUFFER LENGTH JMP SUCCS CHECKS * LDB BRTN DATA LENGTH CMB,INB ADB DALEN,I SSB DATA TOO LARGE? JMP DS035 YES, GIVE "DS03" * * SUCCESS! NOW RE-ADJUST LENGTH * SUCCS LDA C#LSZ CMA,INA ADA ARTN SSA,RSS IF ARTN < C#LSZ STA ARTN LEAVE ARTN AS IS... ISZ ENTRY BUMP TO SUCCESSFUL RETURN * * RETHREAD TO PLOG'S CLASS IF IT'S ENABLED * LOGIT LDA #PLOG SZA,RSS PLOG ENABLED? JMP CLSAM NO LDA RQBUF . YES, LOG MESSAGE LDB CLASS JSB #LOGR DO PROGRAM LOGGING JMP CLSAM ERROR RETURN JMP RETRN * ZRET ISZ ENTRY 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 D21N DEF CLASS DEF DABUF,I DEF D0 NOP IF ERROR, WE DON'T CARE * * RETURN TO USER RETRN EQU * LDB BRTN DATA LENGTH LDA ARTN REQUEST LENGTH JMP ENTRY,I * * * ERROR ROUTINES * DS033 LDA Q3 RSS DS034 LDA Q4 RSS DS035 LDA Q5 LDB RQBUF ADB C#ECQ STA B,I LDB "03 ILLEGAL RECORD SIZE JMP ERROR DS095 LDA Q5 RSS DS096 LDA Q6 LDB RQBUF ADB C#ECQ STA B,I LDB "09 ERROR EQU * LDA "DS" 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 JSB .LDX PUT LENGTH IN X REG DEF ARTN MWF MOVE WORDS FROM ALTERNATE (SYSTEM) MAP JMP MOVER,I RETURN * NODMS JSB .MVW DO "MVW" FROM S.A.M. DEF ARTN NOP JMP MOVER,I RETURN SPC 3 * * DATA AREA * ARTN NOP BRTN NOP RQADR NOP LENGT NOP C#MXR ABS #MXR+#LSZ Q3 OCT 000060 Q4 OCT 000100 Q5 OCT 000120 Q6 OCT 000140 C#EC1 ABS #EC1 C#LSZ ABS #LSZ SIZE OF LOCAL APPENDAGE D0 DEC 0 D1 DEC 1 D21N ABS 21+100000B C#ECQ ABS #ECQ CONS1 OCT 060000 BUFR SAVE, DO NOT DEALLOCATE "DS" ASC 1,DS "03 ASC 1,03 "09 ASC 1,09 * SIZE EQU * * END