rem: n = getrec(buf); setsval(execute(a[0]), buf);
add: init_buf(&buf, &len, LINE_INCR); n = getrec(&buf, &len); (void) setsval(execute(a[0]), buf); free(buf);
context: Cell *getline(a, n) Node **a; int n;{	/* a[0] is variable, a[1] is operator, a[2] is filename */	register Cell *r, *x;	uchar buf[RECSIZE];	FILE *fp;	fflush(stdout);	/* in case someone is waiting for a prompt */	r = gettemp("");	if (a[1] != NULL) {		/* getline < file */		x = execute(a[2]);		/* filename */		if ((int) a[1] == '|')	/* input pipe */			a[1] = (Node *) LE;	/* arbitrary flag */		fp = openfile((int) a[1], getsval(x));		tempfree(x, "");		if (fp == NULL)			n = -1;		else			n = readrec(buf, sizeof(buf), fp);		if (n <= 0) {			;		} else if (a[0] != NULL) {	/* getline var <file */			setsval(execute(a[0]), buf);		} else {			/* getline <file */			if (!(recloc->tval & DONTFREE))				xfree(recloc->sval);			strcpy(record, buf);			recloc->sval = record;			recloc->tval = REC | STR | DONTFREE;			donerec = 1; donefld = 0;		}	} else {			/* bare getline; use current input */		if (a[0] == NULL)	/* getline */			n = getrec(record);		else {			/* getline var */			n = getrec(buf);			setsval(execute(a[0]), buf);		}	}	setfval(r, (Awkfloat) n);	return r;}