void cob_accept_command_line (cob_field *f) { char *buff; size_t i; size_t size; size_t len; if (commlncnt) { cob_memcpy (f, commlnptr, (int)commlncnt); return; } buff = cob_malloc (COB_MEDIUM_BUFF); size = 0; for (i = 1; i < (size_t)cob_argc; ++i) { len = strlen (cob_argv[i]); if (size + len >= COB_MEDIUM_BUFF) { /* overflow */ break; } memcpy (buff + size, cob_argv[i], len); size += len; buff[size++] = ' '; } cob_memcpy (f, (ucharptr)buff, (int)size); free (buff); }
void cob_accept_time (cob_field *f) { #ifdef _WIN32 SYSTEMTIME syst; #else time_t t; #if defined(HAVE_SYS_TIME_H) && defined(HAVE_GETTIMEOFDAY) struct timeval tmv; char buff2[8]; #endif #endif char s[12]; #ifdef _WIN32 GetLocalTime (&syst); sprintf (s, "%2.2d%2.2d%2.2d%2.2d", syst.wHour, syst.wMinute, syst.wSecond, syst.wMilliseconds / 10); #else #if defined(HAVE_SYS_TIME_H) && defined(HAVE_GETTIMEOFDAY) gettimeofday (&tmv, NULL); t = tmv.tv_sec; #else t = time (NULL); #endif strftime (s, 9, "%H%M%S00", localtime (&t)); #if defined(HAVE_SYS_TIME_H) && defined(HAVE_GETTIMEOFDAY) sprintf(buff2, "%2.2ld", tmv.tv_usec / 10000); memcpy (&s[6], buff2, 2); #endif #endif cob_memcpy (f, (ucharptr)s, 8); }
void cob_accept_arg_value (cob_field *f) { if (current_arg >= cob_argc) { cob_set_exception (COB_EC_IMP_ACCEPT); return; } cob_memcpy (f, (ucharptr)cob_argv[current_arg], (int) strlen (cob_argv[current_arg])); current_arg++; }
void cob_accept_day_yyyyddd (cob_field *f) { time_t t; char s[12]; t = time (NULL); strftime (s, 8, "%Y%j", localtime (&t)); cob_memcpy (f, (ucharptr)s, 7); }
void cob_accept_day (cob_field *f) { time_t t; char s[8]; t = time (NULL); strftime (s, 6, "%y%j", localtime (&t)); cob_memcpy (f, (ucharptr)s, 5); }
void cob_accept_date_yyyymmdd (cob_field *f) { time_t t; char s[12]; t = time (NULL); strftime (s, 9, "%Y%m%d", localtime (&t)); cob_memcpy (f, (ucharptr)s, 8); }
void cob_accept_date (cob_field *f) { time_t t; char s[8]; t = time (NULL); strftime (s, 7, "%y%m%d", localtime (&t)); cob_memcpy (f, (ucharptr)s, 6); }
void cob_get_environment (cob_field *envname, cob_field *envval) { const char *p; char *buff; if (envname->size < COB_SMALL_BUFF) { buff = cob_malloc (COB_SMALL_BUFF); cob_field_to_string (envname, buff); p = getenv (buff); if (!p) { cob_set_exception (COB_EC_IMP_ACCEPT); p = " "; } cob_memcpy (envval, (ucharptr)p, (int) strlen (p)); free (buff); } else { cob_set_exception (COB_EC_IMP_ACCEPT); p = " "; cob_memcpy (envval, (ucharptr)p, (int) strlen (p)); } }
void cob_accept_environment (cob_field *f) { const char *p = NULL; if (cob_local_env) { p = getenv (cob_local_env); } if (!p) { cob_set_exception (COB_EC_IMP_ACCEPT); p = " "; } cob_memcpy (f, (ucharptr)p, (int) strlen (p)); }
void cob_accept_day_of_week (cob_field *f) { time_t t; char s[4]; t = time (NULL); #if defined(_MSC_VER) sprintf(s, "%d", localtime(&t)->tm_wday + 1); #else strftime (s, 2, "%u", localtime (&t)); #endif cob_memcpy (f, (ucharptr)s, 1); }
void cob_unstring_into (cob_field *dst, cob_field *dlm, cob_field *cnt) { unsigned char *p; unsigned char *dp; unsigned char *s; unsigned char *dlm_data; unsigned char *start; size_t dlm_size = 0; int i; int srsize; int dlsize; int match_size = 0; int brkpt = 0; if (cob_exception_code) { return; } if (unstring_offset >= (int)unstring_src->size) { return; } start = unstring_src->data + unstring_offset; dlm_data = NULL; if (unstring_ndlms == 0) { match_size = cob_min_int ((int)COB_FIELD_SIZE (dst), (int)unstring_src->size - unstring_offset); cob_memcpy (dst, start, match_size); unstring_offset += match_size; } else { srsize = (int) unstring_src->size; s = unstring_src->data + srsize; for (p = start; p < s; p++) { for (i = 0; i < unstring_ndlms; i++) { dlsize = (int) dlm_list[i].uns_dlm.size; dp = dlm_list[i].uns_dlm.data; if (p + dlsize > s) { continue; } if (!memcmp (p, dp, (size_t)dlsize)) { match_size = (int)(p - start); cob_memcpy (dst, start, match_size); unstring_offset += match_size + dlsize; dlm_data = dp; dlm_size = dlsize; if (dlm_list[i].uns_all) { for (p += dlsize; p < s; p += dlsize) { if (p + dlsize > s) { break; } if (memcmp (p, dp, (size_t)dlsize)) { break; } unstring_offset += dlsize; } } brkpt = 1; break; } } #ifdef I18N_UTF8 /* I18N_UTF8: No offset arrangement needed also in NATIONAL. */ #else /*!I18N_UTF8*/ if (COB_FIELD_TYPE (unstring_src) == COB_TYPE_NATIONAL || COB_FIELD_TYPE (unstring_src) == COB_TYPE_NATIONAL_EDITED) { p++; } #endif /*I18N_UTF8*/ if (brkpt) { break; } } if (!brkpt) { /* no match */ match_size = (int)(unstring_src->size - unstring_offset); cob_memcpy (dst, start, match_size); unstring_offset = (int) unstring_src->size; dlm_data = NULL; } } unstring_count++; if (dlm) { if (dlm_data) { cob_memcpy (dlm, dlm_data, (int) dlm_size); } else if (COB_FIELD_IS_NUMERIC (dlm)) { cob_move (&cob_zero, dlm); } else { cob_move (&cob_space, dlm); } } #ifdef I18N_UTF8 /* I18N_UTF8: No offset arrangement needed also in NATIONAL. */ #else /*!I18N_UTF8*/ if (COB_FIELD_TYPE (unstring_src) == COB_TYPE_NATIONAL || COB_FIELD_TYPE (unstring_src) == COB_TYPE_NATIONAL_EDITED) { match_size /= 2; } #endif /*I18N_UTF8*/ if (cnt) { cob_set_int (cnt, match_size); } }