Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 19:05

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 152 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 04, 2009 23:01 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Код:
0 VALUE ActiveLibrary
: FUNCTION ActiveLibrary SWAP GETPROCADDRESS VALUE ;
" kernel32.dll" LOADLIBRARY VALUE kernel32
kernel32 TO ActiveLibrary

" GlobalAlloc" FUNCTION GlobalAlloc@
: ALLOCATE
  0x0040 SWAP GlobalAlloc@ API2
  DUP IF ELSE " Ошибка! Не удалось получить память." PRINT CR ABORT THEN
;

" GlobalFree" FUNCTION GlobalFree@
: FREE   GlobalFree@ API1 DROP ;

" GetFileSize" FUNCTION GetFileSize@
: FSIZE
  HF-OUT 0 GetFileSize@ API2
  DUP -1 = IF " Ошибка! Не удалось получить размер файла." PRINT CR ABORT THEN
;

: LOAD1   \ ( str -- )
  OPEN TO HF-OUT
  HF-OUT FSIZE DUP 4 + ALLOCATE DUP >R SWAP READFILE
  HF-OUT CLOSE
  R@ PRINT
  R> FREE
;


: my-print
  BEGIN DUP C@ DUP WHILE
    EMIT
    1+
  REPEAT
  2DROP
;

: LOAD2   \ ( str -- )
  OPEN TO HF-OUT
  HF-OUT FSIZE DUP 4 + ALLOCATE DUP >R SWAP READFILE
  HF-OUT CLOSE
  R@ my-print
  R> FREE
;


CLS
" C:\test.txt" LOAD1  \ <-- Только первая строка
CR
" C:\test.txt" LOAD2  \ <-- Все строки

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 04, 2009 23:09 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да, сейчас посмотрел - 0x0A 0x0D воспринимаются как признак конца печати.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 05, 2009 14:21 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Очень похоже, что при загрузке длл не происходит инициализация локального стека: в протоне выполнение вот этого кода
Код:
1 >L  LOCALDEPTH

несколько раз подряд приводит к постоянному росту глубины локального стека, точно также как и L> приводит к отрицательному росту глубины.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 05, 2009 14:41 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Немного не понял суть проблемы. >L переносит число со стека данных на локальный стек. Конечно, его глубина будет расти. Аналогично, L> снимет число с локального стека и положит на стек данных. Но вообще расставил инициализацию указателей в местах, где очищается стек данных.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 05, 2009 15:07 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Хищник писал(а):
Немного не понял суть проблемы.

Ну вот написал в протоне 1 >L LOCALDEPTH и нажал F9 - на стек 1, еще раз нажал - уже 2, еще раз - 3 и т.д.
А вот еще:
Код:
1.0 F>L
LOCALSTACK F@
F. L>F F.

выводит два разных числа, хотя вроде должны быть одинаковые.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 05, 2009 16:12 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
VoidVolker писал(а):
Ну вот написал в протоне 1 >L LOCALDEPTH и нажал F9 - на стек 1, еще раз нажал - уже 2, еще раз - 3 и т.д.

Точно, забыл в Init поставить обнуление указателей.
VoidVolker писал(а):
А вот еще:
Код:
1.0 F>L
LOCALSTACK F@
F. L>F F.

выводит два разных числа, хотя вроде должны быть одинаковые.

Ой, это были short float :shuffle; Теперь есть L>F F>L L>SF SF>L

Добавлено PopStack в экспортируемые функции - забирает число со стека и возвращает его в качестве результата. GetTop было и раньше, возвращало верхнее число со стека без его удаления. Актуально для построения собственных оболочек над quark.dll


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 23, 2009 12:37 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Цитата из документации:
Цитата:
USE То же, что [']

А вот как оно на самом деле:
Код:
CLS
' ['] 1- C@  \ 1 - слово немедленного исполнения
' USE 1- C@  \ 0 - а тут явно нет флага IMMEDIATE

: ТЕСТ " ТЕСТ Выполнено." PRINT ;

: r1  \ ( -- cfa ) Вернуть CFA слова ТЕСТ
  ['] ТЕСТ
;

: r  \ ( -- cfa ) В теории: Вернуть CFA слова ТЕСТ
  USE ТЕСТ
;
\ А на самом деле то же самое что и это:
: r2
  ' ТЕСТ
;


r1
r ТЕСТ
r2 ТЕСТ

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 23, 2009 13:43 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
VoidVolker писал(а):
' ['] 1- C@ \ 1 - слово немедленного исполнения
' USE 1- C@ \ 0 - а тут явно нет флага IMMEDIATE

Ой, надо же, промазал я :)

В принципе, слово "камуфляжное", предназначенное просто для придания текстам читаемого посторонним человеком вида. Его можно сделать алиасом как ', так и [']. Внутри определений я его до сих пор не удосужился использовать, а то бы тоже столкнулся. Тогда, видимо, стоит ставить IMMEDIATE? Я ориентируюсь на слова вида

Код:
: НАСТРАИВАЕМ-ВЕКТОРЫ

USE MY_WORD1 TO VECT1
USE MY_WORD2 TO VECT2
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 23, 2009 19:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Хищник писал(а):
В принципе, слово "камуфляжное", предназначенное просто для придания текстам читаемого посторонним человеком вида. Его можно сделать алиасом как ', так и [']. Внутри определений я его до сих пор не удосужился использовать, а то бы тоже столкнулся. Тогда, видимо, стоит ставить IMMEDIATE? Я ориентируюсь на слова вида

Да конечно.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 23, 2009 19:35 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Обновлено.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 24, 2009 22:38 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Локализовал баг http://pic.ipicture.ru/uploads/090224/Ut1awNwNRs.jpg до куда смог - вот файлы http://slil.ru/26995344, для воспроизведения надо загрузить f0.fpm через коммандную строку в кварк.ехе и что-нибудь написать меньше пяти символов в консоли. Если уменьшить вложенность на один файл в конце цепочки вложенных файлов - то надпись будет чуточку другая. А вот если запустить кварк.ехе и в консоли написать " f0.fpm" L то: если файл в той же папке - то нормально все, а вот если эти файлы в другой папке - то вылетает. У меня файлы лежат во вложенной папке там же где и кварк.ехе.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 01, 2009 11:34 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Очередной скриншот этого злостного бага http://pic.ipicture.ru/uploads/090301/W8fHSOLDJn.jpg - очень похоже на кусок какого-то слова.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 01, 2009 18:38 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
А баг с прочтением комментариев как некомментариев был?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 02, 2009 02:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
вопрос писал(а):
А баг с прочтением комментариев как некомментариев был?

А что имеется в виду? Кстати, круглые скобки комментариями в кварке не являются.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 02, 2009 02:54 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
VoidVolker писал(а):
Очередной скриншот этого злостного бага http://pic.ipicture.ru/uploads/090301/W8fHSOLDJn.jpg - очень похоже на кусок какого-то слова.

Еще в одном месте отловил и поборол. Там проверка TIB на пустую строку в одном месте делалась как cmp [tib], 0 :shuffle; При этом fasm честно посмотрел в объявление tib и преобразовал это в cmp dword [tib], 0 (надо, естественно, cmp byte [tib], 0). Глюк удавалось воспроизводить, когда строка, возвращаемая из стека контекстов (т.е. та, которая вызывала загрузку файла), оказывалась длиннее, чем последняя строка загружаемого файла. Регулировка длины последней строки это подтверждала - забивание пробелами приводило к нормальной работе. Отсюда же и проблемы с полными именами - возобновляемая строка не перекрывала то, что было в буфере, полностью. Вернее, закрывала нулем, но одним байтом, и из-за промаха с модификатором размера операнда следующие три байта тоже участвовали в проверке и заставляли продолжать разбор строки по "мусору".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 152 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB