Files
harbour-core/harbour/include/hbapicdp.h
Przemyslaw Czerpak f07d1b6ce5 2006-09-01 10:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/lang/msgcs852.c
  * harbour/source/lang/msgcsiso.c
  * harbour/source/lang/msgcskam.c
  * harbour/source/lang/msgcswin.c
    * typo fixed (Vojtech Obrdlik <vobrdlik centrum.cz>)
  * harbour/include/hbapicdp.h
  * harbour/source/codepage/Makefile
  + harbour/source/codepage/cpcs852.c
  + harbour/source/codepage/cpcsiso.c
  + harbour/source/codepage/cpcskam.c
  + harbour/source/codepage/cpcswin.c
  + harbour/source/codepage/uckam.c
  * harbour/doc/en/lang.txt
  * harbour/common.mak
    + added czech codepage support (Vojtech Obrdlik <vobrdlik centrum.cz>)
      Vojtech many thanks.
      We will have to fix our CDP code to work well with characters
      with the same wight - now sorting with such codepages does not
      work correctly, f.e. in CSISO:
        CHR(65)+CHR(204) > CHR(65)+CHR(201)
      but:
        CHR(65)+CHR(201) >= CHR(65)+CHR(204)
      as you can see comparison depends on string order:
        s1 > s2 but not s2 < s1
      It means that such codepages cannot be used in any sorting
      systems like indexes until we will not fix internal CPD logic.
      Alexander can you look at it?
      If not then please inform me and I'll work on it in some spare
      time.


  * harbour/source/rtl/do.c
    * minor RTE message simplification

  * harbour/source/rtl/gtos2/gtos2.c
    * casting

  * harbour/source/vm/dynsym.c
    + added __DYNSN2SYM( <cName> ) -> symbolItem

  * harbour/include/hbapi.h
  * harbour/source/vm/arrays.c
    + added supercast and superoffset members to hb_struArray structure

  * harbour/source/vm/classes.c
  * harbour/source/rtl/tclass.prg
    ! fixed calculation of instance area offsets
    ! fixed accessing instance variables with super casting
    + added selfclass casting
    + added support for sending 'exec' and 'name' messages to
      symbol items, f.e.:
         funcSym := (@funcName())
         ? "Exacuting:", funcSym:name
         funcSym:exec( param1, param2, ... )
    * changed __CLASSNAME() to be Clipper compatible
    * changed __CLSINST()/__CLASSINSTANCE() now accepts as third paramter
      function name - Clipper compatible
    ! fixed GPF trap in __OBJGETCLSNAME() when executed with wrong parameter
    * some other fixes and small speed improvement
2006-09-01 08:27:40 +00:00

198 lines
7.2 KiB
C

/*
* $Id$
*/
/*
* Harbour Project source code:
* Header file for the CodePages API
*
* Copyright 2002 Alexander S.Kresin <alex@belacy.belgorod.su>
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#ifndef HB_APICDP_H_
#define HB_APICDP_H_
#ifndef HB_CDP_SUPPORT_OFF
#include <ctype.h>
#include "hbapi.h"
#include "hbinit.h"
HB_EXTERN_BEGIN
/* This hack is needed to force preprocessing if id is also a macro */
#define HB_CODEPAGE_REQUEST( id ) HB_CODEPAGE_REQUEST_( id )
#define HB_CODEPAGE_REQUEST_( id ) HB_FUNC_EXTERN( HB_CODEPAGE_##id ); \
void hb_codepage_ForceLink_##id( void ) \
{ \
HB_FUNCNAME( HB_CODEPAGE_##id )(); \
}
#define HB_CODEPAGE_ANNOUNCE( id ) HB_FUNC( HB_CODEPAGE_##id ) {}
#define HB_CODEPAGE_INIT( id ) HB_CODEPAGE_ANNOUNCE( id ) \
HB_CALL_ON_STARTUP_BEGIN( hb_codepage_Init_##id ) \
hb_cdpRegister( &s_codepage ); \
HB_CALL_ON_STARTUP_END( hb_codepage_Init_##id )
typedef struct _HB_UNITABLE
{
char * uniID;
int nChars;
BOOL lMulti;
USHORT * uniCodes;
} HB_UNITABLE, * PHB_UNITABLE;
typedef struct _HB_MULTICHAR
{
char cLast[2];
char cFirst[2];
int nCode;
} HB_MULTICHAR, * PHB_MULTICHAR;
typedef struct _HB_CODEPAGE
{
char * id;
char * uniID;
PHB_UNITABLE uniTable;
int nChars;
char * CharsUpper;
char * CharsLower;
BOOL lLatin;
BOOL lAccEqual;
BOOL lAccInterleave;
BOOL lSort;
BOOL lChClone;
BYTE * s_chars;
BYTE * s_upper;
BYTE * s_lower;
BYTE * s_accent;
int nMulti;
PHB_MULTICHAR multi;
} HB_CODEPAGE, * PHB_CODEPAGE;
#define CPID_437 "cp437"
#define CPID_737 "cp737"
#define CPID_850 "cp850"
#define CPID_852 "cp852"
#define CPID_866 "cp866"
#define CPID_1250 "cp1250"
#define CPID_1251 "cp1251"
#define CPID_1253 "cp1253"
#define CPID_1257 "cp1257"
#define CPID_8859_1 "iso8859-1"
#define CPID_8859_1B "iso8859-1b"
#define CPID_8859_2 "iso8859-2"
#define CPID_8859_5 "iso8859-5"
#define CPID_KOI_8 "koi-8"
#define CPID_KOI_8U "koi-8u"
#define CPID_MAZ "plmaz"
#define CPID_KAM "cskam"
#define UNITB_437 &hb_uniTbl_437
#define UNITB_737 &hb_uniTbl_737
#define UNITB_850 &hb_uniTbl_850
#define UNITB_852 &hb_uniTbl_852
#define UNITB_866 &hb_uniTbl_866
#define UNITB_1250 &hb_uniTbl_1250
#define UNITB_1251 &hb_uniTbl_1251
#define UNITB_1253 &hb_uniTbl_1253
#define UNITB_1257 &hb_uniTbl_1257
#define UNITB_8859_1 &hb_uniTbl_8859_1
#define UNITB_8859_1B &hb_uniTbl_8859_1b
#define UNITB_8859_2 &hb_uniTbl_8859_2
#define UNITB_8859_5 &hb_uniTbl_8859_5
#define UNITB_KOI_8 &hb_uniTbl_KOI_8
#define UNITB_KOI_8U &hb_uniTbl_KOI_8U
#define UNITB_MAZ &hb_uniTbl_mazovia
#define UNITB_KAM &hb_uniTbl_kam
#define UNITB_UNDEF NULL /* ((PHB_UNITABLE) (-1)) */
extern HB_UNITABLE hb_uniTbl_437;
extern HB_UNITABLE hb_uniTbl_737;
extern HB_UNITABLE hb_uniTbl_850;
extern HB_UNITABLE hb_uniTbl_852;
extern HB_UNITABLE hb_uniTbl_866;
extern HB_UNITABLE hb_uniTbl_1250;
extern HB_UNITABLE hb_uniTbl_1251;
extern HB_UNITABLE hb_uniTbl_1253;
extern HB_UNITABLE hb_uniTbl_1257;
extern HB_UNITABLE hb_uniTbl_8859_1;
extern HB_UNITABLE hb_uniTbl_8859_1b;
extern HB_UNITABLE hb_uniTbl_8859_2;
extern HB_UNITABLE hb_uniTbl_8859_5;
extern HB_UNITABLE hb_uniTbl_KOI_8;
extern HB_UNITABLE hb_uniTbl_KOI_8U;
extern HB_UNITABLE hb_uniTbl_mazovia;
extern HB_UNITABLE hb_uniTbl_kam;
extern HB_EXPORT BOOL hb_cdpRegister( PHB_CODEPAGE );
extern HB_EXPORT char * hb_cdpSelectID( char * );
extern HB_EXPORT PHB_CODEPAGE hb_cdpSelect( PHB_CODEPAGE );
extern HB_EXPORT PHB_CODEPAGE hb_cdpFind( char * );
extern HB_EXPORT void hb_cdpTranslate( char *, PHB_CODEPAGE, PHB_CODEPAGE );
extern HB_EXPORT void hb_cdpnTranslate( char *, PHB_CODEPAGE, PHB_CODEPAGE, ULONG );
extern HB_EXPORT int hb_cdpcmp( char *, char *, ULONG, PHB_CODEPAGE, ULONG * );
extern HB_EXPORT int hb_cdpchrcmp( char, char, PHB_CODEPAGE );
extern HB_EXPORT void hb_cdpReleaseAll( void );
extern HB_EXPORT USHORT hb_cdpGetU16( PHB_CODEPAGE, BOOL, BYTE );
extern HB_EXPORT BOOL hb_cdpGetFromUTF8( PHB_CODEPAGE, BYTE ch, int *, USHORT * );
extern HB_EXPORT ULONG hb_cdpStrnToUTF8( PHB_CODEPAGE, BOOL, BYTE *, ULONG, BYTE * );
extern HB_EXPORT ULONG hb_cdpStrnToU16( PHB_CODEPAGE, BOOL, BYTE *, ULONG, BYTE * );
extern HB_EXPORT ULONG hb_cdpUTF8StringLength( BYTE *, ULONG );
extern HB_EXPORT ULONG hb_cdpStringInUTF8Length( PHB_CODEPAGE, BOOL, BYTE *, ULONG );
extern HB_EXPORT ULONG hb_cdpUTF8ToStrn( PHB_CODEPAGE, BYTE *, ULONG, BYTE *, ULONG );
extern PHB_CODEPAGE hb_cdp_page;
HB_EXTERN_END
#else
typedef PHB_CODEPAGE void *
#endif /* HB_CDP_SUPPORT_OFF */
#endif /* HB_APICDP_H_ */