blob: f0c18f751d977cd7bf015bc3fd104daac6a3329e [file] [log] [blame]
/* %%%%%%%%%%%%%%%%%%%% (c) William Landi 1991 %%%%%%%%%%%%%%%%%%%%%%%%%%%% */
/* Permission to use this code is granted as long as the copyright */
/* notice remains in place. */
/* ================================ stringI.c ============================== */
/* Reads in one line of input gauranteeing that it will return a pointer to */
/* the whole line, no matter how long it is (it uses CALLOC a version of */
/* MALLOC). */
#include <stdio.h>
/* CARRAGIAGE_RETURN <cr> is ascii 10 */
#define CARRIAGE_RETURN 10
/* LEX_LEN_INCREMENT For long strings, number of characters to */
/* increase the string buffer by on overflow. */
#define LEX_LEN_INCR 128
char CH = ' '; /* Current input Character */
char LEXEME[LEX_LEN_INCR+1]; /* Input String */
char *FRONT,*BACK; /* FRONT and BACK characters of Input String */
unsigned LEX_LEN = LEX_LEN_INCR;/* Size of the Input String Buffer */
/* ------------------------------- GETCHR ---------------------------------- */
/* gets the next character form input file and expands buffer if needed */
void GETCHR(FILE *STREAM)
{
/* int TEMP; */
/* --------- get next character */
CH = getc(STREAM);
/* TEMP = (int) (FRONT-BACK); */
if ((FRONT-BACK) < ((int)LEX_LEN-3)) {
/* --------- update input string appropriately */
FRONT ++;
*FRONT = CH;
*(FRONT+1) = '\0';
}
}
/* --------------------------------- GET_LINE ------------------------------ */
/* Read in a line from the input stream. */
void GET_LINE(char **LINE,FILE *STREAM)
{
/* -------- Clear input string */
LEXEME[0] = '\0';
/* -------- reset pointers */
BACK = LEXEME;
FRONT = BACK - 1;
GETCHR(STREAM);
while ((CH != CARRIAGE_RETURN) && !feof(STREAM))
GETCHR(STREAM);
*FRONT = '\0';
*LINE = LEXEME;
}