[BACK]Return to bconv.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

File: [local] / OpenXM / src / ox_toolkit / bconv.c (download)

Revision 1.4, Tue Oct 10 05:23:20 2000 UTC (23 years, 7 months ago) by ohara
Branch: MAIN
CVS Tags: maekawa-ipv6, RELEASE_1_2_1
Changes since 1.3: +6 -6 lines

ox_toolkit is up to date.

0. OXFILE is introduced.
1. we support new method of ox connection.
2. we support exchaging byte order.
   (in possible, we choose a byte order of machine integer).
3. cmo_list is rewritten.
4. we support a mathcap database.
etc.

Sorry, I forgot many changes.

/* -*- mode: C -*- */
/* $OpenXM: OpenXM/src/ox_toolkit/bconv.c,v 1.4 2000/10/10 05:23:20 ohara Exp $ */

/* bconv can convert an OX expression or a CMO expression to a byte stream. */
/* Any expressions, as a string, must have shorter length than 8192.*/

#include <stdio.h>
#include <stdlib.h>

#include "ox_toolkit.h"

static void display(ox *m)
{
    int i;
    int len = 0;
    unsigned char* d_buff;

    switch(m->tag) {
    case OX_DATA:
        len = sizeof(int) + sizeof(int) + cmolen_cmo(((ox_data *)m)->cmo);
        d_buff = malloc(len);
        dump_buffer_init(d_buff);
        dump_ox_data((ox_data *)m);
        break;
    case OX_COMMAND:
        len = sizeof(int) + sizeof(int) + sizeof(int);
        d_buff = malloc(len);
        dump_buffer_init(d_buff);
        dump_ox_command((ox_command *)m);
        break;
    default:
        len = cmolen_cmo((cmo *)m);
        d_buff = malloc(len);
        dump_buffer_init(d_buff);
        dump_cmo((cmo *)m);
    }

    for(i=0; i<len; i++) {
        fprintf(stdout, "%02x ", d_buff[i]);
        if(i%20 == 19) {
            fprintf(stdout, "\n");
        }
    }
    if(i%20 != 19) {
        fprintf(stdout, "\n");
    }
    free(d_buff);
}

#define SIZE_CMDLINE  8192

static char cmdline[SIZE_CMDLINE];

static void prompt()
{
    fprintf(stdout, "> ");
    fgets(cmdline, SIZE_CMDLINE, stdin);
    init_parser(cmdline);
}

int main()
{
    cmo *m;
    setbuf(stderr, NULL);
    setbuf(stdout, NULL);

    setflag_parse(PFLAG_ADDREV);
    for(prompt(); (m = parse()) != NULL; prompt()) {
        display(m);
    }
    return 0;
}