ASMB,Q,C NAM TRIM,7 92060-16102 REV. 1913 780628 * * ****************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS RESERVED * NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR * TRANSLATED TO ANOTHER PROGRAM LANGUAGE WIOTH OUT THE PRIOR * WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. ******************************************************************* * * * SOURCE: 92067-18086 * RELOC: 92067-16086 * * *****************************************************************: EXT .ENTR,RETBF,UNMEM,UNM2,ENDM,AVLM ENT TRIM SKP * * * * TITLE: TRIM * TRIM BUFFER * * ABSTRACT: * * TRIM RETURNS PART OF A BUFFER TO THE BUFFER POOL * IF THE THE USER POINTER IS INVALID A NEGETIVE * ONE IS RETURNED IN THE A-REG * * TRIM ALLOWS A USER TO RETURN THE BOTTOME PORTION OF A BUFFER * WHILE RETAINING OWNERSHIP OF THE UPPER PART. THIS ROUTINE * IS USEFUL IN CASES WHERE THE AMOUNT OF MEMOR REQUIRED IS DETERMINED * WHEN THE MEMORY REQUEST IS MADE,(IE. WHEN RECEIBING VARIABLE * LENGTH PARAMETERS). THE USER MAY REQUEST THE MAXIMUM BUFFE, RETURNING * THE UNUSED PORTION WHEN THE MEMORY REQUIRTEMENTS ARE FULLY DETERMINED. * * TRIM IS PASSED THE ADDRESS OF THE USER BUFFER AND THE SIZE OF THE * BUFFER IT WISHES TO KEEP. WHEN THE SIZE OF THE KEEP BUFFER IS * ZERO THE WHOLE BUFFER IS RETURNED. WHEN THE SIZE OF THE KEEP-BUFFER * IS LESS THAN ZERO AN ERROR IS RETURNED IN THE A-REGISTER. * * * * CALLING SEQUENCE: * * JSB TRIM * DEF *+3 * DEF (USER'S PRIMARY POINTER) * DEF ( SIZE OF BUFFER TO KEEP) * * * EXIT: * A-REGISTER CONTAINS A ERROR INDICATOR * -1 INDICATES AN ERROR * 0 INDICATES NO ERROR * * * PRM BSS 1 ADDRESS TO USER'S PRIMARY POINTER KEEP BSS 1 SIZE OF BUFFER TO KEEP TRIM NOP JSB .ENTR DEF PRM * LDA KEEP,I IS KEEP LESS THAN ZERO? SSA JMP TRIMR YES, THEN ERROR-EXIT SZA IS KEEP EQUAL TO ZERO? JMP TRM10 * JSB RETBF YES, SET UP TO RETURN ALL THE BUFFER DEF *+2 DEF PRM,I JMP TRIMX * * NO, IS THIS A VALID BUFFER? * TRM10 LDA PRM,I GET POINTER TO BUFFER'S OVERHEAD ADA MOVRZ * STA T1 INA STA T2 INA LDB T2,I CPA B,I IS THIS A VALID POINTER RSS JMP TRIMR NO, GO PROCESS ERROR * CLA LDB KEEP,I IS KEEP SIZE .GT. SIZE OF BUFFER? CMB,INB ADB T1,I SSB JMP TRIMR YES, ERROR-EXIT * SZB,RSS IS KEEP SIZE = BUFFER SIZE? JMP TRIMX YES, RETURN (NO ERROR) * ADB MOVRZ IS THERE ENOUGH ROOM FOR NEW BUFFER? SSB JMP TRIMX NO, GO EXIT (NO ERROR) * LDA T1 SET UP NEW BUFFER ADA KEEP,I ADA OVRSZ STA TT1 GET NEW BUFFER POINTER INA STA TT2 NOTE: B-REG CONTAINS SIZE OF NEW BUFFER * STB TT1,I SAVE NEW BUFFER SIZE * LDA KEEP,I UPDATE SIZE OF KEEP BUFFER STA T1,I * LDA TT1H KLUDGE UP TT1 TO ACT AS PRIMARY POINTER * STA TT2,I PUT ADDRESS TO POINTER IN OVERHEAD LDA TT1 UPDATE POINTER TO OVERHEAD ADA OVRSZ TO POINT TO USER'S BUFFER STA TT1 * TRM40 JSB RETBF DEF *+2 DEF TT1 * * RETURN NO ERROR INDICATOR IN A-REG * TRIMX JMP TRIM,I * * * * ERROR PROCESSOR * * TRIMR CCA RETURN -1 IN A-REG INDICATING ERROR JMP TRIMX * * * * * DATA * * * TT1H DEF *+1 * TT1 BSS 1 TT2 BSS 1 * T1 BSS 1 T2 BSS 1 * OVRSZ DEC 2 MOVRZ DEC -2 * A EQU 0 B EQU 1 END