ASMB,R,L,C
      HED <<           FILE MANAGER FOR RTE-L              >> 
*     NAME:   FMGR
*     SOURCE: 92070-18310 
*     RELOC:  92070-16310 
*     PGMR:   M.L.K.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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,90  92070-16310  REV.2014  800407
* 
* 
*  GLOBAL DATA
* 
      ENT BUF.,CAM.I,CAM.O,I.BUF,O.BUF
      ENT CAMS.,P.TR
      ENT .IDAD,CUSE.,PARS. 
      ENT TMP.
      ENT C.BUF,C.BUX,C.DLM 
      ENT INT.,N.OPL,P.RAM,P.CNT,CAD.,SCR.,ECH,ECHF.,NO.RD
      ENT G0..,P.6,P.7,SVCOD,XPAND,.E.R 
      ENT %IDA,%IDNM,%IDSZ,%FWBG,%SWLU,%TMP1
* 
*  GLOBAL ENTRY POINTS
* 
      ENT FM.AB,FMGR,SEG.R,PAR.R
* 
*  EXTERNAL SUBROUTINES 
* 
      EXT CLOSE,EXEC,MSS.,OPEN,RMPAR
      EXT $IDA,$ID#,$IDSZ,$FWBG,$SWLU,$TMP1,SAVST 
* 
*     EXTERNAL VARIBLES 
* 
*     NONE
      SUP 
* 
*     LOADR COMMANDS
* 
      LOD 2,SG,7    7 SEGMENTS
      SKP 
* 
*                   FILE MANAGER GLOBAL DECLARATIONS
* 
* 
*     GLOBAL DCB'S AND BUFFERS
* 
O.BUF BSS 144       GENERAL OUTPUT DCB
I.BUF BSS 144       GENERAL INPUT  DCB
CAM.I BSS 144       COMMAND INPUT  DCB
CAM.O BSS 1         LOG LU
BUF.  BSS 129       GENERAL DISC BUFFER 
* 
*     TRANSFER STACK AND POINTER
* 
CAMS. BSS 61        TRANSFER FILE STACK (6 WORDS PER ENTRY) 
P.TR  DEF CAMS.     POINTER TO POSITION IN TRANSFER STACK 
* 
*     SEGMENT CONTROL 
* 
SEG   ASC 2,FMGR    BEGINNING OF SEGMENT NAME 
CUSE. ASC 1,2       CURRENT SEGMENT (INITIALLY POINTS TO IN.IT) 
.IDAD NOP           ID SEGMENT ADDRESS OF CURRENT SEGMENT 
PARS. NOP           ADDRESS OF READ AND PARSE SUBROUTINE.SET BY SEG #1
PARSG ASC 1,1       SEGMENT CONTAINING THE PARSER 
INSEG ASC 1,2       SEGMENT CONTAINING IN.IT
QUEST ASC 1,??      ERROR EXPANSION COMMAND 
* 
*     LIST NAMR BUFFER (ORDERED)
* 
TMP.  NOP           CHARS #1 AND #2 OF LIST NAMR
TMP.2 NOP           CHARS #3 AND #4 OF LIST NAMR
TMP.3 NOP           CHARS #5 AND #6 OF LIST NAMR
SC.L  NOP           SECURITY CODE OF LIST NAMR
CR.L  NOP           CARTRIDGE/LU OF LIST NAMR 
* 
*     COMMAND INPUT BUFFER (ORDERED)
* 
C.BUX ASC 1, :      CONTAINS A COLON FOR ECHO 
C.BUF BSS 40        INPUT BUFFER
C.DLM NOP           POINTER TO DELIMITER FOLLOWING COMMAND
* 
*     ARRAYS SET AND USED DURING PARSING (ORDERED)
* 
INT.  OCT 1         INPUT NAMR INTERACTIVE FLAG  0=NOT INT  #0 = INTERACTIVE
N.OPL BSS 10        SUBPARAMETER LIST FOR 1ST TWO PARAMETERS
P.RAM BSS 64        PARSED PARAMETER LIST. 4 WORDS PER PARAMETER
P.CNT NOP           PARAMETER COUNT 
CAD.  NOP           COMMAND ADDRESS FROM C.TAB
SCR.  NOP           3RD AND 4TH CHARACTERS OF COMMAND 
ECH   NOP           WORD COUNT FOR ECHO 
ECHF. NOP           ECHO FLAG  0= NO ECHO  #0 = NEEDS ECHO
NO.RD NOP           NO READ FLAG  0= NO READ  #0 = MUST READ NEXT COMND 
      SKP 
* 
*     GLOBALS AND SEVERITY CODE  (ORDERED)
* 
G0..  BSS 40        0G THRU 9G
      DEC 3         10G (ALWAYS ASCII)
      BSS 5         1P THRU 5P
P.6   NOP           6P = LAST ERROR CODE
P.7   NOP           7P = USER'S COPY OF SEVERITY CODE 
SVCOD NOP           FMGR'S COPY OF SEVERITY CODE
XPAND NOP           ERROR EXPANSION FLAG
.E.R  NOP           INTERNAL GLOBAL ERROR 
* 
*     SYSTEM ENTRY POINTS FOR SPL ROUTINES
* 
%IDA  DEF $IDA
%IDNM DEF $ID#
%IDSZ DEF $IDSZ 
%FWBG DEF $FWBG 
%SWLU DEF $SWLU 
%TMP1 DEF $TMP1 
      SKP 
* 
FMGR  NOP 
* 
      JSB RMPAR     GET SCHEDULING PARAMETERS 
      DEF *+2 
      DEF P.RAM     STORE IN P.RAM TEMPORARILY
      JSB SAVST     SAVE THE RUN STRING 
      DEF *+1       UNTIL IN.IT 
* 
      LDA INSEG     GET IN.IT COMMAND ADDRESS 
      STA CUSE.     AND STORE TO LOAD SEGMENT 
      CLA           SET CAD. TO 0 TO INDICATE 
      STA CAD.        THE FIRST ROUTINE IN THE SEGMENT
      JMP SEG.L     GO EXECUTE IN.IT
      SKP 
* 
*                 COMMAND LOOP
* 
*  1. LOAD THE PARSE SEGMENT
*  2. READ AND PARSE THE COMMAND
*  3. LOAD SEGMENT IF NECESSARY 
*  4. EXECUTE IT
* 
NXCMD LDA PARSG     GET PARSE SEGMENT NUMBER
      CPA CUSE.     IS THIS SEGMENT IN MEMORY?
      JMP PAR.R       YES,
* 
      STA CUSE.       NO, SAVE IN CURRENT SEGMENT 
SEG.L JSB EXEC      LOAD THE SEGMENT
      DEF *+3 
      DEF .8
      DEF SEG 
PAR.R JSB PARS.,I   PARSE SEGMENT LOAD RETURNS HERE 
      DEF *+1       CALL READ AND PARSE SUBROUTINE
      SEZ,RSS       TEST E BIT FOR SEGMENT
      JMP EXQUT     E=0, SEGMENT IN MEMORY
      JMP SEG.L     E=1, GO LOAD SEGMENT
* 
SEG.R ADA CAD.      SEGMENT RETURN POINT. A= ADDRESS OF SEG TABLE 
      LDA A,I       GET ROUTINE ADDRESS 
      STA CAD.      STORE IN COMMAND ADDRESS
* 
EXQUT CLA           CLEAR OUT 
      STA ER          ERROR 
      STA .E.R          WORDS 
* 
      JSB CAD.,I    CALL ACTION ROUTINE 
      DEF CALR
      DEF P.CNT 
      DEF P.RAM 
      DEF ER
* 
CALR  LDA ER        ANY ERRORS? 
      SZA,RSS 
      JMP FM.AB       NO
* 
      JSB MSS.        YES, ISSUE ERROR
      DEF *+2 
      DEF ER
* 
FM.AB LDA P.6       ERROR CODE SET? 
      SZA,RSS 
      JMP KLOSE      NO, CLOSE FILES
      LDA XPAND     TEST ERROR EXPANSION FLAG 
      SZA,RSS       IF 0, THEN DON'T EXPAND ERROR MESSAGE 
      JMP KLOSE       JUST CONTINUE LOOP
      LDA NO.RD     GET NO READ FLAG. IS SOMEONE
      SZA           TRANSFERING TO ANOTHER SUBROUTINE?
      JMP KLOSE     YES, DON'T INTERFERE
      CLA,INA       NOPE, SET COMMAND 
      STA ECH       LENGTH TO 1 
      CCA           SET NO READ FLAG
      STA NO.RD     TO EXECUTE COMMAND IN C.BUF 
      LDA QUEST     GET COMMAND TO EXPAND ERROR 
      STA C.BUF     AND PUT IN COMMAND BUFFER 
* 
KLOSE JSB CLOSE     CLOSE 
      DEF *+2         INPUT 
      DEF I.BUF         FILE
      JSB CLOSE     CLOSE 
      DEF *+2         OUTPUT
      DEF O.BUF       FILE
      JMP NXCMD     EXECUTE COMMAND LOOP
      SKP 
ER    NOP           ERROR PARAMETER PASSED TO ACTION ROUTINES 
.8    DEC 8 
A     EQU 0 
B     EQU 1 
LEN EQU * 
* 
      END FMGR
                                                                                                                                                                                                          