home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_300
/
338_02
/
list.c
< prev
next >
Wrap
Text File
|
1989-10-04
|
4KB
|
142 lines
#include <stdio.h>
#include "c.h"
#include "expr.h"
#include "gen.h"
#include "cglbdec.h"
/*
* 68000 C compiler
*
* Copyright 1984, 1985, 1986 Matthew Brandt.
* all commercial rights reserved.
*
* This compiler is intended as an instructive tool for personal use. Any
* use for profit without the written consent of the author is prohibited.
*
* This compiler may be distributed freely for non-commercial use as long
* as this notice stays intact. Please forward any enhancements or questions
* to:
*
* Matthew Brandt
* Box 920337
* Norcross, Ga 30092
*/
put_sc(scl)
int scl;
{ switch(scl) {
case sc_static:
fprintf(list," Static ");
break;
case sc_auto:
fprintf(list," Auto ");
break;
case sc_global:
fprintf(list," Global ");
break;
case sc_external:
fprintf(list," External ");
break;
case sc_type:
fprintf(list," Type ");
break;
case sc_const:
fprintf(list," Constant ");
break;
case sc_member:
fprintf(list," Member ");
break;
case sc_label:
fprintf(list," Label");
break;
case sc_ulabel:
fprintf(list," Undefined label");
break;
}
}
put_ty(tp)
TYP *tp;
{ if(tp == 0)
return;
switch(tp->type) {
case bt_char:
fprintf(list,"Char");
break;
case bt_short:
fprintf(list,"Short");
break;
case bt_enum:
fprintf(list,"enum ");
goto ucont;
case bt_long:
fprintf(list,"Long");
break;
case bt_unsigned:
fprintf(list,"unsigned long");
break;
case bt_float:
fprintf(list,"Float");
break;
case bt_double:
fprintf(list,"Double");
break;
case bt_pointer:
if( tp->val_flag == 0)
fprintf(list,"Pointer to ");
else
fprintf(list,"Array of ");
put_ty(tp->btp);
break;
case bt_union:
fprintf(list,"union ");
goto ucont;
case bt_struct:
fprintf(list,"struct ");
ucont: if(tp->sname == 0)
fprintf(list,"<no name> ");
else
fprintf(list,"%s ",tp->sname);
break;
case bt_ifunc:
case bt_func:
fprintf(list,"Function returning ");
put_ty(tp->btp);
break;
}
}
list_var(sp,i)
SYM *sp;
int i;
{ int j;
for(j = i; j; --j)
fprintf(list," ");
fprintf(list,"%-10s =%06x ",sp->name,sp->value.u);
if( sp->storage_class == sc_external)
fprintf(output,"*\tglobal\t%s\n",sp->name);
else if( sp->storage_class == sc_global )
fprintf(output,"*\tglobal\t%s\n",sp->name);
put_sc(sp->storage_class);
put_ty(sp->tp);
fprintf(list,"\n");
if(sp->tp == 0)
return;
if((sp->tp->type == bt_struct || sp->tp->type == bt_union) &&
sp->storage_class == sc_type)
list_table(&(sp->tp->lst),i+1);
}
list_table(t,i)
TABLE *t;
int i;
{ SYM *sp;
sp = t->head;
while(sp != NULL) {
list_var(sp,i);
sp = sp->next;
}
}