/* $Id$ */ /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* I N P U T R O U T I N E S */ extern FILE *curinp; /* current input file */ extern block_id lastbid; /* block identifying number */ extern lab_id lastlabid; /* last label identifier */ #define getbyte() getc(curinp) short getshort(void); /* * Read a short from curinp */ offset getoff(void); /* * Read an offset from curinp */ line_p read_line(proc_p *p_out); /* * Read a line of EM code (i.e. one * instruction) and its arguments * (if any). If the instruction is a * 'pro' pseudo, set p_out. */ line_p getlines(FILE *lf, int n, proc_p *p_out, bool collect_mes); /* * Read n lines of EM text and doubly * link them. Also process messages * if required. */ bblock_p freshblock(void); /* * Allocate a bblock struct and assign * it a brand new block_id. */ lab_id freshlabel(void); /* * Get a brand new lab_id. */ dblock_p getdtable(const char *dname); /* * Read the data block table from * the file with the given name. */ proc_p getptable(const char *pname); /* * Read the proc table from * the file with the given name. */ bool getunit(FILE *gf, FILE *lf, short *kind_out, bblock_p *g_out, line_p *l_out, proc_p *p_out, bool collect_mes); /* * Read the control flow graph * (from file gf) and the EM text * (from lf). If collect_mes is TRUE, * all register messages will be * collected and put in the global * variable 'mesregs'. The proc read * is returned in p_out. */ void message(line_p lnp); /* * See if lnp is some useful message. * (e.g. a message telling that a * certain local variable will never be * referenced indirectly, so it may be * put in a register. * If so, add it to the mesregs set.) */