*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.
 LOADER   SPACE  4,7
***       LOADER - CALL SYSTEM LOADER VIA CPU.
* 
* 
*         LOADER PLIST
* 
*         ENTRY  *PLIST* = FWA OF PARAMETER LIST. 
*         EXIT   REQUEST PROCESSED. 
*         USES   ALL. 
*         CALLS  LOADER=. 
  
  
          PURGMAC LOADER
  
 LOADER   MACRO  P
  RJ =XLOADER=
  CON P 
  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         OPTION - 0/O/S/B/E/X     FILE NAME
*         NOGO        FILE NAME                (ENTRY NAME LIST)
*         OMIT        (EXTERNAL NAME LIST)
*         PRESET      OPTION MNEMONIC 
*         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) 
* 
*         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,PRESET,SATISFY,SLOAD,SUBST,USE,USEP),Q2=(BE
,,CM,DM,EC,EN,0021B,EX,0023B,0010B,021,LO,MA,NO,0020B,PA,PR,007,SL,SU,00
,16B,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
  VFD 30D/P3,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#02 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/
  '?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#MT SET 0
  ECHO 3,M=(0,O,S,B,E,X),N=(1,1,3,5,11B,21B)
  IFC EQ, P1 M ,2 
'?LDR#MT SET N
  STOPDUP 
  VFD 12D/11B,12D/L-*-1,36D/'?LDR#MT
  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#PR SPACE  4
**        '?LDR#PR - PROCESS LDREQ PRESET,MNEMONIC. 
  
  
          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),Q2=(0,-0
,,1777BS48,3777BS48,6000BS48,4000BS48,25252525252525252525B,525252525252
,52525252B),Q3=(0,0,0,0,0,1,0,0)
  IFC EQ, P1 Q1 ,3
'?LDR#OP MICRO 1,, Q2 
'?LDR#MT SET Q3 
  STOPDUP 
  IFC EQ, "'?LDR#OP"  ,2
  ERR  LDREQ - INVALID PRESET OPTION - P1.
  SKIP 2
  CON 120001BS36+'?LDR#MT 
  CON "'?LDR#OP"
  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, 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 FORMS OF
*                            EXECUTE AND 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
  
  
 LMACOM   ENDX
