ING_DB
This commit is contained in:
parent
e36a55301a
commit
62f1f47075
|
|
@ -0,0 +1,157 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# ifdef MSDOS
|
||||||
|
# include "../h/gen.h"
|
||||||
|
# include <fcntl.h>
|
||||||
|
|
||||||
|
# define AA_atoi v6_atoi
|
||||||
|
# else
|
||||||
|
# include "../conf/gen.h"
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# define LINES 32
|
||||||
|
# define CNTR 1000
|
||||||
|
|
||||||
|
static char cntr[CNTR];
|
||||||
|
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
register char *p;
|
||||||
|
register int i;
|
||||||
|
register int cnt;
|
||||||
|
|
||||||
|
amxfile(argv[1]);
|
||||||
|
if (argc == 2)
|
||||||
|
return (0);
|
||||||
|
cnt = 0;
|
||||||
|
p = cntr;
|
||||||
|
for (i = CNTR; i; --i)
|
||||||
|
{
|
||||||
|
if (*p)
|
||||||
|
{
|
||||||
|
cnt = i;
|
||||||
|
*p++ = '*';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*p++ = ' ';
|
||||||
|
}
|
||||||
|
cnt = CNTR - cnt;
|
||||||
|
cnt = ((cnt + 9) / 10) * 10;
|
||||||
|
p = cntr;
|
||||||
|
for (i = 0; i < cnt; i += 10, p += 10)
|
||||||
|
{
|
||||||
|
if (!(i % 100))
|
||||||
|
{
|
||||||
|
printf("------------------\n");
|
||||||
|
printf(" | 0123456789 |\n");
|
||||||
|
printf("------------------\n");
|
||||||
|
}
|
||||||
|
printf("%3d | %.10s |\n", i / 10, p);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
amxfile(output)
|
||||||
|
char *output;
|
||||||
|
{
|
||||||
|
register char *p;
|
||||||
|
register int c;
|
||||||
|
register int i;
|
||||||
|
register int f;
|
||||||
|
int iff;
|
||||||
|
short ix;
|
||||||
|
long off;
|
||||||
|
char buf[2 * LINES];
|
||||||
|
# ifdef SETBUF
|
||||||
|
char inbuf[BUFSIZ];
|
||||||
|
# endif
|
||||||
|
extern long lseek();
|
||||||
|
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(stdin, inbuf);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
if ((f = creat(output, 0644)) < 0)
|
||||||
|
{
|
||||||
|
printf("cannot open output '%s'\n", output);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
# ifdef MSDOS
|
||||||
|
setmode(f, O_BINARY);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* read in the code and check for correct */
|
||||||
|
for ( ; ; )
|
||||||
|
{
|
||||||
|
p = buf;
|
||||||
|
while ((c = getchar()) != '\t')
|
||||||
|
{
|
||||||
|
if (c <= 0)
|
||||||
|
return;
|
||||||
|
*p++ = c;
|
||||||
|
}
|
||||||
|
*p = 0;
|
||||||
|
if (AA_atoi(buf, &ix))
|
||||||
|
{
|
||||||
|
printf("bad msg file '%s'\n", buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
iff = ix;
|
||||||
|
|
||||||
|
off = LINES * iff;
|
||||||
|
lseek(f, off, 0);
|
||||||
|
for (p = buf; p < &buf[2 * LINES]; p++)
|
||||||
|
*p = 0;
|
||||||
|
p = buf;
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
/* get the correct line */
|
||||||
|
for ( ; ; )
|
||||||
|
{
|
||||||
|
c = getchar();
|
||||||
|
i++;
|
||||||
|
if (c <= 0 || c == ERRDELIM)
|
||||||
|
{
|
||||||
|
if (iff > CNTR)
|
||||||
|
{
|
||||||
|
printf("msg no to '%d' too big\n", iff);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cntr[iff]++)
|
||||||
|
{
|
||||||
|
printf("dup msg %d\n", iff);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (i > 2 * LINES)
|
||||||
|
{
|
||||||
|
printf("too long msg '%s'\n", buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (i > LINES)
|
||||||
|
{
|
||||||
|
iff++;
|
||||||
|
if (cntr[iff]++)
|
||||||
|
{
|
||||||
|
printf("dup msg %d\n", iff);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
i = 2 * LINES;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
i = LINES;
|
||||||
|
write(f, buf, i);
|
||||||
|
if (c <= 0)
|
||||||
|
return;
|
||||||
|
if ((c = getchar()) != '\n')
|
||||||
|
{
|
||||||
|
printf("format error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*p++ = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,240 @@
|
||||||
|
# include "amx.h"
|
||||||
|
# ifdef MSDOS
|
||||||
|
# include <fcntl.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# define OUT_FLAG "-o"
|
||||||
|
|
||||||
|
extern char *AMX;
|
||||||
|
extern char AMXF;
|
||||||
|
extern char *A_out;
|
||||||
|
extern int Argc;
|
||||||
|
extern char **Argv;
|
||||||
|
extern int Xargc;
|
||||||
|
extern char **Xargv;
|
||||||
|
extern int Xerrors;
|
||||||
|
|
||||||
|
# ifndef MSDOS
|
||||||
|
/*
|
||||||
|
** GETPATH -- initialize the AApath variable
|
||||||
|
**
|
||||||
|
** Sets AApath to the home directory of the USERDBS
|
||||||
|
** [bs.h] user.
|
||||||
|
*/
|
||||||
|
getpath()
|
||||||
|
{
|
||||||
|
char line[MAXLINE + 1];
|
||||||
|
static char path[41];
|
||||||
|
static int reenter;
|
||||||
|
register int i;
|
||||||
|
register char *lp;
|
||||||
|
register FILE *iop;
|
||||||
|
char *field[UF_NFIELDS];
|
||||||
|
|
||||||
|
if (reenter)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
reenter++;
|
||||||
|
|
||||||
|
if (!(iop = fopen(AA_PASSWD, "r")))
|
||||||
|
{
|
||||||
|
printf("Passwordfile %s nicht lesbar\n", AA_PASSWD);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
AApath = path;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/* get a line from the AA_PASSWD */
|
||||||
|
i = 0;
|
||||||
|
for (lp = line; (*lp = getc(iop)) != '\n'; lp++)
|
||||||
|
{
|
||||||
|
if (*lp == (char) -1)
|
||||||
|
{
|
||||||
|
printf("Nutzer %s im Passwordfile %s nicht verzeichnet\n", USERDBS, AA_PASSWD);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (++i > sizeof line - 1)
|
||||||
|
{
|
||||||
|
*lp = '\0';
|
||||||
|
printf("Zeilenpufferueberlauf bei \"%s\"\n", line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*lp = '\0';
|
||||||
|
for (i = 0, lp = line; *lp; lp++)
|
||||||
|
{
|
||||||
|
if (*lp == ':')
|
||||||
|
{
|
||||||
|
*lp = '\0';
|
||||||
|
field[++i] = lp + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (!AAsequal(line, USERDBS));
|
||||||
|
fclose(iop);
|
||||||
|
|
||||||
|
/* check for enough fields for valid entry */
|
||||||
|
if (i < PF_HOME)
|
||||||
|
{
|
||||||
|
printf("Zu wenig Felder in dem Eintrag \"%s\"\n", line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check that pathname won't overflow static buffer */
|
||||||
|
if ((i = AAlength(field[PF_HOME]) + 1) > sizeof path)
|
||||||
|
{
|
||||||
|
printf("DBS-Pfadname \"%s\" ist zu lang\n", field[PF_HOME]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* move pathname into buffer */
|
||||||
|
AAbmove(field[PF_HOME], AApath, i);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
get_next_file()
|
||||||
|
{
|
||||||
|
register char *file;
|
||||||
|
register int extension;
|
||||||
|
register int i;
|
||||||
|
extern int end_amx();
|
||||||
|
extern char *AAcustomer();
|
||||||
|
extern char **talloc();
|
||||||
|
|
||||||
|
while (file = Argv[++Argc])
|
||||||
|
{
|
||||||
|
if (AAsequal(file, OUT_FLAG))
|
||||||
|
{
|
||||||
|
A_out = Argv[++Argc];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = AAlength(file);
|
||||||
|
extension = --i;
|
||||||
|
if (--i < 0 || (!(AAsequal(file + i, ".x"))
|
||||||
|
# ifdef MSDOS
|
||||||
|
&& !AAsequal(file + i, ".X")
|
||||||
|
# endif
|
||||||
|
))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
# ifdef MSDOS
|
||||||
|
printf("%s:\n", file);
|
||||||
|
# else
|
||||||
|
printf("%s -- %s/%c %s:\n",
|
||||||
|
AAcustomer(end_amx), AMX, AMXF, file);
|
||||||
|
# endif
|
||||||
|
if (!(FILE_inp = fopen(file, "r")))
|
||||||
|
{
|
||||||
|
amxerror(188, file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(FILE_inp, BUF_inp);
|
||||||
|
# endif
|
||||||
|
/* save source file name */
|
||||||
|
File_src = (char *) talloc(extension + 2);
|
||||||
|
AAbmove(file, File_src, extension + 2);
|
||||||
|
|
||||||
|
/* create amx file */
|
||||||
|
file[extension] = 'c';
|
||||||
|
if (!(FILE_amx = fopen(file, "w")))
|
||||||
|
yyexit(185, file);
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(FILE_amx, BUF_amx);
|
||||||
|
# endif
|
||||||
|
Xargv[Xargc++] = file;
|
||||||
|
|
||||||
|
/* create desc stream */
|
||||||
|
*Filespec = 'r';
|
||||||
|
close(creat(Filename, 0600));
|
||||||
|
if ((FILE_rel = open(Filename, 2)) < 0)
|
||||||
|
yyexit(1);
|
||||||
|
|
||||||
|
/* create tmp stream */
|
||||||
|
*Filespec = 'c';
|
||||||
|
if (!(FILE_tmp = fopen(Filename, "w")))
|
||||||
|
yyexit(1);
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(FILE_tmp, BUF_tmp);
|
||||||
|
# endif
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
end_file()
|
||||||
|
{
|
||||||
|
extern int AAcc_init;
|
||||||
|
|
||||||
|
/* close files and unlink temps */
|
||||||
|
if (FILE_inp)
|
||||||
|
{
|
||||||
|
fclose(FILE_inp);
|
||||||
|
FILE_inp = (FILE *) 0;
|
||||||
|
}
|
||||||
|
if (FILE_amx)
|
||||||
|
{
|
||||||
|
fclose(FILE_amx);
|
||||||
|
FILE_amx = (FILE *) 0;
|
||||||
|
}
|
||||||
|
if (FILE_tmp)
|
||||||
|
{
|
||||||
|
fclose(FILE_tmp);
|
||||||
|
FILE_tmp = (FILE *) 0;
|
||||||
|
}
|
||||||
|
if (FILE_scn)
|
||||||
|
{
|
||||||
|
fclose(FILE_scn);
|
||||||
|
FILE_scn = (FILE *) 0;
|
||||||
|
}
|
||||||
|
if (FILE_rel)
|
||||||
|
{
|
||||||
|
close(FILE_rel);
|
||||||
|
FILE_rel = -1;
|
||||||
|
}
|
||||||
|
*Filespec = 'r';
|
||||||
|
unlink(Filename);
|
||||||
|
*Filespec = 'c';
|
||||||
|
unlink(Filename);
|
||||||
|
*Filespec = 's';
|
||||||
|
unlink(Filename);
|
||||||
|
if (AAcc_init)
|
||||||
|
{
|
||||||
|
AAinpclose(&Indes);
|
||||||
|
AAunlall();
|
||||||
|
AAam_exit();
|
||||||
|
}
|
||||||
|
# ifdef MSDOS
|
||||||
|
fcloseall();
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
end_amx(stat)
|
||||||
|
register int stat;
|
||||||
|
{
|
||||||
|
# ifndef MSDOS
|
||||||
|
register char **argv;
|
||||||
|
register char *file;
|
||||||
|
|
||||||
|
argv = Xargv;
|
||||||
|
argv[Xargc] = (char *) 0;
|
||||||
|
while (file = *argv++)
|
||||||
|
unlink(file);
|
||||||
|
close(FILE_msg);
|
||||||
|
fflush(stdout);
|
||||||
|
# else
|
||||||
|
fcloseall();
|
||||||
|
# endif
|
||||||
|
exit(stat? stat: Xerrors);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AAndxsearch(d)
|
||||||
|
register DESC *d;
|
||||||
|
{
|
||||||
|
yyexit(207, d->reldum.relid);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,147 @@
|
||||||
|
# include "amx.h"
|
||||||
|
|
||||||
|
tmp(db, uflag)
|
||||||
|
register char *db;
|
||||||
|
char *uflag;
|
||||||
|
{
|
||||||
|
register char *p;
|
||||||
|
register int argc;
|
||||||
|
register char *id;
|
||||||
|
char *argv[4];
|
||||||
|
char arg[MAXNAME + 3];
|
||||||
|
char buf[MAXLINE + 1];
|
||||||
|
static char db_buf[MAXNAME + 1];
|
||||||
|
|
||||||
|
/* setup argvector for initucode */
|
||||||
|
AAbmove(db, db_buf, MAXNAME + 1);
|
||||||
|
*argv = db = db_buf;
|
||||||
|
argc = 1;
|
||||||
|
if (uflag)
|
||||||
|
{
|
||||||
|
argv[argc++] = p = arg;
|
||||||
|
*p++ = '-';
|
||||||
|
AAbmove(uflag, p, MAXNAME + 2);
|
||||||
|
}
|
||||||
|
argv[argc++] = db;
|
||||||
|
argv[argc] = (char *) 0;
|
||||||
|
switch (initucode(argc, argv, TRUE, (char *) 0, M_SHARE))
|
||||||
|
{
|
||||||
|
case 0: /* everything is ok */
|
||||||
|
case 5: /* ok, but there was an indirect token */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: /* the database does not exist */
|
||||||
|
case 6: /* dto., but there was an indirect token */
|
||||||
|
yyexit(9, db);
|
||||||
|
|
||||||
|
case 2: /* you are not authorisized to access this database */
|
||||||
|
yyexit(7, db);
|
||||||
|
|
||||||
|
case 3: /* you are not a valid DBS user */
|
||||||
|
yyexit(5, USERDBS);
|
||||||
|
|
||||||
|
case 4: /* no database name specified */
|
||||||
|
/* cannot happen */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* open data base */
|
||||||
|
# ifdef MSDOS
|
||||||
|
AAdatabase = Parmvect[0];
|
||||||
|
# endif
|
||||||
|
AAam_start();
|
||||||
|
|
||||||
|
if (AAdmin.adhdr.adflags & A_DBCONCUR)
|
||||||
|
setbit(A_DBCONCUR, Xlocks);
|
||||||
|
else
|
||||||
|
No_locks++;
|
||||||
|
|
||||||
|
if (AArelopen(&Indes, 0, AA_INDEX))
|
||||||
|
yyexit(8, AA_INDEX);
|
||||||
|
|
||||||
|
/* make believe catalog AA_REL is read only for concurrency */
|
||||||
|
/* that means, readed pages are not locked */
|
||||||
|
AAdmin.adreld.relopn = RELROPEN(AAdmin.adreld.relfp);
|
||||||
|
|
||||||
|
/* setup file name for scan temps */
|
||||||
|
*Filespec = 's';
|
||||||
|
|
||||||
|
/* write include files */
|
||||||
|
fprintf(FILE_amx, msg(49), AApath);
|
||||||
|
|
||||||
|
# ifdef AMX_SC
|
||||||
|
if (ExpImp < 0)
|
||||||
|
goto lookup;
|
||||||
|
# endif
|
||||||
|
/* write variables */
|
||||||
|
for (argc = 126; argc < 130; argc++)
|
||||||
|
fprintf(FILE_amx, msg(argc));
|
||||||
|
fprintf(FILE_amx, msg(30), AAusercode);
|
||||||
|
fprintf(FILE_amx, msg(31), AApath);
|
||||||
|
# ifdef MSDOS
|
||||||
|
fprintf(FILE_amx, msg(32));
|
||||||
|
for (argc = DBP_STD; argc < DBP_MAX; argc++)
|
||||||
|
fprintf(FILE_amx, msg(206), AAdbpath[argc]);
|
||||||
|
fprintf(FILE_amx, msg(201));
|
||||||
|
fprintf(FILE_amx, msg(204), AAdatabase);
|
||||||
|
|
||||||
|
if (Xbufs)
|
||||||
|
fprintf(FILE_amx, msg(35), (Xbufs * sizeof (ACCBUF)) / sizeof (int));
|
||||||
|
# else
|
||||||
|
fprintf(FILE_amx, msg(32), AAdbpath);
|
||||||
|
|
||||||
|
/* get user and group id of (alter ego) user */
|
||||||
|
getuser(AAusercode, p = buf);
|
||||||
|
getuser((char *) 0);
|
||||||
|
for (argc = -2; argc < 2; argc++)
|
||||||
|
{
|
||||||
|
id = p;
|
||||||
|
while (*p != ':')
|
||||||
|
p++;
|
||||||
|
*p++ = 0;
|
||||||
|
if (argc >= 0)
|
||||||
|
fprintf(FILE_amx, msg(28 + argc), id);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
# ifdef AMX_SC
|
||||||
|
lookup:
|
||||||
|
# endif
|
||||||
|
/* lookup catalogs */
|
||||||
|
rel_lookup(AA_REL, AMX_INTERNAL); /* = AA_0 */
|
||||||
|
rel_lookup(AA_ATT, AMX_INTERNAL); /* = AA_1 */
|
||||||
|
rel_lookup(AA_INDEX, AMX_INTERNAL); /* = AA_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ifndef MSDOS
|
||||||
|
char *AArelpath(rel)
|
||||||
|
register char *rel;
|
||||||
|
{
|
||||||
|
extern char *AAztack();
|
||||||
|
|
||||||
|
return (AAztack(AAztack(AAdbpath, "/"), rel));
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
# ifdef AMX_SC
|
||||||
|
import(file)
|
||||||
|
register char *file;
|
||||||
|
{
|
||||||
|
register FILE *inp;
|
||||||
|
|
||||||
|
ExpImp = -1;
|
||||||
|
if (!(inp = fopen(file, "r")))
|
||||||
|
yyexit(188, file);
|
||||||
|
# ifdef SETBUF
|
||||||
|
setbuf(inp, (char *) 0);
|
||||||
|
# endif
|
||||||
|
FILE_exp = FILE_inp;
|
||||||
|
FILE_inp = inp;
|
||||||
|
Line_exp = Line;
|
||||||
|
Line = 1;
|
||||||
|
backup('\n');
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "constants.h"
|
||||||
|
# include "globals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** NAME -- Process an identifier or keyword token.
|
||||||
|
**
|
||||||
|
** Name gets the identifier that follows in the std.
|
||||||
|
** input, and checks if it is a keyword.
|
||||||
|
** An identifier is defined as a sequence of
|
||||||
|
** MAXNAME or fewer alphanumerics, starting with an
|
||||||
|
** alphabetic character.
|
||||||
|
**
|
||||||
|
** Parameters:
|
||||||
|
** chr - the first character of the identifier
|
||||||
|
**
|
||||||
|
** Returns:
|
||||||
|
** Tokens.sp_name - for a user-defined name
|
||||||
|
** Tokens.sp_struct_var -- if the name is declared
|
||||||
|
** a structurw variable
|
||||||
|
** other - lexical codes for keys
|
||||||
|
**
|
||||||
|
** Side Effects:
|
||||||
|
** Adds a token to the symbol space.
|
||||||
|
** yylval is set to the new node in the space.
|
||||||
|
** If the identifier is a keyword, sets Opcode to
|
||||||
|
** op_code from tokens.y.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
name(chr)
|
||||||
|
int chr;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register char *cp;
|
||||||
|
register char c;
|
||||||
|
register struct optab *op;
|
||||||
|
register int lval;
|
||||||
|
char wbuf[MAXNAME + 1];
|
||||||
|
extern char *yylval;
|
||||||
|
extern char *addsym();
|
||||||
|
extern char *salloc();
|
||||||
|
extern struct optab *getkey();
|
||||||
|
extern char *getcvar();
|
||||||
|
|
||||||
|
c = chr;
|
||||||
|
cp = wbuf;
|
||||||
|
for (i = 0; i <= MAXNAME; i++)
|
||||||
|
{
|
||||||
|
lval = CMAP(c);
|
||||||
|
if (i < MAXNAME &&
|
||||||
|
(lval == ALPHA || lval == NUMBR))
|
||||||
|
{
|
||||||
|
*cp++ = c;
|
||||||
|
c = getch();
|
||||||
|
}
|
||||||
|
else if (lval == ALPHA || lval == NUMBR)
|
||||||
|
{
|
||||||
|
/* {i == MAXNAME && "c is legal" &&
|
||||||
|
* cp == &wbuf[MAXNAME]}
|
||||||
|
*/
|
||||||
|
*cp = '\0';
|
||||||
|
yysemerr("name too long", wbuf);
|
||||||
|
/* chomp to end of identifier */
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
c = getch();
|
||||||
|
lval = CMAP(c);
|
||||||
|
} while (lval == ALPHA || lval == NUMBR);
|
||||||
|
backup(c);
|
||||||
|
|
||||||
|
/* take first MAXNAME characters as IDENTIFIER
|
||||||
|
* (non-key)
|
||||||
|
*/
|
||||||
|
yylval = addsym(salloc(wbuf));
|
||||||
|
return (Tokens.sp_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* {cp <= &wbuf[MAXNAME] && i <= MAXNAME
|
||||||
|
* && "c is not part of id"}
|
||||||
|
*/
|
||||||
|
backup(c);
|
||||||
|
*cp = '\0';
|
||||||
|
i = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
op = getkey(wbuf);
|
||||||
|
|
||||||
|
/* Is it a keyword ? */
|
||||||
|
if (op)
|
||||||
|
{
|
||||||
|
yylval = addsym(op->op_term);
|
||||||
|
Opcode = op->op_code;
|
||||||
|
return (op->op_token);
|
||||||
|
}
|
||||||
|
/* user-defined name */
|
||||||
|
yylval = addsym(salloc(wbuf));
|
||||||
|
if ((cp = getcvar(wbuf)) && ((struct cvar *) cp)->c_type == opSTRUCT)
|
||||||
|
return (Tokens.sp_struct_var);
|
||||||
|
return (Tokens.sp_name);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue