summaryrefslogtreecommitdiffstats
path: root/src/isode/psap/pl2pe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/isode/psap/pl2pe.c')
-rw-r--r--src/isode/psap/pl2pe.c467
1 files changed, 0 insertions, 467 deletions
diff --git a/src/isode/psap/pl2pe.c b/src/isode/psap/pl2pe.c
deleted file mode 100644
index 741fcbcbed..0000000000
--- a/src/isode/psap/pl2pe.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/* pl2pe.c - presentation list to presentation element */
-
-/*
- * isode/psap/pl2pe.c
- */
-
-/*
- * 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.
- *
- */
-
-
-/* Presentation lists are a human-readable, unambiguous way of describing
- a presentation element.
-
- SYNTAX: list :: "(" class code arguments ")"
-
- class :: "UNIV" / "APPL" / "CONT" / "PRIV"
-
- code :: name / number
-
- name :: letter (letter / digit / dash)*
-
- number :: "0x" [0-f] [0-f]* /
- "0" [0-7] [0-7]* /
- [1-9] [0-9]* /
- "\"" (IA5 subset)* "\""
-
- arguments:: primitive / constructor
-
- primitive:: number number*
-
- constructor:: list*
-
- NOTE WELL: A single "number" must be representable in no more than
- (sizeof (int)) bytes.
- */
-
-
-/* LINTLIBRARY */
-
-#include <ctype.h>
-#include <stdio.h>
-#include "psap.h"
-
-/* DATA */
-
-typedef struct PList {
- u_char pl_code;
-#define PL_CODE_LPAR 0
-#define PL_CODE_NAME 1
-#define PL_CODE_NUM 2
-#define PL_CODE_RPAR 3
-
- union {
- char un_pl_name[BUFSIZ];
- int un_pl_num;
- } pl_un;
-#define pl_name pl_un.un_pl_name
-#define pl_num pl_un.un_pl_num
-} PList, *PL;
-
-
-PE pl2pe_aux ();
-static int pl_read_class ();
-static int pl_read_id ();
-static int pl_read_name ();
-static int pl_read_cons ();
-static int pl_read_prim ();
-static int pl_read_lex ();
-static int pl_read ();
-
-/* */
-
-PE pl2pe (ps)
-register PS ps;
-{
- struct PList pls;
- register PL pl = &pls;
-
- if (pl_read_lex (ps, pl) == NOTOK) {
- if (ps -> ps_errno == PS_ERR_EOF)
- ps -> ps_errno = PS_ERR_NONE;
- return NULLPE;
- }
- if (pl -> pl_code != PL_CODE_LPAR)
- return ps_seterr (ps, PS_ERR_XXX, NULLPE);
-
- return pl2pe_aux (ps, pl);
-}
-
-/* */
-
-static PE pl2pe_aux (ps, pl)
-register PS ps;
-register PL pl;
-{
- PElementClass class;
- PElementID id;
- register PE pe;
-
- if (pl_read_class (ps, pl, &class) == NOTOK)
- return NULLPE;
- if (pl_read_id (ps, pl, class, &id) == NOTOK)
- return NULLPE;
-
- if ((pe = pe_alloc (class, PE_FORM_PRIM, id)) == NULLPE)
- return ps_seterr (ps, PS_ERR_NMEM, NULLPE);
-
- if (pl_read_lex (ps, pl) == NOTOK)
- return NULLPE;
- switch (pl -> pl_code) {
- case PL_CODE_LPAR:
- if (pl_read_cons (ps, pl, &pe -> pe_cons) == NOTOK)
- goto you_lose; /* else fall */
- case PL_CODE_RPAR:
- pe -> pe_form = PE_FORM_CONS;
- break;
-
- case PL_CODE_NUM:
- if (pl_read_prim (ps, pl, pe) == NOTOK)
- goto you_lose;
- break;
-
- default:
- ps -> ps_errno = PS_ERR_XXX;
- goto you_lose;
- }
- return pe;
-
-you_lose: ;
- pe_free (pe);
- return NULLPE;
-}
-
-/* */
-
-static int pl_read_class (ps, pl, class)
-register PS ps;
-register PL pl;
-register PElementClass *class;
-{
- register int i;
-
- if (pl_read_lex (ps, pl) == NOTOK)
- return NOTOK;
- if (pl -> pl_code != PL_CODE_NAME)
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
-
- if ((i = pl_read_name (pl -> pl_name, pe_classlist, pe_maxclass)) == NOTOK)
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
-
- *class = i;
- return OK;
-}
-
-/* */
-
-static int pl_read_id (ps, pl, class, id)
-register PS ps;
-register PL pl;
-register PElementClass class;
-register PElementID *id;
-{
- register int i;
- register char **list;
-
- if (pl_read_lex (ps, pl) == NOTOK)
- return NOTOK;
- switch (pl -> pl_code) {
- case PL_CODE_NAME:
- switch (class) {
- case PE_CLASS_UNIV:
- list = pe_univlist, i = pe_maxuniv;
- break;
- case PE_CLASS_APPL:
- list = pe_applist, i = pe_maxappl;
- break;
- default:
- list = NULL, i = 0;
- break;
- case PE_CLASS_PRIV:
- list = pe_privlist, i = pe_maxpriv;
- break;
- }
- if ((i = pl_read_name (pl -> pl_name, list, i)) == NOTOK)
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
- break;
-
- case PL_CODE_NUM:
- i = pl -> pl_num;
- break;
-
- default:
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
- }
-
- *id = i;
- return OK;
-}
-
-/* */
-
-static int pl_read_name (name, list, n)
-register char *name,
- **list;
-register int n;
-{
- register int i;
- register char *bp;
-
- for (i = n; i > 0; i--)
- if ((bp = *list++) && strcmp (bp, name) == 0)
- return (n - i);
-
- return NOTOK;
-}
-
-/* */
-
-static int pl_read_cons (ps, pl, pe)
-register PS ps;
-register PL pl;
-register PE *pe;
-{
- register PE p,
- q;
-
- if ((p = pl2pe_aux (ps, pl)) == NULLPE)
- return NOTOK;
- *pe = p;
-
- for (q = p;; q = q -> pe_next = p) {
- if (pl_read_lex (ps, pl) == NOTOK)
- return NOTOK;
- switch (pl -> pl_code) {
- case PL_CODE_LPAR:
- if ((p = pl2pe_aux (ps, pl)) == NULLPE)
- return NOTOK;
- break;
-
- default:
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
-
- case PL_CODE_RPAR:
- return OK;
- }
- }
-}
-
-/* */
-
-static int pl_read_prim (ps, pl, pe)
-register PS ps;
-register PL pl;
-register PE pe;
-{
- register int i,
- len,
- n;
- register PElementData dp,
- ep;
-
- if ((len = pl -> pl_num) == 0)
- goto out;
- if ((dp = PEDalloc (len)) == NULLPED)
- return ps_seterr (ps, PS_ERR_NMEM, NOTOK);
-
- pe -> pe_prim = dp, pe -> pe_len = len;
-
- for (ep = dp + len; dp < ep;) {
- i = min (ep - dp, sizeof (int));
- if (pl_read_lex (ps, pl) == NOTOK)
- return NOTOK;
- if (pl -> pl_code != PL_CODE_NUM)
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
- n = pl -> pl_num;
- while (i-- > 0)
- *dp++ = (n >> (i * 8)) & 0xff;
- }
-
-out: ;
- if (pl_read_lex (ps, pl) == NOTOK)
- return NOTOK;
- if (pl -> pl_code != PL_CODE_RPAR)
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
-
- return OK;
-}
-
-/* */
-
-#ifdef XXX
-static int pl_read_lex (ps, pl)
-register PS ps;
-register PL pl;
-{
- int i = pl_read_lex_aux (ps, pl);
-
- (void) fprintf (stderr, "pl_read_lex returns ");
- if (i == NOTOK) {
- (void) fprintf (stderr, "NOTOK [%s]\n", ps_error (ps -> ps_errno));
- return NOTOK;
- }
- switch (pl -> pl_code) {
- case PL_CODE_LPAR:
- (void) fprintf (stderr, "LPAR");
- break;
- case PL_CODE_RPAR:
- (void) fprintf (stderr, "RPAR");
- break;
- case PL_CODE_NAME:
- (void) fprintf (stderr, "NAME \"%s\"", pl -> pl_name);
- break;
- case PL_CODE_NUM:
- (void) fprintf (stderr, "NUM 0x%x", pl -> pl_num);
- break;
- default:
- (void) fprintf (stderr, "code %d", pl -> pl_code);
- break;
- }
- (void) fprintf (stderr, "\n");
- if (pl -> pl_code == PL_CODE_RPAR)
- sleep(1);
-
- return i;
-}
-
-#define pl_read_lex pl_read_lex_aux
-#endif
-
-/* */
-
-static int pl_read_lex (ps, pl)
-register PS ps;
-register PL pl;
-{
- register int base,
- n;
- register char *bp;
- byte c;
-
- do {
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- } while (isspace ((u_char) c));
-
- switch (c) {
- case '(':
- pl -> pl_code = PL_CODE_LPAR;
- return OK;
- case ')':
- pl -> pl_code = PL_CODE_RPAR;
- return OK;
-
- case ';':
- do {
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- } while (c != '\n');
- return pl_read_lex (ps, pl);
-
- default:
- if (isalpha ((u_char) c)) {
- pl -> pl_code = PL_CODE_NAME;
- bp = pl -> pl_name;
- while (isalnum ((u_char) c) || c == '-') {
- *bp++ = c;
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- }
- *bp = NULL;
- ps -> ps_scratch = c;
- return OK;
- }
-
- if (c == '"') {
- pl -> pl_code = PL_CODE_NUM;
- for (n = 0;;) {
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- if (c == '"') {
- pl -> pl_num = n;
- return OK;
- }
- n = (n << 8) | (c & 0xff);
- }
- }
-
- if (!isdigit ((u_char) c))
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
-
- pl -> pl_code = PL_CODE_NUM;
- if (c == '0') {
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- if (c == 'x' || c == 'X') {
- base = 16;
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- }
- else {
- base = 8;
- if (c < '0' || c > '7') {
- pl -> pl_num = 0;
- ps -> ps_scratch = c;
- return OK;
- }
- }
- }
- else
- base = 10;
-
- for (n = 0;;) {
- switch (base) {
- case 10:
- if (c < '0' || c > '9')
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
- break;
-
- case 8:
- if (c < '0' || c > '7')
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
- break;
-
- case 16:
- if (c >= '0' && c <= '9')
- break;
- if (c >= 'A' && c <= 'F')
- c += 'a' - 'A';
- else
- if (c < 'a' || c > 'f')
- return ps_seterr (ps, PS_ERR_XXX, NOTOK);
- c += '9' + 1 - 'a';
- break;
- }
- n = (n * base) + c - '0';
- if (pl_read (ps, &c) == NOTOK)
- return NOTOK;
- if (!isxdigit ((u_char) c)) {
- pl -> pl_num = n;
- ps -> ps_scratch = c;
- return OK;
- }
- }
- }
-}
-
-/* */
-
-static int pl_read (ps, c)
-register PS ps;
-register byte *c;
-{
- if (ps -> ps_scratch) {
- *c = ps -> ps_scratch;
- ps -> ps_scratch = 0;
- return OK;
- }
-
- return ps_read (ps, c, 1);
-}