static foreign_t re_name(term_t name, term_t value) { char *a; int len; int i; if (PL_get_chars(name, &a, CVT_ALL)) { for (i = 1; i NAMES; i ++) { if (data_rslt[i].n[0] == 0) { PL_fail; } if (! strcmp(a, data_rslt[i].n)) { memset(data_value, 0, NAMES); strncpy(data_value, data_str + data_rslt[i].b, data_rslt[i].e - data_rslt[i].b); PL_unify_string_chars(value, data_value); PL_succeed; } } } PL_fail; }
word pl_dde_request(term_t handle, term_t item, term_t value, term_t timeout) { int hdl; int rval; int ddeErr; HSZ Hitem; DWORD result, valuelen; HDDEDATA Hvalue; long tmo; if ( !get_conv_handle(handle, &hdl) || !get_hsz(item, &Hitem) ) fail; if ( !PL_get_long(timeout, &tmo) ) return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_integer, timeout); if ( tmo <= 0 ) tmo = TIMEOUT_VERY_LONG; Hvalue = DdeClientTransaction(NULL, 0, conv_handle[hdl], Hitem, CF_TEXT, XTYP_REQUEST, (DWORD)tmo, &result); ddeErr = DdeGetLastError(ddeInst); DdeFreeStringHandle(ddeInst, Hitem); if ( Hvalue) { char * valuebuf; char * valuedata; valuedata = DdeAccessData(Hvalue, &valuelen); valuebuf = (char *)malloc((size_t)valuelen+1); strncpy(valuebuf, valuedata, valuelen+1); DdeUnaccessData(Hvalue); valuebuf[valuelen] = EOS; rval = PL_unify_string_chars(value, valuebuf); free(valuebuf); return rval; } else { const char * errmsg = dde_error_message(ddeErr); return PL_unify_term(value, PL_FUNCTOR, FUNCTOR_error1, /* error(Message) */ PL_CHARS, errmsg); } }
word pl_convert_time2(term_t time, term_t string) { double tf; if ( PL_get_float(time, &tf) && tf <= PLMAXINT && tf >= PLMININT ) { time_t t = (time_t)(long)tf; char *s = ctime(&t); if ( s ) { char *e = s + strlen(s); while(e>s && e[-1] == '\n') e--; *e = EOS; return PL_unify_string_chars(string, s); } return warning("convert_time/2: %s", OsError()); } return PL_error("convert_time", 2, NULL, ERR_TYPE, ATOM_time_stamp, time); }