|
|
1.1 ! root 1: /* teletex.c - Teletex attribute */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/teletex.c,v 7.0 89/11/23 21:44:35 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/dsap/common/RCS/teletex.c,v 7.0 89/11/23 21:44:35 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: teletex.c,v $ ! 12: * Revision 7.0 89/11/23 21:44:35 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: teletex ::= <printablestring> '$' <printablestring> '$' <printablestring>... ! 31: ! 32: REPRESENTING ! 33: terminal $ graphic $ control $ page $ misc $ private ! 34: */ ! 35: ! 36: /* LINTLIBRARY */ ! 37: ! 38: #include "quipu/util.h" ! 39: #include "quipu/entry.h" ! 40: ! 41: #define nfree(x) if (x != NULLCP) free (x) ! 42: ! 43: static teletex_free (ptr) ! 44: struct teletex * ptr; ! 45: { ! 46: nfree (ptr->terminal); ! 47: nfree (ptr->graphic); ! 48: nfree (ptr->control); ! 49: nfree (ptr->page); ! 50: nfree (ptr->misc); ! 51: nfree (ptr->t_private); ! 52: ! 53: free ((char *) ptr); ! 54: } ! 55: ! 56: static char * xstrdup (a) ! 57: char * a; ! 58: { ! 59: if (( a == NULLCP) || (*a == NULL)) ! 60: return (NULLCP); ! 61: else ! 62: return (strdup (a)); ! 63: } ! 64: ! 65: static struct teletex * teletex_cpy (a) ! 66: struct teletex * a; ! 67: { ! 68: struct teletex * result; ! 69: ! 70: result = (struct teletex *) smalloc (sizeof (struct teletex)); ! 71: result->terminal = strdup (a->terminal); ! 72: result->graphic = xstrdup (a->graphic); ! 73: result->control = xstrdup (a->control); ! 74: result->page = xstrdup (a->page); ! 75: result->misc = xstrdup (a->misc); ! 76: result->t_private = xstrdup (a->t_private); ! 77: return (result); ! 78: } ! 79: ! 80: static teletex_cmp (a,b) ! 81: struct teletex * a; ! 82: struct teletex * b; ! 83: { ! 84: int res; ! 85: ! 86: if (a == (struct teletex *) NULL) ! 87: if (b == (struct teletex *) NULL) ! 88: return (0); ! 89: else ! 90: return (-1); ! 91: ! 92: if ( (res = lexequ(a->terminal,b->terminal)) != 0) ! 93: return (res); ! 94: if ( (res = lexequ(a->graphic,b->graphic)) != 0) ! 95: return (res); ! 96: if ( (res = lexequ(a->control,b->control)) != 0) ! 97: return (res); ! 98: if ( (res = lexequ(a->page,b->page)) != 0) ! 99: return (res); ! 100: if ( (res = lexequ(a->misc,b->misc)) != 0) ! 101: return (res); ! 102: if ( (res = lexequ(a->t_private,b->t_private)) != 0) ! 103: return (res); ! 104: return (0); ! 105: } ! 106: ! 107: ! 108: static teletex_print (ps,teletex,format) ! 109: register PS ps; ! 110: struct teletex* teletex; ! 111: int format; ! 112: { ! 113: if (format == READOUT) ! 114: ps_print (ps,"terminal: "); ! 115: ps_print (ps,teletex->terminal); ! 116: ! 117: if (format != READOUT) ! 118: ps_print (ps," $ "); ! 119: if (teletex->graphic != NULLCP) { ! 120: if (format == READOUT) ! 121: ps_print (ps,", graphic: "); ! 122: ps_print (ps,teletex->graphic); ! 123: } ! 124: ! 125: if (format != READOUT) ! 126: ps_print (ps," $ "); ! 127: if (teletex->control != NULLCP) { ! 128: if (format == READOUT) ! 129: ps_print (ps,", control: "); ! 130: ps_print (ps,teletex->control); ! 131: } ! 132: ! 133: if (format != READOUT) ! 134: ps_print (ps," $ "); ! 135: if (teletex->page != NULLCP) { ! 136: if (format == READOUT) ! 137: ps_print (ps,", page: "); ! 138: ps_print (ps,teletex->page); ! 139: } ! 140: ! 141: if (format != READOUT) ! 142: ps_print (ps," $ "); ! 143: if (teletex->misc != NULLCP) { ! 144: if (format == READOUT) ! 145: ps_print (ps,", misc: "); ! 146: ps_print (ps,teletex->misc); ! 147: } ! 148: ! 149: if (format != READOUT) ! 150: ps_print (ps," $ "); ! 151: if (teletex->t_private != NULLCP) { ! 152: if (format == READOUT) ! 153: ps_print (ps,", private: "); ! 154: ps_print (ps,teletex->t_private); ! 155: } ! 156: ! 157: } ! 158: ! 159: ! 160: static struct teletex* str2teletex (str) ! 161: char * str; ! 162: { ! 163: struct teletex * result; ! 164: char * ptr; ! 165: char * mark = NULLCP; ! 166: char * prtparse (); ! 167: ! 168: if ( (ptr=index (str,'$')) == NULLCP) { ! 169: parse_error ("seperator missing in teletex '%s'",str); ! 170: return ((struct teletex *) NULL); ! 171: } ! 172: ! 173: result = (struct teletex *) smalloc (sizeof (struct teletex)); ! 174: *ptr--= 0; ! 175: if (isspace (*ptr)) { ! 176: *ptr = 0; ! 177: mark = ptr; ! 178: } ! 179: ptr++; ! 180: if ((result->terminal = prtparse(str)) == NULLCP) ! 181: return ((struct teletex *) NULL); ! 182: ! 183: if (strlen (result->terminal) > UB_TELETEX_TERMINAL_ID) { ! 184: parse_error ("teletex string too long",NULLCP); ! 185: return ((struct teletex *) NULL); ! 186: } ! 187: ! 188: *ptr++ = '$'; ! 189: ! 190: if (mark != NULLCP) ! 191: *mark = ' '; ! 192: ! 193: str = SkipSpace(ptr); ! 194: if ( (ptr=index (str,'$')) == NULLCP) { ! 195: parse_error ("2nd seperator missing in teletex '%s'",str); ! 196: return ((struct teletex *) NULL); ! 197: } ! 198: *ptr--= 0; ! 199: if (isspace (*ptr)) { ! 200: *ptr = 0; ! 201: mark = ptr; ! 202: } else ! 203: mark = NULLCP; ! 204: ptr++; ! 205: result->graphic = xstrdup(str); ! 206: *ptr++ = '$'; ! 207: if (mark != NULLCP) ! 208: *mark = ' '; ! 209: ! 210: ! 211: str = SkipSpace(ptr); ! 212: if ( (ptr=index (str,'$')) == NULLCP) { ! 213: parse_error ("3rd seperator missing in teletex '%s'",str); ! 214: return ((struct teletex *) NULL); ! 215: } ! 216: *ptr--= 0; ! 217: if (isspace (*ptr)) { ! 218: *ptr = 0; ! 219: mark = ptr; ! 220: } else ! 221: mark = NULLCP; ! 222: ptr++; ! 223: result->control = xstrdup(str); ! 224: *ptr++ = '$'; ! 225: if (mark != NULLCP) ! 226: *mark = ' '; ! 227: ! 228: ! 229: str = SkipSpace(ptr); ! 230: if ( (ptr=index (str,'$')) == NULLCP) { ! 231: parse_error ("4th seperator missing in teletex '%s'",str); ! 232: return ((struct teletex *) NULL); ! 233: } ! 234: *ptr--= 0; ! 235: if (isspace (*ptr)) { ! 236: *ptr = 0; ! 237: mark = ptr; ! 238: } else ! 239: mark = NULLCP; ! 240: ptr++; ! 241: result->page = xstrdup(str); ! 242: *ptr++ = '$'; ! 243: if (mark != NULLCP) ! 244: *mark = ' '; ! 245: ! 246: ! 247: str = SkipSpace(ptr); ! 248: if ( (ptr=index (str,'$')) == NULLCP) { ! 249: parse_error ("5th seperator missing in teletex '%s'",str); ! 250: return ((struct teletex *) NULL); ! 251: } ! 252: *ptr--= 0; ! 253: if (isspace (*ptr)) { ! 254: *ptr = 0; ! 255: mark = ptr; ! 256: } else ! 257: mark = NULLCP; ! 258: ptr++; ! 259: result->misc = xstrdup(str); ! 260: *ptr++ = '$'; ! 261: if (mark != NULLCP) ! 262: *mark = ' '; ! 263: ! 264: result->t_private = xstrdup(SkipSpace(ptr)); ! 265: ! 266: return (result); ! 267: } ! 268: ! 269: static PE teletex_enc (m) ! 270: struct teletex * m; ! 271: { ! 272: PE ret_pe; ! 273: ! 274: (void) encode_SA_TeletexTerminalIdentifier (&ret_pe,0,0,NULLCP,m); ! 275: ! 276: return (ret_pe); ! 277: } ! 278: ! 279: static struct teletex * teletex_dec (pe) ! 280: PE pe; ! 281: { ! 282: struct teletex * m; ! 283: ! 284: m = (struct teletex *) smalloc (sizeof (struct teletex)); ! 285: bzero ((char *)m,sizeof(struct teletex)); ! 286: ! 287: if (decode_SA_TeletexTerminalIdentifier (pe,1,NULLIP,NULLVP,m) == NOTOK) { ! 288: free ((char *)m); ! 289: return ((struct teletex *) NULL); ! 290: } ! 291: ! 292: return (m); ! 293: } ! 294: ! 295: teletex_syntax () ! 296: { ! 297: (void) add_attribute_syntax ("TeletexTerminalIdentifier", ! 298: (IFP) teletex_enc, (IFP) teletex_dec, ! 299: (IFP) str2teletex, teletex_print, ! 300: (IFP) teletex_cpy, teletex_cmp, ! 301: teletex_free, NULLCP, ! 302: NULLIFP, TRUE); ! 303: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.