Esempio n. 1
0
extern size_t XML1_PackValue(CONVOPT *opt, unsigned char *p,
                             ValueStruct *value) {
  unsigned char *pp;

  pp = p;
  if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
    p += sprintf((char *)p, "<?xml version=\"1.0\"");
    if (ConvCodeset(opt) != NULL) {
      p += sprintf((char *)p, " encoding=\"%s\"", ConvCodeset(opt));
    }
    p += sprintf((char *)p, "?>");
    p += PutCR(opt, (char *)p);
    opt->nIndent = 0;
  } else {
    opt->nIndent = -1;
  }

  if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
    p += sprintf((char *)p, "<lm:block xmlns:lm=\"%s\">", NS_URI);
    p += PutCR(opt, (char *)p);
  }
  if ((ConvOutput(opt) & XML_OUT_BODY) != 0) {
    p += _XML_PackValue1(opt, p, opt->recname, value);
  }
  if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
    p += sprintf((char *)p, "</lm:block>");
  }
  *p = 0;
  return (p - pp);
}
Esempio n. 2
0
extern size_t XML1_SizeValue(CONVOPT *opt, ValueStruct *value) {
  char buff[SIZE_BUFF + 1];
  size_t size;

  if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
    size = 19; //	<?xml version="1.0"
    if (ConvCodeset(opt) != NULL) {
      size += 12 + strlen(ConvCodeset(opt));
      //	" encoding=\"%s\"",ConvCodeset(opt)
    }
    size += 2; //	?>
    size += PutCR(opt, buff);
    opt->nIndent = 0;
  } else if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
    size = 0;
    opt->nIndent = 0;
  } else {
    size = 0;
    opt->nIndent = -1;
  }
  if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
    size += sprintf(buff, "<lm:block xmlns:lm=\"%s\">", NS_URI);
    size += PutCR(opt, buff);
  }
  if ((ConvOutput(opt) & XML_OUT_BODY) != 0) {
    size += _XML_SizeValue1(opt, opt->recname, value, buff);
  }
  if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
    size += 11; //	</lm:block>
  }
  return (size);
}
Esempio n. 3
0
extern size_t XML_PackValue(CONVOPT *opt, unsigned char *p,
                            ValueStruct *value) {
  unsigned char *pp;

  pp = p;
  if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
    p += sprintf((char *)p, "<?xml version=\"1.0\"");
    if (ConvCodeset(opt) != NULL) {
      p += sprintf((char *)p, " encoding=\"%s\"", ConvCodeset(opt));
    }
    p += sprintf((char *)p, "?>");
    p += PutCR(opt, (char *)p);
    opt->nIndent = 0;
  } else {
    opt->nIndent = -1;
  }
  switch (ConvXmlType(opt)) {
  case XML_TYPE1:
    if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
      p += sprintf((char *)p, "<lm:block xmlns:lm=\"%s\">", NS_URI);
      p += PutCR(opt, (char *)p);
    }
    if ((ConvOutput(opt) & XML_OUT_BODY) != 0) {
      p += _XML_PackValue1(opt, p, opt->recname, value);
    }
    if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
      p += sprintf((char *)p, "</lm:block>");
    }
    break;
  case XML_TYPE2:
  default:
    if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
      if (opt->recname != NULL) {
        p += sprintf((char *)p, "<%s:data xmlns:%s=\"%s/%s.rec\">",
                     opt->recname, opt->recname, NS_URI, opt->recname);
      } else {
        p += sprintf((char *)p, "<data>");
      }
      p += PutCR(opt, (char *)p);
    }
    if ((ConvOutput(opt) & XML_OUT_BODY) != 0) {
      if (opt->recname != NULL) {
        p += _XML_PackValue2(opt, p, opt->recname, value);
      } else {
        p += _XML_PackValue2(opt, p, "value", value);
      }
    }
    if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
      if (opt->recname != NULL) {
        p += sprintf((char *)p, "</%s:data>", opt->recname);
      } else {
        p += sprintf((char *)p, "</data>");
      }
    }
    break;
  }
  *p = 0;
  return (p - pp);
}
Esempio n. 4
0
extern size_t XML_SizeValue(CONVOPT *opt, ValueStruct *value) {
  char buff[SIZE_BUFF + 1];
  size_t size;

  if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
    size = 19; //	<?xml version="1.0"
    if (ConvCodeset(opt) != NULL) {
      size += 12 + strlen(ConvCodeset(opt));
      //	" encoding=\"%s\"",ConvCodeset(opt)
    }
    size += 2; //	?>
    size += PutCR(opt, buff);
    opt->nIndent = 0;
  } else if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
    size = 0;
    opt->nIndent = 0;
  } else {
    size = 0;
    opt->nIndent = -1;
  }
  switch (ConvXmlType(opt)) {
  case XML_TYPE1:
    if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
      size += sprintf(buff, "<lm:block xmlns:lm=\"%s\">", NS_URI);
      size += PutCR(opt, buff);
    }
    if ((ConvOutput(opt) & XML_OUT_BODY) != 0) {
      size += _XML_SizeValue1(opt, opt->recname, value, buff);
    }
    if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
      size += 11; //	</lm:block>
    }
    break;
  case XML_TYPE2:
  default:
    if ((ConvOutput(opt) & XML_OUT_HEADER) != 0) {
      if (opt->recname != NULL) {
        size += sprintf(buff, "<%s:data xmlns:%s=\"%s/%s.rec\">", opt->recname,
                        opt->recname, NS_URI, opt->recname);
      } else {
        size += sprintf(buff, "<data>");
      }
      size += PutCR(opt, buff);
    }
    if ((ConvOutput(opt) & XML_OUT_BODY) != 0) {
      size += _XML_SizeValue2(opt, opt->recname, value, buff);
    }
    if ((ConvOutput(opt) & XML_OUT_TAILER) != 0) {
      if (opt->recname != NULL) {
        size += sprintf(buff, "</%s:data>", opt->recname);
      } else {
        size += sprintf(buff, "</data>");
      }
    }
    break;
  }
  return (size);
}
Esempio n. 5
0
static	void
_DumpBatchHandler(
	char	*name,
	BatchBind	*bind,
	void	*dummy)
{
	MessageHandler		*handler;

	handler = bind->handler;

	if		(  ( handler->fInit & INIT_LOAD )  ==  0  ) {
		handler->fInit |= INIT_LOAD;
		printf("\thandler\t\"%s\"\t{\n",handler->name);
		printf("\t\tmodule    \"%s\";\n",(char *)bind->module);
		printf("\t\tclass     \"%s\";\n",(char *)handler->klass);
		printf("\t\tselialize \"%s\";\n",(char *)handler->serialize);
		printf("\t\tlocale    \"%s\";\n",ConvCodeset(handler->conv));
		printf("\t\tstart     \"%s\";\n",handler->start);
		printf("\t\tencoding  ");
		switch	(handler->conv->encode) {
		  case	STRING_ENCODING_URL:
			printf("\"URL\";\n");
			break;
		  case	STRING_ENCODING_BASE64:
			printf("\"BASE64\";\n");
			break;
		  default:
			printf("\"NULL\";\n");
			break;
		}
			
		printf("\t};\n");
	}
}
Esempio n. 6
0
static int _StartBatch(MessageHandler *handler, char *name, char *param) {
  int (*apl)(char *);
  int rc;
  ValueStruct *val;
  char *arg;

  OpenCOBOL_Conv = NewConvOpt();
  ConvSetSize(OpenCOBOL_Conv, ThisBD->textsize, ThisBD->arraysize);
  ConvSetCodeset(OpenCOBOL_Conv, ConvCodeset(handler->conv));
  if (handler->conv != NULL) {
    OpenCOBOL_Conv->fBigEndian = handler->conv->fBigEndian;
  } else {
    Error("handler->conv is NULL");
  }

  InitMONFUNC(OpenCOBOL_Conv, OpenCOBOL_PackValue, OpenCOBOL_UnPackValue,
              OpenCOBOL_SizeValue);

#ifdef DEBUG
  printf("starting [%s][%s]\n", name, param);
#endif
  if ((apl = cob_resolve(name)) != NULL) {
    val = NewValue(GL_TYPE_CHAR);
    SetValueStringWithLength(val, param, ThisBD->textsize, NULL);
    arg = StrnDup(ValueToString(val, "euc-jisx0213"), ThisBD->textsize);
    StringC2Cobol(arg, ThisBD->textsize);
    rc = apl(arg);
    FreeValueStruct(val);
    xfree(arg);
  } else {
    Warning("%s - %s is not found.", cob_resolve_error(), name);
    rc = -1;
  }
  return (rc);
}
Esempio n. 7
0
static	void
_ReadyDC(
	MessageHandler	*handler)
{
ENTER_FUNC;
	RubyConv = NewConvOpt();
	ConvSetSize(RubyConv,ThisLD->textsize,ThisLD->arraysize);
	ConvSetCodeset(RubyConv,ConvCodeset(handler->conv));
	init(handler);
LEAVE_FUNC;
}
Esempio n. 8
0
static	int
_StartBatch(
	MessageHandler	*handler,
	char	*name,
	char	*param)
{
	VALUE app_class;
	VALUE app;
	VALUE rc;
	int state;

ENTER_FUNC;
#ifdef	DEBUG
	printf("starting [%s][%s]\n",name,param);
#endif
	RubyConv = NewConvOpt();
	ConvSetSize(RubyConv,ThisBD->textsize,ThisBD->arraysize);
	ConvSetCodeset(RubyConv,ConvCodeset(handler->conv));
	init(handler);

	app_class = load_application(handler->loadpath,name);
	if (NIL_P(app_class)) {
		Warning("%s in not found.",name);
		return -1;
	}
	app = rb_protect_funcall(app_class,rb_intern("new"),&state,0);
	if (state && error_handle(state)) {
		return -1;
	}
	rc = rb_protect_funcall(app, rb_intern("start_batch"), &state,
		1, rb_str_new2(param));
	if (state && error_handle(state))
		Warning("eval start_batch failed");
		return -1;
	if (FIXNUM_P(rc)) {
		return NUM2INT(rc);
	} else {
		return -1;
	}
LEAVE_FUNC;
	return	(rc); 
}
Esempio n. 9
0
static void _ReadyDC(MessageHandler *handler) {
  int i;
  size_t scrsize;

  OpenCOBOL_Conv = NewConvOpt();
  ConvSetSize(OpenCOBOL_Conv, ThisLD->textsize, ThisLD->arraysize);
  ConvSetCodeset(OpenCOBOL_Conv, ConvCodeset(handler->conv));
  if (handler->conv != NULL) {
    OpenCOBOL_Conv->fBigEndian = handler->conv->fBigEndian;
  } else {
    Error("handler->conv is NULL");
  }

  InitMONFUNC(OpenCOBOL_Conv, OpenCOBOL_PackValue, OpenCOBOL_UnPackValue,
              OpenCOBOL_SizeValue);

  if (ThisEnv->mcprec != NULL) {
    McpData =
        xmalloc(OpenCOBOL_SizeValue(OpenCOBOL_Conv, ThisEnv->mcprec->value));
    OpenCOBOL_PackValue(OpenCOBOL_Conv, McpData, ThisEnv->mcprec->value);
  } else {
    McpData = NULL;
  }
  if (ThisEnv->linkrec != NULL) {
    LinkData =
        xmalloc(OpenCOBOL_SizeValue(OpenCOBOL_Conv, ThisEnv->linkrec->value));
  } else {
    LinkData = NULL;
  }
  if (ThisLD->sparec != NULL) {
    SpaData =
        xmalloc(OpenCOBOL_SizeValue(OpenCOBOL_Conv, ThisLD->sparec->value));
  }
  scrsize = 0;
  for (i = 0; i < ThisLD->cWindow; i++) {
    if (ThisLD->windows[i] != NULL) {
      scrsize += OpenCOBOL_SizeValue(OpenCOBOL_Conv, ThisLD->windows[i]->value);
    }
  }
  ScrData = xmalloc(scrsize);
}
Esempio n. 10
0
static size_t _XML_PackValue2(CONVOPT *opt, unsigned char *p, char *name,
                              ValueStruct *value) {
  char num[SIZE_NAME + 1];
  int i;
  unsigned char *pp;

  if (IS_VALUE_NIL(value))
    return (0);
  pp = p;
  if (value != NULL) {
    opt->nIndent++;
    p += IndentLine(opt, p);
    switch (ValueType(value)) {
    case GL_TYPE_ARRAY:
      if (opt->recname != NULL) {
        p += sprintf(p, "<%s:%s type=\"array\"", opt->recname, name);
      } else {
        p += sprintf(p, "<%s type=\"array\"", name);
      }
      p += sprintf(p, " count=\"%d\">", (int)ValueArraySize(value));
      p += PutCR(opt, p);
      for (i = 0; i < ValueArraySize(value); i++) {
        sprintf(num, "%s", name);
        p += _XML_PackValue2(opt, p, num, ValueArrayItem(value, i));
      }
      p += IndentLine(opt, p);
      if (opt->recname != NULL) {
        p += sprintf(p, "</%s:%s>", opt->recname, name);
      } else {
        p += sprintf(p, "</%s>", name);
      }
      break;
    case GL_TYPE_ROOT_RECORD:
    case GL_TYPE_RECORD:
      if (opt->recname != NULL) {
        p += sprintf(p, "<%s:%s type=\"record\"", opt->recname, name);
      } else {
        p += sprintf(p, "<%s type=\"record\"", name);
      }
      p += sprintf(p, " size=\"%d\">", (int)ValueRecordSize(value));
      p += PutCR(opt, p);
      for (i = 0; i < ValueRecordSize(value); i++) {
        p += _XML_PackValue2(opt, p, ValueRecordName(value, i),
                             ValueRecordItem(value, i));
      }
      p += IndentLine(opt, p);
      if (opt->recname != NULL) {
        p += sprintf(p, "</%s:%s>", opt->recname, name);
      } else {
        p += sprintf(p, "</%s>", name);
      }
      break;
    case GL_TYPE_ALIAS:
      if (opt->recname != NULL) {
        p += sprintf(p, "<%s:%s type=\"alias\">", opt->recname, name);
      } else {
        p += sprintf(p, "<%s type=\"alias\">", name);
      }
      p += sprintf(p, "%s", ValueAliasName(value));
      if (opt->recname != NULL) {
        p += sprintf(p, "</%s:%s>", opt->recname, name);
      } else {
        p += sprintf(p, "</%s>", name);
      }
      break;
    default:
      if (opt->recname != NULL) {
        p += sprintf(p, "<%s:%s", opt->recname, name);
      } else {
        p += sprintf(p, "<%s", name);
      }
      p += sprintf(p, " type=");
      switch (ValueType(value)) {
      case GL_TYPE_INT:
        p += sprintf(p, "\"int\"");
        break;
      case GL_TYPE_BOOL:
        p += sprintf(p, "\"bool\"");
        break;
      case GL_TYPE_BYTE:
        p += sprintf(p, "\"byte\" size=\"%d\"", (int)ValueByteLength(value));
        break;
      case GL_TYPE_BINARY:
        p += sprintf(p, "\"binary\" size=\"%d\"", (int)ValueByteLength(value));
        break;
      case GL_TYPE_CHAR:
        p += sprintf(p, "\"char\" size=\"%d\"", (int)ValueStringLength(value));
        break;
      case GL_TYPE_VARCHAR:
        p += sprintf(p, "\"varchar\" size=\"%d\"",
                     (int)ValueStringLength(value));
        break;
      case GL_TYPE_TEXT:
        p += sprintf(p, "\"text\" size=\"%d\"", (int)ValueStringLength(value));
        break;
      case GL_TYPE_SYMBOL:
        p +=
            sprintf(p, "\"symbol\" size=\"%d\"", (int)ValueStringLength(value));
        break;
      case GL_TYPE_DBCODE:
        p +=
            sprintf(p, "\"dbcode\" size=\"%d\"", (int)ValueStringLength(value));
        break;
      case GL_TYPE_NUMBER:
        p += sprintf(p, "\"number\" size=\"%d\" ssize=\"%d\"",
                     (int)ValueFixedLength(value), (int)ValueFixedSlen(value));
        break;
      case GL_TYPE_FLOAT:
        p += sprintf(p, "\"float\"");
        break;
      case GL_TYPE_OBJECT:
        p += sprintf(p, "\"object\"");
        break;
      case GL_TYPE_TIMESTAMP:
        p += sprintf(p, "\"timestamp\"");
        break;
      case GL_TYPE_DATE:
        p += sprintf(p, "\"date\"");
        break;
      case GL_TYPE_TIME:
        p += sprintf(p, "\"time\"");
        break;
      default:
        break;
      }
      p += sprintf(p, ">");
      if (!IS_VALUE_NIL(value)) {
        p += XML_Encode(ValueToString(value, ConvCodeset(opt)), p);
      }
      if (opt->recname != NULL) {
        p += sprintf((char *)p, "</%s:%s>", opt->recname, name);
      } else {
        p += sprintf((char *)p, "</%s>", name);
      }
      break;
    }
    p += PutCR(opt, (char *)p);
    opt->nIndent--;
  }
  return (p - pp);
}
Esempio n. 11
0
static size_t _XML_SizeValue2(CONVOPT *opt, char *name, ValueStruct *value,
                              char *buff) {
  char num[SIZE_NAME + 1];
  int i;
  size_t size;

  size = 0;
  if (value != NULL) {
    if (IS_VALUE_NIL(value))
      return (0);
    opt->nIndent++;
    size += IndentLine(opt, NULL);
    switch (ValueType(value)) {
    case GL_TYPE_ARRAY:
      if (opt->recname != NULL) {
        size += sprintf(buff, "<%s:%s type=\"array\" count=\"%d\">",
                        opt->recname, name, (int)ValueArraySize(value));
      } else {
        size += sprintf(buff, "<%s type=\"array\" count=\"%d\">", name,
                        (int)ValueArraySize(value));
      }
      size += PutCR(opt, buff);
      for (i = 0; i < ValueArraySize(value); i++) {
        sprintf(num, "%s:%d", name, i);
        size += _XML_SizeValue2(opt, num, ValueArrayItem(value, i), buff);
      }
      size += IndentLine(opt, NULL);
      if (opt->recname != NULL) {
        size += sprintf(buff, "</%s:%s>", opt->recname, name);
      } else {
        size += sprintf(buff, "</%s>", name);
      }
      break;
    case GL_TYPE_ROOT_RECORD:
    case GL_TYPE_RECORD:
      if (opt->recname != NULL) {
        size += sprintf(buff, "<%s:%s type=\"record\" size=\"%d\">",
                        opt->recname, name, (int)ValueRecordSize(value));
      } else {
        size += sprintf(buff, "<%s type=\"record\" size=\"%d\">", name,
                        (int)ValueRecordSize(value));
      }
      size += PutCR(opt, buff);
      for (i = 0; i < ValueRecordSize(value); i++) {
        size += _XML_SizeValue2(opt, ValueRecordName(value, i),
                                ValueRecordItem(value, i), buff);
      }
      size += IndentLine(opt, NULL);
      if (opt->recname != NULL) {
        size += sprintf(buff, "</%s:%s>", opt->recname, name);
      } else {
        size += sprintf(buff, "</%s>", name);
      }
      break;
    default:
      if (opt->recname != NULL) {
        size += sprintf(buff, "<%s:%s", opt->recname, name);
      } else {
        size += sprintf(buff, "<%s", name);
      }
      size += 6; //	" type="
      switch (ValueType(value)) {
      case GL_TYPE_INT:
        size += 5; //	"int"
        break;
      case GL_TYPE_BOOL:
        size += 6; //	"bool"
        break;
      case GL_TYPE_BYTE:
        size +=
            sprintf(buff, "\"byte\" size=\"%d\"", (int)ValueByteLength(value));
        break;
      case GL_TYPE_BINARY:
        size += sprintf(buff, "\"binary\" size=\"%d\"",
                        (int)ValueByteLength(value));
        break;
      case GL_TYPE_CHAR:
        size += sprintf(buff, "\"char\" size=\"%d\"",
                        (int)ValueStringLength(value));
        break;
      case GL_TYPE_VARCHAR:
        size += sprintf(buff, "\"varchar\" size=\"%d\"",
                        (int)ValueStringLength(value));
        break;
      case GL_TYPE_TEXT:
        size += sprintf(buff, "\"text\" size=\"%d\"",
                        (int)ValueStringLength(value));
        break;
      case GL_TYPE_SYMBOL:
        size += sprintf(buff, "\"symbol\" size=\"%d\"",
                        (int)ValueStringLength(value));
        break;
      case GL_TYPE_DBCODE:
        size += sprintf(buff, "\"dbcode\" size=\"%d\"",
                        (int)ValueStringLength(value));
        break;
      case GL_TYPE_NUMBER:
        size +=
            sprintf(buff, "\"number\" size=\"%d\" ssize=\"%d\"",
                    (int)ValueFixedLength(value), (int)ValueFixedSlen(value));
        break;
      case GL_TYPE_FLOAT:
        size += 7; //	"float"
        break;
      case GL_TYPE_OBJECT:
        size += 8; //	"object"
        break;
      case GL_TYPE_TIMESTAMP:
        size += 9; //	"timestamp"
        break;
      case GL_TYPE_DATE:
        size += 4; //	"date"
        break;
      case GL_TYPE_TIME:
        size += 8; //	"time"
        break;
      case GL_TYPE_ALIAS:
      default:
        break;
      }
      size += 1; //	">"
      if (!IS_VALUE_NIL(value)) {
        size += XML_EncodeSize(ValueToString(value, ConvCodeset(opt)));
      }
      if (opt->recname != NULL) {
        size += sprintf(buff, "</%s:%s>", opt->recname, name);
      } else {
        size += sprintf(buff, "</%s>", name);
      }
      break;
    }
    size += PutCR(opt, buff);
    opt->nIndent--;
  }
  return (size);
}
Esempio n. 12
0
extern size_t OpenCOBOL_PackValue(CONVOPT *opt, unsigned char *p,
                                  ValueStruct *value) {
  int i;
  size_t size;
  unsigned char *pp;

  pp = p;
  if (value != NULL) {
    switch (ValueType(value)) {
    case GL_TYPE_INT:
      *(int32_t *)p = (int32_t)ValueInteger(value);
      IntegerC2Cobol(opt, (int32_t *)p);
      p += sizeof(int32_t);
      break;
    case GL_TYPE_FLOAT:
      *(double *)p = ValueFloat(value);
      p += sizeof(double);
      break;
    case GL_TYPE_BOOL:
      *(char *)p = ValueBool(value) ? 'T' : 'F';
      p++;
      break;
    case GL_TYPE_BYTE:
      memcpy(p, ValueByte(value), ValueByteLength(value));
      p += ValueByteLength(value);
      break;
    case GL_TYPE_BINARY:
      memclear(p, opt->textsize);
      size = (opt->textsize < ValueByteLength(value)) ? opt->textsize
                                                      : ValueByteLength(value);
      memcpy(p, ValueToBinary(value), size);
      p += opt->textsize;
      break;
    case GL_TYPE_TEXT:
    case GL_TYPE_SYMBOL:
      size = (opt->textsize < ValueStringLength(value))
                 ? opt->textsize
                 : ValueStringLength(value);
      memcpy(p, ValueToString(value, ConvCodeset(opt)), size);
      StringC2Cobol(p, opt->textsize);
      p += opt->textsize;
      break;
    case GL_TYPE_CHAR:
    case GL_TYPE_VARCHAR:
    case GL_TYPE_DBCODE:
      if (IS_VALUE_NIL(value)) {
        memclear(p, ValueStringLength(value)); /*	LOW-VALUE	*/
      } else {
        strncpy(p, ValueToString(value, ConvCodeset(opt)),
                ValueStringLength(value));
        StringC2Cobol(p, ValueStringLength(value));
      }
      p += ValueStringLength(value);
      break;
    case GL_TYPE_NUMBER:
      memcpy(p, ValueFixedBody(value), ValueFixedLength(value));
      FixedC2Cobol(p, ValueFixedLength(value));
      p += ValueFixedLength(value);
      break;
    case GL_TYPE_OBJECT:
      memcpy(p, ValueBody(value), SIZE_UUID);
      StringC2Cobol(p, SIZE_UUID);
      p += SIZE_UUID;
      break;
    case GL_TYPE_TIMESTAMP:
      p += sprintf(p, "%04d%02d%02d%02d%02d%02d", ValueDateTimeYear(value),
                   ValueDateTimeMon(value) + 1, ValueDateTimeMDay(value),
                   ValueDateTimeHour(value), ValueDateTimeMin(value),
                   ValueDateTimeSec(value));
      break;
    case GL_TYPE_DATE:
      p += sprintf(p, "%04d%02d%02d", ValueDateTimeYear(value),
                   ValueDateTimeMon(value) + 1, ValueDateTimeMDay(value));
      break;
    case GL_TYPE_TIME:
      p += sprintf(p, "%02d%02d%02d", ValueDateTimeHour(value),
                   ValueDateTimeMin(value), ValueDateTimeSec(value));
      break;
    case GL_TYPE_ARRAY:
      for (i = 0; i < ValueArraySize(value); i++) {
        p += OpenCOBOL_PackValue(opt, p, ValueArrayItem(value, i));
      }
      break;
    case GL_TYPE_ROOT_RECORD:
    case GL_TYPE_RECORD:
      for (i = 0; i < ValueRecordSize(value); i++) {
        p += OpenCOBOL_PackValue(opt, p, ValueRecordItem(value, i));
      }
      break;
    default:
      break;
    }
  }
  return (p - pp);
}
Esempio n. 13
0
extern size_t OpenCOBOL_UnPackValue(CONVOPT *opt, unsigned char *p,
                                    ValueStruct *value) {
  int32_t i;
  char buff[SIZE_NUMBUF + 1];
  unsigned char *q;
  ValueStruct *child;

  q = p;
  if (value != NULL) {
    ValueIsNonNil(value);
    switch (ValueType(value)) {
    case GL_TYPE_INT:
      i = *(int32_t*)p;
      IntegerCobol2C(opt, &i);
      SetValueInteger(value, (int64_t)i);
      p += sizeof(int32_t);
      break;
    case GL_TYPE_FLOAT:
      ValueFloat(value) = *(double *)p;
      p += sizeof(double);
      break;
    case GL_TYPE_BOOL:
      SetValueBool(value,(*(char *)p == 'T') ? TRUE : FALSE);
      p++;
      break;
    case GL_TYPE_OBJECT:
      StringCobol2C(p, SIZE_UUID);
      memcpy(ValueBody(value), p, SIZE_UUID);
      p += SIZE_UUID;
      break;
    case GL_TYPE_BYTE:
      memcpy(ValueByte(value), p, ValueByteLength(value));
      p += ValueByteLength(value);
      break;
    case GL_TYPE_BINARY:
      SetValueBinary(value, p, opt->textsize);
      p += opt->textsize;
      break;
    case GL_TYPE_TEXT:
    case GL_TYPE_SYMBOL:
      StringCobol2C(p, opt->textsize);
      SetValueStringWithLength(value, p, opt->textsize, ConvCodeset(opt));
      p += opt->textsize;
      break;
    case GL_TYPE_CHAR:
    case GL_TYPE_VARCHAR:
    case GL_TYPE_DBCODE:
      StringCobol2C(p, ValueStringLength(value));
      SetValueStringWithLength(value, p, ValueStringLength(value),
                               ConvCodeset(opt));
      p += ValueStringLength(value);
      break;
    case GL_TYPE_NUMBER:
      memcpy(buff, p, ValueFixedLength(value));
      FixedCobol2C(buff, ValueFixedLength(value));
      strcpy(ValueFixedBody(value), buff);
      p += ValueFixedLength(value);
      break;
    case GL_TYPE_TIMESTAMP:
      ValueDateTimeYear(value) = StrToInt(p, 4);
      p += 4;
      ValueDateTimeMon(value) = StrToInt(p, 2) - 1;
      p += 2;
      ValueDateTimeMDay(value) = StrToInt(p, 2);
      p += 2;
      ValueDateTimeHour(value) = StrToInt(p, 2);
      p += 2;
      ValueDateTimeMin(value) = StrToInt(p, 2);
      p += 2;
      ValueDateTimeSec(value) = StrToInt(p, 2);
      p += 2;
      mktime(ValueDateTime(value));
      break;
    case GL_TYPE_TIME:
      ValueDateTimeYear(value) = 0;
      ValueDateTimeMon(value) = 0;
      ValueDateTimeMDay(value) = 0;
      ValueDateTimeHour(value) = StrToInt(p, 2);
      p += 2;
      ValueDateTimeMin(value) = StrToInt(p, 2);
      p += 2;
      ValueDateTimeSec(value) = StrToInt(p, 2);
      p += 2;
      break;
    case GL_TYPE_DATE:
      ValueDateTimeYear(value) = StrToInt(p, 4);
      p += 4;
      ValueDateTimeMon(value) = StrToInt(p, 2) - 1;
      p += 2;
      ValueDateTimeMDay(value) = StrToInt(p, 2);
      p += 2;
      ValueDateTimeHour(value) = 0;
      ValueDateTimeMin(value) = 0;
      ValueDateTimeSec(value) = 0;
      mktime(ValueDateTime(value));
      break;
    case GL_TYPE_ARRAY:
      for (i = 0; i < ValueArraySize(value); i++) {
        child = ValueArrayItem(value, i);
        if (child != NULL) {
          p += OpenCOBOL_UnPackValue(opt, p, child);
          ValueParent(child) = value;
        }
      }
      break;
    case GL_TYPE_ROOT_RECORD:
    case GL_TYPE_RECORD:
      for (i = 0; i < ValueRecordSize(value); i++) {
        child = ValueRecordItem(value, i);
        if (child != NULL) {
          p += OpenCOBOL_UnPackValue(opt, p, child);
          ValueParent(child) = value;
        }
      }
      break;
    default:
      ValueIsNil(value);
      break;
    }
  }
  return (p - q);
}