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"
|
#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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue