Автор | Сообщение |
|
| постоянный участник
|
Пост N: 274
Зарегистрирован: 25.12.07
|
|
Отправлено: 27.10.09 19:47. Заголовок: Различить - "где я?" - под Harbour или xHarbour?
Доброго времени суток. Возможно ли "определение" внутри блока #pragma BEGINDUMP/#pragma ENDDUMP под чем компилится код? Какие-нибудь define-ы и т.п. Дело в том, что похоже начали они "расходится" даже на уровне базового API. Например, появился DateTime-тип, в Xailer (с xHarbour) уже начал использоваться. А добавленное API в обеих ветках чуть-чуть, но разнится....
|
|
|
Ответов - 13
[только новые]
|
|
|
| модератор
|
Пост N: 1082
Зарегистрирован: 25.05.05
|
|
Отправлено: 27.10.09 20:25. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Возможно ли "определение" внутри блока #pragma BEGINDUMP/#pragma ENDDUMP под чем компилится код? |
| Да, конечно цитата: | #ifdef __XHARBOUR__ #define HB_STORNL( n, x, y ) hb_stornl( n, x, y ) #else #define HB_STORNL( n, x, y ) hb_storvnl( n, x, y ) #endif |
|
|
|
|
|
| постоянный участник
|
Пост N: 275
Зарегистрирован: 25.12.07
|
|
Отправлено: 27.10.09 20:41. Заголовок: Спасибо :sm12: И ..
Спасибо И еще в догонку А чтобы такое присвоить переменной на prg-уровне, чтобы она стала типом DateTime. Мне просто для тестов, что-нибудь типа: ААА := CTODwithTime('200910272040000')
|
|
|
|
| постоянный участник
|
Пост N: 735
Зарегистрирован: 09.10.06
|
|
Отправлено: 27.10.09 21:35. Заголовок: Скорее всего вы имее..
Скорее всего вы имеете ввиду HB_STOT цитата: | + added new .prg functions to mange date and timestamp values: HB_DATETIME() -> <tTimeStamp> HB_CTOD( <cDate> [, <cDateFormat> ] ) -> <dDate> HB_DTOC( <dDate> [, <cDateFormat> ] ) -> <cDate> HB_NTOT( <nValue> ) -> <tTimeStamp> HB_TTON( <tTimeStamp> ) -> <nValue> HB_TTOC( <tTimeStamp>, [ <cDateFormat> ] [, <cTimeFormat> ] ) -> <cTimeStamp> HB_CTOT( <cTimeStamp>, [ <cDateFormat> ] [, <cTimeFormat> ] ) -> <tTimeStamp> HB_TTOS( <tTimeStamp> ) -> <cYYYYMMDDHHMMSSFFF> HB_STOT( <cDateTime> ) -> <tTimeStamp> <cDateTime> should be in one of the above form: - "YYYYMMDDHHMMSSFFF" - "YYYYMMDDHHMMSSFF" - "YYYYMMDDHHMMSSF" - "YYYYMMDDHHMMSS" - "YYYYMMDDHHMM" - "YYYYMMDDHH" - "YYYYMMDD" - "HHMMSSFFF" - "HHMMSSF" - "HHMMSS" - "HHMM" - "HH" Important is number of digits. HB_TSTOSTR( <tTimeStamp> ) -> <cTimeStamp> // YYYY-MM-DD HH:MM:SS.fff HB_STRTOTS( <cTimeStamp> ) -> <tTimeStamp> <cTimeStamp> should be in one of the above form: YYYY-MM-DD [H[H][:M[M][:S[.f[f[f[f]]]]]]] [PM|AM] YYYY-MM-DDT[H[H][:M[M][:S[.f[f[f[f]]]]]]] [PM|AM] The folowing characters can be used as date delimiters: "-", "/", "." T - is literal "T" - it's for XML timestamp format if PM or AM is used HH is in range < 1 : 12 > otherwise in range < 0 : 23 > HB_HOUR( <tTimeStamp> ) -> <nHour> HB_MINUTE( <tTimeStamp> ) -> <nMinute> HB_SEC( <tTimeStamp> ) -> <nSeconds> // with milliseconds * harbour/source/rtl/datec.c + accept timestamp parameters in CMONTH() and CDOW() functions * harbour/source/rtl/empty.c + added support for timestamp items * harbour/source/rtl/itemseri.c + added support for timestamp items serialization * harbour/source/rtl/minmax.c + added support for timestamp values to MIN() and MAX() functions. when only one of given parameters is timestamp value and other is date value and date parts are equal then always date item is returned as both MIN() or MAX() value. * harbour/source/rtl/dates.c + added new C functions: hb_timeFormat(), hb_timeUnformat(), hb_timeStampFormat(), hb_timeStampUnformat() * harbour/source/rtl/valtype.c + added .prg functions: HB_ISDATETIME(), HB_ISTIMESTAMP() |
| можно и таким путем цитата: | + added support for timestamp constant values in the form: t"YYYY-MM-DD HH:MM:SS.fff" The exact accepted timestamp pattern is is: YYYY-MM-DD [H[H][:M[M][:S[.f[f[f[f]]]]]]] [PM|AM] i.e.: tValue := t"2009-03-21 5:31:45.437 PM" or: YYYY-MM-DDT[H[H][:M[M][:S[.f[f[f[f]]]]]]] [PM|AM] with literal "T" as date and time part delimiters (XML timestamp format), i.e.: tValue := t"2009-03-21T17:31:45.437" The folowing characters can be used as date delimiters: "-", "/", "." if PM or AM is used HH is in range < 1 : 12 > otherwise in range < 0 : 23 > |
|
|
|
|
|
| постоянный участник
|
Пост N: 736
Зарегистрирован: 09.10.06
|
|
Отправлено: 27.10.09 21:39. Заголовок: Странно как то форум..
Странно как то форум отформатировал сообщение.. Тем не менее, все написанное мной относится к Harbour, как дела обстоят в xhb - я не знаю.
|
|
|
|
| постоянный участник
|
Пост N: 276
Зарегистрирован: 25.12.07
|
|
Отправлено: 28.10.09 00:08. Заголовок: Петр пишет: Скорее ..
Петр пишет: цитата: | Скорее всего вы имеете ввиду HB_STOT |
| Да, спасибо, то что надо.
|
|
|
|
| постоянный участник
|
Пост N: 277
Зарегистрирован: 25.12.07
|
|
Отправлено: 28.10.09 09:24. Заголовок: И еще, пожалуй, одна..
И еще, пожалуй, одна "проблема". Если я добавляю использование новой api-функции, то автоматом отрезаю совместимость с предыдущими версиями. Кроме как введение собственных define-ов, с предложением юзеру их править под себя ничего в голову не приходит. А правок юзером, хоть и минимальных, сильно хочется избежать. А нельзя ли как-то исхитриться и сделать без необходимости юзерской правки?
|
|
|
|
| Администратор
|
Пост N: 1216
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.10.09 11:12. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | А нельзя ли как-то исхитриться и сделать без необходимости юзерской правки? |
| Для Harbour - можно. __HARBOUR__, определенный в hbver.h, принимает значение #define __HARBOUR__ 0x020000 /* Three bytes: Major + Minor + Release. This is recommented for 3rd party .c and .prg level code. */ В коде можно проверять версию: #if (__HARBOUR__ - 0) < 0x020000 ... Но если изменение в api было для одинаковой версии, так проверять не получится. Для xHb этот способ не подходит.
|
|
|
|
| модератор
|
Пост N: 1083
Зарегистрирован: 25.05.05
|
|
Отправлено: 28.10.09 11:35. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Кроме как введение собственных define-ов |
| Можно попробовать сделать так, как это реализовано в библиотеке LetoDB: цитата: | #if defined( __XHARBOUR__ ) #define HARBOUR_VER_AFTER_101 #elif defined( __HARBOUR__ ) #if __HARBOUR__ - 0 >= 0x010100 #define HARBOUR_VER_AFTER_101 #elif __HARBOUR__ - 0 < 0x000100 #define HARBOUR_VER_BEFORE_100 #endif #endif |
|
|
|
|
|
| Администратор
|
Пост N: 1217
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.10.09 12:14. Заголовок: Лучше проверять друг..
Лучше проверять другие #define, которые определены для обеих компиляторов: #define HB_VER_MAJOR 1 /* Major version number */ #define HB_VER_MINOR 1 /* Minor version number */ #define HB_VER_REVISION 0 /* Revision number */
|
|
|
|
| постоянный участник
|
Пост N: 278
Зарегистрирован: 25.12.07
|
|
Отправлено: 28.10.09 15:11. Заголовок: Pasha пишет: Но есл..
Pasha пишет: цитата: | Но если изменение в api было для одинаковой версии, так проверять не получится. |
| Что называется, не бровь, а в глаз В xHarbour-е так и есть. Версия 1.2.1, в Xailer-е уже есть использование HB_IT_DATETIME, в версии с тем же номером, которую можно скачать с xharbour.org (binary pack) этого еще нет..... При внимательном рассмотрении различаются только номера билдов...
|
|
|
|
| Администратор
|
Пост N: 1218
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.10.09 15:20. Заголовок: для HB_IT_DATETIME м..
для HB_IT_DATETIME можно просто поставить #ifdef
|
|
|
|
|
| постоянный участник
|
Пост N: 279
Зарегистрирован: 25.12.07
|
|
Отправлено: 28.10.09 15:48. Заголовок: Pasha пишет: для HB..
Pasha пишет: цитата: | для HB_IT_DATETIME можно просто поставить #ifdef |
| Супер! Точно, а я и забыл, что в С-ях так можно (В дельфи, просто, так не прокатит) Что-то я ступил То есть, схематично это будет выглядеть так: #ifdef HB_IT_DATETIME #ifdef __XHARBOUR__ // Инициализирую у себя hb_itemGetDTS #else // Инициализирую у себя hb_itemGetTS #endif #else // Все ставлю у себя в nil. #endif Спасибо большое
|
|
|
|
| постоянный участник
|
Пост N: 737
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.10.09 16:16. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Дело в том, что похоже начали они "расходится" |
| В SVN хранилище Harbour появился файлик xhb-diff.txt цитата: | This text describes most important differences between Harbour and xHarbour with some references to Clipper and other compatible compilers like xBase++, CLIP, FlagShip. Many thanks to Pritpal and Viktor for updating this text. I hope that it will be updated in the future also by xHarbour developers, It describes status of both compiler at the end of October 2009: Harbour 2.0.0 beta3 (revision 12788) xHarbour 1.2.1 (revision 6629) Przemek |
| В числе других, там можно найти раздел ### C LEVEL COMPATIBILITY ### Я думаю, что для программистов [x]Harbour это очень познавательный материал
|
|
|
|