pdm.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 212 行

C
212
字号
/* pdm.c - preferred delivery method handling */#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/common/RCS/pdm.c,v 9.0 1992/06/16 12:12:39 isode Rel $";#endif/* * $Header: /xtel/isode/isode/dsap/common/RCS/pdm.c,v 9.0 1992/06/16 12:12:39 isode Rel $ * * * $Log: pdm.c,v $ * Revision 9.0  1992/06/16  12:12:39  isode * Release 8.0 * *//* *                                NOTICE * *    Acquisition, use, and distribution of this module and related *    materials are subject to the restrictions of a license agreement. *    Consult the Preface in the User's Manual for the full terms of *    this agreement. * *//*	SYNTAX:		pdm = <pdm_component> | <pdm_component> '$' <pdm>		pdm_component = "any" | "mhs" | "physical" | "telex"				| "teletex" | "g3fax" | "g4fax" | "ia5"				| "videotex" | "telephone"	EXAMPLE:		mhs $ physical $ telex $ telephone*//* LINTLIBRARY */#include "quipu/util.h"#include "quipu/attrvalue.h"#include "cmd_srch.h"#include "quipu/syntaxes.h"static CMD_TABLE pdm_table [] = {	"ANY",		0,	"MHS",		1,	"PHYSICAL",	2,	"TELEX",	3,	"TELETEX",	4,	"G3FAX",	5,	"G4FAX",	6,	"IA5",		7,	"VIDEOTEX",	8,	"TELEPHONE",	9,	"UNKNOWN",	-1,	0,		-1	};static pdmfree (pdm)struct pref_deliv * pdm;{        struct pref_deliv *next;		for (; pdm != (struct pref_deliv *) NULL; pdm = next)  {	        next = pdm -> pd_next;		free ((char *) pdm);	}}static pdmcmp (a,b)struct pref_deliv * a, *b;{	/* matching here is a bit dubious !!! */        for (; (a != (struct pref_deliv *) NULL) && (b != (struct pref_deliv *) NULL) ;			a = a->pd_next, b=b->pd_next) 		if ( a->deliv != b->deliv )			return (a->deliv > b->deliv ? 1 : -1);	if ( a != b)		return ( a > b ? 1 : -1 );	else		return (0);	}static struct pref_deliv * pdmcpy (a)struct pref_deliv * a;{struct pref_deliv * b, *c, *result = (struct pref_deliv *) NULL;	c = result; /* to keep lint happy */        for (; a != (struct pref_deliv *) NULL; a = a->pd_next) {	        b = (struct pref_deliv *) smalloc (sizeof (struct pref_deliv));		b -> deliv = a -> deliv;				if (result == (struct pref_deliv *) NULL) 			result = b;		else 			c->pd_next = b;		c = b;	}	b->pd_next = (struct pref_deliv *) NULL;	return (result);}static struct pref_deliv* pdmparse (str)char * str;{struct pref_deliv * result = (struct pref_deliv *) NULL;struct pref_deliv * a, *b;char * ptr;char * mark = NULLCP;   b = result; /* to keep lint happy */   for (;;) {	mark = NULLCP;	a = (struct pref_deliv *) smalloc (sizeof (struct pref_deliv));	if ( (ptr=index (str,'$')) != NULLCP) {		*ptr-- = 0;		if (isspace (*ptr)) {			*ptr = 0;			mark = ptr;		}		ptr++;	}	if ((a -> deliv = cmd_srch (str,pdm_table)) == -1) {		parse_error ("Unknown method %s",str);		return ((struct pref_deliv *) NULL);	}	if (result == (struct pref_deliv *) NULL) 		result = a;	else 		b->pd_next = a;	b = a;	if (ptr != NULLCP) {		*ptr++ = '$';		if (mark != NULLCP)			*mark = ' ';		str = (SkipSpace(ptr));			ptr = str;	} else		break;   }   a -> pd_next = (struct pref_deliv *) NULL ;   return (result);}static pdmprint (ps,pdm,format)PS ps;struct pref_deliv * pdm;int format;{char * prefix = NULLCP;	for (; pdm != (struct pref_deliv *) NULL; pdm = pdm->pd_next) {		if (prefix != NULLCP)			ps_print (ps,prefix);					ps_print (ps,rcmd_srch (pdm->deliv,pdm_table));		if (format == READOUT)			prefix = " or ";		else			prefix = " $ ";	}}static PE pdmenc (m)struct pref_deliv * m;{PE ret_pe;        (void) encode_SA_PreferredDeliveryMethod (&ret_pe,0,0,NULLCP,m);	return (ret_pe);}static struct pref_deliv * pdmdec (pe)PE pe;{struct pref_deliv * m;	if (decode_SA_PreferredDeliveryMethod (pe,1,NULLIP,NULLVP,&m) == NOTOK)		return ((struct pref_deliv *) NULL);	return (m);}pref_deliv_syntax (){	(void) add_attribute_syntax ("DeliveryMethod",		(IFP) pdmenc,	(IFP) pdmdec,		(IFP) pdmparse,pdmprint,		(IFP) pdmcpy,	pdmcmp,		pdmfree,	NULLCP,		NULLIFP,	TRUE);}

⌨️ 快捷键说明

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