ASMB,R,Q,C
      HED FMGR - RTE FILE MANAGER MAIN
*     NAME:   FMGR
*     SOURCE: 92067-18186 
*     RELOC:  92067-16185 
*     PGMR:   G.A.A.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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.       *
*  ***************************************************************
* 
*  MODIFICATION RECORD: 
* 
*      DATE     REASON
*  1) 780227    TO ADD GLOBALS 8P,9P FOR SESSION MONITOR (BL) 
*  2) 780302    TO ADD COMMAND STACKING CAPABILITY (DLB)
* 
      NAM FMGR,3,90 92067-16185 REV.2026 800428 
      EXT CLOS.,EXEC,MSS. 
      ENT IFLG.,CAD.,FM.AB,D.,CUSE.,PARS. 
      ENT SEG.R,P.SEG,INI1.,INI2.,I.BUF,O.BUF 
      ENT N.OPL,P.RAM,TTY.,NO.RD,NOCM.,ACTV.
      ENT J.REC,J.NAM,G0..,JRN.,.IDAD 
      ENT TL.P,TM.VL,L.SEG,GT.JB,.R.E.,SCR. 
      ENT S.TTY,S.CAP,M3FLG,CLOPN 
      SUP 
*  NEW CODE ADDED 780302 (DLB)
      ENT TPSK.,NXTK.,EDSK.,CRSK. 
      SPC 1 
TPSK. DEF BUFFR 
NXTK. DEF MESS2 
CRSK. DEF BUFFR 
EDSK. DEF ENDBF 
BUFFR BSS 140 
      ORG BUFFR 
      DEC 1 
      ASC 1,** YOU MUST EXECUTE A COMMAND BEFORE A :EC COMMAND
MESS2 OCT 400 
      ORR 
ENDBF EQU *-1 
*  END OF NEW CODE ADDED 780302 (DLB) 
      SPC 3 
O.BUF BSS 144       GENERAL OUTPUT DCB
I.BUF BSS 144       GENERAL INPUT DCB 
      ORG I.BUF     PUT INITIALIZE CODE IN DCB
FMGR  LDA XEQT      GET THE 
      ADA .12       FIRST TWO 
      LDA A,I       CHARACTERS  OF PGMS 
      STA SEG       NAME AND SET FOR SEGMENT CALLS. 
      JMP ITCAL     GO LOAD THE INITIALIZE SEGMENT
INI1. JSB MSS.      INIT SEGMENT COMES HERE IF
      DEF *+2        SYSTEM INITIALIZE IS NEEDED
      DEF IFLG.       SEND  FMGR 00X (5 OR 3) MESSAGE 
      LDA AS1BL     SET TO LOAD 
      JMP PSEGC     AND LOAD THE PARSE SEGMENT
INI2. CPB ASIN      SEGMENT  RETURNS HERE AFTER 
      JMP SEGLD     READING AND PARSING-EXPECTED INPUT JUMP 
      CPB AS??      WAS ??  INPUT?
      JMP CAL??     YES -GO SET UP AND CALL ?? ROUTINE
      JSB MSS.      NO! ILLEGAL RESPONSE
      DEF *+2        SEND  FMGR 004 
      DEF .4
      JMP INI1.     TRY AGAIN 
CAL?? LDA .4        ?? CALL FROM INIT-SET MS TO 4 
      STA MS          TO FORCE FMGR 004 MESSAGE 
      JMP SEGLD     GO TO GENERAL  CALL ROUTINE 
      SPC 1 
INIT2 LDA MS        HERE AFTER  INIT CALL ON IN 
      SZA            SKIP IF  OK
      JMP INI1.     NO - TRY AGAIN
      SPC 1 
ITCAL CLA           SET UP TO CALL THE INITIALIZE 
      STA CAD.      ROUTINE 
      LDA AS2BL     FIRST ROUTINE IN SEGMENT TWO
      JMP PSEGC     GO LOAD THE SEGMENT AND CALL IT 
      SPC 1 
GT.JB CLA 
      STA CAD.
      LDA AS7BL 
      JMP PSEGC 
      SPC 1 
AS??  ASC 1,??
ASIN  ASC 1,IN
AS2BL ASC 1,2 
AS7BL ASC 1,7 
.4    OCT 4 
.12   DEC 12
TEST  EQU I.BUF+128-* MAKE SURE ABOVE CODE IS IN O.BUF
      ORR 
FM.AB JSB CLOS.     COMMAND LOOP - ENTRY
      DEF *+2           CLOSE 
      DEF I.BUF         INPUT FILE
      JSB CLOS.         CLOSE 
      DEF *+2 
      DEF O.BUF         OUTPUT FILE 
INIT0 LDA AS1BL     INITIALIZE SEGMENT CALL ENTRY POINT 
      CPA CUSE.         IF PARSE SEGMENT STILL IN 
      JMP P.SEG         CORE THEN SKIP SEGMENT CALL 
PSEGC STA CUSE.         ELSE SET UP 
SEGLD JSB EXEC          AND 
L.SEG EQU SEGLD 
      DEF *+3           LOAD
      DEF .8            PARSE 
      DEF SEG           SEGMENT 
P.SEG LDA J.REC         IF NO MORE JOBS,
      SSA               TERMINATE.
      JMP TERM
P.SG1 CLA           NORMAL PARSE SEGMENT RETURN POINT 
      STA MS            CLEAR THE ERROR FLAG
      JSB PARS.,I       CALL TO READ & PARSE A COMMAND
      DEF *+1 
      SEZ,RSS           E=I = SEGMENT ABSENT
      JMP CALLR         E=0 = ROUTINE IN CORE 
      JMP SEGLD         SEGMENT ABSENT SO GO LOAD 
SEG.R ADA CAD.      ALL SEGMENTS OTHER THAN PARSE 
      LDA A,I 
      STA CAD.       RETURN HERE WITH A= DEF TABLE ADDRESS
CALLR JSB CAD.,I        CALL THE ROUTINE
      DEF *+4          PASSING
      DEF NOCM.         THE NUMBER OF PARAMETERS
      DEF P.RAM         THE TABLE ADDRESS 
      DEF MS            THE ERROR FLAG ADDRESS
      LDA MS            IF THERE IS NO
      SZA,RSS           ERROR THEN
      JMP IFTST         JUMP
      JSB MSS.          ELSE
      DEF *+2            PRINT
      DEF MS            FMGR MS 
IFTST LDA IFLG.         IF INITIALIZE ROUTINE 
      SZA               IN CONTROL
      JMP INIT2         GO CONTINUE SYSTEM INITIALIZATION 
      JMP FM.AB         ELSE  READ  THE  NEXT COMMAND 
TERM  JSB EXEC          TERMINATE 
      DEF *+2 
      DEF .6
      SPC 2 
.6    DEC 6 
MS    NOP 
.IDAD NOP 
IFLG. NOP 
M3FLG NOP 
CLOPN NOP 
NO.RD NOP 
JRN.  BSS 1 
ACTV. DEC 0 
J.REC DEC 0 
J.NAM BSS 3 
SCR.  BSS 1 
* 
*  DO NOT REPOSITION THE FOLLOWING FOUR 
*  ARRAYS!  THE PARSE ROUTINE DEPENDS ON IT.
* 
TTY.  OCT 1 
N.OPL BSS 10
P.RAM BSS 64
NOCM. NOP 
CAD.  NOP 
PARS. NOP 
      BSS 8         0S AND 1S 
G0..  BSS 40        0G THROUGH 9G 
      DEC 3         10G 
      BSS 5         1P THROUGH 5P 
.R.E. BSS 2         6P AND 7P 
S.TTY BSS 1         8P                *780227*
S.CAP BSS 1         9P                *780227*
.8    DEC 8 
ENDMS ASC 3, $END 
SEG   ASC 2,FMGR
CUSE. ASC 1,
AS1BL ASC 1,1 
D.    ASC 3,D.RTR 
TL.P  OCT 0,0 
TM.VL OCT 0,0 
A     EQU 0 
B     EQU 1 
XEQT  EQU 1717B 
      SPC 3 
      ORG *         LENGTH OF ROUTINE 
      END FMGR
                                                                                                                                                                      