This commit is contained in:
Oliver Lehmann 1989-12-07 09:09:26 +00:00
parent 8e900dedd8
commit 263bea5a80
2 changed files with 179 additions and 0 deletions

View File

@ -0,0 +1,78 @@
# include "AA_liba.h"
static char *AAERR[] =
{
"OPEN", /* 0 */
"CLOSE", /* 1 */
"APPEND", /* 2 */
"DELETE", /* 3 */
"DELETE.AAgetequal", /* 4 */
"REPLACE", /* 5 */
"REPLACE.AAgetequal", /* 6 */
"REPLACE.delete", /* 7 */
"FIND.isam", /* 8 */
"FIND.lisam", /* 9 */
"FIND.hisam", /* 10 */
"GET.getup", /* 11 */
"GET.getid", /* 12 */
"SETKEY.dom", /* 13 */
"SETKEY.cond", /* 14 */
"request", /* 15 */
"release", /* 16 */
"lock", /* 17 */
"unlock", /* 18 */
"get: not locked", /* 19 */
"append: not locked", /* 20 */
"delete: not locked", /* 21 */
"replace: not locked", /* 22 */
"release: not locked", /* 23 */
"refresh", /* 24 */
"GET.get", /* 25 */
};
static char *AAERR100[] =
{
"not available", /* 100 */
"already open", /* 101 */
"not enough memory", /* 102 */
"has integrities", /* 103 */
"has protections", /* 104 */
"view", /* 105 */
"not open", /* 106 */
"concurrency confusion", /* 107 */
"relation outside in use", /* 108 */
"TA", /* 109 */
"permission denied", /* 110 */
"database lost", /* 111 */
};
AAerror(err, msg)
register int err;
register char *msg;
{
extern int errno;
extern int AAccerror;
printf("\n\007AMXERR:\t* * * * * * *\t%d\n", err);
printf("\tBS\tpid\t%d\n", getpid());
if (errno)
printf("\tBS\terror\t%d\n", errno);
if (AAccerror)
printf("\tACCESS\terror\t%d\n", AAccerror);
if (err < 100)
{
printf("\tAMX-RC\t\t%d\n", AA);
# ifdef MSDOS
printf("bad %s: relation `%.10s'\n",
# else
printf("bad %s: relation `%.14s'\n",
# endif
AAERR[err], msg);
}
else
printf("`%s': %s\n", msg, AAERR100[err -100]);
fflush(stdout);
exit(1);
}

View File

@ -0,0 +1,101 @@
# include "AA_liba.h"
AArequest(d, rel)
register DESCXX *d;
register char *rel;
{
# ifdef AMX_TRACE
AAtTfp(11, 0,
# ifdef MSDOS
"retrieve\t`%.10s'\n",
# else
"retrieve\t`%.14s'\n",
# endif
rel);
# endif
errno = 0;
if (!d)
AAerror(106, rel);
if (AA_NOLOCKS)
return;
do AAmark(d); while (d = d->xx_index);
}
static AAmark(d)
register DESCXX *d;
{
# ifdef AMX_TRACE
AAtTfp(29, 0,
# ifdef MSDOS
"lock\t\t`%.10s' (%d) mod 0%o\n",
# else
"lock\t\t`%.14s' (%d) mod 0%o\n",
# endif
d->xx_desc.reldum.relid, d->xx_locks, M_SHARE);
# endif
if (d->xx_locks++)
return;
AA = 0;
if (AA_TA || AAsetrll(A_SLP, d->xx_desc.reltid, AA = M_SHARE) < 0)
AAerror(15, d->xx_desc.reldum.relid);
AA_LOCKS++;
d->xx_refresh = 0;
d->xx_excl = M_SHARE;
}
AArelease(d)
register DESCXX *d;
{
# ifdef AMX_TRACE
AAtTfp(12, 0,
# ifdef MSDOS
"end retrieve\t`%.10s'\n",
# else
"end retrieve\t`%.14s'\n",
# endif
d->xx_desc.reldum.relid);
# endif
if (AA_NOLOCKS)
return;
do AAfree(d); while (d = d->xx_index);
}
static AAfree(d)
register DESCXX *d;
{
# ifdef AMX_TRACE
AAtTfp(30, 0,
# ifdef MSDOS
"unlock\t\t`%.10s' (%d)\n",
# else
"unlock\t\t`%.14s' (%d)\n",
# endif
d->xx_desc.reldum.relid, d->xx_locks);
# endif
if (d->xx_locks <= 0)
AAerror(23, d->xx_desc.reldum.relid);
if (--d->xx_locks)
return;
AAnoclose(d);
AA = 0;
if (AA_TA || (AA = AAunlrl(d->xx_desc.reltid)) < 0)
AAerror(16, d->xx_desc.reldum.relid);
d->xx_refresh = 0;
d->xx_excl = 0;
--AA_LOCKS;
}