ASMB,R,L,C
      HED $PARS - PARSE SUBROUTINE FOR OPERATOR MESSAGES
*     SOURCE: 92067-18049 
*     RELOC:  PART OF 92067-16035 
*     PGMR:   G.A.A.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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 $PARS,6 92067-16035 REV.1840 780811 
      ENT $PARS 
      EXT .ZPRV 
*     CALLING SEQUENCE: 
*     LDA BUFFER ADDRESS
*     LDB CHARACTER COUNT 
*     JSB $PARS 
*     DEF PRAM BUFFER 
*     -RETURN-
* 
*     THE PRAM BUFFER IS 33 WORDS LONG AND CONTAINS UP TO 8 
*     PRAMETER DESCRIPTERS FOLLOWED BY THE PRAMETER COUNT.
* 
*     EACH PARAMETER DESCRIPTER CONSISTS OF FOUR WORDS: 
* 
*     WORD          MEANING 
*     1             FLAG WORD 0=NULL PRAMETER 
*                             1=NUMERIC PRAMETER
*                             2=ASCII PRAMETER
*     2             0 IF NULL,VALUE IF NUMERIC,ASCII(1,2) IF ASCII
*     3             0 IF NOT ASCII ELSE ASCII(3,4)
*     4             0 IF NOT ASCII ELSE ASCII(5,6)
* 
*                                   TEMP USAGE IN PARSE SECTION:
* 
*                                   TEMPP = CHARACTER ADDRESS 
*                                   TEMP  = PARAMETER FLAG ADDRESS
*                                   TEMP1 = TEMP BUFFER FETCH ADD.
*                                   TEMP2 = TEMP BUFFER STORE ADD.
*                                   TEMP3 = LAST INPUT CHAR.+1 ADD. 
*                                   TEMP4 = PARAMETER VALUE ADDRESS.
*                                   TBUF  = DEF TEMP5 (6 LOCATIONS)
*                                   TBUFS = DEF TEMP5+7 
* 
$PARS NOP 
      JSB .ZPRV 
      DEF LIBX
      CLE,ELA       MAKE CHARACTER ADD. 
      STA TEMPP     SET BUFFER CHAR ADD.
      ADA B         COMPUTE END ADDRESS.
      STA TEMP3     AND SET IT. 
      LDB DM32     CLEAR PARAMETER AREA 
      STB TEMP
      LDB $PARS,I 
      CLA 
MES1  STA B,I 
      INB 
      ISZ TEMP
      JMP MES1
* 
      STA B,I       CLEAR THE PRAM COUNT
      STB WSTAT     SET ADDRESS OF PRAM COUNT 
DEC09 LDA TBUF       INITIALIZE TEMP BUFFER ADDRESS 
      STA TEMP1 
      STA TEMP2 
* 
DEC10 LDB TEMPP     GET THE BUFFER CHAR ADDRESS 
      CPB TEMP3     IF NO MORE CHARACTERS 
      JMP DEC60     GO PROCESS PRAM 
      ISZ TEMPP     STEP INPUT POINTER
      CLE,ERB       CONVERT TO WORD SET UP LOW IN E 
      LDA B,I       GET WORD FROM THE BUFFER
      SEZ,RSS       CHECK IF TO EXAMINE UPPER/LOWER 
      ALF,ALF       UPPER, SO ROTATE TO LOWER BITS
      AND B377      MASK OFF ALL BUT LOW ORDER
      CPA COM       SEE IF A COMMA
      JMP DEC60     YES 
      CPA LASCI    CHECK IF BLANK CHARACTER 
      JMP DEC10    YES, SO SKIP CHARACTER 
      LDB TEMP2     CHECK IF 6 CHARACTERS IN PRAM 
      CPB TBUFS     IF SO 
      JMP DEC10     SKIP STORE
      STA TEMP2,I   STORE THE CHARACTER 
      STA SABRT     SAVE THE LAST CHARACTER 
      ISZ TEMP2     STEP FOR NEXT CHAR. 
* 
      JMP DEC10     GO TO PROCESS NEXT CHARACTER
* 
*                                   ATTEMPT NUMERIC CONVERSION OF PRAM. 
* 
DEC60 LDA WSTAT,I   FIRST SET UP POINTERS 
      RAL,RAL       TAKE 4 TIMES THE PRAM NUMBER
      ADA $PARS,I   PLUS THE OP CODE ADDRESS-1
      STA TEMP      SET FLAG ADDRESS
      CLE,INA       ONE MORE AND WE HAVE
      STA VALOC     THE PRAMETER VALUE LOCATION 
      LDA TEMP2     IF NO CHARACTERS
      CPA TBUF      INPUT 
      JMP DEC75     GO TRY NEXT ONE 
* 
*                                   NOW TRY FOR A NUMBER
* 
      ISZ TEMP,I    SET FLAG TO 1 FOR NUMBER
      LDB TEMP1,I   GET FIRST CHAR
      CPB DASH       MINUS SIGN?
      ISZ TEMP1      YES, INCRE TO NEXT CHAR
      CPA TEMP1     (A) STILL = TEMP2 
      JMP DEC80     IF "-" WAS ONLY CHAR, THEN ASCII
* 
      LDB D10       SET UP CONVERSION BASE
      LDA SABRT 
      CPA "B"       IF B SUFFIX 
      LDB D8         SET FOR BASE 8 
      STB TEMP4     SET BASE
DEC65 MPY VALOC,I   BUMP THE CURRENT VALUE
VALOC EQU *-1 
      LDB TEMP1,I   GET THE NEXT CHAR.
      ADB DM58      IF GREATER THAN "9" 
      SEZ,CLE,RSS   THEN NOT A NUMBER 
      ADB D10       IF LESS THAN "0"
      SEZ,CLE,RSS   THEN
      JMP DEC80     NOT A NUMBER
      ADA B         ACCUMULATE THE
      STA VALOC,I   NUMBER
      ISZ TEMP1     STEP THE BUFFER ADDRESS 
      LDA TEMP4     GET THE BASE TO A
      LDB TEMP1     AND THE NEXT CHAR. LOC. TO B
      CPB TEMP2     IF END THEN 
      JMP DEC70     GO TO NEXT PRAM 
* 
      INB           IF BASE 8 CONVERSION
      CPB TEMP2     AND LAST
      CPA D10       CHAR. THEN DONE SO SKIP 
      JMP DEC65     ELSE GO GET THE NEXT ONE
* 
      SPC 1 
DEC70 LDB VALOC,I   GET VALUE 
      LDA TBUF,I    IF NEG NUMBER,
      CPA DASH
      CMB,INB        NEGATE VALUE 
      STB VALOC,I   STORE VALUE 
* 
DEC75 ISZ WSTAT,I   COUNT THE PRAMETER
      LDA WSTAT,I   IF
      LDB TEMP3      EOL OR 
      CPB TEMPP       8 PRAMS LINE
      RSS               THEN
      CPA D8
      JMP DEC90          GO PROCESS 
      JMP DEC09     ELSE GO GET NEXT CHARACTER
      SPC 1 
DEC80 ISZ TEMP,I    SET NOT NUMBER FLAG 
      LDA AASCI     FILL THE PRAM WITH BLANKS 
      LDB VALOC     PRAM ADDRESS TO B 
      INB           DON'T WORRY ABOUT FIRST WORD
      STA B,I       SET SECOND WORD 
      CLE,INB       STEP TO THIRD WORD
      STA B,I       SET THIRD WORD TO DOUBLE BLANK. 
      LDB TBUF      GET THE TEMP BUFFER POINTER 
DEC85 CPB TEMP2     END OF INPUT? 
      JMP DEC75     YES GO PROCESS NEXT PRAM
      CPB STOP      SIXTH CHAR YET? 
      JMP DEC75      YES, END PARAM 
      LDA B,I       GET THE CHARACTER 
      SEZ,RSS       IF UPPER CHARACTER
      ALF,SLA,ALF   ROTATE AND SKIP 
      XOR VALOC,I   LOWER ADD THE UPPER CHAR. 
      XOR LASCI     ADD/DELETE THE LOWER BLANK
      STA VALOC,I   STORE THE PACKED WORD 
      SEZ,CME,INB   STEP B,SKIP IF UPPER
      ISZ VALOC     ELSE STEP STORE ADDRESS.
      JMP DEC85     GO GET OTHER CHAR.
      SPC 2 
DEC90 ISZ $PARS     STEP RETURN ADDRESS 
LIBX  JMP $PARS,I   RETURN
      DEF $PARS 
      SPC 2 
"B"   OCT 102       ASCII "B" 
DASH  OCT 55        ASCII "-" 
STOP  DEF TEMP5+6   ASCII 6TH CHAR STOP 
* 
* 
TEMP  NOP 
TEMP1 NOP 
TEMP2 NOP 
TEMP3 NOP 
TEMP4 NOP 
TEMP5 NOP 
TEMP6 NOP 
TMP   NOP 
      NOP 
WPRIO NOP 
ASCI  NOP 
ASCI1 NOP 
ASCI2 NOP 
* 
TEMPP NOP 
DM32  DEC -32 
WSTAT NOP 
TBUF  DEF TEMP5 
TBUFS DEF TEMP5+7 
DM58  DEC -58 
COM   OCT 54
SABRT NOP 
D10   DEC 10
D8    DEC 8 
AASCI ASC 1,
B377  OCT 377 
LASCI OCT 40
A     EQU 0 
B     EQU 1 
      END 
                                                                                                                                                                