* $Log: str.c,v $
*/
-#include "handy.h"
#include "EXTERN.h"
-#include "util.h"
#include "a2p.h"
+#include "util.h"
+void
str_numset(str,num)
register STR *str;
double num;
return str->str_nval;
}
+void
str_sset(dstr,sstr)
STR *dstr;
register STR *sstr;
str_nset(dstr,"",0);
}
+void
str_nset(str,ptr,len)
register STR *str;
register char *ptr;
str->str_pok = 1; /* validate pointer */
}
+void
str_set(str,ptr)
register STR *str;
register char *ptr;
str->str_pok = 1; /* validate pointer */
}
+void
str_chop(str,ptr) /* like set but assuming ptr is in str */
register STR *str;
register char *ptr;
str->str_pok = 1; /* validate pointer */
}
+void
str_ncat(str,ptr,len)
register STR *str;
register char *ptr;
str->str_pok = 1; /* validate pointer */
}
+void
str_scat(dstr,sstr)
STR *dstr;
register STR *sstr;
str_ncat(dstr,sstr->str_ptr,sstr->str_cur);
}
+void
str_cat(str,ptr)
register STR *str;
register char *ptr;
register STR *str;
register STR *nstr;
{
- safefree(str->str_ptr);
+ Safefree(str->str_ptr);
str->str_ptr = nstr->str_ptr;
str->str_len = nstr->str_len;
str->str_cur = nstr->str_cur;
freestrroot = str;
}
+int
str_len(str)
register STR *str;
{
register STR *str;
register FILE *fp;
{
-#ifdef USE_STD_STDIO /* Here is some breathtakingly efficient cheating */
+#if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
+ /* Here is some breathtakingly efficient cheating */
register char *bp; /* we're going to steal some values */
register int cnt; /* from the stdio struct and put EVERYTHING */
int i;
int bpx;
- cnt = fp->_cnt; /* get count into register */
+#if defined(VMS)
+ /* An ungetc()d char is handled separately from the regular
+ * buffer, so we getc() it back out and stuff it in the buffer.
+ */
+ i = getc(fp);
+ if (i == EOF) return Nullch;
+ *(--((*fp)->_ptr)) = (unsigned char) i;
+ (*fp)->_cnt++;
+#endif
+
+ cnt = FILE_cnt(fp); /* get count into register */
str->str_nok = 0; /* invalidate number */
str->str_pok = 1; /* validate pointer */
if (str->str_len <= cnt) /* make sure we have the room */
GROWSTR(&(str->str_ptr), &(str->str_len), cnt+1);
bp = str->str_ptr; /* move these two too to registers */
- ptr = fp->_ptr;
+ ptr = FILE_ptr(fp);
for (;;) {
while (--cnt >= 0) {
if ((*bp++ = *ptr++) == newline)
}
}
- fp->_cnt = cnt; /* deregisterize cnt and ptr */
- fp->_ptr = ptr;
- i = _filbuf(fp); /* get more characters */
- cnt = fp->_cnt;
- ptr = fp->_ptr; /* reregisterize cnt and ptr */
+ FILE_cnt(fp) = cnt; /* deregisterize cnt and ptr */
+ FILE_ptr(fp) = ptr;
+ i = getc(fp); /* get more characters */
+ cnt = FILE_cnt(fp);
+ ptr = FILE_ptr(fp); /* reregisterize cnt and ptr */
bpx = bp - str->str_ptr; /* prepare for possible relocation */
GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + cnt + 1);
}
thats_all_folks:
- fp->_cnt = cnt; /* put these back or we're in trouble */
- fp->_ptr = ptr;
+ FILE_cnt(fp) = cnt; /* put these back or we're in trouble */
+ FILE_ptr(fp) = ptr;
*bp = '\0';
str->str_cur = bp - str->str_ptr; /* set length */
-#else /* !USE_STD_STDIO */ /* The big, slow, and stupid way */
+#else /* USE_STDIO_PTR && STDIO_PTR_LVALUE && STDIO_CNT_LVALUE */
+ /* The big, slow, and stupid way */
static char buf[4192];
else
str_set(str, No);
-#endif /* USE_STD_STDIO */
+#endif /* USE_STDIO_PTR && STDIO_PTR_LVALUE && STDIO_CNT_LVALUE */
return str->str_cur ? str->str_ptr : Nullch;
}