diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 9ae135eb2f..ab5e1c334d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,47 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2006-12-19 22:47 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbexprop.h + * harbour/source/common/expropt1.c + + added hb_compExprParamListLen() + + * harbour/include/hbexpra.c + * harbour/include/hbexprb.c + * use hb_compExprParamListLen() + + * harbour/include/hbexprc.c + * generate error message for syntax like: + o:var()++ or o:var()+=10 + only: + o:var++ and o:var+=10 + is supported, just like for @o:var + + * harbour/include/hbapi.h + * harbour/source/common/hbstr.c + + hb_numDecConv() used to convert double value to/from binary integer + fields with fixed number of decimal places + + * harbour/common.mak + * harbour/include/hbapicdp.h + * harbour/source/codepage/Makefile + + harbour/source/codepage/cptrdos.c + + harbour/source/codepage/cptrwin.c + * harbour/source/lang/Makefile + + harbour/source/lang/msgtrdos.c + + harbour/source/lang/msgtrwin.c + + added Turkish CPs and MSGs created by Bicahi Esgici + + harbour/source/codepage/uc1254.c + + harbour/source/codepage/uc857.c + + added unicode tables for Turkish CPs + + * harbour/source/rdd/dbf1.c + * harbour/source/rdd/workarea.c + + added support for decimal places in binary integer fields ("I") + ! fixed currency field decoding ("Y") - it's integer binary value + not IEEE758 double. Warning: on write the value is rounded not + truncated like in VFP. + 2006-12-19 00:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbexprc.c * added support _" prefix when macro message is used in assignment context diff --git a/harbour/common.mak b/harbour/common.mak index 2f536ee026..b4172da672 100644 --- a/harbour/common.mak +++ b/harbour/common.mak @@ -555,6 +555,8 @@ LANG_LIB_OBJS = \ $(OBJ_DIR)\msgsr852.obj \ $(OBJ_DIR)\msgsriso.obj \ $(OBJ_DIR)\msgsrwin.obj \ + $(OBJ_DIR)\msgtrdos.obj \ + $(OBJ_DIR)\msgtrwin.obj \ $(OBJ_DIR)\msgzhb5.obj \ $(OBJ_DIR)\msgzhgb.obj \ @@ -601,16 +603,20 @@ CODEPAGE_LIB_OBJS = \ $(OBJ_DIR)\cpsliso.obj \ $(OBJ_DIR)\cpslwin.obj \ $(OBJ_DIR)\cpsrwin.obj \ + $(OBJ_DIR)\cptrdos.obj \ + $(OBJ_DIR)\cptrwin.obj \ $(OBJ_DIR)\cpua866.obj \ $(OBJ_DIR)\cpuakoi.obj \ $(OBJ_DIR)\cpuawin.obj \ $(OBJ_DIR)\uc1250.obj \ $(OBJ_DIR)\uc1251.obj \ $(OBJ_DIR)\uc1253.obj \ + $(OBJ_DIR)\uc1254.obj \ $(OBJ_DIR)\uc1257.obj \ $(OBJ_DIR)\uc737.obj \ $(OBJ_DIR)\uc850.obj \ $(OBJ_DIR)\uc852.obj \ + $(OBJ_DIR)\uc857.obj \ $(OBJ_DIR)\uc866.obj \ $(OBJ_DIR)\uc8859_1.obj \ $(OBJ_DIR)\uc8859_2.obj \ diff --git a/harbour/include/hbapi.h b/harbour/include/hbapi.h index d0e80b3c37..8acb409393 100644 --- a/harbour/include/hbapi.h +++ b/harbour/include/hbapi.h @@ -679,6 +679,8 @@ extern HB_EXPORT char * hb_strRemEscSeq( char * szText, ULONG * ulLen ); /* re extern HB_EXPORT double hb_numRound( double dResult, int iDec ); /* round a number to a specific number of digits */ extern HB_EXPORT double hb_numInt( double dNum ); /* take the integer part of the number */ +extern HB_EXPORT double hb_numDecConv( double dNum, int iDec ); + /* architecture dependent number conversions */ extern HB_EXPORT void hb_put_ieee754( BYTE * ptr, double d ); diff --git a/harbour/include/hbapicdp.h b/harbour/include/hbapicdp.h index 71e480e29f..53a8204a63 100644 --- a/harbour/include/hbapicdp.h +++ b/harbour/include/hbapicdp.h @@ -116,10 +116,12 @@ typedef struct _HB_CODEPAGE #define CPID_737 "cp737" #define CPID_850 "cp850" #define CPID_852 "cp852" +#define CPID_857 "cp857" #define CPID_866 "cp866" #define CPID_1250 "cp1250" #define CPID_1251 "cp1251" #define CPID_1253 "cp1253" +#define CPID_1254 "cp1254" #define CPID_1257 "cp1257" #define CPID_8859_1 "iso8859-1" #define CPID_8859_1B "iso8859-1b" @@ -133,10 +135,12 @@ typedef struct _HB_CODEPAGE #define UNITB_737 &hb_uniTbl_737 #define UNITB_850 &hb_uniTbl_850 #define UNITB_852 &hb_uniTbl_852 +#define UNITB_857 &hb_uniTbl_857 #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_1254 &hb_uniTbl_1254 #define UNITB_1257 &hb_uniTbl_1257 #define UNITB_8859_1 &hb_uniTbl_8859_1 #define UNITB_8859_1B &hb_uniTbl_8859_1b @@ -152,10 +156,12 @@ 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_857; 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_1254; extern HB_UNITABLE hb_uniTbl_1257; extern HB_UNITABLE hb_uniTbl_8859_1; extern HB_UNITABLE hb_uniTbl_8859_1b; diff --git a/harbour/include/hbexpra.c b/harbour/include/hbexpra.c index 431b4c38cc..028f0b5f97 100644 --- a/harbour/include/hbexpra.c +++ b/harbour/include/hbexpra.c @@ -391,18 +391,7 @@ HB_EXPR_PTR hb_compExprNewFunCall( HB_EXPR_PTR pName, HB_EXPR_PTR pParms, HB_COM HB_TRACE(HB_TR_DEBUG, ("hb_compExprNewFunCall(%s)", pName->value.asSymbol)); - if( pParms ) - { - iCount = hb_compExprListLen( pParms ); - /* Check the special case when no parameters are passed - in this case - * pParms is an expression of type HB_ET_NONE and we shouldn't - * replace it with NIL value - */ - if( iCount == 1 && pParms->value.asList.pExprList->ExprType == HB_ET_NONE ) - --iCount; - } - else - iCount = 0; + iCount = ( int ) hb_compExprParamListLen( pParms ); #ifndef HB_MACRO_SUPPORT if( ! hb_compFunCallCheck( HB_COMP_PARAM, pName->value.asSymbol, iCount ) ) diff --git a/harbour/include/hbexprb.c b/harbour/include/hbexprb.c index cfc52d38c7..0471ccb22a 100644 --- a/harbour/include/hbexprb.c +++ b/harbour/include/hbexprb.c @@ -1537,17 +1537,7 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall ) { HB_EXPR_PTR pName = pSelf->value.asFunCall.pFunName; HB_EXPR_PTR pParms = pSelf->value.asFunCall.pParms; - USHORT usCount = 0; - - if( pParms ) - { - usCount = ( USHORT ) hb_compExprListLen( pSelf->value.asFunCall.pParms ); - - if( usCount == 1 && pParms->value.asList.pExprList->ExprType == HB_ET_NONE ) - { - --usCount; - } - } + USHORT usCount = ( USHORT ) hb_compExprParamListLen( pParms ); #ifndef HB_MACRO_SUPPORT hb_compFunCallCheck( HB_COMP_PARAM, pName->value.asSymbol, usCount ); @@ -1601,9 +1591,7 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall ) /* NOTE: pParms will be NULL in 'DO procname' (if there is * no WITH keyword) */ - usCount = ( USHORT ) hb_compExprListLen( pSelf->value.asFunCall.pParms ); - if( usCount == 1 && pSelf->value.asFunCall.pParms->value.asList.pExprList->ExprType == HB_ET_NONE ) - --usCount; + usCount = ( USHORT ) hb_compExprParamListLen( pSelf->value.asFunCall.pParms ); if( usCount ) { if( HB_SUPPORT_XBASE ) @@ -1658,9 +1646,7 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall ) if( pSelf->value.asFunCall.pParms ) { - usCount = ( USHORT ) hb_compExprListLen( pSelf->value.asFunCall.pParms ); - if( usCount == 1 && pSelf->value.asFunCall.pParms->value.asList.pExprList->ExprType == HB_ET_NONE ) - --usCount; + usCount = ( USHORT ) hb_compExprParamListLen( pSelf->value.asFunCall.pParms ); if( usCount ) { if( HB_SUPPORT_XBASE ) @@ -2088,16 +2074,9 @@ static HB_EXPR_FUNC( hb_compExprUseSend ) if( pSelf->value.asMessage.pParms ) /* Is it a method call ? */ { BOOL fMacroList = FALSE; - int iParms = hb_compExprListLen( pSelf->value.asMessage.pParms ); + int iParms = ( int ) hb_compExprParamListLen( pSelf->value.asMessage.pParms ); hb_compExprPushSendPush( pSelf, HB_COMP_PARAM ); - - /* NOTE: if method with no parameters is called then the list - * of parameters contain only one expression of type HB_ET_NONE - * There is no need to push this parameter - */ - if( iParms == 1 && pSelf->value.asMessage.pParms->value.asList.pExprList->ExprType == HB_ET_NONE ) - --iParms; if( iParms ) { if( HB_SUPPORT_XBASE ) diff --git a/harbour/include/hbexprc.c b/harbour/include/hbexprc.c index 3fe3a4381c..6584db25d3 100644 --- a/harbour/include/hbexprc.c +++ b/harbour/include/hbexprc.c @@ -272,8 +272,12 @@ void hb_compExprPushOperEq( HB_EXPR_PTR pSelf, BYTE bOpEq, HB_COMP_DECL ) * be changed */ + if( pSelf->value.asOperator.pLeft->value.asMessage.pParms ) + { + hb_compErrorLValue( HB_COMP_PARAM, pSelf->value.asOperator.pLeft ); + } #ifdef HB_USE_OBJMSG_REF - if( HB_SUPPORT_HARBOUR && bOpEq != bNewOp ) + else if( HB_SUPPORT_HARBOUR && bOpEq != bNewOp ) { hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM ); HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHOVARREF ); @@ -281,8 +285,8 @@ void hb_compExprPushOperEq( HB_EXPR_PTR pSelf, BYTE bOpEq, HB_COMP_DECL ) HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_PUSH_PCODE ); HB_EXPR_PCODE1( hb_compGenPCode1, bNewOp ); } - else #endif + else { hb_compExprPushSendPopPush( pSelf->value.asOperator.pLeft, pSelf->value.asOperator.pRight, @@ -420,8 +424,12 @@ void hb_compExprUseOperEq( HB_EXPR_PTR pSelf, BYTE bOpEq, HB_COMP_DECL ) */ if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_SEND ) { + if( pSelf->value.asOperator.pLeft->value.asMessage.pParms ) + { + hb_compErrorLValue( HB_COMP_PARAM, pSelf->value.asOperator.pLeft ); + } #ifdef HB_USE_OBJMSG_REF - if( HB_SUPPORT_HARBOUR && bOpEq != bNewOp ) + else if( HB_SUPPORT_HARBOUR && bOpEq != bNewOp ) { hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM ); HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHOVARREF ); @@ -429,8 +437,8 @@ void hb_compExprUseOperEq( HB_EXPR_PTR pSelf, BYTE bOpEq, HB_COMP_DECL ) HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_PUSH_PCODE ); HB_EXPR_PCODE1( hb_compGenPCode1, bNewOp ); } - else #endif + else { hb_compExprPushSendPopPush( pSelf->value.asOperator.pLeft, pSelf->value.asOperator.pRight, @@ -542,8 +550,12 @@ void hb_compExprPushPreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL ) */ if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_SEND ) { + if( pSelf->value.asOperator.pLeft->value.asMessage.pParms ) + { + hb_compErrorLValue( HB_COMP_PARAM, pSelf->value.asOperator.pLeft ); + } #ifdef HB_USE_OBJMSG_REF - if( HB_SUPPORT_HARBOUR ) + else if( HB_SUPPORT_HARBOUR ) { hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM ); HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHOVARREF ); @@ -557,8 +569,8 @@ void hb_compExprPushPreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL ) bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQ : HB_P_MINUSEQ; HB_EXPR_PCODE1( hb_compGenPCode1, bOper ); } - else #endif + else { hb_compExprPushSendPopPush( pSelf->value.asOperator.pLeft, NULL, FALSE, bOper, HB_COMP_PARAM ); @@ -616,8 +628,12 @@ void hb_compExprPushPostOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL ) */ if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_SEND ) { + if( pSelf->value.asOperator.pLeft->value.asMessage.pParms ) + { + hb_compErrorLValue( HB_COMP_PARAM, pSelf->value.asOperator.pLeft ); + } #ifdef HB_USE_OBJMSG_REF - if( HB_SUPPORT_HARBOUR ) + else if( HB_SUPPORT_HARBOUR ) { /* push reference to current value */ hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM ); @@ -631,8 +647,8 @@ void hb_compExprPushPostOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL ) bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP; HB_EXPR_PCODE1( hb_compGenPCode1, bOper ); } - else #endif + else { hb_compExprPushSendPopPush( pSelf->value.asOperator.pLeft, NULL, TRUE, bOper, HB_COMP_PARAM ); @@ -699,8 +715,12 @@ void hb_compExprUsePreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL ) */ if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_SEND ) { + if( pSelf->value.asOperator.pLeft->value.asMessage.pParms ) + { + hb_compErrorLValue( HB_COMP_PARAM, pSelf->value.asOperator.pLeft ); + } #ifdef HB_USE_OBJMSG_REF - if( HB_SUPPORT_HARBOUR ) + else if( HB_SUPPORT_HARBOUR ) { /* push reference to current value */ hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM ); @@ -710,8 +730,8 @@ void hb_compExprUsePreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL ) bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP; HB_EXPR_PCODE1( hb_compGenPCode1, bOper ); } - else #endif + else { hb_compExprPushSendPopPush( pSelf->value.asOperator.pLeft, NULL, FALSE, bOper, HB_COMP_PARAM ); diff --git a/harbour/include/hbexprop.h b/harbour/include/hbexprop.h index 3977d348bc..f448c9fecf 100644 --- a/harbour/include/hbexprop.h +++ b/harbour/include/hbexprop.h @@ -151,6 +151,7 @@ extern HB_EXPR_PTR hb_compExprEqual( HB_EXPR_PTR, HB_EXPR_PTR ); extern HB_EXPR_PTR hb_compExprAssignStatic( HB_EXPR_PTR, HB_EXPR_PTR, HB_COMP_DECL ); extern HB_EXPR_PTR hb_compExprClone( HB_EXPR_PTR pSrc ); extern ULONG hb_compExprListLen( HB_EXPR_PTR ); +extern ULONG hb_compExprParamListLen( HB_EXPR_PTR ); extern ULONG hb_compExprMacroListLen( HB_EXPR_PTR ); extern void hb_compExprClear( HB_EXPR_PTR, HB_COMP_DECL ); extern const char * hb_compExprDescription( HB_EXPR_PTR ); diff --git a/harbour/source/codepage/Makefile b/harbour/source/codepage/Makefile index 20984d3ec2..929239d9ec 100644 --- a/harbour/source/codepage/Makefile +++ b/harbour/source/codepage/Makefile @@ -46,16 +46,20 @@ C_SOURCES=\ cpsliso.c \ cpslwin.c \ cpsrwin.c \ + cptrdos.c \ + cptrwin.c \ cpua866.c \ cpuakoi.c \ cpuawin.c \ uc1250.c \ uc1251.c \ uc1253.c \ + uc1254.c \ uc1257.c \ uc737.c \ uc850.c \ uc852.c \ + uc857.c \ uc866.c \ uc8859_1.c \ uc88591b.c \ diff --git a/harbour/source/codepage/cptrdos.c b/harbour/source/codepage/cptrdos.c new file mode 100644 index 0000000000..76ee650ecf --- /dev/null +++ b/harbour/source/codepage/cptrdos.c @@ -0,0 +1,105 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * National Collation Support Module ( Turkish -- DOS ) + * + * Copyright 2006 Bicahi Esgici + * 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. + * + */ + +/* Language name: Turkish */ +/* ISO language code TR : ( please look it up in /doc/lang_id.txt ) */ +/* Codepage: 857 */ + +#include +#include "hbapi.h" +#include "hbapicdp.h" + +#define NUMBER_OF_CHARACTERS 34 /* The number of single characters in the + alphabet, two-as-one aren't considered + here, accented - are considered. */ +#define IS_LATIN 1 /* Should be 1, if the national alphabet + is based on Latin */ +#define ACCENTED_EQUAL 0 /* Should be 1, if accented character + has the same weight as appropriate + unaccented. */ +#define ACCENTED_INTERLEAVED 0 /* Should be 1, if accented characters + sort after their unaccented counterparts + only if the unaccented versions of all + characters being compared are the same + ( interleaving ) */ + +/* If ACCENTED_EQUAL or ACCENTED_INTERLEAVED is 1, you need to mark the + accented characters with the symbol '~' before each of them, for example: + a~€ + If there is two-character sequence, which is considered as one, it should + be marked with '.' before and after it, for example: + ... h.ch.i ... + + The Upper case string and the Lower case string should be absolutely the + same excepting the characters case, of course. + */ + +static HB_CODEPAGE s_codepage = { "TR857", + CPID_857,UNITB_857,NUMBER_OF_CHARACTERS, + "A¶BC€DEÒFG¦HI˜×JKLMNOâ™PRSTUêšVYZ", + "aƒbc‡deˆfg§hiŒjklmno“”prsŸtu–vyz", + IS_LATIN, ACCENTED_EQUAL, ACCENTED_INTERLEAVED, 0, 0, NULL, NULL, NULL, NULL, 0, NULL }; + +HB_CODEPAGE_INIT( TR857 ) + +#if defined(HB_PRAGMA_STARTUP) + #pragma startup hb_codepage_Init_TR857 +#elif defined(HB_MSC_STARTUP) + #if _MSC_VER >= 1010 + #pragma data_seg( ".CRT$XIY" ) + #pragma comment( linker, "/Merge:.CRT=.data" ) + #else + #pragma data_seg( "XIY" ) + #endif + static HB_$INITSYM hb_vm_auto_hb_codepage_Init_TR857 = hb_codepage_Init_TR857; + #pragma data_seg() +#endif diff --git a/harbour/source/codepage/cptrwin.c b/harbour/source/codepage/cptrwin.c new file mode 100644 index 0000000000..b6285b62e2 --- /dev/null +++ b/harbour/source/codepage/cptrwin.c @@ -0,0 +1,105 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * National Collation Support Module ( Turkish -- Win ) + * + * Copyright 2006 Bicahi Esgici + * 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. + * + */ + +/* Language name: Turkish */ +/* ISO language code TR : (please look it up in /doc/lang_id.txt) */ +/* Codepage: 1254 */ + +#include +#include "hbapi.h" +#include "hbapicdp.h" + +#define NUMBER_OF_CHARACTERS 34 /* The number of single characters in the + alphabet, two-as-one aren't considered + here, accented - are considered. */ +#define IS_LATIN 1 /* Should be 1, if the national alphabet + is based on Latin */ +#define ACCENTED_EQUAL 0 /* Should be 1, if accented character + has the same weight as appropriate + unaccented. */ +#define ACCENTED_INTERLEAVED 0 /* Should be 1, if accented characters + sort after their unaccented counterparts + only if the unaccented versions of all + characters being compared are the same + ( interleaving ) */ + +/* If ACCENTED_EQUAL or ACCENTED_INTERLEAVED is 1, you need to mark the + accented characters with the symbol '~' before each of them, for example: + a~€ + If there is two-character sequence, which is considered as one, it should + be marked with '.' before and after it, for example: + ... h.ch.i ... + + The Upper case string and the Lower case string should be absolutely the + same excepting the characters case, of course. + */ + +static HB_CODEPAGE s_codepage = { "TRWIN", + CPID_1254,UNITB_1254,NUMBER_OF_CHARACTERS, + "AÂBCÇDEÊFGĞHIİÎJKLMNOÔÖPRSŞTUÛÜVYZ", + "aâbcçdeêfgğhıiîjklmnoôöprsştuûüvyz", + IS_LATIN, ACCENTED_EQUAL, ACCENTED_INTERLEAVED, 0, 0, NULL, NULL, NULL, NULL, 0, NULL }; + +HB_CODEPAGE_INIT( TRWIN ) + +#if defined(HB_PRAGMA_STARTUP) + #pragma startup hb_codepage_Init_TRWIN +#elif defined(HB_MSC_STARTUP) + #if _MSC_VER >= 1010 + #pragma data_seg( ".CRT$XIY" ) + #pragma comment( linker, "/Merge:.CRT=.data" ) + #else + #pragma data_seg( "XIY" ) + #endif + static HB_$INITSYM hb_vm_auto_hb_codepage_Init_TRWIN = hb_codepage_Init_TRWIN; + #pragma data_seg() +#endif diff --git a/harbour/source/codepage/uc1254.c b/harbour/source/codepage/uc1254.c new file mode 100644 index 0000000000..149ab16dbe --- /dev/null +++ b/harbour/source/codepage/uc1254.c @@ -0,0 +1,93 @@ +/* + * $Id$ + */ + +/* + * xHarbour Project source code: + * + * + * Copyright 2003 Przemyslaw Czerpak + * www - http://www.xharbour.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. + * + */ + +#include "hbapi.h" +#include "hbapicdp.h" + +#define NUMBER_OF_CHARS 256 + +static USHORT uniCodes[NUMBER_OF_CHARS] = { + 0x0020, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, + 0x25D8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C, + 0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8, + 0x2191, 0x2193, 0x2192, 0x2190, 0x2319, 0x2194, 0x25B2, 0x25BC, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, + 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x008E, 0x008F, + 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x009E, 0x0178, + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF +}; + +HB_UNITABLE hb_uniTbl_1254 = { CPID_1254, NUMBER_OF_CHARS, FALSE, uniCodes }; diff --git a/harbour/source/codepage/uc857.c b/harbour/source/codepage/uc857.c new file mode 100644 index 0000000000..abc9974d8a --- /dev/null +++ b/harbour/source/codepage/uc857.c @@ -0,0 +1,93 @@ +/* + * $Id$ + */ + +/* + * xHarbour Project source code: + * + * + * Copyright 2003 Przemyslaw Czerpak + * www - http://www.xharbour.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. + * + */ + +#include "hbapi.h" +#include "hbapicdp.h" + +#define NUMBER_OF_CHARS 256 + +static USHORT uniCodes[NUMBER_OF_CHARS] = { + 0x0020, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, + 0x25D8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C, + 0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8, + 0x2191, 0x2193, 0x2192, 0x2190, 0x2319, 0x2194, 0x25B2, 0x25BC, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, + 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, + 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, + 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0xFFFD, 0x00CD, 0x00CE, + 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0xFFFD, + 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0xFFFD, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, + 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; + +HB_UNITABLE hb_uniTbl_857 = { CPID_857, NUMBER_OF_CHARS, FALSE, uniCodes }; diff --git a/harbour/source/common/expropt1.c b/harbour/source/common/expropt1.c index 8f6a10e133..e7c1b1d5ab 100644 --- a/harbour/source/common/expropt1.c +++ b/harbour/source/common/expropt1.c @@ -909,7 +909,32 @@ ULONG hb_compExprListLen( HB_EXPR_PTR pExpr ) return ulLen; } -/* Return a number of macro gropu elements on the linked list +/* Return a number of parameters passed to function or method + */ +ULONG hb_compExprParamListLen( HB_EXPR_PTR pExpr ) +{ + ULONG ulLen = 0; + + if( pExpr ) + { + HB_EXPR_PTR pParam = pExpr->value.asList.pExprList; + while( pParam ) + { + pParam = pParam->pNext; + ++ulLen; + } + /* NOTE: if method or function with no parameters is called then the + * list of parameters contain only one expression of type HB_ET_NONE + * There is no need to calculate this parameter + */ + if( ulLen == 1 && pExpr->value.asList.pExprList->ExprType == HB_ET_NONE ) + --ulLen; + } + + return ulLen; +} + +/* Return a number of macro group elements on the linked list */ ULONG hb_compExprMacroListLen( HB_EXPR_PTR pExpr ) { diff --git a/harbour/source/common/hbstr.c b/harbour/source/common/hbstr.c index d8b5041330..41859681e8 100644 --- a/harbour/source/common/hbstr.c +++ b/harbour/source/common/hbstr.c @@ -457,6 +457,18 @@ HB_EXPORT double hb_numInt( double dNum ) return dInt; } +HB_EXPORT double hb_numDecConv( double dNum, int iDec ) +{ + if( iDec > 0 ) + return hb_numRound( dNum / hb_numPow10( iDec ), iDec ); + + else if( iDec < 0 ) + return hb_numRound( dNum * hb_numPow10( -iDec ), 0 ); + + else + return hb_numRound( dNum, 0 ); +} + static BOOL hb_str2number( BOOL fPCode, const char* szNum, ULONG ulLen, HB_LONG * lVal, double * dVal, int * piDec, int * piWidth ) { BOOL fDbl = FALSE, fDec = FALSE, fNeg, fHex = FALSE; diff --git a/harbour/source/lang/Makefile b/harbour/source/lang/Makefile index adf09b6ec5..a8ef4ca885 100644 --- a/harbour/source/lang/Makefile +++ b/harbour/source/lang/Makefile @@ -50,6 +50,8 @@ C_SOURCES=\ msgslwin.c \ msgsr852.c \ msgsriso.c \ + msgtrdos.c \ + msgtrwin.c \ msgsrwin.c \ msgzhb5.c \ msgzhgb.c \ diff --git a/harbour/source/lang/msgtrdos.c b/harbour/source/lang/msgtrdos.c new file mode 100644 index 0000000000..cdff508b7e --- /dev/null +++ b/harbour/source/lang/msgtrdos.c @@ -0,0 +1,220 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Language Support Module (Template) + * + * Copyright 2006 { Tranlation by : Bicahi Esgici } + * 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. + * + */ + +/* Language name: Turkish */ +/* ISO language code : TR */ +/* Codepage: 857 ( OEM ) */ + +#include "hbapilng.h" + +static HB_LANG s_lang = +{ + { + /* Identification */ + + "TR", /* ID */ + "Turkish", /* Name (in English) */ + "Trk‡e", /* Name (in native language) */ + "TR", /* RFC ID */ + "857", /* Codepage */ + "$Revision$ $Date$", /* Version */ + + /* Month names */ + + "Ocak", + "ubat", + "Mart", + "Nisan", + "Mays", + "Haziran", + "Temmuz", + "A§ustos", + "Eyll", + "Ekim", + "Kasm", + "Aralk", + + /* Day names */ + + "Pazar", + "Pazartesi", + "Sal", + "€arŸamba", + "PerŸembe", + "Cuma", + "Cumartesi", + + /* CA-Cl*pper compatible natmsg items */ + + "Database Dosyas # Kayt Son Gncelleme Boyut", + "Daha ”rnek ister misiniz?", + "Sayfa No.", + "** Alttoplam **", + "* Altalttoplam *", + "*** Toplam ***", + "Ins", + " ", + "Ge‡ersiz Tarih", + "Snr: ", + " - ", + "E/H", + "GE€ERS˜Z ˜FADE", + + /* Error description names */ + + "Bilinmeyen hata", + "Argman hatas", + "Snr hatas", + "Katar taŸma", + "Saysal taŸma", + "Sfr B”lc", + "Saysal hata", + "˜mlƒ hatas", + "˜Ÿlem ‡ok karmaŸk", + "", + "", + "Hafza yetersiz", + "TanmlanmamŸ fonksiyon", + "Eksport metodu yok", + "De§iŸken yok", + "Alyas yok", + "Eksport de§iŸkeni yok", + "Alyasta ge‡ersiz karakter", + "Alyas zaten kullanmda", + "", + "OluŸturma hatas", + "A‡ma hatas", + "Kapatma hatas", + "Okuma hatas", + "Yazma hatas", + "Print hatas", + "", + "", + "", + "", + "Desteklenmeyen iŸlem", + "Snr aŸld", + "Bozukluk var", + "Data tip hatas", + "Data boyut hatas", + "€alŸma alan kullanmda de§il", + "€alŸma alan indeksli de§il", + "Exclusive gerekiyor", + "Kilit gerekiyor", + "Yazma izni yok", + "Append kilidi kurulamad", + "Kilit kurulamad", + "", + "", + "", + "", + "array eriŸim", + "array atama", + "array boyut", + "array de§il", + "Ÿart", + + /* Internal error names */ + + "Kurtarlamaz hata%lu: ", + "Hata kurtarma baŸarsz", + "Hata i‡in ERRORBLOCK() yok", + "€ok fazla i‡i‡e hata tutucu ‡a§rs", + "RDD ge‡ersiz veya yklemenedi", + "%s i‡in ge‡ersiz metot tipi", + "hb_xgrab hafza atayamad", + "hb_xrealloc NULL pointer tarafndan ‡a§rld", + "hb_xrealloc ge‡ersiz bir pointer tarafndan ‡a§rld", + "hb_xrealloc tekrar hafza atayamad", + "hb_xfree ge‡ersiz bir pointer tarafndan ‡a§rld", + "hb_xfree NULL pointer tarafndan ‡a§rld", + "BaŸlama prosedr bulunamd : \'%s\'", + "BaŸlama prosedr yok", + "Desteklenmeyen VP iŸlem kodu", + "%s i‡in sembol maddesi lƒzm", + "%s i‡in ge‡ersiz sembol tipi ", + "%s i‡in kodblok lazm", + "%s i‡in stack pop edilirken yanlŸ madde tipi ", + "Stack taŸmas", + "%s i‡inde bir madde kendi stne kopyalanmak istendi", + "%s hafza de§iŸkeni olarak ge‡ersiz sembol maddesi aktarld", + "Hafza buffer taŸmas", + "hb_xgrab sfr bayt atamas istendi", + "hb_xrealloc sfr bayta boyutlandrmak istendi", + "hb_xalloc sfr bayt atamas istendi", + + /* Texts */ + + "DD.MM.YYYY", + "E", + "H" + } +}; + +HB_LANG_ANNOUNCE( TR857 ); + +HB_CALL_ON_STARTUP_BEGIN( hb_lang_Init_TR857 ) + hb_langRegister( &s_lang ); +HB_CALL_ON_STARTUP_END( hb_lang_Init_TR857 ) + +#if defined(HB_PRAGMA_STARTUP) + #pragma startup hb_lang_Init_TR857 +#elif defined(HB_MSC_STARTUP) + #if _MSC_VER >= 1010 + #pragma data_seg( ".CRT$XIY" ) + #pragma comment( linker, "/Merge:.CRT=.data" ) + #else + #pragma data_seg( "XIY" ) + #endif + static HB_$INITSYM hb_vm_auto_hb_lang_Init_TR857 = hb_lang_Init_TR857; + #pragma data_seg() +#endif diff --git a/harbour/source/lang/msgtrwin.c b/harbour/source/lang/msgtrwin.c new file mode 100644 index 0000000000..a24d2e895a --- /dev/null +++ b/harbour/source/lang/msgtrwin.c @@ -0,0 +1,220 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Language Support Module (Template) + * + * Copyright 2006 { Tranlation by : Bicahi Esgici } + * 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. + * + */ + +/* Language name: Turkish */ +/* ISO language code : TR */ +/* Codepage: 1254 */ + +#include "hbapilng.h" + +static HB_LANG s_lang = +{ + { + /* Identification */ + + "TR", /* ID */ + "Turkish", /* Name (in English) */ + "Türkçe", /* Name (in native language) */ + "TR", /* RFC ID */ + "1254", /* Codepage */ + "$Revision$ $Date$", /* Version */ + + /* Month names */ + + "Ocak", + "Şubat", + "Mart", + "Nisan", + "Mayıs", + "Haziran", + "Temmuz", + "Ağustos", + "Eylül", + "Ekim", + "Kasım", + "Aralık", + + /* Day names */ + + "Pazar", + "Pazartesi", + "Salı", + "Çarşamba", + "Perşembe", + "Cuma", + "Cumartesi", + + /* CA-Cl*pper compatible natmsg items */ + + "Database Dosyası # Kayıt Son Güncelleme Boyut", + "Daha örnek ister misiniz?", + "Sayfa No.", + "** Alttoplam **", + "* Altalttoplam *", + "*** Toplam ***", + "Ins", + " ", + "Geçersiz Tarih", + "Sınır: ", + " - ", + "E/H", + "GEÇERSİZ İFADE", + + /* Error description names */ + + "Bilinmeyen hata", + "Argüman hatası", + "Sınır hatası", + "Katar taşma", + "Sayısal taşma", + "Sıfır Bölücü", + "Sayısal hata", + "İmlâ hatası", + "İşlem çok karmaşık", + "", + "", + "Hafıza yetersiz", + "Tanımlanmamış fonksiyon", + "Eksport metodu yok", + "Değişken yok", + "Alyas yok", + "Eksport değişkeni yok", + "Alyasta geçersiz karakter", + "Alyas zaten kullanımda", + "", + "Oluşturma hatası", + "Açma hatası", + "Kapatma hatası", + "Okuma hatası", + "Yazma hatası", + "Print hatası", + "", + "", + "", + "", + "Desteklenmeyen işlem", + "Sınır aşıldı", + "Bozukluk var", + "Data tip hatası", + "Data boyut hatası", + "Çalışma alanı kullanımda değil", + "Çalışma alanı indeksli değil", + "Exclusive gerekiyor", + "Kilit gerekiyor", + "Yazma izni yok", + "Append kilidi kurulamadı", + "Kilit kurulamadı", + "", + "", + "", + "", + "array erişim", + "array atama", + "array boyut", + "array değil", + "şart", + + /* Internal error names */ + + "Kurtarılamaz hata%lu: ", + "Hata kurtarma başarısız", + "Hata için ERRORBLOCK() yok", + "Çok fazla içiçe hata tutucu çağrısı", + "RDD geçersiz veya yüklemenedi", + "%s için geçersiz metot tipi", + "hb_xgrab hafıza atayamadı", + "hb_xrealloc NULL pointer tarafından çağrıldı", + "hb_xrealloc geçersiz bir pointer tarafından çağrıldı", + "hb_xrealloc tekrar hafıza atayamadı", + "hb_xfree geçersiz bir pointer tarafından çağrıldı", + "hb_xfree NULL pointer tarafından çağrıldı", + "Başlama prosedürü bulunamdı : \'%s\'", + "Başlama prosedürü yok", + "Desteklenmeyen VP işlem kodu", + "%s için sembol maddesi lâzım", + "%s için geçersiz sembol tipi ", + "%s için kodblok lazım", + "%s için stack pop edilirken yanlış madde tipi ", + "Stack taşması", + "%s içinde bir madde kendi üstüne kopyalanmak istendi", + "%s hafıza değişkeni olarak geçersiz sembol maddesi aktarıldı", + "Hafıza buffer taşması", + "hb_xgrab sıfır bayt ataması istendi", + "hb_xrealloc sıfır bayta boyutlandırmak istendi", + "hb_xalloc sıfır bayt ataması istendi", + + /* Texts */ + + "DD.MM.YYYY", + "E", + "H" + } +}; + +HB_LANG_ANNOUNCE( TRWIN ); + +HB_CALL_ON_STARTUP_BEGIN( hb_lang_Init_TRWIN ) + hb_langRegister( &s_lang ); +HB_CALL_ON_STARTUP_END( hb_lang_Init_TRWIN ) + +#if defined(HB_PRAGMA_STARTUP) + #pragma startup hb_lang_Init_TRWIN +#elif defined(HB_MSC_STARTUP) + #if _MSC_VER >= 1010 + #pragma data_seg( ".CRT$XIY" ) + #pragma comment( linker, "/Merge:.CRT=.data" ) + #else + #pragma data_seg( "XIY" ) + #endif + static HB_$INITSYM hb_vm_auto_hb_lang_Init_TRWIN = hb_lang_Init_TRWIN; + #pragma data_seg() +#endif diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index 12f0cf721e..e41d3ccf30 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -1472,30 +1472,68 @@ static ERRCODE hb_dbfGetValue( DBFAREAP pArea, USHORT uiIndex, PHB_ITEM pItem ) break; case HB_IT_INTEGER: - switch ( pField->uiLen ) + if( pField->uiDec ) { - case 1: - hb_itemPutNILen( pItem, ( signed char ) pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ], 4 ); - break; - case 2: - hb_itemPutNILen( pItem, ( int ) HB_GET_LE_INT16( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 6 ); - break; - case 3: - hb_itemPutNIntLen( pItem, ( HB_LONG ) HB_GET_LE_INT24( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 10 ); - break; - case 4: - hb_itemPutNIntLen( pItem, ( HB_LONG ) HB_GET_LE_INT32( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 10 ); - break; - case 8: + double dValue; + int iLen; + switch ( pField->uiLen ) + { + case 1: + dValue = ( SCHAR ) pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ]; + iLen = 4; + break; + case 2: + dValue = HB_GET_LE_INT16( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ); + iLen = 6; + break; + case 3: + dValue = HB_GET_LE_INT24( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ); + iLen = 10; + break; + case 4: + dValue = HB_GET_LE_INT32( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ); + iLen = 10; + break; + case 8: + dValue = HB_GET_LE_INT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ); + iLen = 20; + break; + default: + dValue = 0; + iLen = 0; + fError = TRUE; + break; + } + hb_itemPutNDLen( pItem, hb_numDecConv( dValue, ( int ) pField->uiDec ), + iLen, ( int ) pField->uiDec ); + } + else + { + switch ( pField->uiLen ) + { + case 1: + hb_itemPutNILen( pItem, ( SCHAR ) pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ], 4 ); + break; + case 2: + hb_itemPutNILen( pItem, ( int ) HB_GET_LE_INT16( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 6 ); + break; + case 3: + hb_itemPutNIntLen( pItem, ( HB_LONG ) HB_GET_LE_INT24( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 10 ); + break; + case 4: + hb_itemPutNIntLen( pItem, ( HB_LONG ) HB_GET_LE_INT32( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 10 ); + break; + case 8: #ifndef HB_LONG_LONG_OFF - hb_itemPutNIntLen( pItem, ( HB_LONG ) HB_GET_LE_INT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 20 ); + hb_itemPutNIntLen( pItem, ( HB_LONG ) HB_GET_LE_INT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 20 ); #else - hb_itemPutNLen( pItem, ( double ) HB_GET_LE_INT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 20, 0 ); + hb_itemPutNLen( pItem, ( double ) HB_GET_LE_INT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ] ), 20, 0 ); #endif - break; - default: - fError = TRUE; - break; + break; + default: + fError = TRUE; + break; + } } break; @@ -1835,31 +1873,56 @@ static ERRCODE hb_dbfPutValue( DBFAREAP pArea, USHORT uiIndex, PHB_ITEM pItem ) else if( pField->uiType == HB_IT_INTEGER ) { HB_LONG lVal; + double dVal; int iSize; - if( HB_IS_DOUBLE( pItem ) && - ! HB_DBL_LIM_INT64( hb_itemGetND( pItem ) ) ) + if( pField->uiDec ) { - lVal = 0; - iSize = 99; + dVal = hb_numDecConv( hb_itemGetND( pItem ), - ( int ) pField->uiDec ); + lVal = ( HB_LONG ) dVal; + if( ! HB_DBL_LIM_INT64( dVal ) ) + iSize = 99; +#ifndef HB_LONG_LONG_OFF + iSize = HB_LIM_INT8( lVal ) ? 1 : + ( HB_LIM_INT16( lVal ) ? 2 : + ( HB_LIM_INT24( lVal ) ? 3 : + ( HB_LIM_INT32( lVal ) ? 4 : 8 ) ) ); +#else + iSize = HB_DBL_LIM_INT8( dVal ) ? 1 : + ( HB_DBL_LIM_INT16( dVal ) ? 2 : + ( HB_DBL_LIM_INT24( dVal ) ? 3 : + ( HB_DBL_LIM_INT32( dVal ) ? 4 : 8 ) ) ); +#endif + } + else if( HB_IS_DOUBLE( pItem ) ) + { + dVal = hb_itemGetND( pItem ); + lVal = ( HB_LONG ) dVal; + if( ! HB_DBL_LIM_INT64( dVal ) ) + iSize = 99; + else +#ifndef HB_LONG_LONG_OFF + iSize = HB_LIM_INT8( lVal ) ? 1 : + ( HB_LIM_INT16( lVal ) ? 2 : + ( HB_LIM_INT24( lVal ) ? 3 : + ( HB_LIM_INT32( lVal ) ? 4 : 8 ) ) ); +#else + iSize = HB_DBL_LIM_INT8( dVal ) ? 1 : + ( HB_DBL_LIM_INT16( dVal ) ? 2 : + ( HB_DBL_LIM_INT24( dVal ) ? 3 : + ( HB_DBL_LIM_INT32( dVal ) ? 4 : 8 ) ) ); +#endif } else { -#ifndef HB_LONG_LONG_OFF - lVal = hb_itemGetNInt( pItem ); + lVal = ( HB_LONG ) hb_itemGetNInt( pItem ); + dVal = 0.0; iSize = HB_LIM_INT8( lVal ) ? 1 : ( HB_LIM_INT16( lVal ) ? 2 : ( HB_LIM_INT24( lVal ) ? 3 : ( HB_LIM_INT32( lVal ) ? 4 : 8 ) ) ); -#else - double d = hb_itemGetND( pItem ); - iSize = HB_DBL_LIM_INT8( d ) ? 1 : - ( HB_DBL_LIM_INT16( d ) ? 2 : - ( HB_DBL_LIM_INT24( d ) ? 3 : - ( HB_DBL_LIM_INT32( d ) ? 4 : 8 ) ) ); - lVal = hb_itemGetNL( pItem ); -#endif } + if( iSize > pField->uiLen ) { uiError = EDBF_DATAWIDTH; @@ -1884,7 +1947,7 @@ static ERRCODE hb_dbfPutValue( DBFAREAP pArea, USHORT uiIndex, PHB_ITEM pItem ) #ifndef HB_LONG_LONG_OFF HB_PUT_LE_UINT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ], ( UINT64 ) lVal ); #else - HB_PUT_LE_UINT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ], ( double ) lVal ); + HB_PUT_LE_UINT64( pArea->pRecord + pArea->pFieldOffset[ uiIndex ], dVal ); #endif break; default: @@ -2371,7 +2434,7 @@ static ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) pField->uiLen = 4; } pThisField->bLen = ( BYTE ) pField->uiLen; - pThisField->bDec = 0; + pThisField->bDec = ( BYTE ) pField->uiDec; pArea->uiRecordLen += pField->uiLen; break; @@ -3134,10 +3197,12 @@ static ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) break; case 'I': + case 'Y': pFieldInfo.uiType = HB_IT_INTEGER; if( ( pFieldInfo.uiLen > 4 && pFieldInfo.uiLen != 8 ) || pFieldInfo.uiLen == 0 ) pFieldInfo.uiLen = 4; + pFieldInfo.uiDec = pField->bDec; break; case '2': @@ -3174,11 +3239,6 @@ static ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) pFieldInfo.uiType = HB_IT_INTEGER; break; - case 'Y': - pFieldInfo.uiType = HB_IT_DOUBLE; - pFieldInfo.uiDec = pField->bDec; - break; - default: errCode = FAILURE; break; diff --git a/harbour/source/rdd/workarea.c b/harbour/source/rdd/workarea.c index b6f8f571b9..68cc1a3c0f 100644 --- a/harbour/source/rdd/workarea.c +++ b/harbour/source/rdd/workarea.c @@ -332,8 +332,10 @@ ERRCODE hb_waCreateFields( AREAP pArea, PHB_ITEM pStruct ) break; case 'I': + case 'Y': pFieldInfo.uiType = HB_IT_INTEGER; - pFieldInfo.uiLen = ( ( uiLen > 0 && uiLen <= 4 ) || uiLen != 8 ) ? uiLen : 4; + pFieldInfo.uiLen = ( ( uiLen > 0 && uiLen <= 4 ) || uiLen == 8 ) ? uiLen : 4; + pFieldInfo.uiDec = uiDec; break; case '2':