/* * Function: Angel_BuildParamConfigMessage * Purpose: write a parameter config to a buffer in ADP format. * * see params.h for details */ unsigned int Angel_BuildParamConfigMessage( unsigned char *buffer, const ParameterConfig *config ) { unsigned char *start = buffer; unsigned int i; PUT32LE( buffer, config->num_parameters ); buffer += sizeof( word ); for ( i = 0; i < config->num_parameters; ++i ) { PUT32LE( buffer, config->param[i].type ); buffer += sizeof( word ); PUT32LE( buffer, config->param[i].value ); buffer += sizeof( word ); } return (buffer - start); }
/* * Function: Angel_BuildParamOptionsMessage * Purpose: write a parameter Options to a buffer in ADP format. * * see params.h for details */ unsigned int Angel_BuildParamOptionsMessage( unsigned char *buffer, const ParameterOptions *options ) { unsigned char *start = buffer; unsigned int i, j; PUT32LE( buffer, options->num_param_lists ); buffer += sizeof( word ); for ( i = 0; i < options->num_param_lists; ++i ) { PUT32LE( buffer, options->param_list[i].type ); buffer += sizeof( word ); PUT32LE( buffer, options->param_list[i].num_options ); buffer += sizeof( word ); for ( j = 0; j < options->param_list[i].num_options; ++j ) { PUT32LE( buffer, options->param_list[i].option[j] ); buffer += sizeof( word ); } } return (buffer - start); }
unsigned int vmsgbuild(unsigned char *buffer, const char *format, va_list args) { unsigned int blen = 0; int ch; /* Step through the format string */ while ((ch = *format++) != '\0') { if (ch != '%') { if (buffer != NULL) *buffer++ = (unsigned char)ch; blen++; } else { switch (ch = *format++) { case 'w': case 'W': /* 32bit pointer */ case 'p': case 'P': { /* 32bit word / 32bit pointer */ unsigned int na = va_arg(args, unsigned int); if (buffer != NULL) { PUT32LE(buffer, na); buffer += sizeof(unsigned int); } blen += sizeof(unsigned int); break; } case 'h': case 'H': { /* 16bit value */ unsigned int na = va_arg(args, unsigned int); if (buffer != NULL) { PUT16LE(buffer, na); buffer += sizeof(unsigned short); } blen += sizeof(unsigned short); break; } case 'c': case 'C': case 'b': case 'B': /* 8bit character / 8bit byte */ ch = va_arg(args, int); /* * XXX * * fall through to the normal character processing */ case '%': default: /* normal '%' character, or a different normal character */ if (buffer != NULL) *buffer++ = (unsigned char)ch; blen++; break; } } } return blen; }