|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 3114 (0xc2a)
Types: TextFile
Names: »blib.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Abermud/blib.c«
/*
** Random functions and utilities
** This emulates some useful parts of the B system library, etc.
** Not everyone needs everything here, but it's too hard to split
** things up into pieces...
*/
/* LINTLIBRARY */
#include "kernel.h"
#include <errno.h>
#include <sys/file.h>
#ifdef RCSID
static char RCS[] =
"$Header: blib.c,v 1.1 89/03/13 09:35:25 rsalz Exp $";
#endif /* RCSID */
GetFields(p, Data1, Data2)
register char *p;
register char *Data1;
register char *Data2;
{
while ((*Data1 = *p++) != '.')
Data1++;
*Data1 = '\0';
if (Data2) {
while((*Data2 = *p) != '.' && *p) p++, Data2++;
*Data2 = '\0';
}
/* (void)strcpy(Data2, p); */
}
/*
** Emulate Honeywell random-access files.
*/
sec_read(unit, block, pos, len)
FILE *unit;
int *block, pos, len;
{
(void)fseek(unit, (long)(pos * 64 * sizeof (int)), 0);
(void)fread((char *) block, len * sizeof (int), 1, unit);
}
sec_write(unit, block, pos, len)
FILE *unit;
int *block, pos, len;
{
(void)fseek(unit, (long)(pos * 64 * sizeof (int)), 0);
(void)fwrite((char *) block, len * sizeof(int), 1, unit);
}
/*
** Clear screen.
*/
cls()
{
(void)system("exec clear");
}
/*
** Convert a string to lowercase.
*/
char *
lowercase(str)
register char *str;
{
register char *p;
for (p = str; *p; p++)
if (isupper(*p))
*p = tolower(*p);
return str;
}
/*
** Get memory
*/
int *
xmalloc(i)
int i;
{
int *p;
/* NOSTRICT "warning: possible pointer alignment problem" */
if ((p = (int *)malloc((unsigned int)i)) == NULL) {
(void)fprintf(stderr, "No room to allo %d bytes.\n", i);
abort();
}
return p;
}
closelock(file)
FILE *file;
{
/* Don't need to unlock, it goes away when the file's closed, and
* we might not have always locked it.
flock(fileno(file), LOCK_UN);
*/
(void)fclose(file);
}
FILE *
openlock(file, perm)
char *file;
char *perm;
{
FILE *unit;
for (errno = 0; (unit = fopen(file, perm)) == NULL && errno == EINTR; )
; /* INTERRUPTED SYSTEM CALL CATCH */
if (unit == NULL || EQ(perm, "r"))
return unit;
while (flock(fileno(unit), LOCK_EX) == -1 && errno == EINTR)
; /* INTERRUPTED SYSTEM CALL CATCH */
if (errno == ENOSPC)
crapup("PANIC exit device full");
#ifdef ESTALE
if (errno == ESTALE || errno == EHOSTUNREACH || errno == EHOSTDOWN)
crapup("PANIC exit access failure, NFS gone for a snooze");
#endif /* ESTALE */
return unit;
}
#ifdef notdef
/*
** This is a C routine, often missing from Unix C compilers
** So we add our own version here
*/
char *
strchr(str, ch)
register char *str, ch;
{
for (; *str; str++)
if (*str == ch)
return str;
return NULL;
}
/*
** Get my username, replaces standard clib function which is a security
** hole on sun machines due to /ec/utmp access settings
*/
char *
cuserid(str)
char *str;
{
static char ary[128];
char *p;
getpw(getuid(), ary);
if (p = strchr(ary, ':'))
*p = '\0';
if (str)
strcpy(str, ary);
return ary;
}
#endif /* notdef */