/** * search local table for given symbol name * @param sname * @return table index */ int find_locale (char *sname) { int idx; idx = local_table_index; while (idx >= NUMBER_OF_GLOBALS) { idx--; if (astreq (sname, symbol_table[idx].name, NAMEMAX)) return (idx); } return (-1); }
/** * search global table for given symbol name * @param sname * @return table index */ int find_global (char *sname) { int idx; idx = 0; while (idx < global_table_index) { if (astreq (sname, symbol_table[idx].name, NAMEMAX)) return (idx); idx++; } return (-1); }
/** * compares two string both must be zero ended, otherwise no match found * advances line pointer only if match found * it assumes that an alphanumeric (including underscore) comparison * is being made and guarantees that all of the token in the source line is * scanned in the process * @param lit * @param len * @return */ int amatch(char *lit, int len) { int k; blanks(); if ((k = astreq (line + lptr, lit, len)) != 0) { lptr = lptr + k; while (alphanumeric (ch ())) inbyte (); return (1); } return (0); }
/** * look up a tag in tag table by name * @param sname * @return index */ int find_tag (char *sname) { int index; index = 0; while (index < tag_table_index) { if (astreq(sname, tag_table[index].name, NAMEMAX)) return (index); ++index; } return (-1); }
/** * find symbol in table, count position in data array * @param symbol_name * @return */ int find_symbol_initials (char *symbol_name) { int result = 0; initials_data_idx = 0; for (initials_idx = 0; initials_table[initials_idx].type != 0; initials_idx++) { if (initials_idx >= NUMGLBS) error("initials table overrun"); if (astreq(symbol_name, initials_table[initials_idx].name, NAMEMAX) != 0) { result = 1; break; } else { // move to next symbol // count position in data array initials_data_idx += initials_table[initials_idx].data_len; } } return (result); }