*COMDECK  LMACOM             LOADER REQUEST MACROS. 
 LMACOM   CTEXT  CPU PROGRAM LOADER REQUEST MACROS. 
  
  
***              THE LOADER REQUEST MACROS PROVIDE THE USER WITH
*         PREDEFINED CALLS TO THE SYSTEM LOADER AND PARAMETER LISTS 
*         TO BE USED IN SUCH CALLS. 
* 
* 
*         THESE MACROS USE INTERNAL SYMBOLS, MACRO NAMES, AND 
*         MICRO NAMES OF THE FORM *'?LDR#XX* WHERE *XX* IS ANY
*         TWO CHARACTERS.  SUCH NAMES SHOULD THEREFORE BE 
*         AVOIDED BY THE USER.
* 
*         ALL NUMERIC CONSTANTS GREATER THAN 7 IN THESE MACROS HAVE 
*         AN EXPLICIT RADIX, SO THE *BASE* MODE IS IMMATERIAL.
*         HOWEVER, THE *CODE* MODE MUST BE DISPLAY CODE (D) WHEN
*         THE MACROS ARE CALLED.  THIS COMMON DECK CONTAINS NO
*         UNLABELED *ELSE* OR *ENDIF* STATEMENTS, SO IT CAN BE
*         ASSEMBLED CONDITIONALLY.
* 
* 
*         A. M. MCDEARMON.   71/03/01.
*         R. H. GOODELL.     71/05/01.
*         S. MALEK.          75/06/01.
 LOADER   SPACE  4,7
***       LOADER - CALL SYSTEM LOADER VIA CPU.
* 
* 
*         LOADER PLIST,CMM
* 
*         ENTRY  *PLIST* = FWA OF PARAMETER LIST. 
*                *CMM* FLAG FOR COMMON MEMORY MANAGER USERS 
*         EXIT   REQUEST PROCESSED. 
*         USES   ALL. 
*         CALLS  LOADER=. 
  
  
          PURGMAC LOADER
  
 LOADER   MACRO  P1,P2
  IFC EQ, P2 CMM ,3 
+ RJ =XLOADER.
- VFD 12/,18/P1 
  SKIP 2
  RJ =XLOADER=
  VFD 42/,18/P1 
  ENDM
 LDREQ    SPACE  4
***       LDREQ - GENERATE PARAMETER LIST FOR USER CALL TO LOADER=. 
* 
* 
*         LDREQ  KEYWORD,P1,P2
* 
*         ENTRY  *KEYWORD* = NAME OF LOADER ACTION. 
*                *P1* = FIRST PARAMETER.
*                *P2* = SECOND PARAMETER. 
*         EXIT   PARAMETER LIST ENTRY GENERATED.
*         CALLS  NONE.
* 
*         EACH CALL TO *LDREQ* GENERATES ONE ENTRY (ONE OR MORE 
*         CONSECUTIVE WORDS) IN A PARAMETER LIST.  THE FIRST SUCH 
*         CALL IN A LIST MUST HAVE *KEYWORD* = *BEGIN*, AND THE 
*         LAST MUST HAVE *KEYWORD* = *END*.  BETWEEN THESE TWO MAY
*         BE ANY MEANINGFUL SEQUENCE OF *LDREQ* CALLS WITH OTHER
*         KEYWORDS.  THEY ARE INTERPRETED BY THE LOADER IN THE
*         ORDER IN WHICH THEY ARE LISTED.  THE PARAMETERS *P1* AND
*         *P2* DEPEND ON THE *KEYWORD* USED.
* 
*         KEYWORD              P1                       P2
* 
*         BEGIN       FWA OF LOADABLE AREA     LWA+1 OF LOADABLE AREA 
*         CMLOAD      FWA OF SOURCE AREA       LWA+1 OF SOURCE AREA 
*         DMP         LWA OF MEMORY AREA
*         DMP         FWA OF MEMORY AREA       LWA OF MEMORY AREA 
*         ECLOAD      FWA OF SOURCE AREA       LWA+1 OF SOURCE AREA 
*         END 
*         ENTRY       (ENTRY NAME LIST) 
*         EXECUTE     ENTRY POINT NAME         (ARGUMENT LIST)
*         FILES       (FILE NAME LIST)
*         LIB         (LIBRARY NAME LIST) 
*         LIBLOAD     LIBRARY NAME             (ENTRY NAME LIST)
*         LOAD        (FILE NAME LIST)
*         MAP         OPTIONS                  FILE NAME
*         NOGO        FILE NAME                (ENTRY NAME LIST)
*         OMIT        (EXTERNAL NAME LIST)
*         PRESET      KEYWORD/VALUE 
*         PRESETA     KEYWORD/VALUE 
*         SATISFY     (LIBRARY NAME LIST) 
*         SLOAD       FILE NAME                (DECK NAME LIST) 
*         SUBST       (OLD-NEW NAME LIST) 
*         USE         (ENTRY NAME LIST) 
*         USEP        (DECK NAME LIST)
*         PASSLOC     (NAME DECRIPTOR LIST) 
*         STAT        (FILE NAME LIST)
*         PD          VALUE 
*         PS          VALUE 
* 
*         FOR BEGIN, OPTIONAL PARAMETERS P3 AND P4 SPECIFY THE
*         FWA AND LWA+1 OF THE LOADABLE AREA IN ECS/LCM.
* 
*         FOR EXECUTE, NO ARGUMENT MAY BE MORE THAN 7 CHARACTERS AND
*         THE SYNTAX IS THAT OF COMPASS MACRO CALL ARGUMENTS RATHER 
*         THAN THE SCOPE CONTROL CARD DOLLAR-SIGN CONVENTION. 
* 
*         FOR LOAD AND SLOAD, EACH FILE NAME MAY OPTIONALLY BE
*         FOLLOWED BY */NR* OR */R*.
  
  
          PURGMAC LDREQ 
  
 LDREQ    MACRO  KW,P1,P2,P3,P4 
'?LDR#OP MICRO 1,,,ER KW, 
  ECHO 4,Q1=(BEGIN,CMLOAD,DMP,ECLOAD,END,ENTRY,EXECUTE,FILES,LIB,LIBLOAD
,,LOAD,MAP,NOGO,OMIT,PASSLOC,PD,PRESET,PRESETA,PS,SATISFY,SLOAD,STAT,SUB
,ST,USE,USEP),Q2=(BE,CM,DM,EC,EN,0021B,EX,0023B,0010B,021,LO,MA,NO,0020B
,,PA,PD,PR0,PR1,PS,007,SL,0027B,SU,0016B,0015B) 
  
  IFC EQ, Q1 KW ,3
'?LDR#OP MICRO 1,2, Q2
'?LDR#TN MICRO 3,, Q2 
  STOPDUP 
  '?LDR#"'?LDR#OP" "'?LDR#TN",(P1),(P2),P3,P4 
  ENDM
 '?LDR#BE SPACE  4
**        '?LDR#BE - PROCESS LDREQ BEGIN,FIRST,LIMIT OF LOADABLE AREA.
  
  
          PURGMAC '?LDR#BE
  
 '?LDR#BE MACRO  TN,P1,P2,P3,P4 
+ VFD 3/7,9D/,18D/P1,12D/,18D/P2
   IFC NE, P3  ,2 
+  VFD 1/1,29D/P3 
   SKIP 1 
+  VFD 30D/P3 
   IFC NE, P4  ,2 
-  VFD 1/1,29D/P4 
   SKIP 1 
-  VFD 30D/P4 
  CON 0 
  ENDM
 '?LDR#CM SPACE  4
**        '?LDR#CM - PROCESS LDREQ CMLOAD,FIRST,LIMIT OF SOURCE AREA. 
  
  
          PURGMAC '?LDR#CM
  
 '?LDR#CM MACRO  TN,P1,P2 
  VFD 12D/3,12D/,18D/P2,18D/P1
  ENDM
 '?LDR#DM SPACE  4
**        '?LDR#DM - PROCESS LDREQ DMP,FWA,LWA OF MEMORY AREA.
  
  
          PURGMAC '?LDR#DM
  
 '?LDR#DM MACRO  TN,P1,P2 
  IFC EQ, P2  ,2
  VFD 12D/22B,30D/,18D/P1 
  SKIP 1
  VFD 12D/22B,12D/,18D/P1,18D/P2
  ENDM
 '?LDR#EC SPACE  4
**        '?LDR#EC - PROCESS LDREQ ECLOAD,FIRST,LIMIT OF SOURCE AREA. 
  
  
          PURGMAC '?LDR#EC
  
 '?LDR#EC MACRO  TN,P1,P2 
  VFD 12D/4,12D/1,36D/
  VFD 12D/,24D/P2,24D/P1
  ENDM
 '?LDR#EN SPACE  4
**        '?LDR#EN - PROCESS LDREQ END. 
  
  
          PURGMAC '?LDR#EN
  
 '?LDR#EN MACRO  TN,P1,P2 
  CON 0 
  ENDM
 '?LDR#ER SPACE  4
**        '?LDR#ER - PROCESS LDREQ WITH UNRECOGNIZED KEYWORD. 
  
  
          PURGMAC '?LDR#ER
  
 '?LDR#ER MACRO  KW 
  ERR  LDREQ - INVALID KEYWORD - KW.
  ENDM
 '?LDR#EX SPACE  4
**        '?LDR#EX - PROCESS LDREQ EXECUTE,ENTRYNAME,(ARGUMENT LIST). 
  
  
          PURGMAC '?LDR#EX
  
 '?LDR#EX MACRO  TN,P1,P2 
  IFC EQ, P1_P2  ,2 
  CON 5S48
  SKIP 1
  '?LDR#09 5,P1,(P2)
  ENDM
 '?LDR#LO SPACE  4
**        '?LDR#LO - PROCESS LDREQ LOAD,(FILENAME LIST).
  
  
          PURGMAC '?LDR#LO
  
 '?LDR#LO MACRO  TN,P1,P2 
          LOCAL  L
  VFD 12D/0,12D/L-*-1,36D/1 
  '?LDR#01 TN,(P1)
L EQU * 
  ENDM
 '?LDR#MA SPACE  4
**        '?LDR#MA - PROCESS LDREQ MAP,OPTION,FILENAME. 
  
  
          PURGMAC '?LDR#MA
  
 '?LDR#MA MACRO  TN,P1,P2 
          LOCAL  L
'?LDR#OP  SET    0
1         IFC    NE, P1 
'?LDR#OP  SET    1
1         IFC    NE, P1 N 
'?LDR#MS  SET    2
'?LDR#MB  SET    4
'?LDR#ME  SET    10B
'?LDR#MX  SET    20B
'?LDR#CN  SET    0
2         DUP    -1 
'?LDR#CN  SET    '?LDR#CN+1 
'?LDR#CH  MICRO  '?LDR#CN,1, P1 
          IFC    EQ, "'?LDR#CH"  ,2 
2         STOPDUP 
          SKIP   4
          IF     -DEF,'?LDR#M"'?LDR#CH",2 
          ERR    LDREQ - INVALID MAP OPTION - "'?LDR#CH". 
          SKIP   1
'?LDR#M"'?LDR#CH" SET 0 
2         ENDD
'?LDR#OP  SET    37B-'?LDR#MS-'?LDR#MB-'?LDR#ME-'?LDR#MX
1         ENDIF 
          VFD    12D/11B,12D/L-*-1,36D/'?LDR#OP 
  IFC NE, P2  ,1
  VFD 42D/0L_P2,18D/
L EQU * 
  ENDM
 '?LDR#NO SPACE  4
**        '?LDR#NO - PROCESS LDREQ NOGO,FILENAME,(ENTRYNAME LIST).
  
  
          PURGMAC '?LDR#NO
  
 '?LDR#NO MACRO  TN,P1,P2 
  IFC EQ, P1  ,2
  CON 6S48
  SKIP 1
  '?LDR#02 6,P1,(P2)
  ENDM
'?LDR#PA  SPACE  4,8
**        '?LDR#PA - PROCESS PASSLOC,(LIST).
  
  
          PURGMAC '?LDR#PA
  
'?LDR#PA  MACRO  TN,P1
          LOCAL  L
  VFD 12D/24B,12D/L-*-1,36D/
  IRP P1
  '?LDR#PL P1 
  IRP 
L EQU * 
  ENDM
'?LDR#PL  SPACE  4,8
**        '?LDR#PL - PROCESS PASSLOC  PARAMETERS (NAME,TYPE,LGTH,ADDR)
  
  
          PURGMAC '?LDR#PL
  
'?LDR#PL  MACRO  NAME,TYPE,LGTH,ADDR
  VFD 42D/0L_NAME,18D/TYPE
  VFD 36D/LGTH,24D/ADDR 
  ENDM
 '?LDR#PD SPACE  4,10 
**        '?LDR#PD - PROCESS LDREQ *PD*.
  
  
         PURGMAC '?LDR#PD 
  
'?LDR#PD  MACRO  TN,P1
  BASE D
  VFD 12D/33B,30D/0,18D/P1
  BASE *
  ENDM
 '?LDR#PS SPACE  4,10 
**        '?LDR#PS - PROCESS LDREQ *PS*.
  
  
         PURGMAC '?LDR#PS 
  
'?LDR#PS  MACRO  TN,P1
  BASE D
  VFD 12D/34B,30D/0,18D/P1
  BASE *
  ENDM
 '?LDR#PR SPACE  4
**        '?LDR#PR - PROCESS LDREQ PRESET OR PRESETA. 
  
  
          PURGMAC '?LDR#PR
  
 '?LDR#PR MACRO  TN,P1,P2 
  IFC EQ, P1 NONE ,2
  CON 12BS48
  SKIP 11D
'?LDR#OP MICRO
  ECHO 4,Q1=(ZERO,ONES,INDEF,INF,NGINDEF,NGINF,ALTZERO,ALTONES,DEBUG),Q2
,=(0,-0,1777BS48,3777BS48,6000BS48,4000BS48,25252525252525252525B,525252
,52525252525252B,60000000000400400000B) 
  IFC EQ, P1 Q1 ,2
'?LDR#OP MICRO 1,, Q2 
  STOPDUP 
  IFC EQ, "'?LDR#OP"  ,1
'?LDR#OP MICRO 1,, P1 
  BASE O
  CON 120001S36+TN
  CON "'?LDR#OP"
  BASE *
  ENDM
 '?LDR#SL SPACE  4
**        '?LDR#SL - PROCESS LDREQ SLOAD,FILENAME,(DECKNAME LIST).
  
  
          PURGMAC '?LDR#SL
  
 '?LDR#SL MACRO  TN,P1,P2 
          LOCAL  L
  VFD 12D/2,12D/L-*-1,36D/
  '?LDR#01 TN,P1
  IRP P2
  VFD 42D/0L_P2,18D/
  IRP 
L EQU * 
  ENDM
 '?LDR#SU SPACE  4
**        '?LDR#SU - PROCESS LDREQ SUBST,(OLD-NEW NAME LIST). 
  
  
          PURGMAC '?LDR#SU
  
 '?LDR#SU MACRO  TN,P1,P2 
          LOCAL  L
  VFD 12D/17B,12D/L-*-1,36D/
  IRP P1
'?LDR#OP MICRO 1,,-P1-
  IFC EQ, "'?LDR#OP" P1 ,2
  ERR  LDREQ - BAD SUBST FORMAT - P1. 
  SKIP 4
'?LDR#MT MICCNT '?LDR#OP
'?LDR#TN MICRO '?LDR#MT+2,, P1
  VFD 42D/0L"'?LDR#OP",18D/ 
  VFD 42D/0L"'?LDR#TN",18D/ 
  IRP 
L EQU * 
  ENDM
 '?LDR#00 SPACE  4
**        '?LDR#00 - PROCESS LDREQ KEYWORD WHERE KEYWORD CAN BE ANY OF
*                    ENTRY, FILES, LIB, OMIT, SATISFY, STAT, USE, USEP. 
  
  
          PURGMAC '?LDR#00
  
 '?LDR#00 MACRO  TN,P1,P2 
          LOCAL  L
  VFD 12D/TN,12D/L-*-1,36D/ 
  IRP P1
  VFD 42D/0L_P1,18D/
  IRP 
L EQU * 
  ENDM
 '?LDR#01 SPACE  4
**        '?LDR#01 - PROCESS LDREQ LOAD/SLOAD FILENAME LIST WITH ITEMS
*                        OF THE FORM  FILENAME, FILENAME/NR, FILENAME/R.
  
  
          PURGMAC '?LDR#01
  
 '?LDR#01 MACRO  TN,P1,P2 
  IRP P1
'?LDR#OP SET 0
'?LDR#TN MICRO 1,,/P1/
  IFC NE, "'?LDR#TN" P1 ,6
'?LDR#MT MICCNT '?LDR#TN
'?LDR#OP MICRO '?LDR#MT+2,, P1
  IFC EQ, "'?LDR#OP" NR ,1
'?LDR#OP SET 2
  IFC EQ, "'?LDR#OP" R ,1 
'?LDR#OP SET 3
  VFD 42D/0L"'?LDR#TN",18D/'?LDR#OP 
  IRP 
  ENDM
 '?LDR#02 SPACE  4
**        '?LDR#02 - PROCESS LDREQ LIBLOAD AND NON-NULL FORM OF NOGO. 
  
  
          PURGMAC '?LDR#02
  
 '?LDR#02 MACRO  TN,P1,P2 
          LOCAL  L
  VFD 12D/TN,12D/L-*-1,36D/ 
  VFD 42D/0L_P1,18D/
  IRP P2
  VFD 42D/0L_P2,18D/
  IRP 
L EQU * 
  ENDM
          SPACE  4,8
**        '?LDR#09 - PROCESS NON-NULL FORM OF EXECUTE.
  
  
          PURGMAC  '?LDR#09 
  
 '?LDR#09 MACRO  TN,P1,P2 
          LOCAL  L
  VFD 12D/TN,12D/L-*-1,36D/ 
  VFD 42D/0L_P1,18D/
'?LDR#9A MICRO 1,,/P2/
'?LDR#9B MICCNT '?LDR#9A
'?LDR#9C SET 1
  IRP P2
'?LDR#9A MICRO 1,,/P2/
'?LDR#9D MICCNT '?LDR#9A
'?LDR#9B SET '?LDR#9B-'?LDR#9D
  IFNE '?LDR#9B,0,2 
'?LDR#9B SET '?LDR#9B-1 
  SKIP 1
'?LDR#9C SET 17B
  VFD 42D/0L_P2,18D/'?LDR#9C
  IRP 
L EQU * 
          ENDM
  
  
 LMACOM   ENDX
          SPACE  4,10 
***       ENTHDR - GENERATE *ENTRY* TABLE HEADER WORD.
* 
* 
*         ENTHDR
* 
*         ENTRY  NONE.
*         EXIT   GENERATE WORD IN FOLLOWING FORMAT. 
*                ADR  VFD  12/21B,21/(WC=0),36/0
*                ALSO DEFINES MICRO = NAME OF LOCAL SYMBOL OF 
*                ADDRESS OF *ADR* FOR USE BY THE *ENT* MACRO. 
* 
*         THE *ENTHDR* AND *ENT* MACROS ARE USED TOGETHER TO GENERATE 
*         *PASSLOC* TYPE TABLES TO BE USED BY FDL WHEN LOADING AND
*         UNLOADING CAPSULES.  THE *ENTHDR* MACRO GENERATES THE TABLE 
*         HEADER WORD AND THE *ENT* MACRO IS CALLED TO ENTER INTO THE 
*         TABLE A WORD CONTAINING AN ENTRY POINT NAME AND ADDRESS.
  
  
          PURGMAC ENTHDR
  
 ENTHDR   MACRO 
          LOCAL  LC 
'?LDR#AL MICRO
'?LDR#LC MICRO 1,,*LC*
LC BSS 0
+ VFD 12D/21B,12D/,36D/ 
          ENDM
          SPACE  4,10 
***       ENT - GENERATE WORD FOR *ENTRY* TABLE.
* 
* 
*         ENT    NAME,ADDR
* 
*         ENTRY  *NAME* = ENTRY POINT NAME. (REQUIRED)
*                *ADDR* = ADDRESS OF THE ENTRY POINT. (OPTIONAL)
*                         IF NOT SPECIFIED ADDR = *=YNAME*. 
*         EXIT   TABLE WORD GENERATED.
*                HEADER WORD UPDATED WITH CORRECT VALUE IN *WC*.
* 
*         IF THE NAMES ARE NOT IN ALPHABETICAL ORDER AN ASSEMBLY
*         ERROR WILL BE GENERATED.
  
  
          PURGMAC ENT 
  
 ENT      MACRO  NAME,ADDR
          LOCAL  ADR
  IFC LT,*NAME*"'?LDR#AL"*,1
  ERR NAMES NOT IN ALPHABETICAL ORDER 
'?LDR#AL MICRO 1,,*NAME*
  IFC EQ,*ADDR**,1
+ VFD 42D/0L_NAME,18D/=Y_NAME 
  IFC NE,*ADDR**,1
+ VFD 42D/0L_NAME,18D/ADDR
ADR BSS 0 
  ORG "'?LDR#LC"
+ VFD 12D/21B,12D/ADR-"'?LDR#LC"-1,36D/ 
  ORG ADR 
  USE * 
  USE * 
          ENDM
