atts.c

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

C
809
字号
                return (TidyString2(prim2str(pe,&z)));        else                return (NULLCP);}de_mailprint (xps,str)PS xps;char * str;{char	buf[BUFSIZ], workbuf[BUFSIZ];char	*ptr = buf;char	* cp, * cp2;  if ((greyBook == TRUE) && (index(str, '@') != NULLCP))  {    (void) strcpy(workbuf, str);    for (cp = workbuf; *cp != '@'; *ptr++ = *cp++) {};    *ptr++ = *cp++;    *ptr = '\0';    while (TRUE)    {      cp2 = rindex(cp, '.');      if (cp2 != NULLCP)      {        (void) strcat(buf, cp2 + 1);	(void) strcat(buf, ".");	*cp2 = '\0';      }      else      {        (void) strcat(buf, cp);	break;      }    }    ps_print(xps, buf);  }  else    ps_print(xps, str);}/* modified versioin of dn_print to give appropriately formatted DNs   the code should only alter the print format for READOUT */   de_dn_print (xps,dn,format)PS   xps;DN  dn;int  format;{register DN eptr;int pad;char padstr[100];	if (dn == NULLDN) {		return ;	}	if (format == UFNOUT) {	    ufn_dn_print (xps, dn, 1);	    return;	}	if (format == READOUT)	{		pad = PADCHARS + strlen(padding) + 2;		AttrV_print(xps, &(dn->dn_rdn->rdn_av), format);		for (eptr = dn->dn_parent; eptr != NULLDN; eptr = eptr->dn_parent)		{			(void) sprintf(padstr, ",\n%*s", pad, "");			ps_print(xps, padstr);			AttrV_print(xps, &(eptr->dn_rdn->rdn_av), format);			pad += 2;		}	}	else	{		dn_comp_print (xps,dn,format);		for (eptr = dn->dn_parent; eptr != NULLDN; eptr = eptr->dn_parent) {			switch (format) {				case DIROUT:  ps_print (xps,"/"); break;				case FILEOUT:				case RDNOUT:				case EDBOUT:  ps_print (xps,"@"); break;				case READOUT: ps_print (xps,"\n\t\t\t"); break;			}			dn_comp_print (xps,eptr,format);		}	}}de_phone_print (xps,str,format)PS xps;char * str;int format;{  if (*str == T61_MARK)   {    if (format != READOUT)     {      ps_print (xps,"{T.61}");      octprint (xps,mapPhone(++str),format);    }     else       if (ch_set == 1)        iso8859print(xps,mapPhone(++str));      else        octprint(xps,mapPhone(++str),format);  }   else   {    if ((*str == ' ') && (*(str+1) == 0))      if (format == READOUT)        ps_print (xps," (single space)");      else        ps_print (xps,"\\20");    else        ps_print (xps,mapPhone(str));  }}static PE de_strenc (x)char *x;{	if (*x == T61_MARK) {		x++;		return (t61s2prim(x,strlen(x)));	} else		return (prts2prim(x,strlen(x)));}static char * de_prtsdec (pe)PE pe;{int z;char * p, *ptr, val;	if (test_prim_pe (pe,PE_CLASS_UNIV,PE_DEFN_PRTS)) {		ptr = prim2str(pe,&z);		val = *ptr;		if (((p = TidyString2(ptr)) == NULLCP) || (*p == 0))		    if (val == ' ') {			    free (p);				    return strdup (" ");		    } else			    return NULLCP;		p = TidyString2(prim2str(pe,&z));		if (check_print_string(p))			return (p);		free (p);	}	return (NULLCP);}struct pair {    char   *p_name;    int     p_value;};static struct pair pairs[] = {    "twoDimensional", 8,    "fineResolution", 9,    "unlimitedLength", 20,    "b4Length", 21,    "a3Width", 22,    "b4Width", 23,    "uncompressed", 30,    NULL};static	de_fax_free (f)register struct fax *f;{    free (f -> number);    if (f -> bits)	pe_free (f -> bits);    free ((char *) f);}static struct fax *de_fax_cpy (a)register struct fax *a;{    register struct fax *f;    f = (struct fax *) smalloc (sizeof *f);    f -> number = strdup (a -> number);    f -> bits = a -> bits ? pe_cpy (a -> bits) : NULLPE;    return f;}static int  de_fax_cmp (a, b)register struct fax *a;register struct fax *b;{    int	    i;    if (a == (struct fax *) NULL)	return (b ? -1 : 0);    else	if  (b == (struct fax *) NULL)	    return 1;    if (i = telcmp (a -> number, b -> number))	return i;    return pe_cmp (a -> bits, b -> bits);}static	de_fax_print (xps, f, format)register PS xps;register struct fax *f;int	format;{    register int   i;    register struct pair *p;    register PE    pe;    if (format == READOUT) {	ps_printf (xps, "%s", mapPhone(f -> number));	if ((pe = f -> bits) && (i = pe -> pe_nbits) > 0) {	    char    *cp = " {";	    while (i-- >= 0)		if (bit_test (pe, i) > OK) {		    for (p = pairs; p -> p_name; p++)			if (p -> p_value == i)			    break;		    if (p -> p_name)			ps_printf (xps, "%s %s", cp, p -> p_name);		    else			ps_printf (xps, "%s %d", cp, i);		    cp = ",";		}	    if (*cp == ',')		ps_print (xps, " }");	}    }    else {	ps_printf (xps, "%s", mapPhone(f -> number));	if ((pe = f -> bits) && (i = pe -> pe_nbits) > 0) {	    char    *cp = " $";	    while (i-- >= 0)		if (bit_test (pe, i) > OK) {		    for (p = pairs; p -> p_name; p++)			if (p -> p_value == i)			    break;		    if (p -> p_name)			ps_printf (xps, "%s %s", cp, p -> p_name);		    else			ps_printf (xps, "%s %d", cp, i);		    cp = "";		}	}    }}static struct fax *de_str2fax (str)register char  *str;{    int	    value;    register char  *ptr,		  **ap;    char   *vec[NVEC + 1];    register struct fax *f;    register struct pair *p;    f = (struct fax *) smalloc (sizeof *f);    if (ptr = index (str, '$'))	*ptr = NULL;    if ((int)strlen (str) > UB_TELEPHONE_NUMBER) {	parse_error ("fax phone number too big",NULLCP);	free ((char *) f);        return ((struct fax *) NULL);    }    f -> number = TidyString (strdup (str));    f -> bits = NULLPE;    if (!ptr)	return f;    *ptr++ = '$';    ptr = strdup (ptr);    bzero ((char *) vec, sizeof vec);    (void) str2vec (ptr, vec);    for (ap = vec; *ap; ap++) {	if (sscanf (*ap, "%d", &value) == 1 && value >= 0)	    goto got_value;	for (p = pairs; p -> p_name; p++)	    if (lexequ (p -> p_name, *ap) == 0)		break;	if (! p -> p_name) {	    parse_error ("unknown G3fax non-basic parameter: '%s'", *ap);you_lose: ;	    free (ptr);	    free (f -> number);	    if (f -> bits)		pe_free (f -> bits);	    free ((char *) f);	    return ((struct fax *) NULL);	}	value = p -> p_value;got_value: ;	if ((f -> bits == NULLPE		    && (f -> bits = prim2bit (pe_alloc (PE_CLASS_UNIV,							PE_FORM_PRIM,							PE_PRIM_BITS)))			    == NULLPE)		|| bit_on (f -> bits, value) == NOTOK) {no_allocate: ;	    parse_error ("unable to allocate G3fax non-basic parameter",NULLCP);	    goto you_lose;	}    }    if (bit2prim (f -> bits) == NULLPE)	goto no_allocate;    free (ptr);    return f;}static PE  de_fax_enc (f)struct fax *f;{    PE	pe = NULLPE;    f -> fax_bits = bitstr2strb (f -> bits, & f -> fax_len);    (void) encode_SA_FacsimileTelephoneNumber (&pe, 0, 0, NULLCP, f);    if (f -> fax_bits)	    free (f -> fax_bits);    return pe;}static struct fax *de_fax_dec (pe)PE	pe;{    struct fax *f;    if (decode_SA_FacsimileTelephoneNumber (pe, 1, NULLIP, NULLVP, &f)	    == NOTOK) {	return ((struct fax *) NULL);    }    if ( f -> fax_bits ) {	    f -> bits = strb2bitstr ( f -> fax_bits, f -> fax_len, 			      PE_CLASS_UNIV, PE_PRIM_BITS);	    free ( f -> fax_bits );    }    return f;}specialSyntaxHandlers(){AttributeType at;  set_attribute_syntax(str2syntax("PostalAddress"), (IFP) de_addrenc, (IFP)de_addrdec,                        (IFP) de_addrparse, (IFP) de_addrprint, (IFP) de_addrcpy, 		       (IFP) de_addrcmp, (IFP) de_addrfree, NULLCP, NULLIFP, TRUE);  set_attribute_syntax(str2syntax("DN"), (IFP) dn_enc, (IFP) dn_dec, (IFP) str2dnX,                           de_dn_print, (IFP) dn_cpy, dn_cmp, dn_free, 			   NULLCP, NULLIFP, TRUE );  set_attribute_syntax(str2syntax("TelephoneNumber"), (IFP) de_strenc,                        (IFP) de_prtsdec, (IFP) prtparse, de_phone_print,		       (IFP) strdup, telcmp, sfree, NULLCP, soundex_match,  		       TRUE); set_attribute_syntax(str2syntax("FacsimileTelephoneNumber"), (IFP) de_fax_enc,                        (IFP) de_fax_dec, (IFP) de_str2fax, de_fax_print, 		       (IFP) de_fax_cpy, de_fax_cmp, de_fax_free, NULLCP, 		       NULLIFP, TRUE);  /* modify syntax handler for rfc822 mail attribute      to allow for JNT ordering */  at = AttrT_new (DE_MAILBOX);  at->oa_syntax = add_attribute_syntax("elecMail", (IFP) de_ia5enc, (IFP) de_ia5sdec,                       (IFP) octparse, de_mailprint, (IFP) strdup, lexequ,		       sfree, NULLCP, soundex_match, TRUE);}

⌨️ 快捷键说明

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