C C C P U T S Y M C C ADD SYMBOL TO SYMBOL TABLE C C THIS ROUTINE IS USED TO INSERT A USER DEFINED SYMBOL INTO THE SYMBOL C TABLE.USER DEFINED SYMBOLS ARE DEFINED DURING PASS 1 WHEN A SYMBOL C IS DETECTED IN THE LABEL FIELD.THE SYMBOL VALUE IS USUALLY THE VALUE C OF THE PROGRAM COUNTER AT THE TIME THE LABEL IS FOUND IN THE LABEL C FIELD. THE EXCEPTIONS ARE CERTAIN PSEUDO-OPS WHICH MAY SET THE LABLE C TO A GIVEN VALUE SUCH AS .EQL , .ORG , AND THE EQUAL SIGN ASSIGNMENT C IF THE SYMBOL ALREADY EXISTS IN THE SYMBOL TABLE IT'S VALUE AND FLAG C WORDS ARE UPDATED, THE SYMBOL IS NOT REINSERTED.THE ALGORITHM FOR AN C INSERTION IS AS FOLLOWS: C C A1: CHECK FOR SYMBOL ALREADY IN TABLE, IF IN TABLE THEN GO TO A4 C A2: IF SYMBOL TABLE FULL THEN RETURN C A3: INCREMENT SYMBOL COUNT AND INSERT SYMBOL IN SYMTAB C A4: PUT SYMBOL VALUE AND SYMBOL FLAGS IN SYMVAL AND SYMFLG C A5: RETURN INDEX TO SYMBOLS LOCATION IN IFLAG C C THE CALLING SEQUENCE IS: C C CALL PUTSYM ( ITEM , IFLAG , ISYMVL , ISYMFL ) C C WHERE: C ITEM- INTEGER ARRAY CONTAINING THE 12 BYTE ASCII SYMBOL TO BE C INSERTED INTO THE USERS SYMBOL TABLE ( SYMTAB ) C IFLAG- INTEGER VARIABLE WHICH WILL CONTAIN AN INDEX TO THE C SYMBOLS LOCATION IN THE TABLES ON RETURN C ISYMVL- INTEGER*4 VARIABLE CONTAINING THE VALUE OF THE SYMBOL TO C BE INSERTED INTO THE SYMBOL VALUE TABLE SYMVAL(IFLAG) C ISYMFL- INTEGER VARIABLE CONTAINING THE FLAGS TO BE INSERTED C INTO THE SYMBOL FLAG TABLE SYMFLG(IFLAG) C SUBROUTINE PUTSYM ( ITEM , IFLAG , ISYMVL , ISYMFL ) INCLUDE 'USRSYM.CMN' INTEGER ITEM(6), IFLAG, ISYMFL INTEGER*4 ISYMVL , NSYMVL D WRITE (4,1) ITEM D 1 FORMAT (' PUTSYM CALLED, ITEM = ',6A2) CALL GETSYM ( ITEM , INDEX , NSYMVL , NSYMFL ) IF ( INDEX .GT. 0 ) GO TO 90 !? SYMBOL IN TABLE ? IF (SYMNUM .GE. SYMMAX ) GO TO 200 !? SYMBOL TABLE FULL ? SYMNUM = SYMNUM + 1 IFLAG = SYMNUM DO 10 I = 1 , 6 !PUT THE NEW SYMBOL SYMTAB(I,SYMNUM) = ITEM(I) !IN THE SYMBOL TABLE 10 CONTINUE GO TO 100 90 CONTINUE IFLAG= INDEX 100 CONTINUE SYMVAL(IFLAG) = ISYMVL !UPDATE THE SYMBOLS VALUE SYMFLG(IFLAG) = ISYMFL !UPDATE THE SYMBOLS FLAGS 200 CONTINUE D WRITE (4,2) IFLAG D 2 FORMAT (' PUTSYM RETURNED INDEX OF ',I6) RETURN END