COMSSFS 
COMMON
          CTEXT  COMSSFS - SFS EQUIVALENCE AND TABLE DEFINITIONS. 
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       SFS - SPECIAL SYSTEM FILE MACROS AND EQUIVALENCES.
*         D. A. HIVELEY.     72/05/23.
          SPACE  4
***       COMSSFS PROVIDES COMMUNICATION BETWEEN SFS AND A
*         PROCESSOR PROGRAM.
* 
*         THE FOLLOWING MACROS AND EQUIVALENCES ARE INTENDED TO 
*         INITIALIZE DIRECT CELLS AND TABLES IN THE SUPERVISOR
*         PROGRAM (*OV* = 1).  THESE ADDRESSES ARE PASSED TO THE
*         FUNCTION PROCESSOR PROGRAM WHEN IT MAKES THE MACRO CALL.
*         THE PROCESSOR PROGRAM MUST DEFINE *OV* = 0. 
* 
*         THE PROCESSOR PROGRAM SHOULD CALL *IDIRC* TO SET UP THE 
*         EQUATES TO THE DIRECT CELLS. *IDIRC* MUST BE CALLED 
*         BEFORE *ITAB*.
*         *ITAB* SHOULD THEN BE CALLED TO SET UP THE EQUATES FOR
*         THE TABLE POINTERS. 
* 
*         SFS HANDLES PROCESSING OF ALL DIRECTORY LEVEL BLOCKS, 
*         HOWEVER, THE DATA LEVEL BLOCKS MUST BE HANDLED BY THE 
*         PROCESSOR.  THE TABLE POINTERS FOR THE DATA LEVEL BLOCK 
*         ARE ALLOCATED WITH THE REST THOUGH. 
* 
*         FOR EXAMPLE, IF THE PROCESSOR WORKS WITH 3 LEVELS OF
*         TABLE, SFS WILL PROCESS 0,1 AND 2 LEVEL BLOCKS AND THE
*         PROCESSOR PROGRAM MUST HANDLE THE LAST LEVEL(3) BLOCK.
 BITCON   SPACE  4
***       BITCON - GENERATE BIT STRING FOR SPECIAL CHARACTERS.
* 
*         BITCON GENERATES A CONSTANT WITH BIT POSITIONS SET
*         WHICH CORRESPOND WITH THE SPECIAL CHARACTERS SUPPLIED 
*         BIASED BY (-45B). 
* 
* NAME    BITCON P
*                *P* = SERIES OF SPECIAL CHARACTERS SEPARATED BY COMMAS 
*                      AND DELIMITED BY PARENTHESIS.
  
  
          PURGMAC  BITCON 
          MACRO  BITCON,NAME,P
          LOCAL  A,B
 A        MICRO  1,,
          IRP    P
 B        DECMIC 1R_P-1R+ 
 A        MICRO  1,, "A"+1S"B"
          IRP 
 NAME     CON    "A"
          ENDM
 INDEX    SPACE  4
***       INDEX - INDEXED TABLE ENTRY GENERATION. 
* 
*         INDEX GENERATES TABLES WHICH ARE TO BE INDEXED BY VALUES
*         WHICH MAY CHANGE DUE TO ASSEMBLY MODES OR OPTIONS.
* 
*         FIRST CALL - SET START OF TABLE AND GENERATE DEFAULT ENTRIES. 
* 
* NAME    INDEX  MACRO,LENGTH,ADDRESS 
*         ENTRY  *NAME* = NAME OF TABLE.
*                *LENGTH* = TABLE LENGTH. 
*                *MACRO* = NAME OF MACRO WHICH GENERATES TABLE ENTRY. 
*                *ADDRESS* = ADDRESS FIELD OF ENTRY GENERATION
*                            INSTRUCTION.  ADDRESS MUST BE EXPRESSED AS 
*                            A DELIMITED CHARACTER STRING TO ALLOW
*                            ALMOST ANYTHING IN AN ADDRESS FIELD. 
*         EXIT   *.1* = MICRO OF *MACRO*. 
*                *NAME* = BASE ADDRESS OF TABLE.
*                *NAMEL* = LENGTH OF TABLE. 
* 
*         TABLE ENTRY GENERATION -
* 
* NAME    INDEX  ,IND,ADDRESS 
*         ENTRY  *NAME* = NAME OF TABLE ENTRY.
*                *IND* = INDEX AT WHICH ENTRY IS TO PLACED. 
*                *ADDRESS* = ADDRESS FIELD OF ENTRY GENERATION
*                            INSTRUCTION. 
*         EXIT   *NAME* = ADDRESS OF ENTRY. 
  
  
          PURGMAC  INDEX
          MACRO  INDEX,NAME,MAC,IND,ADD 
          IFC    NE,*MAC**
 .1       MICRO  1,, MAC
 .2       MICRO  1,,ADD 
 NAME     ".1"   ".2" 
 .1       SET NAME
 .4       SET    IND
          DUP    IND-1,1
          ".1"   ".2" 
          ELSE
 .2       MICRO  1,,ADD 
          ORG    .1+IND 
          LOC    IND
          ".1"   ".2" 
          ORG    .1+IND 
 NAME     BSS    0
          ORG    .1+.4
          ENDIF 
          ENDM
 INENT    SPACE  4
***       INENT - INPUT ENTRY TABLE ENTRY FOR *SCI* FUNCTION. 
* 
*         INENT  I,M,U,S,F,P
*         ENTRY  *I* = IDENTIFIER.
*                *M* = ADDRESS OF MAXIMUM VALUE (0 = INFINITE). 
*                *U* = UPPER BIT OF FIELD.
*                *S* = FIELD SIZE.
*                *F* = FIRST WORD ADDRESS OF FIELD. 
*                *P* = PROCESSOR INDEX. 
*         EXIT   ONE WORD ENTRY GENERATED AS FOLLOWS -
*T               18/I,18/M,6/U,6/S,6/F,6/P
  
  
          PURGMAC  INENT
 INENT    MACRO  I,M,U,S,F,P
 )1 MICRO 1,3,$I$ 
          VFD    18D/0L")1",18D/M,6/U,6/S,6/F,6/P 
  ENDM
 FUNC     SPACE  4
***       FUNC - CALL SFS FUNCTION. 
* 
*         FUNC   A
*                *A* = FUNCTION EQUATE. 
  
  
          PURGMAC  FUNC 
 FUNC     MACRO  A
          IFC    EQ,$A$$
 P        ERR 
          ENDIF 
          SB5    A
          RJ     FUNC 
          ENDM
 CONS     SPACE  4
***       CONS - SET CONSTANT.
* 
* A       CONS   B
*                A = TAG TO BE EQUATED TO ADDRESS.
*                B = CONSTANT TO BE SET AT ADDRESS(DEFAULT = 0).
* 
*         EQUATES TAG TO ADDRESS, INITIALIZES ADDRESS IF
*         *OV* = 0, AND ADVANCES THE ORIGIN COUNTER.
  
  
          PURGMAC  CONS 
          MACRO  CONS,A,B 
          IFEQ   OV,0 
          ORG    .3 
 A        CON    B
          ELSE
          IFC    NE,$A$$,1
 A        EQU    .3 
          ENDIF 
 .3       SET    .3+1 
          ENDM
 GTABLE   SPACE  4
***       GTABLE - GENERATE SFS MANAGED TABLE.
* 
*         GTABLE TNAME,COUNT,EQUIV
*         ENTRY  *TNAME* = TABLE NAME.
*                *COUNT* = WORD COUNT/ENTRY (1 IF NOT SPECIFIED). 
*                *EQUIV* = EQUIVALENT TABLE NAME. THIS ALLOWS CERTAIN 
*                           TABLES TO BE USED BY DIFFERENT PROCESSORS.
*         EXIT   *F.TNAM* IS NAME OF WORD CONTAINING THE TABLE FWA. 
*                *L.TNAM* IS NAME OF WORD CONTAINING THE TABLE LENGTH.
*                *C.TNAM* IS WORD COUNT PER ENTRY.
  
  
 NTAB     SET    0
  
          PURGMAC  GTABLE 
          MACRO  GTABLE,TNAM,COUNT,EQUIV
          IFEQ   OV,0 
          VFD    6/TNAM,18/C.TNAM,18/L.TNAM,18/F.TNAM 
          ORG    *-1
          ENDIF 
 C.TNAM   EQU    COUNT 1
          IFC    EQ,$EQUIV$$
 TNAM     EQU    NTAB 
 NTAB     SET    NTAB+1 
 GTABLES  RMT 
 .3       SET    FTAB+TNAM
 F.TNAM   CONS   MEML+TNAM
 .3       SET    LTAB+TNAM
 L.TNAM   CONS   0
 .3       SET    LTAB+NTAB
 GTABLES  RMT 
  
          ELSE
 TNAM     EQU    EQUIV
 F.TNAM   EQU    F.EQUIV
 GTABLES  RMT 
 L.TNAM   EQU    L.EQUIV
 GTABLES  RMT 
  
          ENDIF 
          ENDM
          SPACE  4
*         REMAINDER OF TABLE MANAGER STORAGE. 
  
  
 GTABLES  RMT 
 MU       CONS   0           MEMORY USED
 LM       CONS   MEML        LOW MEMORY ADDRESS 
 TN       CONS   NTAB+1      NUMBER OF MANAGED TABLES 
 FTAB     EQU    .3          TABLE ADDRESSES
  
 TEND     EQU    NTAB        DUMMY TABLE
 NTAB     SET    NTAB+1 
 .3       SET    FTAB+TEND
 F.TEND   CONS   MEML+TEND   DUMMY TABLE
 LTAB     EQU    .3          TABLE LENGTHS
 .3       SET    LTAB+TEND
 L.TEND   CONS   0
 GTABLES  RMT 
 IDIRC    SPACE  4
***       IDIRC - INITIALIZE DIRECT CELLS.
* 
*         DIRECT CELL TAGS ARE EQUATED TO ADDRESSES AND IF *OV* = 0,
*         THESE ADDRESSES ARE INITIALIZED THROUGH THE CONS MACRO. 
  
  
          PURGMAC  IDIRC
 IDIRC    MACRO 
          LIST   G
 .3       SET    DIRC 
 CW       CONS               CONTROL WORD HOLD AREAS
          CONS
          CONS
 CZ       CONS               CREATE LEVEL-0 ON WRITE OF LEVEL-1 
 DF       CONS               MAXIMUM VALUE
          CONS               UPPER BIT
          CONS               SIZE 
          CONS               ADDRESS
          CONS               IDENTIFIER 
 KD       CONS               K-DISPLAY CONTROL WORD ADDRESS 
 ET       CONS               ENTRY TERMINATOR 
                              -1 = EOF
                              +1 = */*
 FLM      CONS               MEMORY LIMIT 
 ML       CONS               MEMORY LIMIT 
 M1       CONS               MESSAGE 1 ADDRESS
 M2       CONS               MESSAGE 2 ADDRESS
 IL       CONS               KEYBOARD INPUT DISPLAY LINE ADDRESS
 OP       CONS   -1          OPTION 
 OT       CONS   -1          ORIGIN TYPE
 PD       CONS               PACKED DATE
 SB       CONS               ADDRESS OF STRING BUFFER 
 SE       CONS               SEARCH ELEMENT ADDRESS 
 SL       CONS               RANDOM ADDRESS OF FIRST LEVEL-2 BLOCK
 SM       CONS               STRING BUFFER MAXIMUM ADDRESS
 SP       CONS               STRING BUFFER POINTER
 TO       CONS               TABLE OVERFLOW PROCESSOR 
 TV       CONS               TABLE OVERFLOW INDICATOR 
 LP       CONS               LIST PROCESSOR ADDRESS 
*                            THIS SUBROUTINE WILL BE EXECUTED AFTER 
*                            READING EACH SOURCE LINE FROM INPUT FILE 
*                            OR K-DISPLAY. INTERFACE IS AS *RJ*.
*                            IF (LP)= 0, NO EXECUTION WILL BE ATTEMPTED.
  
  
***       OPTION TABLE. 
*         FOR 0-OVERLAY PROGRAM, THESE VALUES SHOULD BE USED IN 
*         INITIALIZING DIRECT CELL *OP* IF PERFORMING ONE OF THE
*         CORRESPONDING OPTIONS.
  
  
****
 KOPT     EQU    0           K-DISPLAY
 COPT     EQU    1           CREATE 
 UOPT     EQU    2           UPDATE 
 ROPT     EQU    3           REFORMAT 
 SOPT     EQU    4           SOURCE 
 IOPT     EQU    5           INQUIRE
****
  
          LIST   -G 
          ENDM
 TABLES   SPACE  4
***       ITAB - INITIALIZE TABLES. 
* 
*         ITAB   C1,C2,C3,C4
*                *CN* = WORD COUNT/ENTRY OF CORRESPONDING TABLE.
* 
*         INITIALIZES ALL MANAGED TABLE POINTERS REQUIRED BY THE
*         TABLE MANAGEMENT FUNCTIONS. 
*         ANY TABLE ENTRIES NOT SET (SUCH AS *TFBL* AND *TPBL*) 
*         MUST BE SET BY THE 0-OVERLAY PROGRAM. 
  
  
          PURGMAC  ITAB 
 ITAB     MACRO  C1,C2,C3,C4
          LIST   G
  
  
***       MANAGED TABLES ARE USED TO CONTAIN ALL VARIABLE LOAD DATA.
*         THE FOLLOWING ENTRIES (ONE WORD/TABLE) CONTAIN POINTERS 
*         TO THE TABLES IN THE FOLLOWING FORMAT - 
* 
*T        6/TNAM,18/C.TNAM,18/L.TNAM,18/F.TNAM
* 
*                *TNAM*   =  TABLE NAME.
*                *C.TNAM* =  WORD COUNT/ENTRY.
*                *L.TNAM* =  WORD CONTAINING LENGTH OF TABLE. 
*                *F.TNAM* =  WORD CONTAINING FWA OF TABLE.
* 
*         THESE TABLES ARE MANAGED THROUGH THE MACROS IN *COMCMTM*
*         AND THE ROUTINES IN *COMTMTP*.
  
  
 TAB0     GTABLE C1          LEVEL-O TABLE POINTERS 
 TAB1     GTABLE C2          LEVEL-1 TABLE POINTERS 
 TAB2     GTABLE C3          LEVEL-2 TABLE POINTERS 
 TAB3     GTABLE C4          LEVEL-3 TABLE POINTERS 
  
*         THE FOLLOWING TABLES ARE FOR USE BY THE CALLING PROGRAM 
*         AND SHOULD NOT BE USED BY *SFS*.
  
 TAB4     GTABLE
 TAB5     GTABLE
 TAB6     GTABLE
 TAB7     GTABLE
 TAB8     GTABLE
 TAB9     GTABLE
  
 GTABLES  HERE
  
  
***       RANDOM ADDRESS HOLD AREAS.
* 
*         THE FIRST LOCATION CONTAINS THE RANDOM ADDRESS OF THE 
*         BLOCK IN THE TABLE IF IT WAS RETRIEVED FROM THE FILE. 
*         THE SECOND LOCATION CONTAINS THE RANDOM ADDRESS OF THE
*         BLOCK LINKED TO THE ONE IN THE TABLE IF A READ HAS BEEN 
*         PERFORMED.  OTHERWISE, IT CONTAINS THE ADDRESS OF THE 
*         LAST BLOCK WRITTEN FROM THE TABLE.
  
  
 RA0      CONS               LEVEL-0 RANDOM ADDRESSES 
          CONS
 RA1      CONS               LEVEL-1 RANDOM ADDRESSES 
          CONS
 RA2      CONS               LEVEL-2 RANDOM ADDRESSES 
          CONS
 RA3      CONS               LEVEL-3 RANDOM ADDRESSES 
          CONS
  
  
***       TABLE OF WORDS/ENTRY COUNT. 
* 
*         THE NUMBER OF CM WORDS IN EACH ENTRY IN THE 
*         RESPECTIVE TABLE. 
  
  
 CTAB     CONS               LEVEL-0 WORD COUNT/ENTRY 
          CONS               LEVEL-1 WORD COUNT/ENTRY 
          CONS               LEVEL-2 WORD COUNT/ENTRY 
          CONS               LEVEL-3 WORD COUNT/ENTRY 
  
  
***       TABLE OF WORDS/ENTRY FOR SEARCH *MWS*.
* 
*         THE NUMBER OF CM WORDS IN EACH ENTRY IN THE RESPECTIVE
*         TABLE TO COMPARE WHEN DOING A SEARCH. 
*         (VALUES MUST BE INITIALIZED BY 0-OVERLAY PROGRAM.)
  
  
 STAB     CONS               LEVEL-0
          CONS               LEVEL-1
          CONS               LEVEL-2
          CONS               LEVEL-3
  
  
***       TABLE OF FULL BLOCK LENGTHS.
* 
*         THE MAXIMUM NUMBER OF CM WORDS IN A BLOCK FOR THE 
*         RESPECTIVE TABLE (EXCLUDING CONTROL WORDS). 
*         (VALUES MUST BE INITIALIZED BY OVERLAY PROGRAM.)
  
  
 TFBL     CONS               LEVEL-0 FULL BLOCK LENGTH
          CONS               LEVEL-1 FULL BLOCK LENGTH
          CONS               LEVEL-2 FULL BLOCK LENGTH
  
  
***       TABLE OF PARTIAL BLOCK LENGTHS. 
* 
*         THE MAXIMUM NUMBER OF CM WORDS IN A PARTIAL BLOCK 
*         FOR THE RESPECTIVE TABLE (EXCLUDING CONTROL WORDS). 
*         REQUIRED WHEN SPLITTING BLOCKS. 
*         (VALUES MUST BE INITIALIZED BY 0-OVERLAY PROGRAM.)
  
  
 TPBL     CONS               LEVEL-0 PARTIAL BLOCK LENGTH 
          CONS               LEVEL-1 PARTIAL BLOCK LENGTH 
          CONS               LEVEL-2 PARTIAL BLOCK LENGTH 
  
  
***       CONTROL WORDS.
* 
*         CONTROL WORD FORMAT IS AS FOLLOWS - 
* 
*T        12/DL,12/WIB,12/WPE,12/NOE,12/FWAD
* 
*                DL   = DATA LEVEL. 
*                WIB  = WORDS IN BLOCK. 
*                WPE  = WORDS PER ENTRY.
*                NOE  = NUMBER OF ENTRIES.
*                FWAD = FIRST WORD ADDRESS OF DATA. 
* 
*         EACH TABLE ENTRY SOULD CONTAIN THE *DL*, *WPE* AND
*         *FWAD* FIELDS.  THE *WIB* AND *NOE* FIELDS WILL BE
*         SUPPLIED WHEN THE BLOCK IS WRITTEN. 
*         (VALUES MUST BE INITIALIZED BY 0-OVERLAY PROGRAM.)
  
  
 CWL0     CONS               CONTROL WORD LEVEL-0 
 CWL1     CONS               CONTROL WORD LEVEL-1 
 CWL2     CONS               CONTROL WORD LEVEL-2 
 CWL3     CONS               CONTROL WORD LEVEL-3 
  
          LIST   -G 
 .1 SET * 
  
 ITAB     ENDM
          SPACE  4
***       THE PROCESSOR PROGRAM MUST ADHERE TO THE FOLLOWING ADDRESSES
*         TO AVOID INADVERTANT OVERLAPPING. 
*         (*DIRC*, *FUNC* AND *OVLA*) 
  
****
 FUNC     EQU    110B        FUNCTION PROCESSOR ADDRESS 
 DIRC     EQU    FUNC+2070B  DIRECT CELL ADDRESS
 OVLA     EQU    DIRC+120B   OVERLAY ORIGIN ADDRESS 
 FLIN     EQU    2000B       INCREMENT FOR FIELD LENGTH CHANGES 
          SPACE     4 
*         FUNCTION EQUATES. 
  
*         INPUT PROCESSING FUNCTIONS. 
  
 ASCT     EQU    0           ASSEMBLE CHARACTERS
 SCIT     EQU    1           SCAN FOR CODE IDENTIFIER 
  
*         FILE READ FUNCTIONS.
  
 ANBT     EQU    2           ADD NEXT BLOCK 
 CCWT     EQU    3           CRACK CONTROL WORD 
 SBTT     EQU    4           SET BLOCK IN TABLE 
 SPBT     EQU    5           SET PRIMARY BLOCK
 PNAT     EQU    6           PICK NEXT ADDRESS
 PNET     EQU    7           PICK NEXT ENTRY
  
*         FILE MANIPULATION FUNCTIONS.
  
 DZET     EQU    8           DELETE ZERO ENTRIES
 MWST     EQU    9           MULTIPLE WORD SEARCH 
 SDFT     EQU    10          SET DATA IN FIELD
 SFTT     EQU    11          SPACE FILL TABLE 
 STBT     EQU    12          SORT TABLE 
  
*         FILE WRITE FUNCTIONS. 
  
 BLDT     EQU    13          BUILD DIRECTORY
 RBAT     EQU    14          RESET BLOCK ADDRESSES
 UDDT     EQU    15          UPDATE DIRECTORY 
 WTBT     EQU    16          WRITE TABLE
 MAXT     EQU    17          MAXIMUM FUNCTION VALUE 
  
****
          SPACE     4 
          BASE   *
          ENDX
