/* File: IntlResources.r Contains: International Resource definitions. Version: Technology: System 7.5+ Release: QuickTime 4.0 Copyright: © 1983-1998 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __INTLRESOURCES_R__ #define __INTLRESOURCES_R__ #ifndef __CONDITIONALMACROS_R__ #include "ConditionalMacros.r" #endif #ifndef __SCRIPT_R__ #include "Script.r" /* to get Region, Language, and Script codes */ #endif /* Note: Region, Language, and Script are no longer used. Instead, Script.r #defines each value for those types. Existing resouce source files should Rez just fine, but when DeRezed the numeric values will be used instead of the symbolic name. */ /*-------------------------------------Equates------------------------------------------*/ /* The following are used to set characters used in INTL resources. */ #define periodSymbol "." #define commaSymbol "," #define semicolonSymbol ";" #define dollarsignSymbol "$" #define slashSymbol "/" #define colonSymbol ":" /*----------------------------INTL (0) ¥ International Formatting Information-----------*/ type 'INTL' (0) { char period = periodSymbol; /* decimal pt sep */ char comma = commaSymbol; /* thousands sep */ char semicolon = semicolonSymbol; /* list sep */ char dollarsign = dollarsignSymbol; /* currSym1 */ char; /* currSym2 */ char; /* currSym3 */ /* currFmt */ boolean noLeadZero, leadingZero; /* leading unit zero */ boolean noTrailingZero, trailingZero; /* trailing dec zero */ boolean paren, minusSign; /* negative rep */ boolean trails, leads; /* curr sym position */ fill bit[4]; /* not used */ byte monDayYear, dayMonYear, yearMonDay, /* dateOrder */ monYearDay, dayYearMon, yearDayMon; /* shrtDateFmt */ boolean noCentury, century; /* century incl */ boolean noMonthLeadZero, monthLeadZero; /* mon lead zero */ boolean noDayLeadZero, dayLeadZero; /* day lead zero */ fill bit[5]; /* filler */ char slash = slashSymbol; /* date sep */ byte twentyFourHour, twelveHourZeroCycle, /* timeCycle */ twelveHour = 255; /* timeFmt */ boolean noHoursLeadZero, hoursLeadZero; /* hours lead zero */ boolean noMinutesLeadZero, minutesLeadZero; /* min lead zero */ boolean noSecondsLeadZero, secondsLeadZero; /* sec lead zero */ fill bit[5]; /* filler */ string[4]; /* mornStr */ string[4]; /* eveStr */ char; /* timeSep */ char; /* time1Stuff */ char; /* time2Stuff */ char; /* time3Stuff */ char; /* time4Stuff */ char; /* time5Stuff */ char; /* time6Stuff */ char; /* time7Stuff */ char; /* time8Stuff */ byte standard, metric = 255; /* metricSys */ byte; /* INTL0 region */ byte; /* version */ }; /*----------------------------itl0 ¥ International Formatting Information---------------*/ type 'itl0' as 'INTL' (0); /*----------------------------INTL (1) ¥ International Date/Time Information------------*/ type 'INTL' (1) { /* Day names */ array [7] { pstring[15]; /* Sunday, Monday... */ }; /* Month names */ array [12] { pstring[15]; /* January, February... */ }; byte dayName, none=255; /* suppressDay */ byte dayMonYear, monDayYear = 255; /* longDate format */ byte noDayLeadZero, dayLeadZero = 255; /* dayLeading0 */ byte; /* abbrLen */ string[4]; /* st0 */ string[4]; /* st1 */ string[4]; /* st2 */ string[4]; /* st3 */ string[4]; /* st4 */ byte; /* INTL1 region */ byte; /* version */ hex string DefaultReturn = "\$4E\$75"; /* local routine - If you have one, use $$Resource to insert code here. Otherwise, you must have a 68000 return instruction. Use DefaultReturn. */ }; /*----------------------------itl1 ¥ International Date/Time Information----------------*/ /* This is separated out because it is changed for 7.0 to be different than 'INTL' (1). */ /* The old INTL (1) format had a local routine field at the end. This was to be used */ /* for localized string sorting code. However, for the last 4 years, string sorting has */ /* been handled with the 'itl2' resource, and the local routine field has been ignored. */ /* In most 'itl1' resources, it just contains a single RTS instruction (hex $4E75). */ /* This field is now used to flag the 7.0 extensions. If it is $4E75, the old format is */ /* assumed. If it is $A89F, the new format is assumed: $A89F is unimplemented trap, */ /* which would never have occurred as the first instruction in a local routine. Old */ /* 'itl1' resources with a local routine will be handled correctly by the code, but can */ /* not be Rezzed or DeRezzed with this template. They should be updated to either have */ /* $4E75 in the local routine field, with nothing else following, or to have $A89F in */ /* the local routine filed, followed by extended data in the format given below. The */ /* version field was not used to mark this change because various current 'itl1' */ /* resources use very different version numbers, including 0, 1, and 128. */ type 'itl1' { /* Day names */ array [7] { pstring[15]; /* Sunday, Monday... */ }; /* Month names */ array [12] { pstring[15]; /* January, February... */ }; byte dayName, none=255; /* suppressDay */ byte dayMonYear, monDayYear = 255; /* longDate format */ byte noDayLeadZero, dayLeadZero = 255; /* dayLeading0 */ byte; /* abbrLen */ string[4]; /* st0 */ string[4]; /* st1 */ string[4]; /* st2 */ string[4]; /* st3 */ string[4]; /* st4 */ byte; /* region code */ byte; /* version */ switch { case oldFormat: key hex integer = $4E75; /* old format key */ case extFormat: key hex integer = $A89F; /* extended format key */ hex integer; /* version */ hex integer; /* format */ integer; /* calendar code */ unsigned longint = extraDays >> 3; /* offset to extraDays table */ unsigned longint = (endExtraDays - extraDays) >> 3; /* length of extraDays table */ unsigned longint = extraMonths >> 3; /* offset to extraMonths table */ unsigned longint = (endExtraMonths - extraMonths) >> 3; /* length of extraMonths table */ unsigned longint = abbrevDays >> 3; /* offset to abbrevDays table */ unsigned longint = (endAbbrevDays - abbrevDays) >> 3; /* length of abbrevDays table */ unsigned longint = abbrevMonths >> 3; /* offset to abbrevMonths table */ unsigned longint = (endAbbrevMonths - abbrevMonths) >> 3; /* length of abbrevMonths table */ unsigned longint = extraSeparators >> 3; /* offset to extraSeparators table */ /*<10>*/ unsigned longint = (endExtraSeparators - extraSeparators) >> 3; /* len of extraSeparators table */ /*<10>*/ extraDays: integer = $$CountOf(extraDaysArray); /* number of extra days */ array extraDaysArray { /* array of extra names */ pstring; /* extra day name string */ }; align word; /*<22>*/ endExtraDays: extraMonths: integer = $$CountOf(extraMonthArray); /* number of extra months */ array extraMonthArray { /* array of extra names */ pstring; /* extra month name string */ }; align word; /*<22>*/ endExtraMonths: abbrevDays: integer = $$CountOf(abbrevDaysArray); /* number of abbrev days */ array abbrevDaysArray { /* array of abbrev names */ pstring; /* abbrev day name string */ }; align word; /*<22>*/ endAbbrevDays: abbrevMonths: integer = $$CountOf(abbrevMonthArray); /* number of abbrev months */ array abbrevMonthArray { /* array of abbrev names */ pstring; /* abbrev month name string */ }; align word; /*<22>*/ endAbbrevMonths: extraSeparators: integer = $$CountOf(extraSeparatorsArray); /* number of extra separators */ /*<10>*/ array extraSeparatorsArray { /* array of separator strings */ /*<10>*/ pstring; /* separator string */ /*<10>*/ }; align word; /*<22>*/ endExtraSeparators: }; }; /*----------------------------itl2 ¥ International String Comparison Package Hooks-----*/ /* * Note that this type assumes a particular ordering of code and tables, although * that order is not required in order for the resource to be used correctly by * the code. * * There is some ugly stuff at the end, because * 1. The itl2 resource has several different formats. * 2. The offset to the FindScriptTable is only present in one format: when length * fields exist. * 3. Even in that format, the FindScriptTable itself is optional; if it is not * present, the offset to it is 0. * 4. The optional FindScriptTable is preceded by the variable-length wrapTable. * To determine the wrapTable length when DeRezzing, we need to use the offset * to FindScriptTable if the offset exists and is nonzero. Otherwise, wrapTable * extends to the end of the resource. * The single hex string at the end of the wrapTable is actually represented in * three different arrays whose dimensions are logical expressions. For a given * format, one of the arrays will have a dimension 1, and the others will have a * dimension 0. */ type 'itl2' { switch { case pre604: integer = initHook1 >> 3; /* init hook offset */ integer = fetchHook1 >> 3; /* fetch hook offset */ integer = vernierHook1 >> 3; /* vernier hook offset */ integer = projectHook1 >> 3; /* project hook offset */ bitstring[15] = rsvd1Hook1 >> 4; key boolean = 0; integer = rsvd2Hook1 >> 3; /* rsvd2 hook offset */ initHook1: hex string [(fetchHook1 - initHook1) >> 3]; /* initHook code */ fetchHook1: hex string [(vernierHook1 - fetchHook1) >> 3]; /* fetchHook code */ vernierHook1: hex string [(projectHook1 - vernierHook1) >> 3]; /* vernierHook code */ projectHook1: hex string [(rsvd1Hook1 - projectHook1) >> 3]; /* projectHook code */ rsvd1Hook1: hex string [(rsvd2Hook1 - rsvd1Hook1) >> 3]; /* rsvd1Hook code */ rsvd2Hook1: hex string; /* rsvd2Hook/exitHook code */ case atLeast604: integer = initHook2 >> 3; /* init hook offset */ integer = fetchHook2 >> 3; /* fetch hook offset */ integer = vernierHook2 >> 3; /* vernier hook offset */ integer = projectHook2 >> 3; /* project hook offset */ bitstring[15] = -1; key boolean = 1; integer = rsvd2Hook2 >> 3; /* rsvd2 hook offset */ integer = typeList >> 3; /* TypeList offset */ integer = classArray >> 3; /* ClassArray offset */ integer = upperList >> 3; /* UpperList offset */ integer = lowerList >> 3; /* LowerList offset */ integer = upperNoMarkList >> 3; /* UpperNoMarkList offset */ integer = wordTable >> 3; /* WordTable offset */ integer = wrapTable >> 3; /* WrapTable offset */ integer = noMarkList >> 3; /* NoMarkList offset */ unsigned hex integer; /* version number */ formatCode: switch { case noLengthFields: key integer = 0; /* format code */ extraHdr: hex string [(initHook2 - extraHdr) >> 3]; /* extra header, if any */ case haveLengthFields: key integer = 1; /* format code */ wide array [14] { integer; /* length fields */ }; findScriptTableOffset: integer = findScriptTable[1,1] >> 3; /* findScriptTable offset */ integer; /* findScriptTable length */ }; initHook2: hex string [(fetchHook2 - initHook2) >> 3]; /* initHook code */ fetchHook2: hex string [(vernierHook2 - fetchHook2) >> 3]; /* fetchHook code */ vernierHook2: hex string [(projectHook2 - vernierHook2) >> 3]; /* vernierHook code */ projectHook2: hex string [(rsvd2Hook2 - projectHook2) >> 3]; /* projectHook code */ rsvd2Hook2: hex string [(classArray - rsvd2Hook2) >> 3]; /* rsvd2Hook/exitHook code */ /* code */ classArray: hex string [(typeList - classArray) >> 3]; /* classArray table */ typeList: hex string [(upperList - typeList) >> 3]; /* typeList table */ upperList: hex string [(lowerList - upperList) >> 3]; /* upperList table */ lowerList: hex string [(upperNoMarkList - lowerList) >> 3]; /* lowerList table */ upperNoMarkList: hex string [(noMarkList - upperNoMarkList) >> 3]; /* upperNoMarkList table */ noMarkList: hex string [(wordTable - noMarkList) >> 3]; /* noMarkList table */ wordTable: switch { case tupleFormat: key boolean = 0; hex bitstring[7]; /* class for null */ hex string [255]; /* class for other chars */ integer = $$CountOf(WordTuples) - 1; wide array WordTuples { /* packed tuple defns */ hex unsigned integer; }; case stateFormat: key boolean = 1; bitstring[15]; /* flags & format */ unsigned hex integer; /* version */ integer = (wordClass - wordTable) >> 3; /* offset to class table */ integer = (wordAux - wordTable) >> 3; /* offset to aux class tbl */ integer = (wordBackwd - wordTable) >> 3; /* offset to back state tbl */ integer = (wordForwd - wordTable) >> 3; /* offset to forw state tbl */ integer; /* doBackupMin */ wordLength: integer; /* length */ wordClass: hex string [(wordAux - wordClass) >> 3]; /* class table */ wordAux: hex string [(wordBackwd - wordAux) >> 3]; /* aux class table */ wordBackwd: hex string [(wordForwd - wordBackwd) >> 3]; /* state table for backup */ wordForwd: hex string [$$Word(wordLength) - ((wordForwd - wordTable) >> 3)]; /* tbl */ }; endWordTable: hex string [(wrapTable - endWordTable) >> 3]; /* extra stuff, if any */ wrapTable: switch { case tupleFormat: key boolean = 0; hex bitstring[7]; /* class for null */ hex string [255]; /* class for other chars */ integer = $$CountOf(WrapTuples) - 1; wide array WrapTuples { /* packed tuple defns */ hex unsigned integer; }; case stateFormat: key boolean = 1; bitstring[15]; /* flags & format */ unsigned hex integer; /* version */ integer = (wrapClass - wrapTable) >> 3; /* offset to class table */ integer = (wrapAux - wrapTable) >> 3; /* offset to aux class tbl */ integer = (wrapBackwd - wrapTable) >> 3; /* offset to back state tbl */ integer = (wrapForwd - wrapTable) >> 3; /* offset to forw state tbl */ integer; /* doBackupMin */ wrapLength: integer; /* length */ wrapClass: hex string [(wrapAux - wrapClass) >> 3]; /* class table */ wrapAux: hex string [(wrapBackwd - wrapAux) >> 3]; /* aux class table */ wrapBackwd: hex string [(wrapForwd - wrapBackwd) >> 3]; /* state table for backup */ wrapForwd: hex string [$$Word(wrapLength) - ((wrapForwd - wrapTable) >> 3)]; /* tbl */ }; endWrapTable: array [$$Word(formatCode) == 0] { hex string; /* extra stuff, if any */ }; array [$$Word(formatCode) == 1] { array [$$Word(findScriptTableOffset) == 0] { hex string; /* extra stuff, if any */ }; array [$$Word(findScriptTableOffset) != 0] { hex string [(findScriptTable[1,1] - endWrapTable) >> 3]; /* xtra stuff? */ }; }; array [$$Word(formatCode) == 1] { array [$$Word(findScriptTableOffset) != 0] { findScriptTable: hex string; /* findScriptTable */ }; }; }; }; /*----------------------------itl4 ¥ International Tokenizer----------------------------*/ type 'itl4' { unsigned hex integer; /* flags */ literal longint = 'itl4'; /* resource type */ integer; /* resource ID */ unsigned hex integer; /* version number */ formatCode: switch { case noLengthFields: key integer = 0; /* format code */ integer = 0; /* reserved */ longint = 0; /* reserved */ integer = 8; /* # of table entries */ unsigned longint = mapCharTable >> 3; /* MapChar offset */ unsigned longint = stringCopyCode >> 3; /* stringCopy offset */ unsigned longint = extendFetchCode >> 3; /* extendFetch offset */ unsigned longint = unTokenTable >> 3; /* unToken offset */ unsigned longint = defaultPartsTable >> 3; /* defaultParts offset */ unsigned longint = whiteSpaceList[1] >> 3; /* whiteSpaceList offset */ unsigned longint = 0; /* reserved offset */ unsigned longint = 0; /* reserved offset */ case haveLengthFields: key integer = 1; /* format code */ integer = 0; /* reserved */ longint = 0; /* reserved */ integer = 8; /* # of table entries */ unsigned longint = mapCharTable >> 3; /* MapChar offset */ unsigned longint = stringCopyCode >> 3; /* stringCopy offset */ unsigned longint = extendFetchCode >> 3; /* extendFetch offset */ unsigned longint = unTokenTable >> 3; /* unToken offset */ unsigned longint = defaultPartsTable >> 3; /* defaultPartsTable offset */ unsigned longint = whiteSpaceList[1] >> 3; /* whiteSpaceList offset */ unsigned longint = 0; /* reserved offset */ unsigned longint = 0; /* reserved offset */ integer; /* MapChar length */ integer; /* StringCopy length */ integer; /* extendFetch length */ integer; /* unToken length */ integer; /* defaultPartsTable length */ integer; /* whiteSpaceList length */ integer = 0; /* reserved length */ integer = 0; /* reserved length */ }; unsigned longint; /* extendFetch abort offset */ longint = $$CountOf(MapChar); mapCharTable: array MapChar { byte; }; extendFetchCode: hex string [(stringCopyCode - extendFetchCode) >> 3]; /* extendFetch code */ stringCopyCode: hex string [(unTokenTable - stringCopyCode) >> 3]; /* stringCopy code */ unTokenTable: integer = (defaultPartsTable - unTokenTable) >> 3; /* unToken table size */ unTokenCount: integer = $$CountOf(unTokenStringOffsets) - 1; array unTokenStringOffsets { integer; /* offset to token strings */ }; array [$$Word(unTokenCount) + 1] { pstring; /* token strings */ align word; }; defaultPartsTable: integer; /* version number */ wide array [31] { unsigned byte; char; }; integer; /* size */ wide array [10] { unsigned byte; char; }; integer; /* size */ wide array [10] { unsigned byte; char; }; integer; /* size */ wide array [10] { unsigned byte; char; }; integer; /* size */ wide array [10] { unsigned byte; char; }; hex string [20] = ""; array [$$BitField(formatCode,30*8,32) != 0] { whiteSpaceList: integer = (whiteSpaceListEnd[1] - whiteSpaceList[1]) >> 3; /* whiteSpaceList size */ whiteSpaceListCount: integer = $$CountOf(whiteSpaceStringOffsets); array whiteSpaceStringOffsets { integer; /* offset to string */ }; array [$$Word(whiteSpaceListCount[1])] { pstring; /* whitespace string */ align word; }; whiteSpaceListEnd: }; }; /*----------------------------itlb ¥ International Script Bundle------------------------*/ type 'itlb' { integer; /* itl0 id number */ /*<6>*/ integer; /* itl1 id number */ /*<6>*/ integer; /* itl2 id number */ /*<6>*/ unsigned hex integer; /* script flags - see smScriptFlags info in ScriptEqu.a */ integer; /* itl4 id number */ /*<6>*/ integer; /* id number of optional itl5, or 0 */ /*<13>*/ unsigned integer; /* Script language */ unsigned integer; /* high byte - number representation code, low byte - date representation code */ integer; /* KCHR id number */ /*<6>*/ integer; /* id no. of SICN or kcs#,kcs4,kcs8 */ /*<6>*/ unsigned longint; /* size of script's local record */ /*<6>*/ integer; /* default monospace FOND ID */ /*<6>*/ unsigned integer; /* default monospace font size */ /*<6>*/ integer; /* preferred FOND ID */ /*<6>*/ unsigned integer; /* preferred font size */ /*<6>*/ integer; /* default small FOND ID */ /*<6>*/ unsigned integer; /* default small font size */ /*<6>*/ integer; /* default system FOND ID */ /*<6>*/ unsigned integer; /* default system font size */ /*<6>*/ integer; /* default application FOND ID */ /*<6>*/ unsigned integer; /* default application font size */ /*<6>*/ integer; /* default Help Mgr FOND ID */ /*<6>*/ unsigned integer; /* default Help Mgr font size */ /*<6>*/ hex byte; /* valid styles for script /*<10>*/ hex byte; /* alias style for script */ /*<10>*/ }; /*----------------------------itlc ¥ International Configuration------------------------*/ type 'itlc' { unsigned integer; /* system script code */ unsigned integer; /* keyboard cache size */ byte noFontForce, fontForce = 255; /* font force flag */ byte noIntlForce, intlForce = 255; /* intl force flag */ byte noOldKeyboard, oldKeyboard = 255; /* old keyboard */ unsigned hex byte; /* general flags - see smGenFlags info in ScriptEqu.a */ integer; /* script icon offset (not used in Sys 7 ) */ byte rightOffset, leftOffset = 255; /* menu side for offset (not used in Sys 7 ) */ byte; /* icon data (rsvd) (not used in Sys 7 ) */ unsigned integer; /* pref. region code */ /* system flags */ boolean directionLeftRight, directionRightLeft; /* to set TESysJust */ /*<23>*/ fill bit[15]; /* reserved */ /*<23>*/ /* for future expansion */ hex string [32]; /* reserved */ /*<23>*/ }; /*----------------------------itlk ¥ Keyboard-dependent Remapping-----------------------*/ type 'itlk' { integer = $$CountOf(RemapItemArray); wide array RemapItemArray { integer; /* keyboard type */ hex byte; /* old modifier bits */ byte; /* old key code */ hex byte; /* modifier bits mask */ byte; /* key code mask */ hex byte; /* new modifier bits */ byte; /* new key code */ }; }; /*----------------------------itlm ¥ Multiscript mapping/sorting-----------------------*/ type 'itlm' { unsigned hex integer; /* version number */ unsigned hex integer; /* format code */ unsigned integer = 3; /* number of offset/length pairs */ unsigned longint = scriptData >> 3; /* offset to scriptData table */ unsigned longint = (endScriptData - scriptData) >> 3; /* length of scriptData table */ unsigned longint = langData >> 3; /* offset to langData table */ unsigned longint = (endLangData - langData) >> 3; /* length of langData table */ unsigned longint = regionData >> 3; /* offset to regionData table */ unsigned longint = (endRegionData - regionData) >> 3; /* length of regionData table */ scriptData: integer; /* max script code for script->lang mapping */ integer; /* default lang code for scripts not in table */ integer = $$CountOf(scriptArray); /* number of entries in table */ array scriptArray { /* entries are ordered by script sort order */ integer; /* script code */ integer; /* default language code for script */ }; endScriptData: langData: integer; /* max lang code for lang->script mapping */ integer; /* default script code for langs not in table */ integer = $$CountOf(langArray); /* number of entries in table */ array langArray { /* entries are ordered by lang sort order */ integer; /* language code */ integer; /* code of script to which this lang belongs */ }; endLangData: regionData: integer; /* max region code for region->lang mapping */ integer; /* default lang code for regions not in table */ integer = $$CountOf(regionArray); /* number of entries in table */ array regionArray { /* entries are ordered by region sort order */ integer; /* region code */ integer; /* parent language code for region */ }; endRegionData: }; #endif /* __INTLRESOURCES_R__ */