This is macaux.c in view mode; [Download] [Up]
/* * Copyright (c) 1988, The Regents of the University of California. * Edward Moy, Workstation Software Support Group, Workstation Support Serices, * Information Systems and Technology. * * Permission is granted to any individual or institution to use, copy, * or redistribute this software so long as it is not sold for profit, * provided that this notice and the original copyright notices are * retained. The University of California makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. */ #ifndef lint static char *SCCSid = "@(#)macaux.c 2.2 10/24/89"; #endif lint #include <ctype.h> #include <stdio.h> #include "str.h" #define FALSE 0 #define TRUE 1 extern char *myname; int rawmode = FALSE; STR * STRalloc() { register STR *str; char *malloc(); if((str = (STR *)malloc(sizeof(STR))) == NULL || (str->bufptr = (unsigned char *)malloc(STRSIZE)) == NULL) { fprintf(stderr, "%s: STRalloc: Out of memory\n", myname); exit(1); } str->curendptr = str->bufptr; str->realendptr = str->bufptr + STRSIZE; return(str); } STRfree(str) STR *str; { free((char *)str->bufptr); free((char *)str); } STRexpand(str) register STR *str; { register int curend, realend; char *realloc(); curend = str->curendptr - str->bufptr; realend = (str->realendptr - str->bufptr) + STRSIZEDELTA; if((str->bufptr = (unsigned char *)realloc((char *)str->bufptr, realend)) == NULL) { fprintf(stderr, "%s: STRexpand: Out of memory\n", myname); exit(1); } str->curendptr = str->bufptr + curend; str->realendptr = str->bufptr + realend; } STRgets(str, fp) register STR *str; register FILE *fp; { register int c; str->curendptr = str->bufptr; for( ; ; ) { if((c = getc(fp)) == EOF) return(str->curendptr > str->bufptr); if(str->curendptr >= str->realendptr) STRexpand(str); *str->curendptr++ = c; if(c == '\n' || c == '\r') return(TRUE); } } STRputsptr(str, cp, fp) register STR *str; register unsigned char *cp; register FILE *fp; { if(rawmode) { for( ; cp < str->curendptr ; cp++) putc(*cp, fp); return; } for( ; cp < str->curendptr ; cp++) { if(!isascii(*cp)) fprintf(fp, "\\%03o", *cp); else if(isprint(*cp)) putc(*cp, fp); else { switch(*cp) { case '\n': case '\r': putc('\n', fp); continue; case '\t': putc('\t', fp); continue; default: fprintf(fp, "\\%03o", *str); continue; } } } } STRcompareptr(str, cp, sp) register STR *str; register unsigned char *cp, *sp; { register int comp; for( ; ; ) { if(*sp == 0) return(cp >= str->curendptr ? 0 : 1); if(cp >= str->curendptr) return(-1); if(*sp == '\n') { if(*cp != '\n' && *cp != '\r') return((int)*cp - (int)*sp); } else if((comp = (int)*cp - (int)*sp) != 0) return(comp); cp++; sp++; } } STRheadcmpptr(str, cp, sp) register STR *str; register unsigned char *cp, *sp; { register int comp; for( ; ; ) { if(*sp == 0) return(0); if(cp >= str->curendptr) return(-1); if(*sp == '\n') { if(*cp != '\n' && *cp != '\r') return((int)*cp - (int)*sp); } else if((comp = (int)*cp - (int)*sp) != 0) return(comp); cp++; sp++; } } unsigned char * STRmatch(str, sp) register STR *str; register unsigned char *sp; { register unsigned char *mp, *last; register int firstchar; firstchar = *sp; last = str->curendptr - strlen(sp); mp = str->bufptr; while(mp <= last) { if(*mp == firstchar && STRheadcmpptr(str, mp, sp) == 0) return(mp); mp++; } return(NULL); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.