ASMB,R,L,C
*     NAME:   FMGR
*     SOURCE: 92064-18040 
*     RELOC:  92064-16017 
*     PGMR:   G.L.M.
* 
*  ***************************************************************
*  * (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.       *
*  ***************************************************************
* 
* 
      NAM FMGR,1,80  92064-16017  REV.1650  761204
* 
      ENT FMGR,N.OPL,O.BUF,ELOG.,AB.FM
      ENT .E.R,TMP.,MSS.,LODCB
      EXT OPEN,READF,DTTY,RMPAR,WRITF,.MVW
      EXT $CON,EXEC,.ENTR,IDCB1,IDCB2,IDCB3 
      EXT CONV.,OPEN.,CLO,.DRCT,MGLU,IMESS
      SUP 
* 
* 
CON1  NOP 
N20K  OCT 160000
* 
ONP1  NOP 
ONP2  NOP 
ONP3  NOP 
ONP4  NOP 
ONP5  NOP 
* 
FMGR  JSB RMPAR     FETCH 
       DEF *+2           THE
ONP1A  DEF ONP1     5 TURN ON PARMS 
* 
* 
      LDA $CON,I    FETCH TERMINAL LU 
      AND B77       ISOLATE IT
      STA CON1      AND SAVE IT 
* 
*  1ST PARM CHECKS
* 
      LDA ONP1      FETCH PARM1 
      LDB N20K      FETCH MIN ASCII WD
      ADB A         IS THIS A ANSWER FILE?
      SSB,RSS       WELL? 
      JMP ITNME     YES--CONTINUE 
* 
      SZA,RSS       IF DEFAULT
USEC  LDA CON1          USE CORRECT CONSOLE 
      STA ONP1      SAVE CORRECT VALUE FOR OTHER CHECKS 
      JSB DTTY      INTERACTIVE?
      STA INT.      SAVE RESULT (0=NO, NON ZERO = YES)
* 
*    GET MAGIC NAME FOR THIS LU 
* 
      JSB MGLU
      DEF *+3 
      DEF ONP1
OBF   DEF O.BUF 
* 
      LDA OBF       FETCH ADDRESS OF NAME 
      JSB OPIN      GO TRY TO OPEN IT(ERRORS RETURN TO USEC)
* 
      JMP USEC      BAD RETURN FROM OPEN--USE CONSOLE 
* 
      LDA ONP2      FETCH LOG  (NORMAL RETURN)
      SZA,RSS       DEFAULT?
      JMP W2K       YEP--GO FIND SOMETHING TO USE 
* 
*  LOG GIVEN--MUST BE INTERACTIVE 
* 
      JSB DTTY      VERIFY THAT IT IS INTERACTIVE 
      LDB ONP2      FETCH LOG IN CASE IT OK 
      SZA           WELL? 
      JMP W3K       ----IT'S INTERACTIVE----CONTINUE
* 
*   LOG NOT INTERACTIVE 
*    ISSUE BAD PARM ERROR CODE
*    THEN USE CORRECT TERMINAL
* 
      LDA .56       FETCH ERROR CODE
      STA .E.R      SET IT
      JSB ONER      USE IMESS FOR BOOT UP ERROR 
* 
* 
*   LOG NOT GIVEN OR NOT INTERACTIVE
* 
W2K   LDA INT.      WAS INPUT INTERACTIVE?
      LDB ONP1      FETCH IT IN CASE IT WAS 
      SZA,RSS       WELL? 
WKFL  LDB CON1      NOPE--USE CONSOLE 
W3K   STB ONP2      SET NEW LOG LU
      JSB MGLU      GO GET MAGIC NAME FOR IT
      DEF *+3 
      DEF ONP2      ADDRESS OF NUMBER TO BE CONVERTED 
      DEF O.BUF     TEMP AREA FOR RESULT
* 
*  GO OPEN HER UP 
* 
      JSB OPEN
       DEF O.2R 
DLO$   DEF LODCB
       DEF .E.R 
       DEF O.BUF
       DEF OPOPT
* 
O.2R  SSA,RSS       ANY PROBLEMS? 
      JMP LSTWK 
* 
*   ISSUE ERROR MESSAGE THEN TRY AGAIN USING CONSOLE
* 
      JSB ONER
      JMP WKFL
* 
* 
*   OPIN OPENS THE INPUT FILE/DEVICE
*     LDA ADDR      ADDRESS OF NAME TO BE OPENED
*     JSB OPIN
* 
*     P+1=OPEN ERROR WAS FOUND--ERROR HAS BEEN ISSUED 
*     P+2=NORMAL RETURN 
* 
OPIN  NOP 
      STA INME
      JSB OPEN
       DEF O.1R 
DIN$   DEF INDCB
       DEF .E.R 
INME  NOP           ADDRESS OF BUF HOLDING NAME GOES HERE 
       DEF OPOPT    OPEN OPTION 
* 
O.1R  SSA,RSS       ANY ERRORS? 
      JMP GDD       NOPE--GO EXIT P+2 
* 
      JSB ONER      ISSUE ERROR CODE
      JMP OPIN,I    RETURN P+1  (BAD RETURN)
* 
GDD   ISZ OPIN      ADVANCE TO GOOD RETURN
      JMP OPIN,I    RETURN
* 
* 
ONER  NOP 
      LDA .E.R
      JSB STER      GO SET UP ERROR MESS
      JSB IMESS 
      DEF RTRN
      DEF .2
      DEF ERMES 
      DEF .5
RTRN  JMP ONER,I
* 
* 
* 
* 
      SPC 5 
* 
*   INPUT IS A FILE NAME
* 
ITNME LDA ONP1A     FETCH ADDRESS OF NAME 
      JSB OPIN      GO OPEN IT
      JMP NOGD      ERROR FROM OPEN--SET UP TO USE DEFAULTS 
* 
      LDA DIN$       OPEN WAS OK--NOW 
      ADA .3         SEE IF IT'S INTERACTIVE
      LDA A,I       FETCH LU -DTTY ISOLATES IT
      STA EX!       SAVE THE LU 
      JSB DTTY
STINT STA INT.
      LDB ONP5      FETCH LIST PARM 
      STB ONP3      SET FOR NORMAL LIST PROCESSING
      SZA,RSS       IF INPUT IS INTERACTIVE---SKIP
      JMP WKFL      GO SET CONSOLE AS LOG DEVICE
* 
      LDB EX!       FETCH INPUT LU
      JMP W3K       GO SET IT AS LOG ALSO 
* 
* 
* 
* 
NOGD  LDA CON1      FETCH CONSOLE LU
      STA ONP2      SET AS LOG
      LDA ONP5
      STA ONP3      SET LIST
      JMP USEC      GO DO EVERYTHING DEFAULT
* 
* 
LSTWK LDA ONP3      FETCH LIST LU 
      SZA,RSS       SKIP IF NOT DEFAULT 
      LDA .6        DEFAULT TO LU 6 
      STA TMP.      SAVE IT FOR USE BY SUBS 
* 
      LDA DIN$      ADDRESS OF INPUT DCB
      STA IN$       SET AS CURRENT INPUT FILE 
* 
      JSB CLOAL      CLOSE ALL FILES
*                    WHICH MAY HAVE BEEN LEFT OPEN
      SPC 10
* 
*   COMMAND INPUT FILE OPEN-- 
*     FETCH AND PARSE NEXT COMMAND
* 
NXCM  JSB RE.C      GO GET A COMMAND
      CLA           CLEAR COMMAND ADDRESS IN CASE 
      STA CMAD      ONLY BLANK  OR CONTROL IS ENTERED 
* 
      JSB PARS      GO PARSE IT 
* 
* 
      LDA CMAD      FETCH COMMAND ADDRESS 
      SZA,RSS       IF ZERO THEN 0 NON-BLANK CHARS HAVE BEEN ENTERED
      JSB CMND?     ERROR-- 
* 
*   COMMAND HAS BEEN IDENTIFIED AND ADDRESS IS IN CMAD
* 
      CLA 
      STA .E.R      CLEAR THE ERROR PARM
      JSB CMAD,I    CALL THE ACTION ROUTINE 
      DEF CALR
      DEF P.CNT 
      DEF P.RAM 
      DEF .E.R
* 
CALR  LDA .E.R
      SZA,RSS 
      JMP SHUT
      JMP ELOG. 
      SPC 5 
* 
* 
INDCB BSS 16
LODCB BSS 16
.E.R  NOP 
* 
* 
* 
TMP.  NOP 
TMP.2 OCT 0,0 
SC.L  NOP 
CRLU  NOP 
      SPC 10
AB.FM LDA .E.R
      JMP ELOG. 
      SPC 5 
MSCD  NOP 
MSS.  NOP 
      JSB .ENTR 
      DEF MSCD
      LDA MSCD,I
* 
* 
* 
ELOG. JSB STER      GO SET UP ERROR MESS
      JSB WRITF 
      DEF ERMS
      DEF LODCB 
      DEF .E.R
      DEF ERMES 
      DEF .5
ERMS  LDA DLO$
      STA IN$       SWITCH TO LOG DEVICE FOR INPUT
      STA INT.      SET INTERACTIVE FLAG
* 
      JSB CLO       CLOSE THE INPUT FILE
      DEF INDCB 
* 
CLO2  CLB 
      LDA MSS.
      STB MSS.
      SZA 
      JMP A,I 
SHUT  JSB CLOAL     CLOSE ALL LIBRARY DCBS
* 
CLRTN JMP NXCM      GO GET NEXT COMMAND 
* 
* 
* 
STER  NOP 
      LDB BLK       IF NOT NEG USE BLANK
      SSA 
      LDB BSGN
      STB ESGN
      SSA 
      CMA,INA 
      STA OLDER     SAVE ERROR CODE 
      JSB CONV. 
      DEF CVTN
      DEF OLDER 
      DEF ECDE
      DEF .3
CVTN  JMP STER,I
* 
* 
* 
ZERO  NOP 
ERMES ASC 3,FMGR
ESGN  NOP 
ECDE  NOP 
* 
* 
* 
* 
BSGN  ASC 1,- 
BLK   ASC 1,
OLDER NOP 
      SPC 5 
ERR?  CLA 
      LDB IBP       FETCH CURRENT BYTE ADDRESS
      CLE,SLB,ERB   DETERMINE WHICH BYTE TO ZAP 
      LDA HBTE      SAVE HIGH BYTE
      AND B,I       ELSE USE 0
* 
      IOR B77       INCLUDE "?" 
      SEZ,RSS       IF CURRENT BYTE=HIGH RE-POSITION
      ALF,ALF 
      STA B,I       SET BACK INTO INPUT BUFFER
* 
*  DETERMINE ECHO LENGTH
* 
      ERB           SET CHAR FLAG INTO SIGN OF B
      LDA DNFLG     FETCH REMAINING COUNT (1'S COMP & BYTE) 
      SZA           SKIP COMP IF ZERO 
      CMA           MAKE IT POSITIVE
      CLE,ERA       MAKE IT WORDS 
      CMA,INA       SET COUNT NEG 
      ADA ECH       ADD TO ORGINIAL COUNT 
      CLE,ELA       MAKE IT BYTES 
      SSB,RSS       IF IT WAS HIGH BYTE 
      INA           BUMP CHAR COUNT 
      CMA,INA       SET IT NEG FOR CHAR COUNT 
      STA ECH       STORE PRINT LENGHT
      JSB ECHO      GO PRINT IT 
      LDA .10 
      STA .E.R
      JMP AB.FM 
* 
* 
HBTE  OCT 177400
* 
      SKP 
* 
* 
EX!   NOP 
* 
      JSB CLO   
      DEF INDCB      CLOSE THE INPUT FILE 
* 
* 
EXR1  JSB WRITF 
      DEF EXR3
      DEF LODCB 
      DEF .E.R
      DEF ENDM       ISSUE END FMGR MESSAGE 
      DEF .5         DON'T NEED TO CLOSE LOG AS IT MUST BE LU 
* 
EXR3  JSB CLOAL     CLOSE ALL LIBRARY DCBS
EXR4  JSB EXEC
      DEF *+2 
      DEF .6        TERMINATE 
* 
* 
* 
CLOAL NOP           THIS SUBROUTIONE CLOSES ALL LIBRARY DCBS
      JSB CLO 
      DEF IDCB1 
      JSB CLO 
      DEF IDCB2 
      JSB CLO 
      DEF IDCB3 
      JMP CLOAL,I 
* 
ENDM  ASC 5,$END FMGR 
* 
* 
* 
* 
      SPC 10
* 
LLTMP NOP 
LLST  NOP 
LLER  NOP 
* 
LL!   NOP 
      JSB .ENTR 
      DEF LLTMP 
      ISZ LLST
      JSB OPEN. 
      DEF BKLL
      DEF IDCB1 
      DEF LLST,I
      DEF N.OPL 
      DEF B411
* 
BKLL  LDA LLST,I
      STA TMP.
      ISZ LLST
      DLD LLST,I
      DST TMP.2 
      JSB .DRCT 
      DEF N.OPL      ASSURE DIRECT ADDRESS
      LDB A,I 
      STB SC.L
      INA 
      LDB A,I 
      STB CRLU
      CLA 
      STA LLER,I
      JMP LL!,I 
* 
B411  OCT 411 
OPOPT EQU B411
* 
* 
B100  OCT 100 
BFAD  NOP 
TIT   ASC 3,TITLE>
      OCT 37137 
* 
* 
********WRITE EOF************ 
* 
* 
CODE  NOP           USE FIRST PARM AS TEMP
LST   NOP 
ER    NOP 
* 
* 
* 
WE!   NOP 
      JSB .ENTR 
      DEF CODE
* 
      LDA LST,I     FETCH FIRST PARM TYPE FLAG
      CPA .1        MUST BE NUMERIC 
      CLA,RSS       CLEAR ERROR CODE
      JMP ERR56     BAD PARAMETER 
* 
      STA ER,I
* 
      ISZ LST       ADVANCE TO LU 
      LDA LST,I     AND FETCH IT
      SSA           ALLOW POS 
      CMA,INA       AND NEG.
* 
      IOR B100      INCLUDE EOF CONTROL 
      STA CODE      SAVE FOR CONTROL REQUEST
* 
      JSB EXEC
      DEF WE1 
      DEF CNTRL     DON'T ALLOW ABORT 
      DEF CODE
WE1   RSS           BAD LU
      JMP WE!,I     ALL DONE EXIT 
* 
      LDA N17       BAD LU
      STA ER,I      SET IT
      JMP WE!,I     GET OUT 
* 
* 
CNTRL OCT 100003
N17   DEC -17 
      SPC 5 
* 
******FETCH DIRECT ADDR******** 
* 
.ADDR NOP 
      RAL,CLE,ERA 
      SEZ 
      LDA A,I 
      JMP .ADDR,I 
* 
ERR56 LDA .56       FETCH ERROR CODE
      JMP ELOG.     GO ISSUE MESSAGE
* 
.56   DEC 56
* 
* 
* 
*********WRITE DIRECTORY ENTRY************* 
* 
* 
* 
B77   OCT 77
.77   DEC 77
LU    NOP           USE FIRST AS TEMP 
LSTD  NOP           ADDRESS OF PARSE RESULT FIELD 
ER.   NOP 
* 
* 
* 
WD!   NOP 
      JSB .ENTR 
      DEF LU
* 
      ISZ LSTD      ADVANCE TO NAME PARM
      EXT NAM.. 
      JSB NAM..      GO SEE IF VALID NAME 
      DEF RTN.. 
      DEF LSTD,I
* 
* 
RTN.. STA ER.,I     SET RETURN CODE(-15 IF BAD NAME)
      SZA           IF ZERO,OK
      JMP WD!,I     NOPE--BAD NAME
* 
*    LEGAL FILE NAME
* 
****BOOT UP SHOULD FETCH DIRECT ADDRS 
* 
      LDA O.BFA 
      JSB .ADDR     FETCH DIRECT ADDR 
      STA BFAD      SET ADDRESS OF OUTPUT BUFFER
      LDB BLNK      FETCH ASCII BLANKS
      STB A,I       SET INTO FIRST WORD OF OUTPUT BUFFER
      STA B 
      INB           SET (A)+1 AS DEST OF MOVE 
* 
      JSB .MVW       BLANK OUT -OUTPUT BUFFER 
      DEF .77 
      NOP 
* 
* 
      LDA LSTD,I    FETCH FIRST 2 CHARS 
      STA BFAD,I    SET INTO BUFFER 
      ISZ BFAD      BUMP DEST ADDR
      ISZ LSTD      BUMP SOURCE ADDR
      DLD LSTD,I    FETCH REST OF NAME
      DST BFAD,I    SET REST OF NAME
* 
      LDB .2        ADVANCE TO
      ADB LSTD           LU PARM
      LDA B,I       FETCH PARM TYPE FLAG
      CPA .3        DON'T ALLOW 
      JMP ERR56     BAD PARAMETER 
* 
      INB 
      LDA B,I       FETCH LU
      SZA,RSS       DEFAULT TO THE LEFT CTU 
      LDA .4
      SSA           ALLOW POS 
      CMA,INA            AND NEG LU'S 
      STA LU        SAVE FOR EXEC CALL
* 
      ADB .4        ADVANCE TO TYPE WORD
      LDA B,I 
      AND B377      ISOLATE 2ND CHAR
      CPA ZS        ASCII SOURCE? 
      JMP HERE      YEP 
      CPA ZR        BINARY RELOCATABLE? 
      JMP HERE      YEP 
      CPA ZA        BINARY ABS? 
      JMP HERE      YEP 
      CPA ZD        BINARY DATA?
      JMP HERE      YEP 
      CPA ZC        AMD CASSETTE? 
      JMP HERE      YEP 
      LDB .56       PRE-SET ERROR CODE
      STB ER.,I       FOR BAD PARM
      SZA           DEFAULT?
      JMP WD!,I     NOPE--BAD INPUT 
* 
      LDA ZS        DEFAULT = SOURCE
HERE  LDB BFAD      FETCH OUTPUT BUFFER ADDRESS 
      ADB .2        ADVANCE TO TYPE ADDRESS 
      IOR HBLK      ADD A BLANK CHAR TO LEFT BYTE 
      STA B,I       AND SET TYPE INTO BUFFER
      ADB .2        ADVANCE TO COMMENTS FIELD 
      STB BFAD      AND SAVE IT'S ADDRESS 
* 
* 
*     ISSUE MESSAGE TO LOG DEVICE 
*     REQUESTING COMMENTS 
* 
      JSB WRITF 
      DEF RTNT
      DEF LODCB 
      DEF .E.R
      DEF TIT 
      DEF .4
* 
RTNT  JSB READF 
      DEF RTNR
      DEF IN$,I 
      DEF ER.,I 
      DEF BFAD,I
      DEF .36 
      DEF LEN 
* 
RTNR  SZA 
      JMP WD!,I     IF ANY ERRORS EXIT
* 
      LDA LEN       FETCH COMMENTS LEGNTH 
      ADA .5        INCLUDE DIRECTORY INFORMATION 
      STA LEN        SET WRITE LEGNTH 
* 
* 
* 
      JSB EXEC
      DEF WRT1
      DEF .2
      DEF LU
      DEF O.BUF 
      DEF LEN 
* 
WRT1  JMP WD!,I 
* 
* 
.2    OCT 2 
.3    OCT 3 
.4    OCT 4 
.5    OCT 5 
.6    OCT 6 
.10   DEC 10
.36   DEC 36
HBLK  OCT 20000 
ZS    OCT 123 
ZA    OCT 101 
ZD    OCT 104 
ZC    OCT 103 
ZR    OCT 122 
* 
* 
* 
      SPC 10
TCNT  NOP 
TLST  NOP 
TER   NOP 
* 
TR!   NOP 
      JSB .ENTR 
      DEF TCNT
      ISZ TLST      ADVANCE TO NAME/LU
* 
      LDA TLST,I    FETCH IT
      SZA,RSS 
* 
*   TRANSFER BACK TO THE LOG DEVICE 
* 
      JMP ERMS
* 
* 
OPITR JSB OPEN.     GO OPEN NEW TRANSFER FILE 
      DEF BACK
XX    DEF INDCB 
      DEF TLST,I
      DEF N.OPL 
      DEF OPOPT 
* 
BACK  LDA XX         FORCE INPUT DCB TO BE USED 
      STA IN$ 
      ADA .3        ADVANCE TO LU WORD
      LDA A,I       FETCH IT
      JSB DTTY
      STA INT.      SET INTERACTIVE FLAG
      JMP TR!,I 
* 
      SKP 
* 
* 
* 
*   RE.C SHOULD DO THE FOLLOWING: 
*    1- DETERMINE IF INPUT FROM INTERACTIVE DEVICE
*       IF SO, PROMPT ON THAT DEVICE
*    2- READ FROM INPUT FILE/DEVICE 
*    3- IF ECHO REQUIRED-DO IT TO LOG 
* 
* 
*  GLOBALS
* 
* ECH CMND INPUT LEGNTH 
* INT.              INTERACTIVE FLAG
* CAM.I             CMND INPUT BUFFER 
* INDCB             INPUT DCB 
* 
.1    OCT 1 
* 
RE.C  NOP 
      LDA INT.      IF NOT INTERACTIVE
      SZA,RSS 
      JMP WR.1R     DON'T PROMPT
* 
      JSB WRITF 
       DEF WR.1R
       DEF IN$,I
       DEF .E.R 
       DEF PRM
       DEF .1 
* 
WR.1R JSB READF 
       DEF WR.2R
       DEF IN$,I
       DEF .E.R 
       DEF CAM.I
       DEF .36
       DEF ECH       LEGNTH PARM
* 
WR.2R SSA           IF ANY ERROR
      JMP WR.1R     RETRY 
* 
* 
      LDA ECH       IF EOF
      CPA N1        TRANSFER TO 
      JMP ERMS      LOG DEVICE
* 
* 
*   DO ECHO IF IN FROM NON INT WORK 
* 
* 
      LDA INT.      FETCH INTERACTIVE FLAG
      SZA,RSS 
      JSB ECHO      GO DO ECHO
      JMP RE.C,I     IT'S INTERACTIVE SO EXIT 
* 
      SPC 5 
ECHO  NOP 
      JSB WRITF 
      DEF ECRT
      DEF LODCB 
      DEF .E.R
      DEF CAM.I 
      DEF ECH 
ECRT  JMP ECHO,I
IN$   NOP 
PRM   OCT 35137     BACK SPACE AND BACK ARROW 
* 
      SKP 
                                                                                                                                                                                                                  