MWCC/command_line/CmdLine/Src/MacEmul/TextUtils.c

133 lines
3.2 KiB
C

#include "mwcc_decomp.h"
StringPtr c2pstr(char *s) {
unsigned int l;
l = strlen(s);
if (l > 255)
l = 255;
memmove(s + 1, s, l);
s[0] = l;
return (StringPtr) s;
}
char *p2cstr(StringPtr s) {
unsigned int l;
l = s[0];
memmove(s, s + 1, l);
s[l] = 0;
return (char *) s;
}
SInt16 CharacterByteType(Ptr textBuf, SInt16 textOffset, ScriptCode script) {
return 0;
}
SInt16 CharByte() {
return 0;
}
void GetDateTime(UInt32 *secs) {
time_t time;
OS_GetTime(&time);
OS_TimeToMac(time, secs);
}
Boolean EqualString(ConstStr255Param strA, ConstStr255Param strB, Boolean caseSens, Boolean diacSens) {
int i, length;
Boolean equal;
equal = 0;
length = strA[0];
if (strA && strB && length == strB[0]) {
if (caseSens) {
equal = !memcmp(strA + 1, strB + 1, length);
} else {
equal = 1;
i = 0;
while (equal && i < length) {
equal = toupper(strA[i]) == toupper(strB[i]);
++i;
}
}
}
return equal;
}
void GetIndString(Str255 theString, SInt16 strListID, SInt16 index) {
SInt16 last;
SInt16 idc;
SInt32 len;
Handle strs;
const char *ret;
StringPtr ptr;
StringPtr dptr;
Str255 tmp;
ret = Res_GetResource(strListID, index);
if (ret) {
strcpy((char *) tmp, ret);
c2pstr((char *) tmp);
} else {
sprintf((char *) tmp, "[Resource string id=%d index=%d not found]", strListID, index);
c2pstr((char *) tmp);
strs = GetResource('STR#', strListID);
if (strs) {
last = (((unsigned char) (*strs)[0]) << 8) + ((unsigned char) (*strs)[1]);
if (index > 0 && index <= last) {
len = GetHandleSize(strs);
HLock(strs);
ptr = (StringPtr) (*strs + 2);
idc = index;
dptr = (StringPtr) (*strs + len);
while (ptr < dptr && --idc) {
ptr += *ptr + 1;
}
if (ptr < dptr)
_pstrcpy(tmp, ptr);
HUnlock(strs);
}
}
}
ptr = &tmp[1];
dptr = &theString[1];
while (ptr <= &tmp[tmp[0]]) {
if (*ptr == 0xD4) {
*dptr = '`';
} else if (*ptr == 0xD5) {
*dptr = '\'';
} else if (*ptr == 0xD2 || *ptr == 0xD3) {
*dptr = '"';
} else if (*ptr == 0xC9 && (dptr - theString) < 253) {
dptr[0] = '.';
dptr[1] = '.';
dptr[2] = '.';
dptr += 2;
} else {
*dptr = *ptr;
}
++ptr;
++dptr;
}
theString[0] = (dptr - theString) - 1;
}
char *getindstring(char *theString, SInt16 strListID, SInt16 index) {
GetIndString((StringPtr) theString, strListID, index);
return p2cstr((StringPtr) theString);
}
void NumToString(SInt32 theNum, Str255 theString) {
sprintf((char *) theString, "%d", theNum);
c2pstr((char *) theString);
}
void StringToNum(ConstStr255Param theString, SInt32 *theNum) {
p2cstr((StringPtr) theString);
sscanf((char *) theString, "%d", theNum);
c2pstr((char *) theString);
}