On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 274
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 27.10.09 19:47. Заголовок: Различить - "где я?" - под Harbour или xHarbour?


Доброго времени суток.

Возможно ли "определение" внутри блока #pragma BEGINDUMP/#pragma ENDDUMP под чем компилится код? Какие-нибудь define-ы и т.п.

Дело в том, что похоже начали они "расходится" даже на уровне базового API. Например, появился DateTime-тип, в Xailer (с xHarbour) уже начал использоваться. А добавленное API в обеих ветках чуть-чуть, но разнится....


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 275
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 27.10.09 20:41. Заголовок: Спасибо :sm12: И ..


Спасибо

И еще в догонку А чтобы такое присвоить переменной на prg-уровне, чтобы она стала типом DateTime. Мне просто для тестов, что-нибудь типа:

ААА := CTODwithTime('200910272040000')





Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 >




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 736
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.10.09 21:39. Заголовок: Странно как то форум..


Странно как то форум отформатировал сообщение..
Тем не менее, все написанное мной относится к Harbour, как дела обстоят в xhb - я не знаю.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 276
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 28.10.09 00:08. Заголовок: Петр пишет: Скорее ..


Петр пишет:

 цитата:
Скорее всего вы имеете ввиду HB_STOT



Да, спасибо, то что надо.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 277
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 28.10.09 09:24. Заголовок: И еще, пожалуй, одна..


И еще, пожалуй, одна "проблема".

Если я добавляю использование новой api-функции, то автоматом отрезаю совместимость с предыдущими версиями. Кроме как введение собственных define-ов, с предложением юзеру их править под себя ничего в голову не приходит. А правок юзером, хоть и минимальных, сильно хочется избежать.

А нельзя ли как-то исхитриться и сделать без необходимости юзерской правки?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 этот способ не подходит.


Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 */


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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) этого еще нет..... При внимательном рассмотрении различаются только номера билдов...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1218
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.10.09 15:20. Заголовок: для HB_IT_DATETIME м..


для HB_IT_DATETIME можно просто поставить #ifdef


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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


Спасибо большое

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 это очень познавательный материал


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 3
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет