add directory study
This commit is contained in:
127
study/linux-travel/MINIX-1.5/1.5/Source/commands/make/reader.c
Normal file
127
study/linux-travel/MINIX-1.5/1.5/Source/commands/make/reader.c
Normal file
@@ -0,0 +1,127 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* m a k e : r e a d e r . c
|
||||
*
|
||||
* Read in makefile
|
||||
*========================================================================
|
||||
* Edition history
|
||||
*
|
||||
* # Date Comments By
|
||||
* --- -------- ---------------------------------------------------- ---
|
||||
* 1 ?? ??
|
||||
* 2 23.08.89 cast to NULL added RAL
|
||||
* 3 30.08.89 indention changed PSH,RAL
|
||||
* 4 03.09.89 fixed LZ eliminated RAL
|
||||
* ------------ Version 2.0 released ------------------------------- RAL
|
||||
*
|
||||
*************************************************************************/
|
||||
|
||||
#include "h.h"
|
||||
|
||||
|
||||
/*
|
||||
* Syntax error handler. Print message, with line number, and exits.
|
||||
*/
|
||||
void error(msg, a1)
|
||||
char *msg;
|
||||
char *a1;
|
||||
{
|
||||
fprintf(stderr, "%s: ", myname);
|
||||
fprintf(stderr, msg, a1);
|
||||
if (lineno) fprintf(stderr, " near line %d", lineno);
|
||||
fputc('\n', stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Read a line into the supplied string. Remove
|
||||
* comments, ignore blank lines. Deal with quoted (\) #, and
|
||||
* quoted newlines. If EOF return TRUE.
|
||||
*/
|
||||
bool getline(strs, fd)
|
||||
struct str *strs;
|
||||
FILE *fd;
|
||||
{
|
||||
register char *p;
|
||||
char *q;
|
||||
int tmppos;
|
||||
|
||||
strs->pos = 0;
|
||||
for (;;) {
|
||||
if (strs->pos >= strs->len -128)
|
||||
strrealloc(strs);
|
||||
if (fgets(*strs->ptr + strs->pos, strs->len - strs->pos, fd) == (char *)0)
|
||||
return TRUE; /* EOF */
|
||||
|
||||
lineno++;
|
||||
|
||||
while ((p = strchr(*strs->ptr + strs->pos, '\n')) == (char *)0) {
|
||||
tmppos = strs->len -1;
|
||||
strrealloc(strs);
|
||||
if (fgets(*strs->ptr + tmppos, strs->len - tmppos, fd) == (char *)0)
|
||||
error("Unexpected EOF",(char *)0);
|
||||
}
|
||||
|
||||
|
||||
if (p[-1] == '\\')
|
||||
{
|
||||
p[-1] = '\n';
|
||||
strs->pos = p - *strs->ptr;
|
||||
continue;
|
||||
}
|
||||
|
||||
p = *strs->ptr;
|
||||
while (((q = strchr(p, '#')) != (char *)0) &&
|
||||
(p != q) && (q[-1] == '\\'))
|
||||
{
|
||||
char *a;
|
||||
|
||||
a = q - 1; /* Del \ chr; move rest back */
|
||||
p = q;
|
||||
while (*a++ = *q++)
|
||||
;
|
||||
}
|
||||
if (q != (char *)0)
|
||||
{
|
||||
q[0] = '\n';
|
||||
q[1] = '\0';
|
||||
}
|
||||
|
||||
p = *strs->ptr;
|
||||
while (isspace(*p)) /* Checking for blank */
|
||||
p++;
|
||||
|
||||
if (*p != '\0')
|
||||
return FALSE;
|
||||
strs->pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get a word from the current line, surounded by white space.
|
||||
* return a pointer to it. String returned has no white spaces
|
||||
* in it.
|
||||
*/
|
||||
char *gettok(ptr)
|
||||
register char **ptr;
|
||||
{
|
||||
register char *p;
|
||||
|
||||
|
||||
while (isspace(**ptr)) /* Skip spaces */
|
||||
(*ptr)++;
|
||||
|
||||
if (**ptr == '\0') /* Nothing after spaces */
|
||||
return ((char *)NULL);
|
||||
|
||||
p = *ptr; /* word starts here */
|
||||
|
||||
while ((**ptr != '\0') && (!isspace(**ptr)))
|
||||
(*ptr)++; /* Find end of word */
|
||||
|
||||
*(*ptr)++ = '\0'; /* Terminate it */
|
||||
|
||||
return(p);
|
||||
}
|
||||
Reference in New Issue
Block a user