1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #include "debug.h"
- #include <em.h>
- #include <assert.h>
- #include "LLlex.h"
- #include "def.h"
- #include "main.h"
- #include "scope.h"
- #include "type.h"
- static int extflc; /* number of external files */
- static int inpflag = 0; /* input mentioned in heading ? */
- static int outpflag = 0; /* output mentioned in heading ? */
- static label extfl_label; /* label of array of file pointers */
- set_inp()
- {
- inpflag = 1;
- }
- set_outp()
- {
- outpflag = 1;
- }
- make_extfl()
- {
- if( err_occurred ) return;
- extfl_label = ++data_label;
- C_df_dlb(extfl_label);
- if( inpflag ) {
- C_ina_dnam(input);
- C_con_dnam(input, (arith) 0);
- }
- else
- C_con_ucon("0", pointer_size);
- if( outpflag ) {
- C_ina_dnam(output);
- C_con_dnam(output, (arith) 0);
- }
- else
- C_con_ucon("0", pointer_size);
- extflc = 2;
- /* Process the identifiers in the global scope (at this point only
- * the program parameters) in order of specification.
- */
- make_extfl_args( GlobalScope->sc_def );
- }
- make_extfl_args(df)
- register struct def *df;
- {
- if( !df ) return;
- make_extfl_args(df->df_nextinscope);
- assert(df->df_flags & D_PROGPAR);
- if( df->var_name != input && df->var_name != output ) {
- C_ina_dnam(df->var_name);
- C_con_dnam(df->var_name, (arith) 0);
- extflc++;
- }
- }
- call_ini()
- {
- C_lxl((arith) 0);
- if( extflc )
- C_lae_dlb(extfl_label, (arith) 0);
- else
- C_zer(pointer_size);
- C_loc((arith) extflc);
- C_lxa((arith) 0);
- C_cal("_ini");
- C_asp(3 * pointer_size + word_size);
- }
|