C C P 1 D I R C C PASS 1 ASSEMBLER DIRECTIVES C C HANDLER FOR ALL DIRECTIVES DURING PASS 1, EG. ORG, EQU, ETC... C C P1DIR RETURNS 1 ARGUMENT - IFLAG = 0 FOR NORMAL CODE, -1 FOR END C DIRECTIVE C SUBROUTINE P1DIR(IFLAG) INCLUDE 'BSUCOM.CMN' INCLUDE 'OUTLIN.CMN' INCLUDE 'PRGDAT.CMN' INCLUDE 'PRMSYM.CMN' INCLUDE 'SRCLIN.CMN' INCLUDE 'USRSYM.CMN' INTEGER BLANKS, COMMAS, APOSTR, TABS, SMICLN INTEGER*4 IVAL EQUIVALENCE (KEYCHR(12),BLANKS), (KEYCHR(20), COMMAS) EQUIVALENCE (KEYCHR(22),APOSTR), (KEYCHR(28), TABS ) EQUIVALENCE (KEYCHR(10),SMICLN) D WRITE (5,1) OPINDX D 1 FORMAT (' P1DIR CALLED, OPINDX = ',I5) IVAL = 0 C C DECIDE WHICH DIRECTIVE TO WORK ON C IF (OPINDX.EQ.59) GO TO 100 ! DB - DEFINE BYTE IF (OPINDX.EQ.63) GO TO 200 ! DS - DEFINE STORAGE IF (OPINDX.EQ.64) GO TO 300 ! DW - DEFINE WORD IF (OPINDX.EQ.66) GO TO 400 ! END- END OF IT ALL IF (OPINDX.EQ.67) GO TO 500 ! EQU- EQUATE IF (OPINDX.EQ.89) GO TO 600 ! ORG- ORIGIN OR BASE VALUE IF (OPINDX.EQ.112) GO TO 500 ! SET- SET A VALUE CALL FLGERR(22) RETURN C C DB - DEFINE BYTE C 100 CONTINUE INC = 1 105 CONTINUE CALL TRIVIA(3,J) ! FIND FIRST NON-BLANK IF (J.GT.EOR) GO TO 1100 ! NOTHING LEFT 110 CONTINUE IF (J.GT.EOR) GO TO 1000 IDELIM = REMAIN(J) ! SAVE DELIMITER IF (IDELIM.NE.APOSTR) GO TO 140 J = J+1 DO 120 I=J,EOR IF (REMAIN(I).EQ.IDELIM) GO TO 130 IVAL = IVAL+INC 120 CONTINUE GO TO 1000 130 CONTINUE IF (REMAIN(I+1).NE.COMMAS) GO TO 1000 J = I+2 GO TO 110 140 CONTINUE IF (IDELIM.EQ.SMICLN) GO TO 1000 DO 150 I=J,EOR IF (REMAIN(I).EQ.COMMAS) GO TO 160 150 CONTINUE I = EOR 160 CONTINUE IVAL = IVAL+INC J = I+1 GO TO 110 C C DS - DEFINE STORAGE C 200 CONTINUE CALL XPRSIN(IFLAG,IVAL) IF (IFLAG.EQ.1) GO TO 1000 210 CALL FLGERR(15) GO TO 1000 C C DW - DEFINE WORD C 300 CONTINUE INC = 2 GO TO 105 C C END C 400 CONTINUE IFLAG = -1 GO TO 1200 C C EQU OR SET C 500 CONTINUE IF (LABEL(1).EQ.BLANKS) GO TO 1100 CALL XPRSIN(IFLAG,IVAL) SYMVAL(SYMNUM) = IVAL SYMFLG(SYMNUM) = BLANKS GO TO 1100 C C ORG C 600 CONTINUE CALL XPRSIN(IFLAG,IVAL) IF (IFLAG.NE.1) GO TO 210 PCNTR = IVAL IF (LABIDX.GT.0) SYMVAL(LABIDX) = PCNTR GO TO 1100 C C INCREMENT PCNTR THE CORRECT AMOUNT C 1000 CONTINUE PCNTR = PCNTR+IVAL 1100 CONTINUE IFLAG = 0 1200 CONTINUE D WRITE (5,2) IFLAG,IVAL D 2 FORMAT (' P1DIR END, IFLAG,IVAL = ',2I5) RETURN END