ASMB
  HED .        GET A DATA FROM A 2645/2648 IN BLOCK MODE
      NAM GETBK,7 92080-1X408 REV.2026   800515                       
      SPC 2 
*     **************************************************************
*     * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
*     * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
*     * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
*     * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
*     **************************************************************
      SPC 2 
**********************************************************************
*                                                                    *
*     NAME:   GETBK                                                  *
*     SOURCE: &GETBK    92080-18408                                  *
*     BINARY: %GETBK    92080-16408    PART OF $GPLB4                *
*                                                                    *
*     PGMR:   FRANCOIS GAULLIER                                      *
*                                                                    *
*     CALL GETBK(LU,IBUFR,ILENTH,IMODE)                              *
*                                                                    *
*          LU : TERMINAL LU                                          *
*       IBUFR : BUFFER WHERE DATA IS RETURNED                        *
*      ILENTH : EXPECTED READ LENGTH IN BYTES (INCLUDING RECORD      *
*               SEPARATORS)                                          *
*       IMODE : 0=NORMAL MODE (DATA READ WHEN ENTER KEY PRESSED)     *
*               1=BLOCK ENABLED PROGRAM READ (DATA READ WITHOUT      *
*                 PRESSING ENTER KEY)                                *
*               2=LAST CALL TO GETBK WAS MODE 1 & AN ERROR OCCURRED  *
*                 ON THE SCREEN THAT WAS READ. DATA WILL BE READ     *
*                 WHEN ENTER KEY PRESSED & MODE RESET TO 2 (AUTOMATIC*
*                 ENTER).                                            *
*                                                                    *
**********************************************************************
  SPC 3 
*      *********************************************************
*      *  THIS SUBROUTINE RESETS THE 2645 TERMINAL IN CASE OF  *
*      *  POWER FAIL OR WRONG MANIPULATION OF OPERATOR AND GET *
*      *  A BLOCK OF DATA FROM 264X TERMINAL.                  *
*      *********************************************************
  SPC 2 
      ENT GETBK 
      EXT EXEC,.ENTR,REIO 
      SUP 
    SPC 2 
UNLK  BYT 33,142,137,40 
LOCK  BYT 33,143
LENH  BSS 1 
ICLAS BSS 1         CLASS I/O WORD
DUMY  NOP 
STATU OCT 000004    STATUS WORD I/0 MASK
ABORT OCT 60400     ABORT CHARACTER 
MASK  OCT 177400
DEC1  DEC 1 
DEC2  DEC 2 
DEC3  DEC 3 
DEC11 DEC 11
DEC17 DEC 17
DEC21 DEC 21
NEGA2 DEC -2
NEGA3 DEC -3
NEGA5 DEC -5
NEGA8 DEC -8
NEGA9 DEC -9
NEG60 DEC -60 
SAVEA NOP 
BLKMD BYT 33,150,33,144,137,40   HOME CURSOR, BLOCK TRANSFER ENABLED
BLOKM BYT 33,46,153,61,102,40 
PAGEM BYT 33,46,163,61,144,60,147,60,110
FMTON BYT 33,127,0,137
ONGH  BYT 33,46,163,61,147,61,110,137 
D3    DEC 3 
B3K   OCT 3000
ILU   NOP 
CNT25 NOP 
SAVEB NOP 
B25K  OCT 2500
SECS  NOP 
ITIME BSS 5 
* 
* 
* 
LU    BSS 1         LU # ADDRESS
IBUF  BSS 1         BUFFER ADDRESS
NBYTE BSS 1         LENGRTH ADDRESS 
MODE  BSS 1         MODE OF OPERATION (0=NORMAL, 1=PGM ENABLED BLK READ)
GETBK NOP 
      JSB .ENTR 
      DEF LU
* 
      LDA NBYTE,I 
      CMA           ASK ONE EXTRA WORD, TO
      STA LENH      CHECK THE LENGTH LATER
* 
*-----UNLOCK THE KEYBOARD 
* 
      JSB EXEC      33,142,137,40 
      DEF *+5       ESC B _ 
      DEF DEC2
      DEF LU,I
      DEF UNLK
      DEF NEGA3 
* 
*-----SKIP DOWN TO "INPUT" IF MODE 0 OR 2, ELSE SET UP FOR
*     PROGRAM ENABLE BLOCK READ IF MODE=1.
* 
      LDA MODE,I
      CPA DEC1      MODE 1? 
      JMP PREAD     YES. DO PGM ENABLED BLOCK READ. 
* 
*-----TURN ON STRAPS G & H. 
* 
      JSB EXEC
      DEF *+5 
      DEF DEC2
      DEF LU,I
      DEF ONGH      33,46,163,61,147,61,110,137 
      DEF NEGA8     ESC &  S  1   G  1   H   -
* 
*-----LET DRIVER KNOW OF STRAP CHANGES. 
* 
      LDA LU,I
      ADA B25K
      STA CNT25 
      JSB EXEC
      DEF *+3 
      DEF DEC3
      DEF CNT25 
* 
      JMP INPUT     GO READ FORM. 
* 
*-----FORMAT MODE ON
* 
PREAD JSB EXEC      33,127,0,137
      DEF *+5       ESC W 0 - 
      DEF DEC2
      DEF LU,I
      DEF FMTON     ESC W 
      DEF DEC2
* 
*-----BLOCK MODE ENABLE 
* 
      JSB EXEC      33,46,153,61,102,40 
      DEF *+5       ESC & K 1 B 
      DEF DEC2
      DEF LU,I
      DEF BLOKM 
      DEF NEGA5 
* 
*-----PAGE MODE ENABLE + SET STRAPS G & H TO NORMAL.
* 
      JSB EXEC      33,46,163,61,144,60,147,60,110
      DEF *+5       ESC &  S  1   D  0   G   0   H
      DEF DEC2
      DEF LU,I
      DEF PAGEM 
      DEF NEGA9 
* 
*-----SEND CNTL 2500B + LU
* 
      LDA LU,I
      ADA B25K
      STA CNT25 
* 
      JSB EXEC      INFORM DRIVER OF CHANGES TO BLOCK 
      DEF *+3       AND PAGE MODE STRAPPING.
      DEF DEC3
      DEF CNT25 
* 
*-----SEND DISPLAY TO COMPUTER
* 
      JSB EXEC      33,150,33,144,137,40
      DEF *+5       ESC H ESC D - 
      DEF DEC2
      DEF LU,I
      DEF BLKMD     ESC H ESC SMALL D 
      DEF NEGA5     HOME CURSOR, BLOCK MODE XFER ENABLED
* 
*-----GET A CLASS I/O WORD
* 
INPUT CLA 
      STA ICLAS     SET CLASS WORD TO GET A CLASS # 
* 
      JSB EXEC
      DEF *+8 
      DEF DEC17 
      DEF LU,I
      DEF IBUF,I
      DEF LENH
      DEF DUMY
      DEF DUMY
      DEF ICLAS 
* 
*-----IS CLASS I/O # AVAILABLE ?
* 
      SZA           A CLASS # HAS BEEN PROVIDED 
      JMP INPUT     ASK AGAIN FOR A CLASS # 
* 
*-----IS INPUT COMPLETED ?
* 
      JSB EXEC
      DEF *+5 
      DEF DEC21 
      DEF ICLAS 
      DEF IBUF,I
      DEF LENH
* 
* 
*-----CHECK FOR TIME OUT
* 
      AND STATU 
      SZA 
      JMP EROR
* 
*-----CHECK FOR ABORT 
* 
      CPB DEC1
      JMP ABOR
      JMP RIGH
ABOR  LDA IBUF,I
      AND MASK
      CPA ABORT 
      JMP RETUR 
* 
*-----CHECK RIGHT LENGTH
* 
RIGH  CPB NBYTE,I 
      JMP RETUR 
* 
*-----ERROR ! 
* 
EROR  JSB EXEC
      DEF *+5 
      DEF DEC2
      DEF LU,I
      DEF ZONE
      DEF ILG00 
* 
*-----FUNCTION:  .TRUE.   (ERROR RETURN)
* 
      CCA 
      JMP GETBK,I 
* 
*-----LOCK THE KEYBOARD 
* 
RETUR JSB EXEC
      DEF *+5 
      DEF DEC2
      DEF LU,I
      DEF LOCK
      DEF NEGA2 
* 
*-----IF MODE 2, RESET IT TO MODE 1.
* 
      LDB DEC1
      LDA MODE,I
      CPA DEC2
      STB MODE,I
* 
*-----FUNCTION: .FALSE.   (NORMAL RETURN) 
* 
      CLA 
      JMP GETBK,I 
* 
*-----RESET BUFFER OF THE 2645 TERMINAL 
* 
ZONE  BYT 33,143                 LOCK KEYBOARD
      BYT 33,155,33,130          UNLOCK MEMORY, FORMAT MODE OFF 
      BYT 33,110,33,112          HOME UP CS. CLEAR DISPLAY
* 
      BYT 33,46 
      ASC 10,s0a0b0c1d0e0f1g1h0j0 
      BYT 113,00
* 
      BYT 40,33,46,153,61,102                      SET BLOCK MODE 
      BYT 33,46,146,61,141,61,153,61,114,11        NEXT FIELD 
      BYT 33,46,146,61,141,62,153,62,114,33,151,40 PREVIOUS FIELD 
      BYT 33,46,146,61,141,63,153,61,114,40        NOT USED 
      BYT 33,46,146,62,141,64,153,61,114,141       ABORT
      BYT 33,46,146,61,141,65,153,64,114,33,110,33,144,40   NEXT SCREEN 
      BYT 33,46,146,61,141,66,153,65,114,163,33,110,33,144  PREV.SCREEN 
      BYT 33,46,146,61,141,67,153,65,114,150,33,110,33,144  HELP
      BYT 33,46,146,61,141,70,153,65,114,151,33,110,33,144  INSERT
* 
      BYT 33,110,33,112     HOME UP CURSOR, CLEAR DISPLAY 
END00 EQU *-1 
STR00 EQU ZONE
ILG00 ABS END00-STR00+1 
      END 
                                                                                                                                                                                                                              