The territory manager provides the following SWIs: --------------------------------------------------------------------------- Territory_Number Entry: - Exit: R0 = Configured territory's number. This SWI returns the territory number of the currently configured territory. --------------------------------------------------------------------------- Territory_Register Entry: R0 - Territory Number R1 -> Buffer containing list of entry points for SWIs R2 - Value of R12 on entry to territory. Exit: Registers preserved. The list of entry points is in the same order as the territory SWIs detailed below under 'SWIs provided by the territory modules' The SWI adds the territory to the list of known territories kept by the territory manager and makes it available for application programs. This SWI should be called by a territory module, when it is initialised, and whenever it gets Service_TerritoryManagerLoaded --------------------------------------------------------------------------- Territory_Deregister Entry: R0 - Territory Number Exit: Registers preserved. This SWI removes the territory from the list of active territories, it should be called from the die entry point of the territory module when it is killed. --------------------------------------------------------------------------- Territory_NumberToName Entry: R0 - Territory number. R1 - Pointer to buffer R2 - Length of buffer Exit: [R1] - Name of territory in current territory. This SWI returns the name of a territory in the currently configured territory's language. --------------------------------------------------------------------------- Territory_NameToNumber Entry: R0 - Territory number or -1 to use configured territory. R1 - Pointer to 0 terminated containing a territory name in the provided territory's alphabet Exit: R0 - 0 if territory unknown, else territory number for given territory. --------------------------------------------------------------------------- Territory_Exists Entry: R0 - Territory number. Exit: R0 - Preserved. Z set if territory is currently loaded. This call allows you to check if the specified territory is currently present in the machine, and can be used by applications. --------------------------------------------------------------------------- Territory_AlphabetNumberToName Entry: R0 - Alphabet number. R1 - Pointer to buffer R2 - Length of buffer Exit: [R1] - Name of alphabet in current territory. This SWI reads the name of the specified alphabet in the current territory's language and alphabet. --------------------------------------------------------------------------- Territory_SelectAlphabet Entry: R0 - Territory number or -1 for configured territory. Exit: Registers preserved, correct alphabet for territory selected. This call selects the correct alphabet for the specified or configured territory and defines the system font appropriately --------------------------------------------------------------------------- Territory_SetTime Entry: R0 = Pointer to 5 byte UTC time block Exit: R0 preserved. Clock set to given UTC time. This SWI allows you to set the clock to a given UTC time. --------------------------------------------------------------------------- Territory_ReadCurrentTimeZone Entry: - Exit: R0 -> Name of current time zone R1 = Offset from UTC to current time zone in centi-seconds. This SWI returns the time zone currently in effect and the offset from UTC to the current time zone. R1 on exit is a signed 32 bit offset in centi-seconds. --------------------------------------------------------------------------- Territory_ConvertTimeToUTCOrdinals Entry: R1 = Pointer to 5 byte UTC time block R2 -> Word aligned buffer to hold data Exit: R1 Preserved R2 Preserved [R2] = CS. ; all values are for UTC. [R2+4] = Second [R2+8] = Minute [R2+12] = Hour (out of 24) [R2+16] = Day number in month. [R2+20] = Month number in year. [R2+24] = Year number. [R2+28] = Day of week. This SWI calculates the time ordinals for the UTC time zone from a given 5 byte UTC time. =========================================================================== =========================================================================== The following SWIs are provided by the individual territories by means of the entry points passed to the territory manager when calling Territory_Register. For all of the following SWIs R0 on entry is the territory for which the operation should be performed, or -1 if the operation should be performed using the default configured territory. --------------------------------------------------------------------------- Territory_ReadTimeZones Entry: R0 - Territory number or -1 for configured territory Exit: R0 - Pointer to name of standard time zone for given territory. R1 - Pointer to name of summer for given territory. R2 - Offset from UTC to standard time R3 - Offset from UTC to summer time. --------------------------------------------------------------------------- Territory_ConvertDateAndTime Entry: R0 = Territory number or -1 for configured territory. R1 = Pointer to 5 byte UTC time block R2 = Pointer to buffer for resulting string R3 = Size of buffer R4 = Pointer to format string (null terminated) Exit: R0 = Pointer to buffer (R2 on entry) R1 = Pointer to terminating 0 in buffer. R2 = Number of bytes free in buffer. R3 = R4 on entry. R4 - Preserved. This call is equivalent to the OS_ConvertDateAndTime call, and should be used in preference to that call, which just calls this SWI. The resulting string for both calls is in local time for the given territory, and in the it's local language and alphabet. The fields allowed in the format string are: CS - Centi-seconds SE - Seconds MI - Minutes 12 - Hours in 12 hour format 24 - Hours in 24 hour format AM - AM or PM indicator in local language (may NOT be 2 characters) PM - AM or PM indicator in local language (may NOT be 2 characters) WE - Weekday in full in local language. W3 - Short form of weekday name (May not be 3 characters) WN - Weekday as a number DY - Day of the month (may not be 2 characters, and may not even be numeric) ST - Ordinal pre/suffix in local language (may be null) MO - Month name in full M3 - Short form of month name (May not be 3 characters) MN - Month number. CE - Century YR - Year within century WK - Week of the year (As calculated in the territory, may not be Mon to Sun) DN - Day of the year. TZ - Name of the time zone currently in effect. (e.g. GMT or BST in U.K.) 0 Insert an ASCII 0 byte % Insert a '%' --------------------------------------------------------------------------- Territory_ConvertStandardDateAndTime Entry: R0 = Territory number or -1 for configured territory. R1 = Pointer to 5 byte UTC time block R2 = Pointer to buffer for resulting string R3 = Size of buffer Exit: R0 = Pointer to buffer (R2 on entry) R1 = Pointer to terminating 0 in buffer. R2 = Number of bytes free in buffer. R3,R4 Preserved. This SWI is equivalent to OS_ConvertStandardDateAndTime, but uses a territory specific default format. --------------------------------------------------------------------------- Territory_ConvertStandardDate Entry: R0 = Territory number or -1 for configured territory. R1 = Pointer to 5 byte UTC time block R2 = Pointer to buffer for resulting string R3 = Size of buffer Exit: R0 = Pointer to buffer (R2 on entry) R1 = Pointer to terminating 0 in buffer. R2 = Number of bytes free in buffer. R3,R4 Preserved. This SWI is equivalent to OS_ConvertStandardDateAndTime, but uses a territory specific default date only format. --------------------------------------------------------------------------- Territory_ConvertStandardTime Entry: R0 = Territory number or -1 for configured territory. R1 = Pointer to 5 byte UTC time block R2 = Pointer to buffer for resulting string R3 = Size of buffer Exit: R0 = Pointer to buffer (R2 on entry) R1 = Pointer to terminating 0 in buffer. R2 = Number of bytes free in buffer. R3,R4 Preserved. This SWI is equivalent to OS_ConvertStandardDateAndTime, but uses a territory specific default time only format. --------------------------------------------------------------------------- Territory_ConvertTimeToOrdinals Entry: R0 = Territory number or -1 for configured territory. R1 = Pointer to 5 byte UTC time block R2 -> Word aligned buffer to hold data Exit: R1 Preserved R2 Preserved [R2] = CS. ; All values are for LOCAL time [R2+4] = Second [R2+8] = Minute [R2+12] = Hour (out of 24) [R2+16] = Day number in month. [R2+20] = Month number in year. [R2+24] = Year number. [R2+28] = Day of week. This SWI converts a 5 byte UTC time to time ordinals for the local time in the given territory. --------------------------------------------------------------------------- Territory_ConvertTimeStringToOrdinals Entry: R0 = Territory number or -1 for configured territory. R1 = Reason code: 1 - String is %24:%MI:%SE 2 - String is %W3, %DY-%M3-%CE%YR 3 - String is %W3, %DY-%M3-%CE%YR.%24:%MI:%SE R2 -> String R3 -> Word aligned buffer to contain result. Exit: R1-R3 Preserved. [R3] = CS ; All values are for LOCAL time [R3+4] = Seconds ; Values that are not present in [R3+8] = Minutes ; the string are set to -1 [R3+12] = Hours (out of 24) [R3+16] = Day number in month. [R3+20] = Month number in year. [R3+24] = Year number. This SWI allows conversion between a time string and time ordinals. NOTE THAT THE TIME STRING IS EXPECTED TO BE IN THE LOCAL LANGUAGE AND ALPHABET FOR THE SPECIFIED TERRITORY AS OBTAINED FROM Territory_ConvertDateAndTime WITH THE APPROPRIATE FORMAT STRING. --------------------------------------------------------------------------- Territory_ConvertOrdinalsToTime Entry: R0 = Territory number or -1 for configured territory. R1 -> Block to contain 5 byte time. R2 -> Block containing: [R2] = CS. ; All values are for LOCAL time [R2+4] = Second [R2+8] = Minute [R2+12] = Hour (out of 24) [R2+16] = Day number in month. [R2+20] = Month number in year. [R2+24] = Year number. Exit: R1,R2 preserved. [R1] 5 byte UTC time for given time. This call allows conversion from local time ordinals for the given territory to a 5 byte UTC time value. --------------------------------------------------------------------------- Territory_Alphabet Entry: R0 = Territory number or -1 for configured territory Exit: R0 = The alphabet number used by the specified territory (e.g. 101 =Latin1, 102 = Latin2 ... ) This SWI reads the alphabet number that will be selected if Territory_SelectAlphabet is issued for the given territory. --------------------------------------------------------------------------- Territory_AlphabetIdentifier Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> Identifier string for the alphabet that is used by the given territory. This SWI will return and identifier string for the alphabet that will be used if Territory_SelectAlphabet is issued for the given territory. (e.g. "Latin1" for the Latin 1 alphabet ) The identifier is guaranteed to be made of ASCII characters only. (i.e. 7 bit characters). --------------------------------------------------------------------------- Territory_SelectKeyboardHandler Entry: R0 = Territory number or -1 for configured territory Exit: Keyboard handler used by the specified territory is selected. This call is used to activate the keyboard handler for the specified territory. --------------------------------------------------------------------------- Territory_WriteDirection Entry: R0 = Territory number or -1 for configured territory Exit: R0 = The write direction used by the specified territory. The value in R0 is a set of bits as follows: Bit 0 = WriteDirection_LeftToRight: 0 = Left to right 1 = Right to left Bit 1 = WriteDirection_UpToDown: 0 = Up to down 1 = Down to up Bit 2 = WriteDirection_HorizontalLines: 0 = Lines are horizontal 1 = Lines are vertical. Bits 3-31 Are reserved, and at the moment always returned as 0. --------------------------------------------------------------------------- Territory_CharacterPropertyTable Entry: R0 = Territory number or -1 for configured territory R1 = Property table pointer required: Property_Control 0 (1 = Is a control code) Property_Uppercase 1 (1 = Is uppercase) Property_Lowercase 2 (1 = Is lowercase) Property_Alpha 3 (1 = Is alphabetic character) Property_Punctuation 4 (1 = Is a punctuation character) Property_Space 5 (1 = Is a space character) Property_Digit 6 (1 = Is a digit) Property_XDigit 7 (1 = Is a hex digit) Property_Accented 8 (1 = Has an accent). Property_ForwardFlow 9 (1 = Character flows in the same direction as the write direction for territory ) Property_BackwardFlow 10 (1 = Character flows in the reverse direction from the territory's write direction) Exit: R0 -> 256 bit table indicating for each character in the territory's alphabet if it has the specified property. A character which doesn't have properties 9 and 10 is a natural character which flows in the same direction as the surrounding text. A character can't have both property 9 and property 10. --------------------------------------------------------------------------- Territory_LowerCaseTable Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> 256 byte table indexed by character giving the lowercase version of the character in the given territory's alphabet. --------------------------------------------------------------------------- Territory_UpperCaseTable Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> 256 byte table indexed by character giving the uppercase version of the character in the given territory's alphabet. --------------------------------------------------------------------------- Territory_ControlTable Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> 256 byte table indexed by character giving the value for CTRL- in the given territory's alphabet. --------------------------------------------------------------------------- Territory_PlainTable Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> 256 byte table indexed by character giving the unaccented version of the character in the given territory's alphabet. --------------------------------------------------------------------------- Territory_ValueTable Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> 256 byte table indexed by character giving the value of the character when used as a digit (e.g. 9 for '9' and 10 for 'A' and 'a' in English) in the given territory's alphabet. --------------------------------------------------------------------------- Territory_RepresentationTable Entry: R0 = Territory number or -1 for configured territory Exit: R0 -> 16 byte table indexed by value giving the character that should be used to represent the given value (e.g. 'A' at offset 10 for English) --------------------------------------------------------------------------- Territory_Collate Entry: R0 = Territory number or -1 for configured territory R1 -> String 1 (0 terminated) R2 -> String 2 (0 terminated) R3 = flags bit 0 - Ignore case. bit 1 - Ignore accents bits 2-31 reserved and must be 0. Exit: R0 <0 if S1 < S2 =0 if S1 = S2 >0 if S1 > S2 Other registers preserved. Z set if equal (EQ). C set and Z clear if S1 > S2 (HI) N set and V clear if S1 < S2 (LT) V set and R0 -> error block if error. This SWI should be used to compare two strings in the given territory's alphabet. --------------------------------------------------------------------------- Territory_ReadSymbols Entry: R1 - Reason code: 0 Return pointer to 0 terminated decimal point string. 1 Return pointer to 0 terminated thousands separator. 2 Return pointer byte list containing the size of each group of digits in formatted non-monetary quantities. 255 = No further grouping. 0 = Repeat last grouping for rest of number. other = Size of current group, the next byte contains the size of the next group of digits before the current group. 3 Return pointer to 0 terminated international currency symbol. 4 Return pointer to 0 terminated currency symbol in local alphabet. 5 Return pointer to 0 terminated decimal point used for monetary quantities. 6 Return pointer to 0 terminated thousands separator for monetary quantities. 7 Return pointer byte list containing the size of each group of digits in formatted monetary quantities. 8 Return pointer to 0 terminated positive sign used for monetary quantities. 9 Return pointer to 0 terminated negative sign used for monetary quantities. 10 Return number of fractional digits to be displayed in an internationally formatted monetary quantity. 11 Return number of fractional digits to be displayed in a formatted monetary quantity. 12 Return 1 If the currency symbol precedes the value for a non-negative formatted monetary quantity. 0 If the currency symbol succeeds the value for a non-negative formatted monetary quantity. 13 Return 1 If the currency symbol is separated by a space from the value for a non-negative formatted monetary quantity. 0 If the currency symbol is not separated by a space from the value for a non-negative formatted monetary quantity. 14 Return 1 If the currency symbol precedes the value for a negative formatted monetary quantity. 0 If the currency symbol succeeds the value for a negative formatted monetary quantity. 15 Return 1 If the currency symbol is separated by a space from the value for a negative formatted monetary quantity. 0 If the currency symbol is not separated by a space from the value for a negative formatted monetary quantity. 16 Return for a non-negative formatted monetary quantity 0 If there are parentheses around the quantity and currency symbol. 1 If the sign string precedes the quantity and currency symbol. 2 If the sign string succeeds the quantity and   currency symbol. 3 If the sign string immediately precedes the currency symbol. 4 If the sign string immediately succeeds the currency symbol. 17 Return for a negative formatted monetary quantity 0 If there are parentheses around the quantity and currency symbol. 1 If the sign string precedes the quantity and currency symbol. 2 If the sign string succeeds the quantity and currency symbol. 3 If the sign string immediately precedes the currency symbol. 4 If the sign string immediately succeeds the currency symbol. 18 Return pointer to 0 terminated list separator. Exit: R0 - Requested value. --------------------------------------------------------------------------- Territory_ReadCalendarInformation Entry: R0 = Territory to use (-1 = Configured) R1 = Pointer to 5 byte UTC time value. R2 = Pointer to an 12 word buffer Exit: R0,R1 Preserved. [R2] = Number of first working day in the week. [R2+4] = Number of last working day in the week. [R2+8] = Number of months in the current year. (current = one in which given time falls) [R2+12] = Number of days in the current month. [R2+16] = Max length of AM/PM string. [R2+20] = Max length of WE string. [R2+24] = Max length of W3 string. [R2+28] = Max length of DY string. [R2+32] = Max length of ST string (May be 0). [R2+36] = Max length of MO string. [R2+40] = Max length of M3 string. [R2+44] = Max length of TZ string.