ASMB,R,L,C
*     NAME:   DB#PC 
*     SOURCE: 91740-18056 
*     RELOC:  91740-16056 
*     PGMR:   MIKE SCHOENDORF 
* 
*  ***************************************************************
*  * (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 DB#PC,8 91740-16056 REV 1740 770920 
* 
* 
* 
************************************************************* 
* 
* 
* 
* THIS ROUTINE DETERMINES THE BOUNDARIES OF MEMORY THAT IS
*  AVAILABLE FOR USE BY PROGRAMS FOR BUFFERS, TEMPORARY STORAGE 
*  ETC. 
* 
*    THE CALLING SEQUENCE IS: 
* 
*    CALL DB#PC(LIST,FWAM,LWAM) 
* 
*    WHERE: 
* 
*          LIST    =     A COUNT OF NAMES OF SEGMENTS OR PROGRAMS 
*                        FOLLOWED BY THE NAMES IN ASCII WITH THREE
*                        16 BIT WORDS FOR EACH NAME.
* 
*          FWAM    =     THIS IS THE FIRST AVAILABLE WORD OF MEMORY 
*                        THAT MAY BE USED BY A PROGRAM. IF THE LIST 
*                        IS SEGMENT NAMES THEN IT IS FIRST AVAIL- 
*                        ABLE WORD PAST THE LONGEST SEGMENT.
* 
*          LWAM    =     THE LAST AVAILABLE WORD OF USER MEMORY.
* 
*          NOTE: IF ANY OF THE NAMES IN THE LIST ARE NOT FOUND
*          THIS ROUTINE WILL EXIT AND INDICATE AN ERROR BY SETTING
*          FWAM = 0.
* 
* 
*    EXAMPLE OF 'LIST'
* 
*                   LIST  DEC 3 
*                         ASC 3,SEGM1 
*                         ASC 3,SEGM2 
*                         ASC 3,SEGM3 
* 
* 
* 
      ENT DB#PC 
* 
      EXT .ENTR 
* 
* 
* 
LIST  NOP 
FWAM  NOP 
LWAM  NOP 
* 
DB#PC NOP 
      JSB .ENTR 
      DEF LIST
* 
* 
      CLA           INITIALIZE
      STA FWAM,I      FWAM TO ZERO
      LDA LIST,I    SET UP
      CMA,INA 
      STA TEMP1       SEGMENT COUNTER 
      LDA LIST      SET UP
      INA             ADDRESS 
      STA SGTBA         NAME ADDRESS
NXTSG CLA           INITIALIZE KEYWORD PNTR 
      STA TEMP2       TO START OF KEYWORD TABLE 
CKSEG LDA TEMP1     GET SEGMENT COUNT 
      ADA LIST,I   FORM POINTER 
      MPY .3          TO SEGMENT'S ASCII
      ADA SGTBA         NAME AND SAVE IT
      STA TEMP3 
      LDB 1657B     GET START OF KEYWORD TABLE
      ADB TEMP2       FORM PTR TO I.D. ENTRY
      LDB 1,I       GET ADDRESS OF I.D. ENTRY 
      SZB,RSS        END OF TABLE?
      JMP ERROR       YES - ERROR - EXIT
      ADB .12       FORM PNTR TO NAME(1)
      LDA 1,I        GET NAME(1)
      CPA TEMP3,I     SAME AS SEGMENT?
      INB,RSS          YES, MOVE PNTR TO NAME(2)
      JMP NXTEN         NO, INDEX TO NEXT ENTRY 
      LDA 1,I       GET NAME(2) 
      ISZ TEMP3      MOVE NAME POINTER
      CPA TEMP3,I     SAME AS SEGMENT?
      INB,RSS          YES, MOVE PNTR TO NAME(3)
      JMP NXTEN         NO, INDEX TO NEXT ENTRY 
      LDA 1,I       GET NAME(3) 
      AND M256       ISOLATE UPPER CHAR 
      IOR B40         MERGE IN ASCII BLANK
      ISZ TEMP3     MOVE NAME POINTER 
      CPA TEMP3,I    SAME AS SEGMENT? 
      JMP *+3         YES, GO CHECK ADDRESSES 
NXTEN ISZ TEMP2     MOVE PNTR TO NEXT I.D. ENTRY
      JMP CKSEG      -GO CHECK I.D. ENTRY 
* 
      LDA 1,I       TEST FOR SHORT ID SEGMENT 
      STA TYPE
      AND B20 
      ADB .2
      SZA,RSS       SHORT ID SEGMENT? 
      ADB .7        NO! 
      LDA 1,I       GET ADDRESS OF LAST WORD
      INA             INCREMENT TO GET NEW FWAM 
      LDB FWAM,I    GET CURRENT FWAM
      CMB,INB 
      ADB 0          IS IT GREATER THAN 
      SSB,RSS         NEW FWAM? 
      STA FWAM,I
      ISZ TEMP1     INDEX SEGMENT CNTR, IS IT = 0?
      JMP NXTSG      NO, LOCATE NEXT SEGMENT
* 
EXIT  LDA TYPE      GET WHERE PROGRAM RESIDES 
      AND B17 
      CPA .2        FOREGROUND? 
      JMP FG        YES 
      LDA 1777B     BACKGROUND (LWA MEMORY) 
      JMP BLEN
FG    LDA 1751B     LWA+1 MEMORY
      ADA N1
BLEN  STA LWAM,I    LAST AVAILABLE WORD 
      JMP DB#PC,I   RETURN
* 
ERROR CLA           SET FWAM = 0
      STA FWAM,I      FOR ERROR 
      JMP EXIT
* 
* 
N1    DEC -1
.2    DEC 2 
.3    DEC 3 
.7    DEC 7 
.12   DEC 12
B17   OCT 17
B20   OCT 20
B40   OCT 40
M256  OCT 177400
TEMP1 BSS 1 
TEMP2 BSS 1 
TEMP3 BSS 1 
TYPE  NOP 
SGTBA BSS 1 
* 
      END 
                