ASMB,R,L,C
      HED SUBROUTINE GETST
* 
* 
*     NAME:    GETST
*     SOURCE:  92067-18056
*     RELOC:   PART OF 92067-16035
*     PGMR:    D.L.S. 
* 
*  ***************************************************************
*  * (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 GETST,7 92067-16035 REV.1805 771005 
      ENT GETST 
      EXT EXEC,.ENTP,.ZPRV
      SUP 
* 
***************************************************************** 
* 
*      SUBROUTINE GETST:
* 
*     GETST IS A FORTRAN CALLABLE SUBROUTINE WHICH MAY BE USED TO 
*     RETRIEVE ANY PARAMETER STRING FROM A COMMAND STRING WHICH 
*     FOLLOWS THE SECOND COMMA(THIRD IF THE SECOND PARAMETER IS 
*     'NO' AND 'NOW').  ONLY THE FIRST 80 CHARACTERS OF THE 
*     COMMAND STRING ARE CHECKED. 
* 
*     CALLING SEQUENCE: 
* 
*          EXT GETST
*          JSB GETST
*          DEF RTN
*          DEF IBUFR
*          DEF IBUFL
*          DEF ILOG 
*    RTN   ...
*    IBUFR BSS N         BUFFER TO STORE STRING IN. 
*    IBUFL DEC N(-2N)    WORD(+) OR CHARS(-) TO TRANSFER. 
*    ILOG  BSS 1         TRANSMISSION LOG.
* 
*     RETURN: 
*          <B>=<ILOG>:=POSITIVE NUMBER OR WORDS(CHARS)TRANSFERRED.
*                    :=0  IMPLIES NO BUFFER FOUND.
* 
***************************************************************** 
* 
IBUFR NOP 
IBUFL NOP 
ILOG  NOP 
* 
GETST NOP 
      JSB .ZPRV 
      DEF LIBX
      JSB .ENTP 
      DEF IBUFR 
* 
      JSB EXEC      GO GET ANY PARAMETER STRING.
      DEF *+5 
      DEF D14 
      DEF D1
DIBR  DEF IBR 
      DEF DM80
* 
      SZB,RSS       IF TRANSMISSION LOG 
      JMP L2         IS ZERO, THEN EXIT.
      INB 
      CMB,INB       SET UP CHARACTER
      STB CNT        CHARACTER COUNTER. 
* 
      LDB IBUFR     CONVERT DESTINATION BUFFER
      CLE,ELB        ADDRESS TO CHARACTER 
      STB DBADD       AND SAVE. 
      LDB DIBR      CONVERT SOURCE
      CLE,ELB        BUFFER ADDRESS 
      ADB DM1         TO CHARACTER
      STB ADD          ADDRESS AND SAVE.
      LDB DM2       SET COMMA COUNT 
      STB TEMP       TO -2. 
* 
L1    JSB GETCH     GO GET A CHARACTER. 
      CPA ASCCM     IF NOT A COMMA OR THE FIRST COMMA,
      ISZ TEMP       THEN CONTINUE SCANNING FOR 
      JMP L1          COMMAS. 
* 
      LDB ADD       OTHERWIZE, SAVE 
      STB TEMP       ADDRESS. 
      LDB CNT       SAVE CHAR 
      STB TCNT       COUNT. 
* 
L31   JSB GETCH     NOW SCAN FOR 'NO' OR 'NOW'. 
      CPA ASCBK     STRIP LEADING BLANKS. 
      JMP L31 
      CPA ASC.N     IF CHARACTER EQUALS 'N' 
      JMP L5         THEN CHECK FOR A 'O'.
* 
L6    LDA TEMP      IF CHARACTER IS NOT 'N', THEN 
      LDB TCNT       GET SAVED ADDRESS AND CHARACTER
      JMP L91         COUNT AND GO MOVE BUFFER. 
      SKP 
L5    JSB GETCH     GET NEXT CHARACTER. 
      CPA ASC.O     CHECK IF CHARACTER
      RSS            IS A 'O'.
      JMP L6        IF NOT, GO MOVE BUFFER. 
* 
      JSB GETCH     FOUND 'NO'. 
      CPA ASCBK     CHECK IF NEXT CHARACTER 
      JMP L81        IS A BLANK OR
      CPA ASCCM       A COMMA.
      JMP L9
* 
      CPA ASC.W     FOUND 'NO'.  CHECK IF 
      RSS            NEXT CHARACTER IS A 'W'. 
      JMP L6        IF NOT THEN MOVE BUFFER.
* 
      JSB GETCH     FOUND 'NOW' SO GET NEXT CHARACTER.
      CPA ASCCM     CHECK IF NEXT 
      JMP L9         CHARACTER IS A 
      CPA ASCBK       BLANK OR A COMMA. 
      RSS 
      JMP L6        IF NOT THEN MOVE BUFFER.
* 
L81   JSB GETCH     GET NEXT CHARACTER. 
      CPA ASCCM     SKIP TO THIRD COMMA IN STRING.
      RSS 
      JMP L81 
* 
L9    LDA ADD       SAVE STARTING CHAR ADDRESS
      LDB CNT        AND CHARACTER COUNT
L91   INA             OF SOURCE BUFFER. 
      INB 
      STA SBADD 
      LDA IBUFL,I   GET REQUEST LENGTH
      SSA            AND CONVERT TO CHARACTERS. 
      JMP L92 
      RAL 
      CMA,INA 
L92   STA CNT       SAVE NEGATIVE CHARACTER COUNT.
      CMA,INA 
      ADA B         USE LESSER OF ACTUAL TRANSMISSION LOG 
      SSA            AND THE ACTUAL REQUEST LENGTH. 
      LDB CNT 
      STB CNT       COMPUTE NUMBER OF 
      CMB,INB        CHARACTERS IN
      STB ILOG,I      SOURCE BUFFER.
      SKP 
LL3   LDB SBADD     GET 
      CLE,ERB        SOURCE 
      LDA B,I         CHARACTER.
      SEZ,RSS 
      ALF,ALF 
      AND B377
* 
      LDB DBADD     STORE 
      CLE,ERB        INTO 
      SEZ,RSS         DESTINATION 
      JMP LL5          BUFFER.
      XOR B,I 
LL4   STA B,I 
      ISZ SBADD     INCREMENT SOURCE CHAR. ADD
      ISZ DBADD      DESTINATION BUFFER ADD AND 
      ISZ CNT         CHARACTER COUNT.
      JMP LL3 
* 
      SEZ           IF LAST BYTE WAS A RIGHT CHARACTER, 
      JMP LL43       THEN JUST CONTINUE.
      CPA ASCB0     IF LAST BYTE WAS A LEFT BLANK,
      JMP LL55       THEN GO REMOVE IT. 
      XOR ASCBK     OTHERWIZE, GO PLACE A BLANK IN
      STA B,I        LOWER BYTE.
* 
LL43  LDB ILOG,I    GET MODIFIED TRANSMISSION LOG.
      LDA IBUFL,I   IF CHARACTERS WERE
      SSA            SPECIFIED, THEN
      JMP L2          RETURN. 
      INB           IF WORDS WERE SPECIFIED, THEN 
      BRS            CHANGE TO WORDS AND RETURN.
* 
L2    STB ILOG,I    SAVE TRANSMISSION LOG 
LIBX  JMP GETST,I    AND RETURN.
      DEF GETST 
* 
LL5   ALF,ALF 
      JMP LL4 
* 
LL55  LDB ILOG,I    DECREMENT 
      ADB DM1        CHARACTER
      STB ILOG,I      COUNT.
      JMP LL43
      SKP 
* 
******************************************************************
* 
*     SUBROUTINE GETCH: 
* 
*     GETCH WILL GET THE NEXT CHARACTER IN A BUFFER.
*          IF THE BUFFER BECOMES EMPTY, GETCH WILL
*          FORCE AN EXIT FROM GETST.
* 
*     CALLING SEQUENCE: 
*          <ADD>:=PREVIOUS CHARACTER ADDRESS
*          <CNT>:=PREVIOUS CHARACTER COUNT(NEGATIVE)
*          JSB GETCH
* 
*     RETURN: 
*          <A>  :=CHARACTER IN LOWER BYTE.
*          <ADD>:=CURRENT CHARACTER ADDRESS.
*          <CNT>:=CURRENT CHARACTER COUNT.
*          ALL REGISTERS ARE MODIFIED EXCEPT B. 
* 
********************************************************************
* 
GETCH NOP 
      CLB           SET POSSIBLE TRANSMISSION LOG TO 0. 
      ISZ ADD       INCREMENT CHARACTER ADDRESS.
      ISZ CNT       INCREMENT CHARACTER COUNT.
      RSS           IF COUNT GOES 
      JMP L2         TO ZERO, LEAVE GETST.
* 
      LDA ADD       GET CHARACTER ADDRESS AND 
      CLE,ERA        AND CONVERT TO WORD ADDRESS. 
      LDA A,I       E=1 MEANS LOWER BYTE. 
      SEZ,RSS       GET WORD AND
      ALF,ALF        PLACE PROPER 
      AND B377        CHARACTER IN
      JMP GETCH,I      LOWER BYTE.
* 
B377  OCT 377 
      SKP 
* 
*     CONSTANTS 
* 
A     EQU 0 
B     EQU 1 
* 
CNT   NOP 
TEMP  NOP 
TCNT  NOP 
ADD   NOP 
SBADD NOP 
DBADD NOP 
* 
IBR   BSS 40
* 
D1    DEC 1 
D14   DEC 14
DM1   DEC -1
DM2   DEC -2
DM80  DEC -80 
* 
ASCCM OCT 54        COMMA 
ASCBK OCT 40        BLANK 
ASC.N OCT 116       'N' 
ASC.O OCT 117       'O' 
ASC.W OCT 127       'W' 
ASCB0 OCT 20000 
* 
      END 
                                                                                                                                                                                                  