Files
Arquivotheca.Solaris-2.5/cmd/mail/s_string.h
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

72 lines
2.3 KiB
C
Executable File

/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#pragma ident "@(#)s_string.h 1.3 92/07/16 SMI" /* SVr4.0 1.4 */
/* extensible strings */
#ifndef _string_h
#define _string_h
#include <string.h>
typedef struct string {
char *base; /* base of string */
char *end; /* end of allocated space+1 */
char *ptr; /* ptr into string */
} string;
#define s_clone(s) s_copy((s)->ptr)
#define s_curlen(s) ((s)->ptr - (s)->base)
#define s_dup(s) s_copy((s)->base)
#define s_getc(s) (*((s)->ptr++))
#define s_peek(s) (*((s)->ptr))
#define s_putc(s,c) (((s)->ptr<(s)->end) ? (*((s)->ptr)++ = (c)) : s_grow((s),(c)))
#define s_reset(s) ((s) ? (*((s)->ptr = (s)->base) = '\0' , (s)) : s_new())
#define s_restart(s) ((s)->ptr = (s)->base , (s))
#define s_skipc(s) ((s)->ptr++)
#define s_space(s) ((s)->end - (s)->base)
#define s_terminate(s) (((s)->ptr<(s)->end) ? (*(s)->ptr = 0) : (s_grow((s),0), (s)->ptr--, 0))
#define s_to_c(s) ((s)->base)
#define s_ptr_to_c(s) ((s)->ptr)
#ifdef __STDC__
extern string *s_append(string *to, char *from);
extern string *s_array(char *, int len);
extern string *s_copy(char *);
extern void s_free(string*);
extern int s_grow(string *sp, int c);
extern string *s_new(void);
extern string *s_parse(string *from, string *to);
extern char *s_read_line(FILE *fp, string *to);
extern int s_read_to_eof(FILE *fp, string *to);
extern string *s_seq_read(FILE *fp, string *to, int lineortoken);
extern void s_skipwhite(string *from);
extern string *s_tok(string*,char*);
extern int s_tolower(string*);
#else
extern string *s_append();
extern string *s_array();
extern string *s_copy();
extern void s_free();
extern int s_grow();
extern string *s_new();
extern string *s_parse();
extern char *s_read_line();
extern int s_read_to_eof();
extern string *s_seq_read();
extern void s_skipwhite();
extern string *s_tok();
extern int s_tolower();
#endif
/* controlling the action of s_seq_read */
#define TOKEN 0 /* read the next whitespace delimited token */
#define LINE 1 /* read the next logical input line */
#define s_getline(a,b) s_seq_read(a,b,LINE)
#define s_gettoken(a,b) s_seq_read(a,b,TOKEN)
#endif