mirror of https://git.wuffs.org/MWCC
133 lines
3.2 KiB
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);
|
|
}
|