|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: File: HFSUnicodeWrappers.h
27:
28: Contains: IPI to Unicode routines used by File Manager.
29:
30: Version: HFS Plus 1.0
31:
32: Written by: Mark Day
33:
34: Copyright: � 1996-1997 by Apple Computer, Inc., all rights reserved.
35:
36: File Ownership:
37:
38: DRI: xxx put dri here xxx
39:
40: Other Contact: xxx put other contact here xxx
41:
42: Technology: xxx put technology here xxx
43:
44: Writers:
45:
46: (DSH) Deric Horn
47: (msd) Mark Day
48: (djb) Don Brady
49:
50: Change History (most recent first):
51:
52: <CS11> 11/16/97 djb Change Unicode.h to UnicodeConverter.h.
53: <CS10> 11/7/97 msd Remove prototype for CompareUnicodeNames(). Add prototype for
54: FastUnicodeCompare().
55: <CS9> 10/13/97 djb Add encoding/index macros and add prototypes for new Get/Set
56: encodding routines.
57: <CS8> 9/15/97 djb InitUnicodeConverter now takes a boolean.
58: <CS7> 9/10/97 msd Add prototype for InitializeEncodingContext.
59: <CS6> 6/26/97 DSH Include "MockConverter" prototype for DFA usage.
60: <CS5> 6/25/97 DSH Removed Prototype definitions, and checked in Unicode.h and
61: TextCommon.h from Julio Gonzales into InternalInterfaces.
62: <CS4> 6/25/97 msd Add prototypes for some new Unicode routines that haven't
63: appeared in MasterInterfaces yet.
64: <CS3> 6/18/97 djb Add more ConversionContexts routines.
65: <CS2> 6/13/97 djb Switched to ConvertUnicodeToHFSName, ConvertHFSNameToUnicode, &
66: CompareUnicodeNames.
67: <CS1> 4/28/97 djb first checked in
68: <HFS1> 12/12/96 msd first checked in
69:
70: */
71:
72: #if TARGET_OS_MAC
73: #include <Types.h>
74: #include <UnicodeConverter.h>
75: #include <TextCommon.h>
76: #elif TARGET_OS_RHAPSODY
77: #ifndef __MACOSTYPES__
78: #include "system/MacOSTypes.h"
79: #endif
80: #ifndef __MACOSSTUBS__
81: #include "system/MacOSStubs.h"
82: #endif
83: #endif /* TARGET_OS_MAC */
84:
85: #include "../HFSVolumes.h"
86:
87: // Encoding vs. Index
88: //
89: // For runtime table lookups and for the volume encoding bitmap we
90: // need to map some encodings to keep them in a reasonable range.
91: //
92:
93: enum {
94: kIndexMacUkrainian = 48, // MacUkrainian encoding is 152
95: kIndexMacFarsi = 49 // MacFarsi encoding is 140
96: };
97:
98: #define MapEncodingToIndex(e) \
99: ( (e) < 48 ? (e) : ( (e) == kTextEncodingMacUkrainian ? kIndexMacUkrainian : ( (e) == kTextEncodingMacFarsi ? kIndexMacFarsi : kTextEncodingMacRoman) ) )
100:
101: #define MapIndexToEncoding(i) \
102: ( (i) == kIndexMacFarsi ? kTextEncodingMacFarsi : ( (i) == kIndexMacUkrainian ? kTextEncodingMacUkrainian : (i) ) )
103:
104: #define ValidMacEncoding(e) \
105: ( ((e) < 39) || ((e) == kTextEncodingMacFarsi) || ((e) == kTextEncodingMacUkrainian) )
106:
107:
108:
109: extern OSErr InitUnicodeConverter( Boolean forBootVolume );
110:
111: extern TextEncoding GetDefaultTextEncoding( void );
112:
113: extern OSErr SetDefaultTextEncoding( TextEncoding encoding );
114:
115: extern ItemCount CountInstalledEncodings( void );
116:
117: extern OSErr GetTextEncodingForFont( ConstStr255Param fontName, UInt32 * textEncoding );
118:
119:
120:
121: /*
122: Convert a Unicode name (UniStr255) to an HFS name (Str31 or Str27).
123:
124: If cnid equals kHFSRootFolderID, then the HFS name will be limited to 27 characters
125: */
126: #if 0
127: extern OSErr ConvertUnicodeToHFSName( ConstHFSUniStr255Param unicodeName, TextEncoding encoding, HFSCatalogNodeID cnid, Str31 hfsName );
128: #endif
129:
130:
131: /*
132: Convert an HFS name (Str31 or Str27) to a Unicode name (UniStr255).
133: */
134:
135: extern OSErr ConvertHFSNameToUnicode( ConstStr31Param hfsName, TextEncoding encoding, HFSUniStr255 *unicodeName );
136:
137:
138: extern OSErr ConvertUTF8ToUnicode ( ByteCount srcLen,
139: const unsigned char* srcStr,
140: ByteCount maxDstLen,
141: ByteCount *actualDstLen,
142: UniCharArrayPtr dstStr );
143:
144: extern OSErr ConvertUnicodeToUTF8 ( ByteCount srcLen,
145: ConstUniCharArrayPtr srcStr,
146: ByteCount maxDstLen,
147: ByteCount *actualDstLen,
148: unsigned char* dstStr );
149:
150: extern OSErr ConvertUTF8ToMacRoman (ByteCount srcLen,
151: const unsigned char* srcStr,
152: Str31 dstStr);
153:
154: extern OSErr ConvertMacRomanToUTF8 (Str31 srcStr,
155: ByteCount maxDstLen,
156: ByteCount *actualDstLen,
157: unsigned char* dstStr);
158:
159:
160: /*
161: This routine compares two Unicode names based on an ordering defined by the HFS Plus B-tree.
162: This ordering must stay fixed for all time.
163:
164: Output:
165: -n name1 < name2 (i.e. name 1 sorts before name 2)
166: 0 name1 = name2
167: +n name1 > name2
168:
169: NOTE: You should not depend on the magnitude of the result, just its sign. That is, when name1 < name2, then any
170: negative number may be returned.
171: */
172:
173: extern SInt32 FastUnicodeCompare(register ConstUniCharArrayPtr str1, register ItemCount length1,
174: register ConstUniCharArrayPtr str2, register ItemCount length2);
175:
176:
177: extern SInt32 FastRelString( ConstStr255Param str1, ConstStr255Param str2 );
178:
179: extern OSErr InstallConversionContextsForInstalledScripts( void );
180:
181:
182: extern OSErr InstallVolumeConversionContexts( UInt64 encodingsBitmap );
183:
184:
185: extern OSErr InitializeEncodingContext( TextEncoding encoding, FSVarsRec *fsVars );
186:
187:
188: extern HFSCatalogNodeID GetEmbeddedFileID( ConstStr31Param filename, UInt32 *prefixLength );
189:
190: extern OSErr MockConvertFromUnicodeToPString( ByteCount unicodeLength, ConstUniCharArrayPtr unicodeStr,
191: Str31 pascalStr );
192:
193: extern OSErr MockConvertFromPStringToUnicode( ConstStr31Param pascalStr, ByteCount maxUnicodeLen,
194: ByteCount *actualUnicodeLen, UniCharArrayPtr unicodeStr );
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.