Modifications on the generics in C file
Adding error output when the compilation fails (fullfilling a user request)
This commit is contained in:
parent
fbb4746fff
commit
0efb10cf0a
|
@ -71,7 +71,7 @@
|
|||
#include "mbkgen.h"
|
||||
#define __GENLIB__
|
||||
#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 *
|
||||
|
@ -2796,7 +2796,20 @@ lofig_list *ptfig;
|
|||
}
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -3045,7 +3058,20 @@ chain_list *ptchain = NULL;
|
|||
addchain((chain_list *)NULL, (void *)signame), 'I');
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -3443,25 +3469,99 @@ chain_list *chain;
|
|||
(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 *
|
||||
*******************************************************************************/
|
||||
void genLOGEN(char *name, int type)
|
||||
void genLOGEN(char *name, int type, ...)
|
||||
{
|
||||
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)
|
||||
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)fputs("*** genlib error ***\n", stderr);
|
||||
(void)fprintf(stderr, "Illegal LOGEN: unsupported generic type\n");
|
||||
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);
|
||||
}
|
||||
|
||||
f = getlofig(i->FIGNAME, 'P');
|
||||
p = getptype(f->USER, LOGEN);
|
||||
p = getptype(i->USER, LOGEN);
|
||||
if (!p) {
|
||||
(void)fflush(stdout);
|
||||
(void)fputs("*** genlib error ***\n", stderr);
|
||||
|
@ -3503,23 +3602,24 @@ char *s, *t;
|
|||
}
|
||||
|
||||
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) {
|
||||
case INTEGER_GEN:
|
||||
((logen_list *)p->DATA)->TYPE = INTEGER_GEN;
|
||||
((logen_list *)p->DATA)->VALUE.VAL = va_arg(ap, long);
|
||||
case GENTYPE_VAL:
|
||||
case GENTYPE_HEX:
|
||||
g->VALUE.VAL = va_arg(ap, long);
|
||||
break;
|
||||
case STRING_GEN:
|
||||
((logen_list *)p->DATA)->TYPE = STRING_GEN;
|
||||
case GENTYPE_TEXT:
|
||||
s = va_arg(ap, char *);
|
||||
t = malloc((strlen(s) + 3) * sizeof(char));
|
||||
sprintf(t, "\"%s\"", s);
|
||||
((logen_list *)p->DATA)->VALUE.TEXT = namealloc(t);
|
||||
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);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/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
|
||||
|
||||
echo "genlib:error: Compilation failed."
|
||||
echo "error messages:"
|
||||
cat $CSOURCE.grr
|
||||
exit $exit_code
|
||||
|
||||
else
|
||||
|
|
|
@ -108,7 +108,7 @@ extern void genSC_TOP();
|
|||
extern void genSC_BOTTOM();
|
||||
extern void genSC_CHANNEL();
|
||||
extern void genSC_CON_CHANNEL();
|
||||
extern void genLOGEN();
|
||||
extern void genLOGEN(char *, int, ...);;
|
||||
extern void genSETLOGEN(char *, char *, ...);
|
||||
/*******************************************************************************
|
||||
* name forming functions, for both views *
|
||||
|
@ -358,8 +358,15 @@ extern char *genNAME(char *, ...);
|
|||
/* Quick and dirty hack as required */
|
||||
#define LOGEN 21
|
||||
|
||||
#define INTEGER_GEN 2
|
||||
#define STRING_GEN 4
|
||||
#define GENTYPE_EMPTY 0
|
||||
#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
|
||||
{
|
||||
|
@ -378,6 +385,7 @@ typedef struct logen
|
|||
extern logen_list *addlogen(logen_list *,char *);
|
||||
extern logen_list *getlogen(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 *dellogen(logen_list *, char *name);
|
||||
|
||||
|
|
Loading…
Reference in New Issue