static status addIntItem(IntItem ii, Int change) { Int ival; long val; char buf[100]; CharArray ctmp; Int low, high; if ( (ival = toInteger(ii->value_text->string)) ) val = valInt(ival); else val = 0; val += valInt(change); if ( (low=getLowIntItem(ii)) ) val = max(val, valInt(low)); if ( (high = getHighIntItem(ii)) ) val = min(val, valInt(high)); sprintf(buf, "%ld", val); ctmp = CtoScratchCharArray(buf); displayedValueTextItem((TextItem)ii, ctmp); doneScratchCharArray(ctmp); applyTextItem((TextItem)ii, OFF); succeed; }
static ssize_t Swrite_object(void *handle, char *buf, size_t size) { OpenObject h = handle; string s; CharArray ca; status rval; Int where = toInt(h->point); size_t advance; if ( isFreedObj(h->object) ) { errno = EIO; return -1; } if ( h->encoding == ENC_WCHAR ) { const wchar_t *wbuf = (const wchar_t*)buf; const wchar_t *end = (const wchar_t*)&buf[size]; const wchar_t *f; assert(size%sizeof(wchar_t) == 0); advance = size/sizeof(wchar_t); for(f=wbuf; f<end; f++) { if ( *f > 0xff ) break; } if ( f == end ) { charA *asc = alloca(size); charA *t = asc; for(f=wbuf; f<end; ) *t++ = (charA)*f++; str_set_n_ascii(&s, advance, (char*)asc); } else { str_set_n_wchar(&s, advance, (wchar_t*)wbuf); } } else if ( h->encoding == ENC_OCTET ) { advance = size; str_set_n_ascii(&s, size, buf); } else { assert(0); errno = EIO; return -1; } ca = StringToScratchCharArray(&s); if ( (rval = send(h->object, NAME_writeAsFile, where, ca, EAV)) ) h->point += (long)advance; doneScratchCharArray(ca); if ( rval ) return size; errno = EIO; return -1; }
StringObj CtoString(const char *s) { CharArray c = CtoScratchCharArray(s); StringObj str = answerObject(ClassString, name_procent_s, c, EAV); doneScratchCharArray(c); return str; }
static int width_text(FontObj f, const char *s) { CharArray ctmp = CtoScratchCharArray(s); Int w = getWidthFont(f, ctmp); doneScratchCharArray(ctmp); return(valInt(w)); }
StringObj staticCtoString(const char *s) { CharArray c = CtoScratchCharArray(s); StringObj str; c->data.s_readonly = TRUE; str = answerObject(ClassString, name_procent_s, c, EAV); doneScratchCharArray(c); return str; }
StringObj create_string_from_str(String s, int tmp) { string s2; CharArray c; StringObj str; charA *do_free = NULL; if ( s->s_iswide ) { const charW *txt = s->s_textW; const charW *end = &txt[s->s_size]; charA *p; for( ; txt < end; txt++ ) { if ( *txt > 0xff ) goto canonical; } str_inithdr(&s2, FALSE); s2.s_size = s->s_size; if ( !(s2.s_textA = alloca(s->s_size)) ) { s2.s_textA = pceMalloc(s->s_size); do_free = s2.s_textA; } for(txt = s->s_textW, p = s2.s_textA; txt < end; ) *p++ = *txt++; s = &s2; } canonical: c = StringToScratchCharArray(s); if ( tmp ) str = tempObject(ClassString, name_procent_s, c, EAV); else str = answerObject(ClassString, name_procent_s, c, EAV); doneScratchCharArray(c); if ( do_free ) pceFree(do_free); return str; }
Any cToPceStringW(Name assoc, const wchar_t *s, size_t len, int translate) { Any str; string ss; Any c; str_set_n_wchar(&ss, len, (wchar_t*)s); c = StringToScratchCharArray(&ss); if ( translate ) str = pceNew(assoc, ClassString, 1, &c); else { Any av[2]; av[0] = name_procent_s; av[1] = c; str = pceNew(assoc, ClassString, 2, av); } doneScratchCharArray(c); return str; }
void donePceTmpCharArray(Any ca) { doneScratchCharArray(ca); }