Modifications on the generics in C file

Adding error output when the compilation fails (fullfilling a user
request)
This commit is contained in:
Frederic Petrot 2002-06-06 15:46:49 +00:00
parent fbb4746fff
commit 0efb10cf0a
3 changed files with 143 additions and 33 deletions

View File

@ -71,7 +71,7 @@
#include "mbkgen.h" #include "mbkgen.h"
#define __GENLIB__ #define __GENLIB__
#include "mgn.h" #include "mgn.h"
static char rcsid[] = "$Id"; static char rcsid[] = "$Id: genlib.c,v 1.6 2002/06/06 15:46:48 fred Exp $";
/******************************************************************************* /*******************************************************************************
* global variables used in genlib * * global variables used in genlib *
@ -2796,7 +2796,20 @@ lofig_list *ptfig;
} }
ptchain = addchain(ptchain, (void *)ptsig); ptchain = addchain(ptchain, (void *)ptsig);
} }
(void)addloins(WORK_LOFIG, insname, ptfig, ptchain); {
loins_list *ptins;
ptype_list *pt;
ptins = addloins(WORK_LOFIG, insname, ptfig, ptchain);
pt = getptype(ptfig->USER, LOGEN);
if (pt) {
logen_list *g;
ptins->USER = addptype(ptins->USER, LOGEN, NULL);
for (g = pt->DATA; g; g = g->NEXT) {
ptins->USER->DATA = (ptype_list *)duplogenlist(g, ptins->USER->DATA, g->NAME);
}
}
}
va_end(arg); va_end(arg);
} }
@ -3045,7 +3058,20 @@ chain_list *ptchain = NULL;
addchain((chain_list *)NULL, (void *)signame), 'I'); addchain((chain_list *)NULL, (void *)signame), 'I');
ptchain = addchain(ptchain, (void *)ptsig); ptchain = addchain(ptchain, (void *)ptsig);
} }
(void)addloins(WORK_LOFIG, insname, ptfig, ptchain); {
loins_list *ptins;
ptype_list *pt;
ptins = addloins(WORK_LOFIG, insname, ptfig, ptchain);
pt = getptype(ptfig->USER, LOGEN);
if (pt) {
logen_list *g;
ptins->USER = addptype(ptins->USER, LOGEN, NULL);
for (g = pt->DATA; g; g = g->NEXT) {
ptins->USER->DATA = (ptype_list *)duplogenlist(g, ptins->USER->DATA, g->NAME);
}
}
}
va_end(arg); va_end(arg);
} }
@ -3443,25 +3469,99 @@ chain_list *chain;
(void)dellosig(WORK_LOFIG, ls2->INDEX); (void)dellosig(WORK_LOFIG, ls2->INDEX);
} }
/*******************************************************************************
* function LOGENLIST *
*******************************************************************************/
logen_list *genLOGENLIST(int type, ...)
{
va_list ap;
int v;
char *s, *t;
logen_list *g = NULL, *x = NULL;
va_start(ap, type);
while (type != GENTYPE_EMPTY) {
g = addlogen(g, NULL);
g->TYPE = type;
switch (type) {
case GENTYPE_VAL:
case GENTYPE_HEX:
g->VALUE.VAL = va_arg(ap, long);
break;
case GENTYPE_TEXT:
s = va_arg(ap, char *);
t = malloc((strlen(s) + 3) * sizeof(char));
sprintf(t, "\"%s\"", s);
g->VALUE.TEXT = namealloc(t);
free(t);
break;
case GENTYPE_BIT:
g->VALUE.CHAR = '0' + (va_arg(ap, long)&1);
break;
case GENTYPE_LIST:
g->VALUE.LIST = va_arg(ap, logen_list *);
break;
default:
(void)fflush(stdout);
(void)fputs("*** genlib error ***\n", stderr);
(void)fprintf(stderr, "Illegal LOGENLIST: unsupported generic type\n");
EXIT(1);
}
type = va_arg(ap, int);
}
return reverse((chain_list *)g);
}
/******************************************************************************* /*******************************************************************************
* function LOGEN * * function LOGEN *
*******************************************************************************/ *******************************************************************************/
void genLOGEN(char *name, int type) void genLOGEN(char *name, int type, ...)
{ {
ptype_list *p = getptype(WORK_LOFIG->USER, LOGEN); ptype_list *p = getptype(WORK_LOFIG->USER, LOGEN);
va_list ap; /* We have a single argument, but of unknown type yet! */
char *s, *t;
logen_list *g;
if (!p) if (!p)
p = WORK_LOFIG->USER = addptype(WORK_LOFIG->USER, LOGEN, NULL); p = WORK_LOFIG->USER = addptype(WORK_LOFIG->USER, LOGEN, NULL);
p->DATA = addlogen(p->DATA, name); p->DATA = g = addlogen(p->DATA, name);
if (type != INTEGER_GEN && type != STRING_GEN) { if (type < 0 && type > GENTYPE_MAX) {
(void)fflush(stdout); (void)fflush(stdout);
(void)fputs("*** genlib error ***\n", stderr); (void)fputs("*** genlib error ***\n", stderr);
(void)fprintf(stderr, "Illegal LOGEN: unsupported generic type\n"); (void)fprintf(stderr, "Illegal LOGEN: unsupported generic type\n");
EXIT(1); EXIT(1);
} }
((logen_list *)p->DATA)->TYPE = type; g->TYPE = type;
va_start(ap, type);
switch (type) {
case GENTYPE_VAL:
case GENTYPE_HEX:
g->VALUE.VAL = va_arg(ap, long);
break;
case GENTYPE_TEXT:
s = va_arg(ap, char *);
t = malloc((strlen(s) + 3) * sizeof(char));
sprintf(t, "\"%s\"", s);
g->VALUE.TEXT = namealloc(t);
free(t);
break;
case GENTYPE_BIT:
g->VALUE.CHAR = '0' + (va_arg(ap, long)&1);
break;
case GENTYPE_LIST:
g->VALUE.LIST = va_arg(ap, logen_list *);
break;
default:
(void)fflush(stdout);
(void)fputs("*** genlib error ***\n", stderr);
(void)fprintf(stderr, "Illegal LOGEN: unsupported generic type\n");
EXIT(1);
}
va_end(ap);
debuglogen(g, 0);
} }
/******************************************************************************* /*******************************************************************************
@ -3484,8 +3584,7 @@ char *s, *t;
EXIT(1); EXIT(1);
} }
f = getlofig(i->FIGNAME, 'P'); p = getptype(i->USER, LOGEN);
p = getptype(f->USER, LOGEN);
if (!p) { if (!p) {
(void)fflush(stdout); (void)fflush(stdout);
(void)fputs("*** genlib error ***\n", stderr); (void)fputs("*** genlib error ***\n", stderr);
@ -3503,28 +3602,29 @@ char *s, *t;
} }
va_start(ap, name); va_start(ap, name);
p = getptype(i->USER, LOGEN);
if (!p)
p = i->USER = addptype(i->USER, LOGEN, NULL);
p->DATA = addlogen(p->DATA, name);
switch (g->TYPE) { switch (g->TYPE) {
case INTEGER_GEN: case GENTYPE_VAL:
((logen_list *)p->DATA)->TYPE = INTEGER_GEN; case GENTYPE_HEX:
((logen_list *)p->DATA)->VALUE.VAL = va_arg(ap, long); g->VALUE.VAL = va_arg(ap, long);
break; break;
case STRING_GEN: case GENTYPE_TEXT:
((logen_list *)p->DATA)->TYPE = STRING_GEN; s = va_arg(ap, char *);
s = va_arg(ap, char *); t = malloc((strlen(s) + 3) * sizeof(char));
t = malloc((strlen(s) + 3) * sizeof(char)); sprintf(t, "\"%s\"", s);
sprintf(t, "\"%s\"", s); g->VALUE.TEXT = namealloc(t);
((logen_list *)p->DATA)->VALUE.TEXT = namealloc(t); free(t);
free(t); break;
break; case GENTYPE_BIT:
g->VALUE.CHAR = '0' + (va_arg(ap, long)&1);
break;
case GENTYPE_LIST:
g->VALUE.LIST = va_arg(ap, logen_list *);
break;
default: default:
(void)fflush(stdout); (void)fflush(stdout);
(void)fputs("*** genlib error ***\n", stderr); (void)fputs("*** genlib error ***\n", stderr);
(void)fprintf(stderr, "Illegal SETLOGEN: unsupported generic type\n"); (void)fprintf(stderr, "Illegal SETLOGEN: unsupported generic type\n");
EXIT(1); EXIT(1);
} }
va_end(ap); va_end(ap);
} }

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# $Id: genlib.sh,v 1.4 2002/05/28 16:22:13 jpc Exp $ # $Id: genlib.sh,v 1.5 2002/06/06 15:46:49 fred Exp $
# #
# /------------------------------------------------------------------\ # /------------------------------------------------------------------\
# | | # | |
@ -310,6 +310,8 @@ EOF
if [ $KEEP_MAKEFILE != "y" ]; then rm -f $MAKEFILE; fi if [ $KEEP_MAKEFILE != "y" ]; then rm -f $MAKEFILE; fi
echo "genlib:error: Compilation failed." echo "genlib:error: Compilation failed."
echo "error messages:"
cat $CSOURCE.grr
exit $exit_code exit $exit_code
else else

View File

@ -108,7 +108,7 @@ extern void genSC_TOP();
extern void genSC_BOTTOM(); extern void genSC_BOTTOM();
extern void genSC_CHANNEL(); extern void genSC_CHANNEL();
extern void genSC_CON_CHANNEL(); extern void genSC_CON_CHANNEL();
extern void genLOGEN(); extern void genLOGEN(char *, int, ...);;
extern void genSETLOGEN(char *, char *, ...); extern void genSETLOGEN(char *, char *, ...);
/******************************************************************************* /*******************************************************************************
* name forming functions, for both views * * name forming functions, for both views *
@ -358,8 +358,15 @@ extern char *genNAME(char *, ...);
/* Quick and dirty hack as required */ /* Quick and dirty hack as required */
#define LOGEN 21 #define LOGEN 21
#define INTEGER_GEN 2 #define GENTYPE_EMPTY 0
#define STRING_GEN 4 #define GENTYPE_BIT 1
#define GENTYPE_VAL 2
#define GENTYPE_ARG 3
#define GENTYPE_TEXT 4
#define GENTYPE_LIST 5
#define GENTYPE_HEX 6
#define GENTYPE_MAX 6
typedef struct logen typedef struct logen
{ {
@ -378,6 +385,7 @@ typedef struct logen
extern logen_list *addlogen(logen_list *,char *); extern logen_list *addlogen(logen_list *,char *);
extern logen_list *getlogen(logen_list *,char *); extern logen_list *getlogen(logen_list *,char *);
extern logen_list *duplogen(logen_list *,logen_list *, char *); extern logen_list *duplogen(logen_list *,logen_list *, char *);
extern logen_list *duplogenlist(logen_list *,logen_list *, char *);
extern logen_list *chklogen(logen_list *,logen_list *, char *, char *); extern logen_list *chklogen(logen_list *,logen_list *, char *, char *);
extern logen_list *dellogen(logen_list *, char *name); extern logen_list *dellogen(logen_list *, char *name);