ASMB,R * * NAME: BL.. * SOURCE: 92070-18098 * RELOC: 92070-1X098 * PGMR: C.H.W. * * **************************************************************** * * (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. * * **************************************************************** * * NAM BL..,0 92070-1X098 REV.1941 790712 * * * * * * ACTION SUBROUTINE TO EXECUTE THE "BL" OPERATOR COMMAND * * COMMAND SYNTAX: * BL,LU(,"UN" OR "BU"(,LOWER,UPPER)) * * ENT BL.. * EXT EXEC,$LIBR,$LIBX,$CVT3,$SCHD EXT CAM.O,$LUTA,$LUT#,CNOPT * SKP * THIS ACTION ROUTINE IS PASSED A LOGICAL UNIT PARAMETER, AND * OPTIONAL PARAMETERS TO SPECIFY BUFFERED OR UNBUFFERED OPERATION * AND THE LOWER AND UPPER BUFFER LIMITS. * IF THE LU PARAMETER IS NON-NUMERIC OR OUTSIDE OF THE RANGE * 0<=LU<="$LUT#", AN ERROR 56 IS RETURNED. OTHERWISE, THE LU IS USED * TO RETRIEVE THE CONTENTS OF THE LUT ENTRY. IF THE LUT CONTAINS A * ZERO, THE MESSAGE "LU XX UNASSIGNED" IS RETURNED, WHERE XX IS THE * ENTERED LU #. IF THE LUT CONTAINS A NON-ZERO VALUE, IT IS SAVED AS * THE DVT ADDRESS. THE NUMBER OF PASSED PARAMETERS IS NEXT EXAMINED, * AND IF THE LU WAS THE LAST PARAMETER, CONTROL IS PASSED DIRECTLY TO * THE BUFFER LIMITS DISPLAY SECTION. * * BUFFER LIMITS MODIFICATION SECTION * * THE 3RD PARSED PARAMETER IS CHECKED, AND IF NOT DEFAULTED, IT * MUST BE A "BU" OR "UN", OTHERWISE AN ERROR 56 IS RETURNED. THE * VALUE FOR LATER SETTING THE BUFFERING FLAG IN DVT8 IS SAVED (1 IF "BU", * AND 0 IF "UN"). * THE LOWER BUFFER LIMIT IN PARSED PARAMETER 4 IS NEXT EXAMINED. * IF DEFAULTED, THE UPPER LIMIT MUST NOT HAVE BEEN SPECIFIED, OTHERWISE * AN ERROR 56 IS RETURNED. IF LOWER LIMIT SPECIFIED, IT MUST BE NUMERIC * AND IN THE RANGE 0<=VALUE<=4095 ELSE AN ERROR 56 IS RETURNED. IF OK, * THE VALUE IS DIVIDED BY 16 WITHOUT ROUNDING AND SAVED IN THE VARIABLE * "LIMIT". THE UPPER LIMIT IN PARSED PARAMETER 5 IS CHECKED, AND IF * DEFAULTED, NON-NUMERIC, OR OUT OF RANGE : LIMIT<=VALUE/16<=LIMIT+127, * AN ERROR 56 IS RETURNED. IF OK, "$LIBR" IS CALLED TO GO PRIVILEGED, * AND THE NEW BUFFER LIMITS ARE STORED IN DVT WORD 9. THE VALUE * STORED FOR LOWER (BITS 7-0) IS "LIMIT", AND THE VALUE STORED FOR * UPPER (BITS 14-8) IS (ENTERED UPPER LIMIT)/16-"LIMIT". IF * THE BUFFERING MODE PARAMETER WASN'T DEFAULTED, THE SIGN BIT OF DVT8 * IS CLEARED/SET TO INDICATE THE NEW VALUE. "$LIBX" IS CALLED TO GO * UN-PRIVILEGED AND CONTROL IS PASSED TO THE BUFFER LIMITS DISPLAY * SECTION. * * BUFFER LIMITS DISPLAY SECTION * * THE BUFFER LIMITS DISPLAY SECTION IS ENTERED DIRECTLY IF LU * WAS THE ONLY PARAMETER SPECIFIED, OR FOLLOWING AN UPDATE AS DESCRIBED * ABOVE. IT PREPARES A MESSAGE OF THE FORM: * LU #XX YY BL= LL, HH AC= ZZ * THE SIGN BIT OF DVT8 IS CHECKED, AND A "BU" (IF SET) OR AN "UN" (IF * CLEAR) IS STORED IN THE "YY" FIELD OF THE MESSAGE. THE ENTERED LU # * IS CONVERTED TO ASCII AND STORED IN THE "XX" FIELD OF THE MESSAGE. * "$LIBR" IS CALLED TO GO PRIVILEGED. THE BUFFER ACCUMULATOR IN BITS * 14-0 OF DVT8 IS CONVERTED TO ASCII USING ROUTINE "$CVT3" AND STORED * IN THE "ZZ" FIELD OF THE MESSAGE. BITS 7-0 OF DVT9 (LOWER LIMIT) * ARE MULTIPLIED BY 16, CONVERTED TO ASCII USING "$CVT3" AND STORED IN * THE "LL" FIELD OF THE MESSAGE. BITS 14-8 OF DVT9 (UPPER LIMIT) ARE * ADDED TO THE LOWER LIMIT (BITS 7-0), MULTIPLIED BY 16, CONVERTED TO * ASCII USING "$CVT3" AND STORED IN THE "HH" FIELD OF THE MESSAGE. * "$LIBX" IS CALLED TO GO UN-PRIVILEGED. THE FORMED MESSAGE IS MOVED * TO "C.BUF" IN THE MAIN, AND IT'S LENGTH IS STORED IN "ECH". ROUTINE * "ECHO" IS CALLED TO OUTPUT THE MESSAGE. THE BL ACTION ROUTINE THEN * RETURNS TO ITS CALLER. SKP * BL.. NOP ISZ BL.. LDB BL..,I STB NUMBA SAVE ADDR OF # PRAMS ISZ BL.. 2ND PARAMETER IS THE PARSE BUFFER ADDR LDB BL..,I GET IT STB TMPAD ISZ BL.. * * PROCESS LU PARAMETER CCE JSB CKPAR GET LU PARAMETER JMP ER50 NO PARAMETER, ERROR CMB,INB,SZB,RSS NEGATE LU JMP ER56 ERROR IF LU=0 ADB $LUT# ADD TOTAL # OF LU'S SSB OK? JMP ER56 NO, LU OUT OF RANGE STA M.BU SAVE LU CLB,CCE DIV .10 SEPARATE HI & LO DIGITS SZA LEADING ZERO? IOR B20 NO ,FORM NUMERIC ALF,ALF LEFT JUSTIFY IOR 1 INCLUDE LSB IOR ASC.0 FORM ASCII STA M.LU SAVE IN MSG STA M.LU2 CCA -1 ADA M.BU ADD NUMERIC LU # ADA $LUTA ADD ADDRESS OF LUT LDB 0,I GET THE DVT ADDRESS SZB,RSS ASSIGNED TO BIT BUCKET? JMP BL.90 YES * * B REG HAS DVT ADDRESS STB DVT1 ADB .7 ADDR OF DVT8 STB DVT8 SAVE IT LDA NUMBA,I # OF PARSED PARAMS CPA .1 =1? JMP BD.00 YES, DISPLAY PRESENT B.L. STATE * * PROCESS "UN"/"BU" PARAMETER CCA,CLE STA M.BU FLAG FOR POSSIBLE DEFAULT JSB CKPAR GET UN/BU PARAMETER JMP BL.30 DEFAULTED, SO LEAVE IT ALONE LDB BIT15 CPA ASCBU BUFFERING REQUESTED? JMP BL.20 YES CPA ASCUN UNBUFFER REQUESTED? CLB,RSS YES JMP ER56 NO, PARAMETER ERROR BL.20 STB M.BU SAVE FOR LATER "OR" * * PROCESS LOWER LIMIT BL.30 CCE JSB CKPAR GET LOWER LIMIT JMP BL.80 AND B7777 CPA 1 <4096? RSS YES, OK LDA B7777 NO, USE MAX=4095 CLB,CCE LSR 4 STA LIMIT SAVE LOWER LIMIT/16 * * PROCESS UPPER LIMIT JSB CKPAR GET UPPER LIMIT JMP ER56 NOT SPECIFIED, ERROR ASR 4 LDA LIMIT CMA,INA -LOWER LIMIT/16 ADA 1 + UPPER LIMIT/16 SSA WAS UPPER >= LOWER? JMP ER56 NO, PARAMETER ERROR LDB 0 AND B177 CPA 1 UPPER-LOWER/16 < 128? RSS YES LDA B177 NO, USE 127 ALF,ALF IOR LIMIT INCLUDE LOWER LIMIT LDB DVT8 INB POINT TO DVT9 JSB $LIBR LOWER FENCE NOP STA 1,I SET NEW B.L. IN DVT9 JMP BL.60 * BL.50 JSB $LIBR LOWER FENCE NOP * BL.60 LDA DVT8,I RAL,CLE,ERA CLEAR OLD "B"-BIT LDB M.BU GET NEW BUFFERING FLAG IOR 1 SET IT IN BIT15 INB,SZB SKIP IF "UN"/"BU" DEFAULTED STA DVT8,I LDA DVT1 JSB $SCHD TRY TO SCHED ANY B.L. WAITERS OCT 55 JMP BD.10 NOW DISPLAY LIMITS * * BL.80 LDA NUMBA,I GET # OF PRAMS CPA .2 EXACTLY 2? JMP BL.50 YES, JUST UPDATE BUFFERING FLAG JMP ER56 NO, THEN ERROR * * LU WAS ASSIGNED TO BIT BUCKET BL.90 JSB CNOPT WRITE "LU XX UNASSIGNED" DEF *+5 DEF .2 DEF CAM.O DEF MUNAS DEF MS2LN JMP B.EX SKP * * * THIS SECTION DISPLAYS CURRENT BUFFER LIMITS * BD.00 JSB $LIBR LOWER THE FENCE NOP BD.10 LDA DVT8,I GET "B"-BIT LDB ASCUN CCE,SSA CURRENTLY BUFFERED? LDB ASCBU YES STB M.BU ELA,CLE,ERA ISOLATE BUFFER ACCUMULATOR JSB $CVT3 CONVERT ACCUM TO ASCII LDB 0,I STB M.AC MOVE 1ST TWO CHARS CCE,INA DLD 0,I GET NEXT 4 CHARS DST M.AC+1 ISZ DVT8 POINT TO DVT9 LDA DVT8,I GET DVT9 CONTENTS AND B377 ISOLATE LOWER B.L. STA LIMIT ALF * 16 JSB $CVT3 CONVERT LOWER LIMIT TO ASCII CCE,INA DLD 0,I USE LAST 4 ASCII CHARS DST M.LO PUT INTO MSG LDA DVT8,I GET DVT9 AGAIN ALF,ALF RIGHT JUSTIFY UPPER LIMIT AND B177 ISOLATE IT ADA LIMIT ADD LOWER ALF MULTIPLY BY 16 JSB $CVT3 CONVERT UPPER TO ASCII JSB $LIBX RAISE THE FENCE DEF *+1 DEF *+1 LDB 0 LDA 1,I GET 1ST 2 CHARS AND B377 CLEAR THE 1ST ONE IOR COMMA AND INSERT A COMMA STA M.HI STORE IN MSG INB DLD 1,I GET LAST 4 CHARS DST M.HI+1 * JSB CNOPT WRITE RESPONSE LINE DEF *+5 DEF .2 DEF CAM.O DEF MSGBF DEF MSGLN * B.EX ISZ BL.. JMP BL..,I RETURN SPC 3 * * SUBROUTINE TO GET NEXT PARAMETER FROM PARSE BUFFER * CKPAR NOP DLD * GET TYPE AND VALUE TMPAD EQU *-1 CMA,INA,SZA,RSS NULL? JMP CKEX YES, DO RTN+1 ISZ CKPAR FOR ALL ELSE DO RTN+2 SSB,RSS >=0? SEZ,INA,SZA YES, SKP UNLESS ILLEGAL ASCII JMP ER56 PARAMETER ERROR * CKEX LDA TMPAD ADA .4 POINT TO NEXT PRAM STA TMPAD LDA 1 RETURN VALUE IN BOTH A AND B JMP CKPAR,I * ER50 LDA .50 50 = NOT ENOUGH PARAMETERS RSS ER56 LDA .56 56 = BAD PARAMETER LDB BL..,I GET ADDR OF ERROR PARAM STA 1,I RETURN ERROR VALUE JMP B.EX AND RETURN * * DATA AREA * LIMIT NOP DVT1 NOP DVT8 NOP NUMBA NOP * .1 DEC 1 .2 DEC 2 .4 DEC 4 .7 DEC 7 .10 DEC 10 .50 DEC 50 .56 DEC 56 B20 OCT 20 B177 OCT 177 B377 OCT 377 B7777 OCT 7777 BIT15 OCT 100000 ASCUN ASC 1,UN ASCBU ASC 1,BU ASC.0 ASC 1, 0 COMMA OCT 26000 * MSGBF EQU * ASC 2,LU# M.LU BSS 1 ASC 1, M.BU BSS 1 ASC 3, BL= M.LO BSS 2 M.HI BSS 3 ASC 3, AC= M.AC BSS 3 MSGLN ABS *-MSGBF * MUNAS ASC 2,LU # M.LU2 NOP ASC 6, UNASSIGNED MS2LN ABS *-MUNAS * END