ASMB,R,L,C
      NAM GTF.C,7 92064-16090 780815 REV. 1901 $CLIB
* 
* 
* 
* 
*     NAME:   GTF.C 
*     SOURCE: 92064-18225 
* 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  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.       *
*  ***************************************************************
* 
* 
*      CALLING SEQUENCE:  JSB GTF.C 
* 
* 
*         ERROR CODE RETURNED IN A REGISTER 
*         STRING LENGTH RETURNED IN B REGISTER
* 
* 
      ENT GTF.C 
* 
      EXT .DRCT,MGLU,IFTTY         UNKNOWN ROUTINES(POS FTN LIB)
      EXT CLOSE,OPEN,READF,WRITF,RMPAR   RTE-M REF MAN
      EXT .MVW                         ASMB MAN 
      EXT C.TRN,C.TTY                  COMPILER LIB 
* 
* 
GTF.C NOP 
* 
      JSB RMPAR 
      DEF *+2 
      DEF ANSW
      LDA C.TTY+2   FETCH CONSOLE LU
      AND =B77       ISOLATE  IT
      STA CON1      SAVE IT 
* 
* 
*  OPEN INPUT FILE/LU 
* 
      LDA ANSW      FETCH ANSWER NAME/LU
      LDB =B157777  IS THIS A NAME ?
      ADB A              OR AN LU ??
      SSB,RSS 
      JMP OP1       IT'S A NAME--DO NORMAL OPEN 
* 
      SZA,RSS       IF DEFAULT
      LDA CON1      USE MTM TERMINAL
      STA LU        SAVE FOR CONVERSION 
* 
*  CALL ROUTINE TO CREATE FILE NAME LU..XX  XX ::=  LU #
*    (IF REQUESTED LU IS TOO LARGE OR NOT ASSIGNED
*    FILE NAME "LU..99" IS RETURNED. THIS WILL GENERATE 
*    A ERROR -18 (BAD LU)  IN THE OPEN ROUTINE.)
* 
      JSB MGLU      CALL ROUTINE TO BUILD MAGIC NAME
       DEF *+3
       DEF LU        ADDRESS OF LU TO BE CONVERTED
       DEF ANSW     SET IT FOR OPEN CALL
* 
OP1   JSB OPEN
      DEF OP2 
      DEF GDCB
      DEF ERR 
      DEF ANSW
      DEF OPOP
* 
OP2   LDA ERR 
      SSA 
      JMP GTF.C,I 
* 
* SEE IF INTERACTIVE
* 
      JSB .DRCT     FETCH 
      DEF GDCB          DIRECT ADDRESS OF DCB 
      ADA =B2       ADVANCE TO TYPE WORD
      LDB A,I       FETCH IT
      SZB           CONTINUE IF ZERO
      JMP DFILE     NON-INTERACTIVE 
* 
      INA           ADVANCE TO LU 
      LDA A,I       FETCH IT
      STA X 
      JSB IFTTY      DETERMINE IF INTERACTIVE 
      DEF RTN 
      DEF X 
RTN   RSS 
DFILE CLA 
      STA INT       0=NO,1=YES
* 
* 
      LDA STAA
      INA 
      INA 
      STA STAD    PRESET STRING POINTER 
      LDA .5
      STA LEN      PRESET STRING LENGTH (ALLOWS FOR RU,X, , , ) 
      LDA =B-3      FETCH LOOP CNTR 
      STA CNTR      SET IT
* 
*  SET UP ADDRESSES 
* 
INPT  LDA PNT2
      ADA CNTR
      LDA A,I 
      STA MSAD
      ADA .5
      INA 
      STA LNAD
      INA 
      STA RDAD
* 
*  IF NOT INTERACTIVE-SKIP PROMPT 
* 
      LDA INT 
      SZA,RSS 
      JMP RT1 
      JSB WRITF 
      DEF RT1 
      DEF GDCB
      DEF ERR 
      DEF MSAD,I
      DEF .5
* 
* 
*     FETCH REPLY 
* 
RT1   JSB READF 
      DEF RT2 
      DEF GDCB
      DEF ERR 
      DEF RDAD,I    REPLY 
      DEF .20 
      DEF LNAD,I    READ LENGTH 
* 
RT2   LDA ERR 
      SZA 
      JMP EX0     ERROR EXIT FROM READ
* 
      ISZ CNTR
      JMP INPT
* 
      LDA =B-3    RESET COUNTER 
      STA CNTR
OUTPT LDA PNTR
      ADA CNTR
      LDA A,I 
      ADA .5
      STA DFAD
      INA 
      STA LNAD
      INA 
      STA RDAD
* 
* 
      LDB LNAD,I    LOAD LENGTH WORD
      LDA INT      CHECK SINCE DEFAULT ON TERMINAL = EOF
      SZA,RSS 
      JMP RT3 
      SSB,RSS      EOF FROM TERM = ZERO RECORD AS FROM FILE 
      SZB,RSS 
      CLB 
      STB LNAD,I
RT3   SSB 
      JMP EX12     ERROR EXIT 
      LDA RDAD
      SZB 
      JMP RPLY
      ISZ LNAD,I   INSERT DEFAULT IF REQD 
      ISZ LEN 
      LDA DFAD
RPLY  ADB LEN 
      STB LEN      INCREMENT STRING LENGTH
      LDB CMA 
      STB STAD,I
      LDB STAD
      INB 
      JSB .MVW
      DEF LNAD,I
      NOP 
      STB STAD     INCR STRING PNTR 
* 
* 
      ISZ CNTR
      JMP OUTPT 
* 
*   EXIT  * 
* 
EXCLS JSB CLOSE 
      DEF *+2 
      DEF GDCB
* LOAD RUN STRING * 
      LDB .CTRN 
      JMP *+2 
LOOP  LDB B,I 
      RBL,CLE,SLB,ERB      CLEAR INDIRECTS
      JMP LOOP
      LDA STAA
      JSB .MVW
      DEF LEN 
      NOP 
      LDA ERR      LOAD ERROR CODE
      LDB LEN        LOAD STRING LENGTH 
      BLS            (CHARACTERS,NO WORDS ARE EXPECTED) 
      JMP GTF.C,I 
* 
* ERROR EXIT *
* 
EX0   CLB 
      STB LEN 
EX12  LDA =D-12 
      STA ERR   SET MASTER ERRORCODEWORD
      JMP EXCLS 
* 
* 
* LOOP VARIABLES
* 
*   WORD  1- 5  PROMPT
*            6  LENGTH OF REPLY 
*            7  DEFAULT 
*         8-21  REPLY 
* 
INP  ASC 4,INPUT? 
     OCT 3537         (BELL/BACK ARROW) 
     ASC 1, 5 
     BSS 14           LENGTH WORD + 13W REPLY 
OUT  ASC 4,OUTPUT?
     OCT 3537 
     ASC 1, 4 
     BSS 14 
LST  ASC 4,LIST?
     OCT 3537 
     ASC 1, 6 
     BSS 14 
* 
     DEF INP
     DEF LST
     DEF OUT
PNTR DEF *
     DEF INP
     DEF OUT
     DEF LST
PNT2 DEF *
CNTR BSS 1
DFAD BSS 1
LNAD BSS 1
RDAD BSS 1
MSAD BSS 1
* 
*  RUN STRING 
* 
LEN  BSS 1
CMA  OCT 26040    LEFT JUST COMMA AND BLANK 
STAA DEF STR
STR  ASC 2,RU,X   X IS PLACEHOLDER FOR COMPILER NAME
     BSS 38 
STAD BSS 1
* 
* 
GDCB BSS 144       DCB BUFFER AREA FOR INPUT
.CTRN DEF C.TRN    LOCAL POINTER TO LIB 
ERR  BSS 1
ANSW BSS 5
OPOP OCT 411       OPEN OPTION
CON1 BSS 1
A    EQU 0
B    EQU 1
INT  BSS 1
LU   BSS 1
X    BSS 1
.5   OCT 5
.20  OCT 24 
     END
                                                                                                                                        