static _cdebbuf *protocol_message_2_pars(_cdebbuf *cdb, _cmsg *cmsg, int level) { for (; TYP != _CEND; cmsg->p++) { int slen = 29 + 3 - level; int i; if (!cdb) return NULL; cdb = bufprint(cdb, " "); for (i = 0; i < level - 1; i++) cdb = bufprint(cdb, " "); switch (TYP) { case _CBYTE: cdb = bufprint(cdb, "%-*s = 0x%x\n", slen, NAME, *(u8 *) (cmsg->m + cmsg->l)); cmsg->l++; break; case _CWORD: cdb = bufprint(cdb, "%-*s = 0x%x\n", slen, NAME, *(u16 *) (cmsg->m + cmsg->l)); cmsg->l += 2; break; case _CDWORD: cdb = bufprint(cdb, "%-*s = 0x%lx\n", slen, NAME, *(u32 *) (cmsg->m + cmsg->l)); cmsg->l += 4; break; case _CSTRUCT: cdb = bufprint(cdb, "%-*s = ", slen, NAME); if (cmsg->m[cmsg->l] == '\0') cdb = bufprint(cdb, "default"); else cdb = printstruct(cdb, cmsg->m + cmsg->l); cdb = bufprint(cdb, "\n"); if (cmsg->m[cmsg->l] != 0xff) cmsg->l += 1 + cmsg->m[cmsg->l]; else cmsg->l += 3 + *(u16 *) (cmsg->m + cmsg->l + 1); break; case _CMSTRUCT: if (cmsg->m[cmsg->l] == '\0') { cdb = bufprint(cdb, "%-*s = default\n", slen, NAME); cmsg->l++; jumpcstruct(cmsg); } else { char *name = NAME; unsigned _l = cmsg->l; cdb = bufprint(cdb, "%-*s\n", slen, name); cmsg->l = (cmsg->m + _l)[0] == 255 ? cmsg->l + 3 : cmsg->l + 1; cmsg->p++; cdb = protocol_message_2_pars(cdb, cmsg, level + 1); } break; } } return cdb; }
static void pars_2_message(_cmsg * cmsg) { for (; TYP != _CEND; cmsg->p++) { switch (TYP) { case _CBYTE: byteTLcpy(cmsg->m + cmsg->l, OFF); cmsg->l++; break; case _CWORD: wordTLcpy(cmsg->m + cmsg->l, OFF); cmsg->l += 2; break; case _CDWORD: dwordTLcpy(cmsg->m + cmsg->l, OFF); cmsg->l += 4; break; case _CSTRUCT: if (*(u8 **) OFF == NULL) { *(cmsg->m + cmsg->l) = '\0'; cmsg->l++; } else if (**(_cstruct *) OFF != 0xff) { structTLcpy(cmsg->m + cmsg->l, *(_cstruct *) OFF, 1 + **(_cstruct *) OFF); cmsg->l += 1 + **(_cstruct *) OFF; } else { _cstruct s = *(_cstruct *) OFF; structTLcpy(cmsg->m + cmsg->l, s, 3 + *(u16 *) (s + 1)); cmsg->l += 3 + *(u16 *) (s + 1); } break; case _CMSTRUCT: if (*(_cmstruct *) OFF == CAPI_DEFAULT) { *(cmsg->m + cmsg->l) = '\0'; cmsg->l++; jumpcstruct(cmsg); } else { unsigned _l = cmsg->l; unsigned _ls; cmsg->l++; cmsg->p++; pars_2_message(cmsg); _ls = cmsg->l - _l - 1; if (_ls < 255) (cmsg->m + _l)[0] = (u8) _ls; else { structTLcpyovl(cmsg->m + _l + 3, cmsg->m + _l + 1, _ls); (cmsg->m + _l)[0] = 0xff; wordTLcpy(cmsg->m + _l + 1, &_ls); } } break; } } }
static void protocol_message_2_pars(_cmsg * cmsg, int level) { for (; TYP != _CEND; cmsg->p++) { int slen = 29 + 3 - level; int i; bufprint(" "); for (i = 0; i < level - 1; i++) bufprint(" "); switch (TYP) { case _CBYTE: bufprint("%-*s = 0x%x\n", slen, NAME, *(__u8 *) (cmsg->m + cmsg->l)); cmsg->l++; break; case _CWORD: bufprint("%-*s = 0x%x\n", slen, NAME, *(__u16 *) (cmsg->m + cmsg->l)); cmsg->l += 2; break; case _CDWORD: bufprint("%-*s = 0x%lx\n", slen, NAME, *(__u32 *) (cmsg->m + cmsg->l)); cmsg->l += 4; break; case _CSTRUCT: bufprint("%-*s = ", slen, NAME); if (cmsg->m[cmsg->l] == '\0') bufprint("default"); else printstruct(cmsg->m + cmsg->l); bufprint("\n"); if (cmsg->m[cmsg->l] != 0xff) cmsg->l += 1 + cmsg->m[cmsg->l]; else cmsg->l += 3 + *(__u16 *) (cmsg->m + cmsg->l + 1); break; case _CMSTRUCT: /*----- Metastruktur 0 -----*/ if (cmsg->m[cmsg->l] == '\0') { bufprint("%-*s = default\n", slen, NAME); cmsg->l++; jumpcstruct(cmsg); } else { char *name = NAME; unsigned _l = cmsg->l; bufprint("%-*s\n", slen, name); cmsg->l = (cmsg->m + _l)[0] == 255 ? cmsg->l + 3 : cmsg->l + 1; cmsg->p++; protocol_message_2_pars(cmsg, level + 1); } break; } } }
static void message_2_pars(_cmsg * cmsg) { for (; TYP != _CEND; cmsg->p++) { switch (TYP) { case _CBYTE: byteTRcpy(cmsg->m + cmsg->l, OFF); cmsg->l++; break; case _CWORD: wordTRcpy(cmsg->m + cmsg->l, OFF); cmsg->l += 2; break; case _CDWORD: dwordTRcpy(cmsg->m + cmsg->l, OFF); cmsg->l += 4; break; case _CSTRUCT: *(u8 **) OFF = cmsg->m + cmsg->l; if (cmsg->m[cmsg->l] != 0xff) cmsg->l += 1 + cmsg->m[cmsg->l]; else cmsg->l += 3 + *(u16 *) (cmsg->m + cmsg->l + 1); break; case _CMSTRUCT: if (cmsg->m[cmsg->l] == '\0') { *(_cmstruct *) OFF = CAPI_DEFAULT; cmsg->l++; jumpcstruct(cmsg); } else { unsigned _l = cmsg->l; *(_cmstruct *) OFF = CAPI_COMPOSE; cmsg->l = (cmsg->m + _l)[0] == 255 ? cmsg->l + 3 : cmsg->l + 1; cmsg->p++; message_2_pars(cmsg); } break; } } }