|
|
1.1 root 1: /* mailbox.c - otherMailbox attribute */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/mailbox.c,v 7.0 89/11/23 21:42:29 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/dsap/common/RCS/mailbox.c,v 7.0 89/11/23 21:42:29 mrose Rel $
9: *
10: *
11: * $Log: mailbox.c,v $
12: * Revision 7.0 89/11/23 21:42:29 mrose
13: * Release 6.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: /*
29: SYNTAX
30: mailbox ::= <printablestring> '$' <IA5String>
31:
32: EXAMPLE
33: internet $ [email protected]
34: */
35:
36: /* LINTLIBRARY */
37:
38: #include "quipu/util.h"
39: #include "quipu/entry.h"
40:
41: static mailbox_free (ptr)
42: struct mailbox * ptr;
43: {
44: free (ptr->mbox);
45: free (ptr->mtype);
46:
47: free ((char *) ptr);
48: }
49:
50:
51: static struct mailbox * mailbox_cpy (a)
52: struct mailbox * a;
53: {
54: struct mailbox * result;
55:
56: result = (struct mailbox *) smalloc (sizeof (struct mailbox));
57: result->mbox = strdup (a->mbox);
58: result->mtype = strdup (a->mtype);
59: return (result);
60: }
61:
62: static mailbox_cmp (a,b)
63: struct mailbox * a;
64: struct mailbox * b;
65: {
66: int res;
67:
68: if (a == (struct mailbox *) NULL)
69: if (b == (struct mailbox *) NULL)
70: return (0);
71: else
72: return (-1);
73:
74: if ( (res = lexequ(a->mbox,b->mbox)) != 0)
75: return (res);
76: if ( (res = lexequ(a->mtype,b->mtype)) != 0)
77: return (res);
78: return (0);
79: }
80:
81:
82: static mailbox_print (ps,mail,format)
83: register PS ps;
84: struct mailbox* mail;
85: int format;
86: {
87: if (format == READOUT)
88: ps_printf (ps,"%s: %s",mail->mtype, mail->mbox);
89: else
90: ps_printf (ps,"%s $ %s",mail->mtype, mail->mbox);
91: }
92:
93:
94: static struct mailbox* str2mailbox (str)
95: char * str;
96: {
97: struct mailbox * result;
98: char * ptr;
99: char * mark = NULLCP;
100:
101: if ( (ptr=index (str,'$')) == NULLCP) {
102: parse_error ("seperator missing in mailbox '%s'",str);
103: return ((struct mailbox *) NULL);
104: }
105:
106: result = (struct mailbox *) smalloc (sizeof (struct mailbox));
107: *ptr--= 0;
108: if (isspace (*ptr)) {
109: *ptr = 0;
110: mark = ptr;
111: }
112: ptr++;
113: result->mtype = strdup (str);
114: *ptr++ = '$';
115: result->mbox = strdup (SkipSpace(ptr));
116:
117: if (mark != NULLCP)
118: *mark = ' ';
119:
120: return (result);
121: }
122:
123: static PE mail_enc (m)
124: struct mailbox * m;
125: {
126: PE ret_pe;
127:
128: (void) encode_Thorn_MailBox (&ret_pe,0,0,NULLCP,m);
129:
130: return (ret_pe);
131: }
132:
133: static struct mailbox * mail_dec (pe)
134: PE pe;
135: {
136: struct mailbox * m;
137:
138: m = (struct mailbox *) smalloc (sizeof (struct mailbox));
139:
140: if (decode_Thorn_MailBox (pe,1,NULLIP,NULLVP,m) == NOTOK) {
141: free ((char *)m);
142: return ((struct mailbox *) NULL);
143: }
144: return (m);
145: }
146:
147: mailbox_syntax ()
148: {
149: (void) add_attribute_syntax ("Mailbox",
150: (IFP) mail_enc, (IFP) mail_dec,
151: (IFP) str2mailbox, mailbox_print,
152: (IFP) mailbox_cpy, mailbox_cmp,
153: mailbox_free, NULLCP,
154: NULLIFP, TRUE);
155: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.