ING_DB
This commit is contained in:
parent
0c70a330b3
commit
f8e51230e6
|
|
@ -0,0 +1,397 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/access.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/lock.h"
|
||||||
|
# include "../h/bs.h"
|
||||||
|
|
||||||
|
# ifdef P8000
|
||||||
|
ret_buf AAjmp_buf;
|
||||||
|
# else
|
||||||
|
jmp_buf AAjmp_buf;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
extern char *Parmvect[];
|
||||||
|
extern char *Flagvect[];
|
||||||
|
extern char *AAdbpath;
|
||||||
|
extern DESC Attdes;
|
||||||
|
static char db_name[MAXNAME + 1];
|
||||||
|
static char rel_name[MAXNAME + 1];
|
||||||
|
static int indent;
|
||||||
|
|
||||||
|
# define AMX_VAR 0
|
||||||
|
# define AMX_GET 1
|
||||||
|
# define AMX_RET 2
|
||||||
|
# define AMX_APP 3
|
||||||
|
# define AMX_DEL 4
|
||||||
|
# define AMX_REP 5
|
||||||
|
static int amx;
|
||||||
|
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register FILE *file;
|
||||||
|
register char **av;
|
||||||
|
register char *p;
|
||||||
|
# ifdef SETBUF
|
||||||
|
char buf[BUFSIZ];
|
||||||
|
# endif
|
||||||
|
extern char *AAproc_name;
|
||||||
|
|
||||||
|
p = argv[0];
|
||||||
|
switch (p[i = AAlength(p) - 3])
|
||||||
|
{
|
||||||
|
case 'A':
|
||||||
|
case 'a':
|
||||||
|
amx = AMX_APP;
|
||||||
|
AAproc_name = "AMXAPP";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'D':
|
||||||
|
case 'd':
|
||||||
|
amx = AMX_DEL;
|
||||||
|
AAproc_name = "AMXDEL";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'G':
|
||||||
|
case 'g':
|
||||||
|
amx = AMX_GET;
|
||||||
|
AAproc_name = "AMXGET";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'R':
|
||||||
|
case 'r':
|
||||||
|
if ((i = p[i + 2]) == 't' || i == 'T')
|
||||||
|
{
|
||||||
|
amx = AMX_RET;
|
||||||
|
AAproc_name = "AMXRET";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
amx = AMX_REP;
|
||||||
|
AAproc_name = "AMXREP";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
amx = AMX_VAR;
|
||||||
|
AAproc_name = "AMXVAR";
|
||||||
|
}
|
||||||
|
|
||||||
|
# ifdef xSTR1
|
||||||
|
AAtTrace(&argc, argv, 'X');
|
||||||
|
# endif
|
||||||
|
|
||||||
|
i = initucode(argc, argv, TRUE, (char **) 0, M_SHARE);
|
||||||
|
|
||||||
|
# ifdef xSTR2
|
||||||
|
AAtTfp(0, 1, "initucode=%d, AAdbpath='%s'\n", i, AAdbpath);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 5:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
case 6:
|
||||||
|
AAsyserr(0, "Die Datenbank '%s' existiert nicht", Parmvect[0]);
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
AAsyserr(0, "Sie duerfen auf die Datenbank '%s' nicht zugreifen", Parmvect[0]);
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer");
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
printf("Sie haben keinen Datenbanknamen angegeben\n");
|
||||||
|
usage:
|
||||||
|
AAsyserr(0, "HINWEIS: %s db_name rel_name [var_file]", AAproc_name);
|
||||||
|
|
||||||
|
default:
|
||||||
|
AAsyserr(22200, AAproc_name, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
for (av = Flagvect; p = *av; av++)
|
||||||
|
{
|
||||||
|
if (p[0] != '-')
|
||||||
|
goto badflag;
|
||||||
|
switch (p[1])
|
||||||
|
{
|
||||||
|
case '1':
|
||||||
|
case '2':
|
||||||
|
case '3':
|
||||||
|
case '4':
|
||||||
|
case '5':
|
||||||
|
case '6':
|
||||||
|
case '7':
|
||||||
|
case '8':
|
||||||
|
case '9':
|
||||||
|
indent = p[1] - '0';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
badflag:
|
||||||
|
printf("Unbekanntes Flag '%s'\n", p);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i)
|
||||||
|
{
|
||||||
|
term:
|
||||||
|
AAunlall();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Parmvect[1])
|
||||||
|
{
|
||||||
|
printf("Sie haben keinen Relationsnamen angegeben\n");
|
||||||
|
goto usage;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(file = fopen(p = "a", "w")))
|
||||||
|
{
|
||||||
|
error(5704, AAproc_name, p, (char *) 0);
|
||||||
|
goto term;
|
||||||
|
}
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(file, buf);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
if (chdir(AAdbpath) < 0)
|
||||||
|
AAsyserr(22201, AAproc_name, AAdbpath);
|
||||||
|
|
||||||
|
# ifdef xSTR2
|
||||||
|
AAtTfp(1, 0, "entered database %s\n", AAdbpath);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* initialize access methods (and AAdmin struct) for user_ovrd test */
|
||||||
|
AAam_start();
|
||||||
|
opencatalog(AA_REL, 0);
|
||||||
|
|
||||||
|
mk_var(file);
|
||||||
|
|
||||||
|
/* logout database */
|
||||||
|
closecatalog(TRUE);
|
||||||
|
AAunldb();
|
||||||
|
AAam_exit();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
rubproc()
|
||||||
|
{
|
||||||
|
AAunlall();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *AAvmove(src, len)
|
||||||
|
register char *src;
|
||||||
|
register int len;
|
||||||
|
{
|
||||||
|
register char *dst;
|
||||||
|
static char dst_buf[MAXFIELD + 1];
|
||||||
|
|
||||||
|
dst = dst_buf;
|
||||||
|
src += len++;
|
||||||
|
while (--len && *--src == ' ')
|
||||||
|
continue;
|
||||||
|
dst += len++;
|
||||||
|
*dst = 0;
|
||||||
|
while (--len)
|
||||||
|
*--dst = *src--;
|
||||||
|
return (dst_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int mk_var(file)
|
||||||
|
register FILE *file;
|
||||||
|
{
|
||||||
|
register DESC *d;
|
||||||
|
register struct attribute *a;
|
||||||
|
register int i;
|
||||||
|
register int len;
|
||||||
|
register char *name;
|
||||||
|
struct attribute att;
|
||||||
|
DESC des;
|
||||||
|
extern char *AAvmove();
|
||||||
|
|
||||||
|
d = &des;
|
||||||
|
a = &att;
|
||||||
|
opencatalog(AA_ATT, 0);
|
||||||
|
|
||||||
|
name = Parmvect[1];
|
||||||
|
i = AArelopen(d, 0, name);
|
||||||
|
if (i == AMOPNVIEW_ERR)
|
||||||
|
return (error(5702, AAproc_name, name, (char *) 0));
|
||||||
|
if (i > 0)
|
||||||
|
return (error(5701, AAproc_name, name, (char *) 0));
|
||||||
|
if (i < 0)
|
||||||
|
AAsyserr(21179, AAproc_name, name, i);
|
||||||
|
if ((d->reldum.relstat & S_PROTALL) && (d->reldum.relstat & S_PROTRET) &&
|
||||||
|
!AAbequal(AAusercode, d->reldum.relowner, 2))
|
||||||
|
{
|
||||||
|
AArelclose(d);
|
||||||
|
error(5703, AAproc_name, name, (char *) 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (amx)
|
||||||
|
{
|
||||||
|
case AMX_APP:
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "append %s\n", name);
|
||||||
|
goto lbrkt;
|
||||||
|
|
||||||
|
case AMX_DEL:
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "delete\n");
|
||||||
|
return;
|
||||||
|
|
||||||
|
case AMX_GET:
|
||||||
|
prefix(file);
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "get %s Otidp\n", name);
|
||||||
|
# else
|
||||||
|
fprintf(file, "get %s tidp\n", name);
|
||||||
|
# endif
|
||||||
|
goto lbrkt;
|
||||||
|
|
||||||
|
case AMX_REP:
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "replace\n");
|
||||||
|
goto lbrkt;
|
||||||
|
|
||||||
|
case AMX_RET:
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "retrieve %s\n", name);
|
||||||
|
lbrkt:
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "(\n");
|
||||||
|
if (amx == AMX_RET)
|
||||||
|
{
|
||||||
|
prefix(file);
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "\tOtidp,\n");
|
||||||
|
# else
|
||||||
|
fprintf(file, "\ttidp,\n");
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fprintf(file, "\n\/\* vars of relation %s \*\/\n", name);
|
||||||
|
prefix(file);
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "tid\t\tOtidp;\n");
|
||||||
|
# else
|
||||||
|
fprintf(file, "tid\t\ttidp;\n");
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
seq_init(&Attdes, d);
|
||||||
|
for (i = 1; seq_attributes(&Attdes, d, a); i++)
|
||||||
|
{
|
||||||
|
if (amx != AMX_VAR)
|
||||||
|
{
|
||||||
|
if (i > 1)
|
||||||
|
fprintf(file, ",\n");
|
||||||
|
prefix(file);
|
||||||
|
putc('\t', file);
|
||||||
|
name = AAvmove(a->attname, MAXNAME);
|
||||||
|
}
|
||||||
|
switch (amx)
|
||||||
|
{
|
||||||
|
case AMX_APP:
|
||||||
|
case AMX_REP:
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "$%s = O%s", name, name);
|
||||||
|
# else
|
||||||
|
fprintf(file, "$%s = %s", name, name);
|
||||||
|
# endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AMX_GET:
|
||||||
|
case AMX_RET:
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "O%s = $%s", name, name);
|
||||||
|
# else
|
||||||
|
fprintf(file, "%s = $%s", name, name);
|
||||||
|
# endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
len = ctou(a->attfrml);
|
||||||
|
switch (a->attfrmt)
|
||||||
|
{
|
||||||
|
case INT:
|
||||||
|
prefix(file);
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "i%d\t\tO%s;\n",
|
||||||
|
# else
|
||||||
|
fprintf(file, "i%d\t\t%s;\n",
|
||||||
|
# endif
|
||||||
|
len, AAvmove(a->attname, MAXNAME));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FLOAT:
|
||||||
|
prefix(file);
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "f%d\t\tO%s;\n",
|
||||||
|
# else
|
||||||
|
fprintf(file, "f%d\t\t%s;\n",
|
||||||
|
# endif
|
||||||
|
len, AAvmove(a->attname, MAXNAME));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR:
|
||||||
|
prefix(file);
|
||||||
|
# ifdef PSI
|
||||||
|
fprintf(file, "char\t\tO%s[%d];\n",
|
||||||
|
# else
|
||||||
|
fprintf(file, "char\t\t%s[%d];\n",
|
||||||
|
# endif
|
||||||
|
AAvmove(a->attname, MAXNAME), len + 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (amx != AMX_VAR)
|
||||||
|
{
|
||||||
|
putc('\n', file);
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, ")\n");
|
||||||
|
if (amx == AMX_GET || amx == AMX_RET)
|
||||||
|
{
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "{\n");
|
||||||
|
prefix(file);
|
||||||
|
fprintf(file, "}\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
AArelclose(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int prefix(file)
|
||||||
|
register FILE *file;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
fprintf(file, "##");
|
||||||
|
if (!(i = indent))
|
||||||
|
putc(' ', file);
|
||||||
|
else
|
||||||
|
while (i--)
|
||||||
|
putc('\t', file);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,256 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/access.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/lock.h"
|
||||||
|
# include "../h/bs.h"
|
||||||
|
|
||||||
|
# ifdef P8000
|
||||||
|
ret_buf AAjmp_buf;
|
||||||
|
# else
|
||||||
|
jmp_buf AAjmp_buf;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
extern char *Parmvect[];
|
||||||
|
extern char *Flagvect[];
|
||||||
|
extern char *AAdbpath;
|
||||||
|
extern DESC Attdes;
|
||||||
|
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register FILE *file;
|
||||||
|
register char **av;
|
||||||
|
register char *p;
|
||||||
|
register int oflag;
|
||||||
|
register int rflag;
|
||||||
|
# ifdef SETBUF
|
||||||
|
char buf[BUFSIZ];
|
||||||
|
# endif
|
||||||
|
extern char *AAproc_name;
|
||||||
|
|
||||||
|
AAproc_name = "RD";
|
||||||
|
|
||||||
|
# ifdef xSTR1
|
||||||
|
AAtTrace(&argc, argv, 'X');
|
||||||
|
# endif
|
||||||
|
|
||||||
|
i = initucode(argc, argv, TRUE, (char **) 0, M_SHARE);
|
||||||
|
|
||||||
|
# ifdef xSTR2
|
||||||
|
AAtTfp(0, 1, "initucode=%d, AAdbpath='%s'\n", i, AAdbpath);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 5:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
case 6:
|
||||||
|
AAsyserr(0, "Die Datenbank '%s' existiert nicht", Parmvect[0]);
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
AAsyserr(0, "Sie duerfen auf die Datenbank '%s' nicht zugreifen", Parmvect[0]);
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer");
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
printf("Sie haben keinen Datenbanknamen angegeben\n");
|
||||||
|
usage:
|
||||||
|
AAsyserr(0, "HINWEIS: rd db_name rel_name [desc_file]");
|
||||||
|
|
||||||
|
default:
|
||||||
|
AAsyserr(22200, AAproc_name, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
rflag = oflag = 0;
|
||||||
|
for (av = Flagvect; p = *av; av++)
|
||||||
|
{
|
||||||
|
if (p[0] != '-')
|
||||||
|
goto badflag;
|
||||||
|
switch (p[1])
|
||||||
|
{
|
||||||
|
case 'o':
|
||||||
|
case 'O':
|
||||||
|
if (!p[1])
|
||||||
|
goto badflag;
|
||||||
|
oflag++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'r':
|
||||||
|
case 'R':
|
||||||
|
if (!p[1])
|
||||||
|
goto badflag;
|
||||||
|
rflag++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
badflag:
|
||||||
|
printf("Unbekanntes Flag '%s'\n", p);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i)
|
||||||
|
{
|
||||||
|
term:
|
||||||
|
AAunlall();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Parmvect[1])
|
||||||
|
{
|
||||||
|
printf("Sie haben keinen Relationsnamen angegeben\n");
|
||||||
|
goto usage;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oflag)
|
||||||
|
file = stdout;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = Parmvect[2];
|
||||||
|
if (!p)
|
||||||
|
p = rflag? "report": "desc";
|
||||||
|
if (!(file = fopen(p, "w")))
|
||||||
|
{
|
||||||
|
error(5704, AAproc_name, p, (char *) 0);
|
||||||
|
goto term;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(file, buf);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
if (chdir(AAdbpath) < 0)
|
||||||
|
AAsyserr(22201, AAproc_name, AAdbpath);
|
||||||
|
|
||||||
|
# ifdef xSTR2
|
||||||
|
AAtTfp(1, 0, "entered database %s\n", AAdbpath);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* initialize access methods (and AAdmin struct) for user_ovrd test */
|
||||||
|
AAam_start();
|
||||||
|
opencatalog(AA_REL, 0);
|
||||||
|
|
||||||
|
mk_desc(file, rflag);
|
||||||
|
|
||||||
|
/* logout database */
|
||||||
|
closecatalog(TRUE);
|
||||||
|
AAunldb();
|
||||||
|
AAam_exit();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
rubproc()
|
||||||
|
{
|
||||||
|
AAunlall();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mk_desc(file, rflag)
|
||||||
|
register FILE *file;
|
||||||
|
register int rflag;
|
||||||
|
{
|
||||||
|
register DESC *d;
|
||||||
|
register struct attribute *a;
|
||||||
|
register int i;
|
||||||
|
register char *name;
|
||||||
|
struct attribute att;
|
||||||
|
DESC des;
|
||||||
|
|
||||||
|
d = &des;
|
||||||
|
a = &att;
|
||||||
|
opencatalog(AA_ATT, 0);
|
||||||
|
|
||||||
|
name = Parmvect[1];
|
||||||
|
i = AArelopen(d, 0, name);
|
||||||
|
if (i == AMOPNVIEW_ERR)
|
||||||
|
return (error(5702, AAproc_name, name, (char *) 0));
|
||||||
|
if (i > 0)
|
||||||
|
return (error(5701, AAproc_name, name, (char *) 0));
|
||||||
|
if (i < 0)
|
||||||
|
AAsyserr(21179, AAproc_name, name, i);
|
||||||
|
if ((d->reldum.relstat & S_PROTALL) && (d->reldum.relstat & S_PROTRET) &&
|
||||||
|
!AAbequal(AAusercode, d->reldum.relowner, 2))
|
||||||
|
{
|
||||||
|
AArelclose(d);
|
||||||
|
error(5703, AAproc_name, name, (char *) 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rflag)
|
||||||
|
{
|
||||||
|
fprintf(file, "report r_code # desc\n");
|
||||||
|
fprintf(file, "with\n");
|
||||||
|
fprintf(file, "\t\/\* page layout \*\/\n\n");
|
||||||
|
fprintf(file, "\t\/\* procedures \*\/\n\n");
|
||||||
|
fprintf(file, "\t\/\* variables \*\/\n\n");
|
||||||
|
fprintf(file, "\t\/\* switches \*\/\n\n");
|
||||||
|
fprintf(file, "\t\/\* domains \*\/\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
seq_init(&Attdes, d);
|
||||||
|
for (i = 1; seq_attributes(&Attdes, d, a); i++)
|
||||||
|
{
|
||||||
|
if (!rflag)
|
||||||
|
{
|
||||||
|
putc(a->attfrmt, file);
|
||||||
|
putc(a->attfrml, file);
|
||||||
|
name = (char *) &a->attoff;
|
||||||
|
putc(*name, file);
|
||||||
|
name++;
|
||||||
|
putc(*name, file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(file, "\tdefine #%.12s = ", a->attname);
|
||||||
|
switch (a->attfrmt)
|
||||||
|
{
|
||||||
|
case INT:
|
||||||
|
fprintf(file, "integer");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FLOAT:
|
||||||
|
fprintf(file, "real ");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR:
|
||||||
|
fprintf(file, "char ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fprintf(file, " %3d\n", ctou(a->attfrml));
|
||||||
|
}
|
||||||
|
if (rflag)
|
||||||
|
{
|
||||||
|
fprintf(file, "\nas\n\n");
|
||||||
|
fprintf(file, "on pagebegin do\n");
|
||||||
|
fprintf(file, "end\n\n");
|
||||||
|
fprintf(file, "on pageend do\n");
|
||||||
|
fprintf(file, "end\n\n");
|
||||||
|
fprintf(file, "on linebegin do\n");
|
||||||
|
fprintf(file, "end\n\n");
|
||||||
|
fprintf(file, "on lineend do\n");
|
||||||
|
fprintf(file, "end\n\n");
|
||||||
|
fprintf(file, "on batchline do\n");
|
||||||
|
fprintf(file, "end\n\n");
|
||||||
|
fprintf(file, "for all do\n");
|
||||||
|
fprintf(file, "\tfor one do\n");
|
||||||
|
fprintf(file, "\tend one\n");
|
||||||
|
fprintf(file, "end all\n");
|
||||||
|
fprintf(file, ";\n");
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
AArelclose(d);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue