119 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "header.h"
 | 
						|
 | 
						|
/* This file contains low-level routines for generating assembly code. */
 | 
						|
 | 
						|
int cur_seg = -1, saved = 0;
 | 
						|
char name[256], labeltje[256];
 | 
						|
 | 
						|
File *codefile;
 | 
						|
 | 
						|
 | 
						|
align_word()
 | 
						|
 | 
						|
/* The EM-definition demands that segments are aligned at a word boundary
 | 
						|
 */
 | 
						|
 | 
						|
{
 | 
						|
	switch ( cur_seg) {
 | 
						|
	  case SEGTXT : return;
 | 
						|
	  default     : fprint( codefile, ALIGN_FMT);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
save_label( l)
 | 
						|
char *l;
 | 
						|
{
 | 
						|
	sprint( labeltje, "%s", l);
 | 
						|
	saved = 1;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
dump_label()
 | 
						|
{
 | 
						|
	if ( saved)  {
 | 
						|
		align_word();
 | 
						|
		symbol_definition( labeltje);
 | 
						|
	}
 | 
						|
	saved = 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_pro( prcno)
 | 
						|
int prcno;
 | 
						|
{
 | 
						|
	sprint( name, "pro%d", prcno);
 | 
						|
	return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_start( prcno)
 | 
						|
int prcno;
 | 
						|
{
 | 
						|
	sprint( name, "start%d", prcno);
 | 
						|
	return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_name( s)
 | 
						|
char *s;
 | 
						|
{
 | 
						|
	sprint( name, NAME_FMT, s);
 | 
						|
        return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_dnam( s)
 | 
						|
char *s;
 | 
						|
{
 | 
						|
	sprint( name, DNAM_FMT, s);
 | 
						|
        return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_dlb( g)
 | 
						|
arith g;
 | 
						|
{
 | 
						|
	sprint( name, DLB_FMT, (long)g);
 | 
						|
        return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_ilb( l, prcno)
 | 
						|
arith l;
 | 
						|
{
 | 
						|
	sprint( name, ILB_FMT, prcno, (long) l);
 | 
						|
        return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_hol( hol)
 | 
						|
int hol;
 | 
						|
{
 | 
						|
	sprint( name, HOL_FMT, hol);
 | 
						|
        return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_part( d)
 | 
						|
int d;
 | 
						|
{
 | 
						|
	sprint( name, "part%x", d);
 | 
						|
	return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_cont( d)
 | 
						|
int d;
 | 
						|
{
 | 
						|
	sprint( name, "cont%x", d);
 | 
						|
	return( name);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *extnd_main( d)
 | 
						|
int d;
 | 
						|
{
 | 
						|
	sprint( name, "main%x", d);
 | 
						|
	return( name);
 | 
						|
}
 |