1 - added keywords callname and outfile. See manual.

2 - multiple combiners are allowed now.
3 - A different search mechanism is used for finding descriptor files.
This commit is contained in:
keie 1984-09-10 16:42:55 +00:00
parent c504e2e22a
commit 20100c69c7

View file

@ -41,12 +41,14 @@ static char rcs_dmach[] = RCS_DMACH ;
#define PASS "name"
#define IN "from"
#define OUT "to"
#define RES "outfile"
#define PROG "program"
#define MAPF "mapflag"
#define ARGS "args"
#define PROP "prop"
#define RUNT "rts"
#define NEEDT "need"
#define CALL "callname"
#define END "end"
extern growstring scanb();
@ -72,6 +74,16 @@ setlist(name) char *name ; {
if ( strcmp(VAR,ty_name)==0 ) {
doassign(bol,(char *)0,0) ;
} else
if ( strcmp(CALL,ty_name)==0 ) {
if ( callname && strcmp(bol,callname)==0 ) {
callname= (char *)0 ;
#ifdef DEBUG
if ( debug>=3 ) {
vprint("found call name\n");
}
#endif
}
} else
if ( strcmp(PASS,ty_name)==0 ) {
intrf() ;
} else
@ -88,6 +100,7 @@ intrf() {
register char *ptr ;
growstring bline, vline ;
int twice ;
int name_seen=0 ;
new= (trf *)getcore(sizeof *new) ;
new->t_name= keeps(bol) ;
@ -133,6 +146,7 @@ intrf() {
case 'p': new->t_prep= YES ; break ;
case 'm': new->t_prep= MAYBE ; break ;
case 'O': new->t_optim= YES ; break ;
case 'L': new->t_linker=YES ;
case 'C': new->t_combine= YES ; break ;
default :
error("Unkown option %c in %s for %s",
@ -149,6 +163,22 @@ intrf() {
if ( new->t_needed ) twice=YES ;
new->t_needed= keeps(bol) ;
} else
if ( strcmp(ty_name,RES)==0 ) {
if ( new->t_outfile ) twice=YES ;
new->t_outfile= keeps(bol) ;
} else
if ( strcmp(ty_name,CALL)==0 ) {
if ( callname && strcmp(bol,callname)==0 ) {
name_seen=1 ;
callname= (char *)0 ;
#ifdef DEBUG
if ( debug>=3 ) {
vprint("found call name in %s\n",
new->t_name) ;
}
#endif
}
} else
if ( strcmp(ty_name,END)==0 ) {
break ;
} else {
@ -164,6 +194,15 @@ intrf() {
new->t_name,inname) ;
}
if ( ! new->t_argd ) new->t_argd="" ;
/* Warning, side effect */
if ( name_seen && new->t_rts ) {
if ( rts && strcmp(rts,new->t_rts)!=0 ) {
error("Attempt to use two run-time systems, %s and %s",
rts, new->t_rts) ;
}
rts= new->t_rts ;
keephead(rts) ; keeptail(rts) ;
}
#ifdef DEBUG
if ( debug>=3 ) {
register list_elem *elem ;
@ -200,15 +239,10 @@ open_in(name) register char *name ; {
}
/* Not in core */
incore= NO ;
#ifdef NEW
gr_cat(&rline,EM_DIR) ;
gr_cat(&rline,"/lib/n_ack/") ;
#else
gr_cat(&rline,ACK_DIR); gr_cat(&rline,"/") ;
#endif
gr_cat(&rline,EM_DIR) ; gr_cat(&rline,"/") ;
gr_cat(&rline,ACK_PATH); gr_cat(&rline,"/") ;
gr_cat(&rline,name) ;
infile= fopen(gr_start(rline),"r") ;
#ifdef NEW
if ( !infile ) {
/* Try to read EM_DIR/lib/MACH/plan */
gr_throw(&rline) ;
@ -217,7 +251,6 @@ open_in(name) register char *name ; {
gr_cat(&rline,"/plan") ;
infile= fopen(gr_start(rline),"r") ;
}
#endif
if ( !infile ) {
infile= fopen(name,"r") ;
}