⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string_streams.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef sccsstatic  char sccsid[] = "@(#)string_streams.c 1.1 92/07/30 Copyr 1985 Sun Micro";#endif#endif/* * Copyright (c) 1985 by Sun Microsystems, Inc. */#include <sunwindow/io_stream.h>/* STREAM FROM STRING */#define GetSISData struct string_input_stream_data	*data = (struct string_input_stream_data*) in->client_datastatic struct string_input_stream_data {	char           *string;	int             charpos;};static voidstring_input_stream_close(in)	STREAM         *in;{	GetSISData;	free((char *) data);}static intstring_input_stream_getc(in)	STREAM         *in;{	GetSISData;	char            c = data->string[data->charpos];	if (c == '\0')		return (EOF);	data->charpos++;	return (c);}/* ARGSUSED */static struct posrecstring_input_stream_get_pos(in, n)	STREAM         *in;	int             n;{	struct posrec   p;	GetSISData;	p.charpos = data->charpos;	p.lineno = -1;		/* unlikely that lineno when reading from				 * string will be interesting */	return (p);}static intstring_input_stream_set_pos(in, n)	STREAM         *in;	int             n;{	GetSISData;	data->charpos = n;	return (0);}static intstring_input_stream_ungetc(c, in)	char            c;	STREAM         *in;{	GetSISData;	if (c == data->string[data->charpos - 1]) {		data->charpos--;		return (c);	} else			/* character being put back is not the one				 * that was read last */		return (EOF);}static intstring_input_stream_chars_avail(in)	STREAM         *in;{	GetSISData;	return (strlen(data->string) - data->charpos);}static struct input_ops_vector string_input_stream_ops = {	string_input_stream_getc,	string_input_stream_ungetc,	NULL,			/* gets. IMPLEMENT USING strcpy */	string_input_stream_chars_avail,	string_input_stream_get_pos,	string_input_stream_set_pos,	string_input_stream_close};STREAM         *string_input_stream(s, in)	char           *s;	STREAM         *in;	/* if NULL, creates new one, otherwise reuses				 * this one */{	STREAM         *value;	if (in != NULL) {		GetSISData;		data->string = s;		data->charpos = 0;		return (in);	} else {		struct string_input_stream_data	*data;		value = (STREAM *) malloc(sizeof (STREAM));		if (value == NULL) {	/* malloc can fail */			(void) fprintf(stderr, "malloc failed\n");			return (NULL);		}		value->stream_type = Input;		value->stream_class = "Input Stream From String";		value->ops.input_ops = &string_input_stream_ops;		data = (struct string_input_stream_data *) malloc(				   sizeof (struct string_input_stream_data));		if (data == NULL) {			(void) fprintf(stderr, "malloc failed\n");			return (NULL);		}		data->string = s;		data->charpos = 0;		value->client_data = (caddr_t) data;		return (value);	}}/* STREAM TO STRING */#define GetSOSData struct string_output_stream_data *data = (struct string_output_stream_data*) out->client_datastatic struct string_output_stream_data {	char           *string;	int             charpos;};static voidstring_output_stream_close(out)	STREAM         *out;{	GetSOSData;	free((char *) data);}static intstring_output_stream_putc(c, out)	char            c;	STREAM         *out;{	GetSOSData;	data->string[data->charpos++] = c;	data->string[data->charpos] = '\0';	return (c);}/* ARGSUSED */static struct posrecstring_output_stream_getpos(n, out)	int             n;	STREAM         *out;{	struct posrec   p;	GetSOSData;	p.charpos = data->charpos;	p.lineno = -1;	return (p);}static struct output_ops_vector string_output_stream_ops = {	string_output_stream_putc,	NULL,			/* fputs. IMPLEMENT WITH strcpy */	string_output_stream_getpos,	NULL,			/* flush */	string_output_stream_close};STREAM         *string_output_stream(s, out)	char           *s;	STREAM         *out;	/* if NULL, creates new one, otherwise reuses				 * this one */{	STREAM         *value;	if (out != NULL) {		GetSOSData;		data->string = s;		data->charpos = 0;		return (out);	}	else {		struct string_output_stream_data	*data; 		value = (STREAM *) malloc(sizeof (STREAM));		if (value == NULL) {	/* malloc can fail */			(void) fprintf(stderr, "malloc failed\n");			return (NULL);		}		value->stream_type = Output;		value->stream_class = "Output Stream To String";		value->ops.output_ops = &string_output_stream_ops;		data = (struct string_output_stream_data *) malloc(				  sizeof (struct string_output_stream_data));		if (data == NULL) {			(void) fprintf(stderr, "malloc failed\n");			return (NULL);		}		data->string = s;		data->charpos = 0;		value->client_data = (caddr_t) data;		return (value);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -