|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 1725 (0x6bd) Types: TextFile Names: »prim2oid.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/psap/prim2oid.c«
/* prim2oid.c - presentation element to object identifier */ #ifndef lint static char *rcsid = "$Header: /f/osi/psap/RCS/prim2oid.c,v 6.0 89/03/18 23:38:55 mrose Rel $"; #endif /* * $Header: /f/osi/psap/RCS/prim2oid.c,v 6.0 89/03/18 23:38:55 mrose Rel $ * * * $Log: prim2oid.c,v $ * Revision 6.0 89/03/18 23:38:55 mrose * Release 5.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. * */ /* LINTLIBRARY */ #include <stdio.h> #include "psap.h" /* \f */ OID prim2oid (pe) register PE pe; { register unsigned int i, *ip; register PElementData dp, ep; static OIDentifier oid; register OID o = &oid; if (pe -> pe_form != PE_FORM_PRIM || (dp = pe -> pe_prim) == NULLPED || pe -> pe_len == 0) return pe_seterr (pe, PE_ERR_PRIM, NULLOID); ep = dp + pe -> pe_len; if (o -> oid_elements) free ((char *) o -> oid_elements); for (i = 1; dp < ep; i++) { /* another whacko ISO encoding... */ if (*dp == 0x80) return pe_seterr (pe, PE_ERR_OID, NULLOID); while (*dp++ & 0x80) if (dp > ep) return pe_seterr (pe, PE_ERR_OID, NULLOID); } if ((ip = (unsigned int *) malloc ((i + 1) * sizeof *ip)) == NULL) return pe_seterr (pe, PE_ERR_NMEM, NULLOID); o -> oid_elements = ip, o -> oid_nelem = i; for (dp = pe -> pe_prim; dp < ep; ) { i = 0; do { i <<= 7; i |= *dp & 0x7f; } while (*dp++ & 0x80); if (ip == o -> oid_elements) *ip++ = i / 40, *ip++ = i % 40; else *ip++ = i; } return o; }