Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5   вперед  Ctrl      все
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
NSFuimus
Guest
игорь, нижайше прошу прощения, но последний пост выглядит каким-то незавершенным ... наверна патамучта ты забыл закончить его словами
- Итак, в библиотеке St_Denis ошибок нет!
думаю нада эта в подписи засунуть
18 апр 07, 15:48    [4037759]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
asp_fox
Guest

АКСИОМА
В любой программе есть ошибки.

ЗАКОН ПPОПОPЦИОНАЛЬНОСТИ
Чем более программа необходима, тем больше в ней ошибок.

СЛЕДСТВИЕ
Ошибок не содержит лишь совершенно ненужная пpогpамма.


ФУНДАМЕНТАЛЬНЫЙ ЗАКОН ТЕОPИИ ОШИБОК
На ошибках учатся.


и.т.д.
(http://www.rabota.su/extra/humour/index.php?id=158)
19 апр 07, 16:18    [4043568]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
Библиотека St_Denis обновлена, появилась версия для FoxPro 2.6 for Windows.
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
Таким образом, теперь есть версии библиотеки St_Denis для любого FoxPro (кроме 2.0 и более ранних версий, вряд ли кто-нибудь их сейчас использует). В общем, есть все кроме ошибок.

BTW
Я задавал это вопрос на форуме по , никто не ответил, поэтому повторю его здесь вдруг у кого-нибудь завалялось.
Где можно скачать компилятор Microsoft's C/C++ 7.0 (1992 года), это была первая версия с MFC .
http://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library
MFC was introduced in 1992 with Microsoft's C/C++ 7.0 compiler for use with 16-bit versions of Windows. C++ was just beginning to replace C for development of commercial application software and C/C++ 7.0 was the first of Microsoft's compilers to add C++ support.
25 сен 07, 05:12    [4709181]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Александр Овчинников
Member

Откуда: Ростов-на-Дону
Сообщений: 74
есть такой:
может он?
Packing List for Microsoft Visual C++, Version 1.0
        Copyright (C) Microsoft Corp. 1986-1993.  All rights reserved.
 
 
DISK 1
 
Files                         Description
-----                         --------------
\PRO\STFSETUP.INF             File information list
\PRO\STFSETUP.EXE             Setup workhorse executable
\PRO\SETUP.EXE                Setup bootstrapper executable
\PRO\WSETUP.HLP               Setup Help File
\PRO\PACKING.TXT              Packing List
\HELP\ERRATA.WRI              Changes to manuals after printing
\HELP\README.WRI              Visual C++ Readme
\BIN\TLD1LOC.DLL              MS-DOS Local transport layer  
\MFC\LIB\lafxcwd.lib          WIN large model debug
 
DISK 2
 
Files                         Description
-----                         --------------
\INCLUDE\FLOAT.H              Floating-point constants
\HELP\WIN31WH.HLP             Windows 3.1 SDK help
\REDIST\penwin.dll            Redistributable file
 
DISK 3
 
Files                         Description
-----                         --------------
\BIN\STRESS.DLL               DLL used by STRESS.EXE
\BIN\mfcappwz.exe             MFC Application Wizard
 
DISK 4
....................

DISK 20
....................
всего 20*1,5Мб
25 сен 07, 17:02    [4713161]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
to Александр Овчинников
Спасибо, это в точности последующая, той которая мне нужна, версия.
Я ищу Microsoft C/C++ 7.0 (это еще не Visual C++ ), я хочу ее попробовать для компиляции библиотек для FoxPro 2.6 for DOS.
Versions
Product version MFC version
Microsoft C/C++ 7.0 MFC 1.0
Visual C++ 1.0 MFC 2.0
Visual C++ 1.5 MFC 2.5
Visual C++ 2.0 MFC 3.0
Visual C++ 2.1 MFC 3.1
Visual C++ 2.2 MFC 3.2
Visual C++ 4.0 MFC 4.0 (mfc40.dll included with Windows 95)
Visual C++ 4.1 MFC 4.1
Visual C++ 4.2 MFC 4.2 (mfc42.dll included with Windows 98-First Edition)
Pocket PC Embedded 3.0 MFC 4.2 (mfc42.dll)
Visual C++ 5.0 MFC 4.21 (mfc42.dll)
Visual C++ 6.0 MFC 6.0 (mfc42.dll)
Pocket PC Embedded 4.0
Visual C++ .NET 2002 MFC 7.0 (mfc70.dll)
Visual C++ .NET 2003 MFC 7.1 (mfc71.dll)
Visual C++ 2005 MFC 8.0 (mfc80.dll)
Visual C++ 2005 Express None
Visual C++ 2008 MFC 9.0 (mfc90.dll)
25 сен 07, 17:23    [4713384]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Al_fa
Member

Откуда: Курган
Сообщений: 42
У меня есть минимальный пакет WATCOM C 11 (в архиве ~5 мег), которым я делал сборку plb для fpd26.
Если надо , то пиши.
26 сен 07, 10:37    [4715768]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
to Al_fa
У меня тоже есть watcom, его можно скачать с http://www.openwatcom.org/index.php/Main_Page,
http://ftp.openwatcom.org/ftp/
старые версии находятся в архиве.
26 сен 07, 15:11    [4718510]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8871
Модератор: Давайте не будем нарушать правил форума - распространять лицензионные продукты нелегальным путем... Все ссылки после изучения будут удалены...
26 сен 07, 16:48    [4719293]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
Версию 1.2 библиотеки St_Denis можно загрузить
по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
либо, если есть проблемы при закачке большого файла
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005


Добавлены несколько функций для работы со словами
WORDTRAN() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений первого слова будут заменены вторым словом
GETOCCURSWORD() подсчитывает количество вхождений слова в строке
GETATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции
GETRATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции, но в отличии от GETATWORD() осуществляет поиск справа

Полный список функций выглядит так
Функции для работы со словами
GETALLWORDS() помещает в глобальный массив все слова из строки или memo поля, похожа на встроенную функцию ALINES()
WORDTRAN() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений первого слова будут заменены вторым словом
GETNUMWORD() возвращает порядковый номер заданного слова в строке
GETOCCURSWORD() подсчитывает количество вхождений слова в строке
GETATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции
GETRATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции, но в отличии от GETATWORD() осуществляет поиск справа

Функции для работы с массивами
ARRAYSUM() возвращает сумму числовых элементов заданного столбца массива
ARRAYAVG() возвращает среднее значение числовых элементов заданного столбца массива
ARRAYMIN() возвращает минимальное значение элементов заданного столбца массива
ARRAYMAX() возвращает максимальное значение элементов заданного столбца массива
ARRAYCNT() возвращает количество числовых элементов заданного столбца массива
ASCANQUICK() аналогична встроенной функции ASCAN(), за исключением того, что осуществляет бинарный поиск по столбцу в заранее отсортированном массиве
VITESCAN() осуществляет бинарный поиск по столбцу в отсортированном массиве

Прочие функции
NPRECISION() возвращает количество знаков после десятичной точки в числовом выражении
FIELDNUM() возвращает порядковый номер поля в таблице по имени поля
DANSLISTE() определяет находится ли число в списке значений типа «1,5,13-18»
INCREMENT() увеличивает переменную на 1 и возвращает результат
STRFILTER() удаляет все символы из первой строки, за исключением символов, содержащихся во второй строке
REVERSE() возвращает строку в обратном порядке
VST_DENIS() версия библиотеки

IFOR() «непосредственный» FOR цикл
IWHILE() «непосредственный» WHILE цикл
ICASE() «непосредственный» CASE условный переход
IEXECCASE() «непосредственный» CASE условный переход, с выполнением одной или нескольких команд после условий
IEXECIF() «непосредственный» IF условный переход, с выполнением одной или нескольких команд после условий
EXECUTE() выполняет строку команд, разделенных символом “;”, подобно макроподстановке
Вышеприведенные функции можно реализовать с использованием встроенной функции EXECSCRIPT().

Функции конвертации арабских чисел в римские и наоборот
ARABTOROMAN() преобразует обычное число в римское число (от 1 до 3999)
ROMANTOARAB() преобразует римское число в обычное число (от I до MMMCMXCIX)

Более 25 000 человек во всем мире уже загрузили мои функции, надеюсь, что и данные функции будут полезными и для Вас.

Вышеупомянутые функции имеются для следующих версий FoxPro (VFP 9.0, 8.0, 7.0 и т.д., FoxPro 2.6 for DOS и Windows).
28 дек 07, 05:45    [5105721]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
Версию 2.0 библиотеки St_Denis можно загрузить
по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
либо, если есть проблемы при закачке большого файла
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005


Добавлены две суперфункции

STRTRANEX() Функция, определенная пользователем, обладает очень большими возможностями по поиску и замене строк, по сравнению со встроенной функцией FoxPro STRTRAN().

STRTRANEX() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений каждого элемента второго параметра массива строк, заменены соответствующим элементом третьего параметра массива строк.

STRTRANEX (cSearched, cArExpressionSought | cExpressionSough, [cArReplacement | cReplacement][, nArStartOccurrence | nStartOccurrence] [, nArNumberOfOccurrences | nNumberOfOccurrences] [, nArFlags | nFlags], [ArReport])
Тип возвращаемого значения символьный

WORDTRANEX() Функция, определенная пользователем, обладает большими возможностями по поиску и замене слов, по сравнению с функцией WORDTRAN().

WORDTRANEX() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений каждого элемента второго параметра массива слов, заменены соответствующим элементом третьего параметра массива слов.

WORDTRANEX (cSearched, cArExpressionSought | cExpressionSough, [cArReplacement | cReplacement] [, cDelimiters] [, nArStartOccurrence | nStartOccurrence] [, nArNumberOfOccurrences | nNumberOfOccurrences] [, nArFlags | nFlags], [ArReport])
Тип возвращаемого значения символьный

Функции STRTRANEX() и WORDTRANEX() различаются тем, что WORDTRANEX() разыскивает слова, а не строки, и соответственно, функция WORDTRANEX() имеет дополнительный параметр строку, состоящую из разделителей слов.

Параметры
cSearched исходная строка, в которой функция STRTRANEX() или WORDTRANEX() будет заменять найденные строки.
cArExpressionSought массив строк или cExpressionSought строка, каждая из строк будет разыскиваться, и заменяться в cSearched.
Если вторым параметром является не массив, а строка cExpressionSought, то данная функция будет работать так же, как встроенная функция STRTRAN().

cArReplacement массив строк или cReplacement строка, каждая из строк служит для замены соответствующей ей строки из массива cArExpressionSought в строке cSearched.
Если данный параметр не передан, каждое вхождение строки массива cArExpressionSought будет заменено пустой строкой.
Если количество строк в массиве cArReplacement превышает количество строк в массиве cArExpressionSought , то лишние строки массива cArReplacement игнорируются.
Если количество строк в массиве cArReplacement меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменяться пустой строкой.
Если третьим параметром является не массив, а строка cReplacement, то каждое вхождение строки массива cArExpressionSought будет заменено строкой cReplacement.

cDelimiters (только для функции WORDTRANEX) символьный тип, наибольшая длина 256 символов - необязательный параметр, определяет те символы, которые будут служить разделителями слов в строке cSearched.
Разделителями по умолчанию являются пробелы, символы табуляции, возврата каретки и перевода строки.
WORDTRANEX() считает каждый символ из строки cDelimiters как отдельный разделитель, а не всю строку cDelimiters как единый разделитель.

nArStartOccurrence числовой массив или nStartOccurrence число, данный параметр определяет, с какого вхождения соответствующей строки массива cArExpressionSought в cSearched будет начата замена.
Если количество строк в массиве nArStartOccurrence превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArStartOccurrence игнорируются.
Если количество строк в массиве nArStartOccurrence меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменяться, начиная с первого вхождения каждой строки.
Например, если nStartOccurrence равно 4, замена начнется с четвертого вхождения каждой строки массива cArExpressionSought в строке cSearched, а первые три вхождения строк останутся на своем месте.
Другой пример, если первая строка массива nArStartOccurrence равна 4, замена начнется с четвертого вхождения первой строки массива cArExpressionSought в строке cSearched, а первые три вхождения первой строки массива cArExpressionSought останутся на своем месте.
По умолчанию замена начинается с первого вхождения каждой строки, если параметр nStartOccurrence не был указан, либо равен -1.
Если четвертым (пятым для функции WORDTRANEX()) параметром является не массив, а число nStartOccurrence, то каждое вхождение каждой строки массива cArExpressionSought будет заменяться, начиная с вхождения номер nStartOccurrence.
.
nArNumberOfOccurrences числовой массив или nNumberOfOccurrences число, данный параметр определяет количество вхождений каждой строки массива cArExpressionSought в строке cSearched, которое будет заменено. Если параметр не был указан, то все вхождения каждой строки из массива cArExpressionSought в строке cSearched, начиная с соответствующего вхождения, будут заменены.
Если количество строк в массиве nArNumberOfOccurrences превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArNumberOfOccurrences игнорируются.
Если количество строк в массиве nArNumberOfOccurrences меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменены все, начиная с соответствующего вхождения каждой строки.
Рассмотрим случай, когда пятым (шестым для функции WORDTRANEX()) параметром является не массив, а число nNumberOfOccurrences. В таком случае, каждое вхождение строки массива cArExpressionSought будет заменяться nNumberOfOccurrences раз, начиная с соответствующего вхождения.

nArFlags числовой массив или nFlags число Определяет поиск и замену в соответствии со следующими значениями:
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘-
nFlags, либо строка из массива nArFlags Описание
0 (по умолчанию) Поиск чувствителен к регистру, найденная строка заменяется на соответствующую строку.
1 Поиск НЕ чувствителен к регистру, найденная строка заменяется на соответствующую строку.
2 Поиск чувствителен к регистру, регистр буквенных символов в соответствующей строке замены будет изменен в соответствии с регистром буквенных символов найденной строки. Регистр буквенных символов строки замены меняется только в случае, если найденная строка соответствует верхнему регистру, нижнему регистру или регистру заголовка (то есть первая буква найденной строки прописная, а остальные строчные).
3 Поиск НЕ чувствителен к регистру, регистр буквенных символов в соответствующей строке замены будет изменен в соответствии с регистром буквенных символов найденной строки. Регистр буквенных символов соответствующей строки меняется только в случае, если найденная строка соответствует верхнему регистру, нижнему регистру или регистру заголовка (то есть первая буква найденной строки прописная, а остальные строчные).
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘-
Если количество строк в массиве nArFlags превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArFlags игнорируются.
Если количество строк в массиве nArFlags меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменяться в соответствии со значением 0 по умолчанию.
Если шестым (седьмым для функции WORDTRANEX()) параметром является не массив, а число nFlags, то каждое вхождение строки массива cArExpressionSought будет заменяться в соответствии с флагом nFlags.

ArReport – символьный тип – имя создаваемого функцией глобального двумерного массива, содержащего следующие значения
первый столбец, числовой тип – позиция в строке cSearched, с которой начиналась замененная функцией строка
второй столбец, числовой тип – какая именно строка из массива cArExpressionSought была найдена
третий столбец, числовой тип – как именно был изменен регистр вставленной строки
0 регистр не был изменен, то есть соответствующий элемент из строки массива был вставлен без изменений
1 регистр был преобразован в прописные буквы
2 регистр был преобразован в строчные буквы
3 регистр был преобразован в регистр заголовка, то есть первая буква прописная, а остальные строчные.
Таким образом, массив ArReport содержит отчет о проделанной функцией STRTRANEX() или WORDTRANEX() работе.
Общее количество строк в массиве ArReport равно общему количеству найденных и замененных строк.
Если ничего не было найдено, массив ArReport не будет создан.

Примечания:
Замена начинается с nStartOccurrence -ой по счету реализации и производится nNumberOfOccurrences раз. Если cReplacement отсутствует, cExpressionSought заменяется пустой строкой (удаляется). Если не задано nStartOccurrence,
подразумевается замена с первой реализации. Отсутствие nNumberOfOccurrences подразумевает замену всех реализаций.
Передайте -1 для необязательных параметров, если, скажем, нужно всего лишь передать параметр nFlags, не указывая явно предыдущие необязательные параметры.

STRTRANEX (cSearched, cExpressionSough, cReplacement, nStartOccurrence, nNumberOfOccurrences, nFlags) вернет тот же результат что и функция
STRTRAN (cSearched, cExpressionSough, cReplacement, nStartOccurrence, nNumberOfOccurrences, nFlags)

Данная функция позволяет, к примеру, заменять в строке строку A на строку B и, в свою очередь, заменять строку B на строку A, то есть менять местами строки в исходной стоке.
Можно заменять (удалять) несколько строк за один проход.
18 апр 09, 20:09    [7083076]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Игорь, дело возможно нужное, но за 20 лет работы на фоксе, мне НИЧЕГО из этого не понадобилось, ну да ладно это в конце концов мое ИМНО, но с другой строны посудить - вот половина функций просто стырена с FoxTools - зачем дублирование ?
Ну так из интереса покопал, и у меня просто волосы на голове зашевелились от такого когда на сях ! Возможно другого выхода не было, но даже если goto не отменяли в каком-то языке, я просто забыл о его существовании ! А тут ...
goto SORTIR ;
...
goto IFORSORTIR ;
Аж жуть берет !

Ладно черт с ним с сишным кодом, хотя такое ощущение что писалось на коленке, да так на коленке и осталось, вобщем "не айс" , меня общение на форуме как-то по жизни заставило делать код более читаемым если он публикуется публично.

про это я тоже умолчу
#define  ENGLISHLANGUAGE  0  // если 1 то сообщения выводятся по английски, иначе по русски
...
#if ENGLISHLANGUAGE
#define  ERRMSGMAXARRSIZE  "The second parameter contains more than 65000 words!"
#else
#define  ERRMSGMAXARRSIZE  "Второй параметр содержит более 65000 слов!"
#endif
и далее
            if (memsize < 0)
                _UserError("Invalid memo size\n");
#if VERSION != VFP
            if (memsize > 0x7FFFL)
                _UserError("Memo is too large -- 32K limit");
#endif

Как говорится - сказал А, скажи и Бе. Не забывайте, Вы выкладываете свой код ПУБЛИЧНО.
Это я еще фукнции тестить не начал
Увидел функцию nprecision и вспомнил как народ спрашивал, "А как узнать количество ЗНАЧАЩИХ симоволов после запятой" - вот это была бы фукнция а то что у Вас, простите - фигня полная
set decimal to 2
? nprecision(1/3) && 2

set decimal to 8
? nprecision(1/2) && 8 !!!
Ну очень нужная фукнция в хозяйстве

Вот на кой черт нужна функция INCREMENT я так и не понял если она работает только со ссылкой ? Это я на фоксе ее напишу и будет гораздо меньше кода чем написани на Сях
Procedure Increment 
LPARAMETERS trVal, trInc
RETURN trVal+IIF(vartype(trInc)="N",trInc,1)
Только ИМХО название у такой фукции надо бы сделать короче, а то написать lnVar++ и нажать пробел быстрее чем "вчепятывать" такое название фукнции.

Все - я спать - а то утром на дежурство, а у меня уже третий час ночи :)
20 апр 09, 00:16    [7085120]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
автор
вот половина функций просто стырена с FoxTools

речь идет о функции strfilter - это разумеется не половина, часть кода заимствована с FoxTools и переделана.
автор
- зачем дублирование

для strfilter я применил алгоритм, требующий меньше памяти, то же самое про функцию reverse (она из примера Microsoft)

автор
Ну так из интереса покопал, и у меня просто волосы на голове зашевелились от такого когда на сях !

Код нормальный.

goto SORTIR ;
...
goto IFORSORTIR ;
можно обойтись и без goto, просто код функций сравнительно небольшой и с goto получается покомпактней.


автор
про это я тоже умолчу

#define  ENGLISHLANGUAGE  0  // если 1 то сообщения выводятся по английски, иначе по русски
...
#if ENGLISHLANGUAGE
#define  ERRMSGMAXARRSIZE  "The second parameter contains more than 65000 words!"
#else
#define  ERRMSGMAXARRSIZE  "Второй параметр содержит более 65000 слов!"
#endif

Непонятно, чем вызвано неудовольствие ?


 if (memsize < 0)
                _UserError("Invalid memo size\n");
#if VERSION != VFP
            if (memsize > 0x7FFFL)
                _UserError("Memo is too large -- 32K limit");
#endif
код заимствован из FoxTools, автор Walter J. Kennamer, условно компилируемый фрагмент нужен только для DOS версии.


автор
Это я еще фукнции тестить не начал

Ошибок там нет.

автор
Увидел функцию nprecision и вспомнил как народ спрашивал, "А как узнать количество ЗНАЧАЩИХ симоволов после запятой" - вот это была бы фукнция а то что у Вас, простите - фигня полная

set decimal to 2
? nprecision(1/3) && 2

set decimal to 8
? nprecision(1/2) && 8 !!!
Ну очень нужная фукнция в хозяйстве

запросите данную функцию для 1.23, 5.345 или 6.45984590 результат будет правильным,
в приведенных Вами примерах количество знаков после запятой будет определятся установкой set decimal to



автор
Вот на кой черт нужна функция INCREMENT я так и не понял если она работает только со ссылкой ?

Она увеличивает значение переменной переданной по ссылке и возвращет результат
Я ее применял в отчетах для подсчитывания, скажем количества групп,
она увеличивает значение, переданное по ссылке.
INCREMENT(@p) в каждой строке отчета , где данная функция вставлена, отображается число и увеличивается счетчик.
Код на FoxPro упомянут как комментарий к функции INCREMENT
Большинсво данных функций можно написать на FoxPro, тексты многих прилагаются в файле St_denis.prg , но скорость работы конечно отличается в сотни раз.
20 апр 09, 06:59    [7085346]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Игорь2004

можно обойтись и без goto, просто код функций сравнительно небольшой и с goto получается покомпактней.

Ну да бог с ним, если так надо, то пусть будет. Работает - не трож

Игорь2004
Непонятно, чем вызвано неудовольствие ?

Тем что декларируется вывод сообщений на русском - а он реализован, мягко говоря, не до конца

Игорь2004
Ошибок там нет.


set decimal to 8
? nprecision(1/2) && 8 !!!

Игорь2004
в приведенных Вами примерах количество знаков после запятой будет определятся установкой set decimal to

А смысл ?

Игорь, я не в упрек, только вот сделали бы проги какие-нить более нужные что ли. Сетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.
Сканирования изображений из-под висты, запись Сидюков подней же, а то приходится пользоватся сторонними фукнциями, к примеру запись болванки из под фоксе не фурычит, а под VBS на ура. Чтение серйниых номеров процессора, винта, флешек - без админских прав, да малил ли чего еще, потому как вижу, что Ваша неуёмная энерия в части переписывания функций на Сях, есть, тольо ее направить в нужное русло. Ну вот хотя бы для FPD, FPW выкидаывание списка Browse, в Excel и OO - с миниамальным форматированием, с учетом заголовков полей и форматов. Для Visual не очень актуально, но тоже было бы не плохо, если бы экспорт шел с учетом спецификафии Biff8 хотя бы. Вот это было бы дело ! А так же отправки мыла прямо из FPD(W), формирования PDF с русскими нормальными буквами без использвания PDF Creator.

ЗЫ. Мне собсно все равно, от фокса я ушел и не пишу на нем, так что мне это не актуально, но помню основные вопросы и потребности народа на форумах !
20 апр 09, 08:35    [7085437]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
piva

Игорь, я не в упрек, только вот сделали бы проги какие-нить более нужные что ли. Сетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.
Сканирования изображений из-под висты, запись Сидюков подней же, а то приходится пользоватся сторонними фукнциями, к примеру запись болванки из под фоксе не фурычит, а под VBS на ура. Чтение серйниых номеров процессора, винта, флешек - без админских прав, да малил ли чего еще, потому как вижу, что Ваша неуёмная энерия в части переписывания функций на Сях, есть, тольо ее направить в нужное русло. Ну вот хотя бы для FPD, FPW выкидаывание списка Browse, в Excel и OO - с миниамальным форматированием, с учетом заголовков полей и форматов. Для Visual не очень актуально, но тоже было бы не плохо, если бы экспорт шел с учетом спецификафии Biff8 хотя бы. Вот это было бы дело ! А так же отправки мыла прямо из FPD(W), формирования PDF с русскими нормальными буквами без использвания PDF Creator.

ЗЫ. Мне собсно все равно, от фокса я ушел и не пишу на нем, так что мне это не актуально, но помню основные вопросы и потребности народа на форумах !


Piva на 1С ушел, ему теперь фокс нужен, как забавная игрушка. А мне лично очень импонирует библиотека Игоря. И не степенью необходимости её компонентов (а что понадобится завтра ?), а желанием сделать некоторые вещи _как надо_, а не как в фоксе сделано. К примеру, функции работы с массивами в фоксе выглядят бледно даже на фоне аналогичных старинных библ времен DOS. Да и для работы с текстовыми данными инструментов явно не хватает. Приходится на коленке лепить фоксовые UDF, быстродействие которых смехотворно. Давно уже руки чешутся взяться за С, но руки связаны (фоксом, работой).
И, по-моему, глупо ставить автору в упрек то, что он сделал не совсем то, что надо на потребу широкой публике (болванки писать, диски мапить etc.). Вы-же не будете ему предлагать переписывать половину фокса (или другого инструмента) на С.
20 апр 09, 11:15    [7086107]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
reware

А мне лично очень импонирует библиотека Игоря. И не степенью необходимости её компонентов (а что понадобится завтра ?), а желанием сделать некоторые вещи _как надо_, а не как в фоксе сделано.

reware
Вы-же не будете ему предлагать переписывать половину фокса (или другого инструмента) на С.

Очень последовательно

Если вещь нужная, то кто спорит-то ? Ну нужна и нужна, больше программ нужных и не очень.
Возможно Вы и правы. Значит с этими проблемами я так и не столнулся
20 апр 09, 12:18    [7086468]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 2420
>Игорь2004, 20.04.2009, 06:59 [7085346]
Интересный подход. Право здорово. Жаль что не знал ранее, очень бы пригодились для написания хранимых процедур.
С уважением, Владимир.
p.s. для того, чтобы "выжать" из 1Сv7.7 все, пришлось перейти к 1С++ (OLEDB FoxPro Provider), и далее - к хранимым процедурам.
20 апр 09, 12:23    [7086498]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
По поводу Set Decimals и моей функции nprecision
В документации сказано
автор
Specifies the number of decimal places displayed in numeric expressions.
фактически же FoxPro сохраняет в момент вычисления количество знаков, после запятой, в соответсвии с установкой Set Decimals действующей в момент вычисления.
Моя функция абсолютно корректна и не бесполезна, она возвращает количество знаков после запятой которое хранится в выражении
Set Library To st_denis

Set Decimals To 8
x1 = 1/3
?x1, [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x1)
Set Decimals To 2
?x1, [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x1)
Set Decimals To 8
?x1, [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x1)

Set Decimals To 2
x2 = 1/3
?x2 , [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x2)
Set Decimals To 4
?x2 , [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x2)
Set Decimals To 8
?x2 , [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x2)


автор
Тем что декларируется вывод сообщений на русском - а он реализован, мягко говоря, не до конца
Я оставил без изменения те сообщения, которые присутствуют в заимствованном из FoxTools коде.

автор
Сетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.

Я делаю кое-что из данного списка (ping, map drive), но только для VFP.
Не думаю, что стоит тратить время на работу из под FPD, FPW.

автор
Сканирования изображений из-под висты, запись Сидюков подней же, а то приходится пользоватся сторонними фукнциями, к примеру запись болванки из под фоксе не фурычит, а под VBS на ура.
Чтение серйниых номеров процессора, винта, флешек - без админских прав, да малил ли чего еще, потому как вижу, что Ваша неуёмная энерия в части переписывания функций на Сях, есть, тольо ее направить в нужное русло. Ну вот хотя бы для FPD, FPW выкидаывание списка Browse, в Excel и OO - с миниамальным форматированием, с учетом заголовков полей и форматов. Для Visual не очень актуально, но тоже было бы не плохо, если бы экспорт шел с учетом спецификафии Biff8 хотя бы. Вот это было бы дело !
, формирования PDF с русскими нормальными буквами без использвания PDF Creator.

До этого у меня руки никогда не дойдут

автор
А так же отправки мыла прямо из FPD(W)


Я делал трюк, позволяющий отправить EMAil из FPD, но он довольно сложный.

автор
Игорь, я не в упрек, только вот сделали бы проги какие-нить более нужные что ли.

Я попытался как-то структурировать функции, они работают с массивами, словами, кому-то может и окажется полезным именно то, что я сделал. Все это требует значительных усилий. Как я уже упоминал, функции не содержат ошибок.
Достаточно сказать, что те две функции, который я только что добавил, на два порядка сложнее любой встроенной функции FoxPro.
Скажем только тестирование по граничным условиям требуeт 50 000 000 вызовов с разными сочетаниями параметров и значениями параметров.
Я думаю, что это последнее, что я напишу для FoxPro.
20 апр 09, 18:05    [7088640]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Небольшое замечание.

SET DECIMALS - это настройка отображения количества знаков после запятой. А сколько в числе будет хранится значащих цифр этой настройкой не контролируется. Именно это и сказано в документации!

SET DECIMALS - это настройка интерфейса, а не рассчета. На точность расчета никак, никоим образом, не влияет. Хотя, при определенных условиях, результат расчета может отображаться как округление результирующего значения. Но, опять же, это вопрос отображения, а не хранения.

Более того, SET DECIMALS даже не гарантирует, что именно указанное количество знаков и будет отображаться. Есть куча условий, когда эта настройка игнорируется.

Т.е. SET DECIMALS что-то, как-то преобразует только и исключительно в момент отображения этого чего-то. При этом никак не изменяя сохраненное значение. Некий специфический способ форматирования данных. Ну, как отображение ведущих нулей.


PS:

В версии FP2.x была такая настройка SET PRECISION. Вот она как раз и задавала точность расчета. Но в старших версиях FoxPro - игнорируется. Оставлена для совместимости. А точность расчета всегда 16 значащих цифр.
20 апр 09, 18:43    [7088805]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Игорь2004

Моя функция абсолютно корректна и не бесполезна, она возвращает количество знаков после запятой которое хранится в выражении

Игорь я не спорю - если в этом есть именно НЕОБХОДИМАЯ инфорамция, но как-то приянто устнанавливать Set Decimals в начале проги и его не дергать, а если передергивание Set deciamls идет по ходу программы, то или в программе что-то не то или правильного результатата не будет, хотя тестить чес слово лениво

автор
Сетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.

автор
Я делаю кое-что из данного списка (ping, map drive), но только для VFP.
Не думаю, что стоит тратить время на работу из под FPD, FPW.

А вот это как раз зря, потому что для FPW еще можно как-то через зад использовать Win16Api то для FPD ваще тока через NET функции DOS я когда-то это делал- но это все кануло в прошлое а FPD прог про стране и по миру еще очень много, для FPW возможно но сложнее не все делкарации есть в Win16, для VFP это только pure winapi - единственно возможно более корректное выделение памяти и читабельное чтение получаемых структур. для UrlDownloadToFile можно было бы указать объект кторый может отработать таймаут или прервать функцию - тоже знаете ли востребованная функция :)


Игорь2004
Я делал трюк, позволяющий отправить EMAil из FPD, но он довольно сложный.

Дык никто и не торопит - что бы сделать нормально !

Игорь2004
Как я уже упоминал, функции не содержат ошибок.
Ошибок - может быть и нет - (но я до сих пор боюсь такой формулировки или это самонаденянность или это осуществиом с рядом допущений и не иначе)

Игорь2004
Скажем только тестирование по граничным условиям требуeт 50 000 000 вызовов с разными сочетаниями параметров и значениями параметров.


Это или алогрим кривой или его можно оптимизировать по другому, или это тот крайний случай когда только так и не иначе - хотя в последнем сомневаюсь.

Я даже из 1С - выжимаю все что ОНО(ОНА-ОН ) может. Да щас пишу медленне чем мой нач, но работает в 10-ки раз быстре его кода. Так что на оптимизацию у меня порой уходит до 2/3 времени на разработку - можно конечно подставить костыли на Сях и Асме - но пока не понадобилось - вечные тормоза не мои а сторонних сикульных серверов типа MySQL или MSSQL с такими проектированиями баз (жаль прихдилось юзать чужие а не свои ) как вропчем и тормоза фоксовского репорта, потому что даже в 2.6 FPW он достаточно медленный и костыли ему не помогут не говоря уже о ReportListener да его с графичесокой обработкой в самом Listener c вращениями и извращениями

В остальном больше спорить не в моготу, если началь проявляться народ кому это надо, дай им бог в помщь вашии фунцкии, а дальше что ? с 2006 года перелопачивать одну и ту же библу ? Да я бы с тоски подох от такого саппорта Может все-таки отвелечетесь от ваших жизенных пролем и воспарите над собой ? Я пытался, тока денег захотелось больше чем свободы творчества, голод знаете ли не тетка А если есть время и желание, почему нужно стоять на одном месте ? а новые подходы, а новые знания ? ...
20 апр 09, 18:47    [7088823]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
to ВладимирМ
Вы правы, более точно, FoxPro запоминает, сколько знаков отоображать для переменной в соответствии с SET DECIMALS в момент присвоения.
Моя функция это и покажет.

to piva
автор
Это или алогрим кривой или его можно оптимизировать по другому, или это тот крайний случай когда только так и не иначе - хотя в последнем сомневаюсь.
О каком алгоритме идет речь, об алгоритме тестирования ?
Как можно провести тестирование по граничным условия не вызывая все возможные комбинации параметров и значений параметров?
20 апр 09, 19:08    [7088904]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Игорь2004
О каком алгоритме идет речь, об алгоритме тестирования ?
всякое тестирование относится к уже полученному, пусть и горькому опыту, если это просто тестирование быстродействия, то опять же в любых боевых условиях все может поменяться вплоть до наоборот, когда тривиальный код на фоксе будет быстрее функций на сях ;)

ЗЫ - использование массиов в итерациях по 50 млн записей - это нонсенс или я не о том ?
А если это "большие" куски текста то тем более

Игорь - давай не будем цапаться. Если есть желание пнуть меня последним, то пусть это право останется за тобой, я могу тут же покаяться и принести извинения если это нанесло тебе какой-то ущерб, я думал тебя сподвигнуть на более интересные фунции ... видимо я ошибся, извини.
Далее продолжать дискуссию не вижу смысла, это как слепой с глухим
20 апр 09, 19:18    [7088928]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
автор
ЗЫ - использование массиов в итерациях по 50 млн записей - это нонсенс или я не о том ?
А если это "большие" куски текста то тем более

Вам знакомо понятие тестирование по граничным условиям "Boundary testing" ?
http://en.wikipedia.org/wiki/Boundary_testing
это значит, например, для строковых параметров, передача пустого параметра,
для необязательного параметра нужно тестировать случай когда параметр не передан и т.д.
В моем случае перебор всех возможных вариантов это около 50 миллионов вызовов.
Речь идет о двух вновь добавленных функциях.
1 параметр может передаваться как по ссылке так и по значению
2 параметр может передаваться как массив по ссылке так и по значению строковая переменная
3 параметр может передаваться как массив по ссылке так и по значению строковая переменная (причем параметр необязателный)
и так далее, каждую возможную ситуацию нужно вызвать с разными значениями ( пустой, непустой, значение по умолчанию)
При большом количестве параметров тестирование по граничным условиям чрезвычайно усложняется.
Я думаю, что в конце концов, Вы станете евангелистом моей библиотеки.
20 апр 09, 19:35    [7088978]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Игорь2004
Я думаю, что в конце концов, Вы станете евангелистом моей библиотеки.

Побойтесь бога, да никогда в жизни Для решения работы с текстами мне хватило ATC\RATC + STUFF причем на это уходило 5% времены выполнения, остальное падало на ввод\вывод который мне не подконтролен (в том числе и на UrlDownloadToFile) + закидоны IE7 по сравнению с IE6 (о чем я упоминал на Foxclub) +косяки мемо полей от которых пришлось срочно избавлятся переводя все во внешние файлы и причем это работало ГОРАЗДО быстрее даже с IE7

Бог в помощь, как говорится !
20 апр 09, 19:43    [7089000]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
piva
Для решения работы с текстами мне хватило ATC\RATC + STUFF причем на это уходило 5% времены выполнения, остальное падало на ввод\вывод который мне не подконтролен (в том числе и на UrlDownloadToFile) + закидоны IE7 по сравнению с IE6 (о чем я упоминал на Foxclub) +косяки мемо полей от которых пришлось срочно избавлятся переводя все во внешние файлы и причем это работало ГОРАЗДО быстрее даже с IE7


Не знаю, как вам хватало ATC и STUFF (и SUBSTR, и STRTRAN иже с ними). Это дикие торомоза на больших обьемах текста. И не надо лукавить, именно из-за этих "косяков мемо-полей" вы и перешли от работы со строкой в памяти к работе с перемещением указателя по файлу, что действительно реализовано в VFP гораздо грамотнее и быстрее.
И, по-моему, автору не следует ударяться в бесчисленные ответвления, куда можно направить расширение библиотеки. Не надо сюда до кучи лепить различные UrlDownload, DiskMapper, CDWriter, DVDViewer и прочую ерунду. Достаточно уже выбранного направления, чтобы получить полноценный продукт, которого, по большому счету, так и нет в природе - библиотеки доп.функций работы с массивами и строками на С. Я, конечно, извиняюсь, но по набору строковых функций (а уж тем более фукнций обработки массивов) фокс сильно уступает даже досовским ветеранам семейства Clipper, с которого я начинал до его кончины. Это уже не говоря о фоксовской трактовке массива, как такового.
20 апр 09, 20:21    [7089081]     Ответить | Цитировать Сообщить модератору
 Re: [Объявление] Библиотека пользовательских функции FoxPro на C  [new]
Игорь2004
Member

Откуда: Монреаль
Сообщений: 168
Да, в общем, я больше не собираюсь писать для FoxPro,
осталось только опубликовать изменения на UniversalThread и CodePlex.
Я немного возился c Clipper, но особенного внимания не обращал на такие детали.
Каждый элемент массива может хранить любой тип данных, что увеличивает гибкость и усложняет обработку.
Но как правило не нужно хранить разные типы данных в одном столбце.
В Clipper вроде как существует еще большая гибкость, и можно хранить другой массив в элементе массива.
Какие функции для работы с массивами были в Clipper, причем аналога нет в FoxPro ?
Какие функции для работы со строками были в в Clipper, причем аналога нет в FoxPro ?
20 апр 09, 20:42    [7089123]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить