*DECK             LOAD
USETEXT   TSOURCE 
USETEXT   TCEXECQ 
USETEXT   TSYMCNS 
USETEXT   TCEXEC
USETEXT   TCOM37Q 
USETEXT   TCOM78Q 
USETEXT   TC7DECS 
PROC LOAD((I));    # KLSS[I] = S"SOURCE"  KFLG[I]=FALSE # 
                                        #GENERATES LOAD INSTRUCTIONS   #
                                        # FOR NUMBERS, BOOLEANS, AND   #
                                        # NON-WORD-SPANNING LITERALS.  #
BEGIN 
  
  
  
  
*CALL COMEX 
  
  
  
  
ITEM OPTRJ S:QILOP,  LOPDJ,ROPDJ;                                        JANDRE 
    ITEM I, #TRIAD POINTERE#                                             JANDRE 
         J,K;                                                            JANDRE 
    ITEM L U; 
    XREF PROC EXPOS;
    XREF PROC FIND; 
      XREF PROC SAVESV; 
       XREF PROC KGT00; 
    XREF PROC ICFGEN; 
    XREF PROC ICFGNR; 
    XREF FUNC KFIND;
    XREF FUNC PSICON; 
    XREF PROC SLODL;
    J=NXOP[I];
    K=MEMR[I];
    IF SFLG[I] THEN 
         BEGIN #MUST BE AN INDEXED VARIABLE#
     OPTRJ=OPTR[J];                                                      JANDRE 
         IF VFLG[I] EQ S"NUMB" THEN 
              BEGIN #NUMBER#
              SLODL(I); 
              IF AC$S[I] EQ S"LS" THEN
              BEGIN #EXTRACTION REQUIRED# 
              IF $TST[I] THEN GOTO LO20;
              #INTEGER OR FIXED-POINT#
LO76: 
              SYG=$IGN[I]; #SIGN# 
              FBT=EFBT[I]; #FIRST BIT#
              NBT=ENBT[I]; #NUMBER OF BITS# 
              POS=0;
              IF QREP[I] THEN RETURN;                                    JANDRE 
              IF OPTR[J] EQ QILOP"SUBS" THEN
                   BEGIN #INDEX VALUE#
                   IF NBT GQ 18 THEN
                        BEGIN #NEED ONLY RIGHT-SHIFT VALUE# 
                        L=FBT+NBT;
                        IF L NQ 60 THEN 
                             BEGIN
                             ICFGNR(QICFOP"LSHC",-1,L); 
                             END
                   IF NBT NQ 60 
                   AND (FPRI[MAMA[MEMR[LOPD[J]]]] EQ S"NAMC"
                   OR   TTYP[MAMA[MEMR[LOPD[J]]]] EQ S"BASED")
                   THEN       #SUBSCRIPT ON INDIRECT ACCESS --
                               MAKE SURE OF SIGN EXTENSION #
                     ICFGNR (QICFOP"BXND",-1,0);
                        GOTO LO00;
                        END 
                   END
         EXPOS(ICFPTR);                                                  JANDRE 
              EFBT[I]=60-(ENBT[I]+POS); 
              END #AC$S EQ S"LS"# 
LO00:         MEMR[I]=ICFPTR; 
              RETURN; 
              END 
         IF VFLG[I] EQ S"LITR" THEN 
              BEGIN #LITERAL# 
              IF AC$S[I] NQ S"GR" THEN
                   BEGIN #WORD-LOADABLE VALUE#
         LOPDJ=LOPD[J]; ROPDJ=ROPD[J];                                   JANDRE 
         IF OPTRJ EQ S"REPL" AND AC$S[LOPDJ] EQ S"GR" THEN RETURN;       JANDRE 
         IF OPAT5[OPTRJ] EQ S"EXPR" THEN                                 JANDRE 
            IF LOPDJ EQ I AND AC$S[ROPDJ] EQ S"GR"                       JANDRE 
               THEN RETURN;                                              JANDRE 
               ELSE IF AC$S[LOPDJ] EQ S"GR" THEN RETURN;                 JANDRE 
      LO30: 
                   SLODL(I);
                   IF QREP[I] THEN RETURN; #KEEP UNNORMALIZED DATA #     JANDRE 
                   IF AC$S[I] EQ S"LS" THEN 
                   BEGIN #EXTRACTION REQUIRED#
                   SYG=F; 
                   FBT=EFBT[I]; 
         IF OPTRJ EQ S"FUNI" AND(FNUM[J] EQ S"CRX" OR                    JANDRE 
          FNUM[J] EQ S"CIX") THEN GOTO LO40;
                   NBT=6*ENBY[I]; 
                   POS=0; 
                   IF ADJF[I] THEN POS=60-NBT; #LEFT-ADJUSTED#
              EXPOS(ICFPTR);                                             JANDRE 
                   L= O"55555555555555555555";                           JANDRE 
          IF ADJF[I] THEN BEGIN 
                          B<0,NBT> L =0;
                          EFBT[I] =0;         #LEFT , UNNORMALISED# 
                          END 
         ELSE 
              BEGIN 
              B<60-NBT,NBT> L =0; 
              EFBT[I] = 60-NBT;         # RIGTH ADJUSTED# 
              END 
                   ICFGEN(QICFOP"IAOR" ,ICFPTR,PSICON(L));
                   END #AC$S EQ S"LS"#
                   GOTO LO00; 
          #SKIP MASK AND BLANK FILL#
LO40:  IF FBT NQ 0 THEN ICFGNR(QICFOP"LSHC",-1,FBT);
             EFBT[I] = 0;       #FIRST BIT# 
             EFBY[I] = 0; 
          GOTO LO00;
                   END #AC$S NQ S"GR"#
              #AC$S = S"GR" : AT LEAST TWO WORDS ACCESSED#
              #GENERATE TEMP, MOVE CHARACTERS INTO IT#
              L=OPTRJ;                                                   JANDRE 
              IF L EQ QILOP"REPL" OR OPAT5[L] EQ S"EXPR" OR 
              L EQ QILOP"PCAL" OR L EQ QILOP"FCAL" OR 
              L EQ QILOP"FRES"       OR 
              L EQ QILOP"FLST" OR L EQ QILOP"PLST" THEN RETURN; 
              ELSE  BEGIN 
                   SAVESV(I); 
                   KGT00(I);
                   GOTO LO00; 
                   END
              RETURN; 
              END 
         IF VFLG[I] EQ S"BOOL" THEN 
              BEGIN 
              SLODL(I); 
              IF AC$S[I] EQ S"LS" THEN
LO20:              BEGIN #SIGN-SHIFT# 
                   IF OPTRJ NQ QILOP"TSST" OR ENBT[I] NQ 1 THEN          JANDRE 
                        BEGIN #EXTRACT AS 0/1 INTEGER#
                        $TST[I]=F;
                        GOTO LO76;
                        END 
                   L=EFBT[I]+ENBT[I]-1; 
                   IF L NQ 0 THEN ICFGEN(QICFOP"LSHC",ICFPTR,L);
                   END
              GOTO LO00;
              END 
         END
          IF VFLG[I] EQ S"LITR" AND AC$S[I] EQ S"LS" AND
                   NOT ( OPTR[J] EQ S"FUNI" AND ( FNUM[J] EQ S"CRX" 
                   OR FNUM[J] EQ S"CIX" )) THEN GOTO LO30;
END 
TERM
