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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Доступные логические диски в Windows
СообщениеДобавлено: Ср июн 11, 2008 07:37 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Показать на консоли список логических дисков доступных в текущий момент. Задача конкурса: самый минимальный код в словах (использовать для буфера только кучу, убивая данные в конце задачи). Код для SPF.

Что бы не лезть в MSDN.
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

( длинна_буфера адрес_буфера -> количество_скопированных_символов|0 )
Буфер будет содержать список строк, каждая строка оканчивается нулем, конец всех строк так же ограничена 0. Пример: Str1 0 Str2 0 Str3 0 0

З.Ы. Либы не подключать иначе буду считать определения слов так же.


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
Показать на консоли список логических дисков доступных в текущий момент.

прямо из консоли :D
Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL
1000 DUP ALLOCATE THROW DUP -ROT SWAP GetLogicalDriveStringsA DUMP

32A664   41 3A 5C 00  43 3A 5C 00  44 3A 5C 00  45 3A 5C 00 A:\.C:\.D:\.E:\.
32A674   46 3A 5C 00  47 3A 5C 00  48 3A 5C 00  00 00 00 00 F:\.G:\.H:\.....
Ok

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 11, 2008 08:55 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
chess писал(а):
прямо из консоли :D
Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL
1000 DUP ALLOCATE THROW DUP -ROT SWAP GetLogicalDriveStringsA DUMP

Хитрый ход однако. Но тут больше требуется алгоритм вывода на консоль построчно из списка. Апи дана, что бы не строить самим список строк.
Это мое первое ТЗ для конкурса, так что я не был готов к таким хитрым моментам.

_________________
Меня нет, не будет и не было.


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

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
chess писал(а):
Pretorian писал(а):
Задача конкурса: самый минимальный код в словах
прямо из консоли :D ...

:shock: Да-а-а... :dmad; Маг калданул - все атдыхають!

_________________
Банзай!


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
Но тут больше требуется алгоритм вывода на консоль построчно из списка. Апи дана, что бы не строить самим список строк.

Тут вывод из буфера проще по EMIT сделать.
Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

0 VALUE a-buff 0 VALUE len-buff
100 DUP ALLOCATE THROW DUP -ROT SWAP
GetLogicalDriveStringsA TO len-buff TO a-buff

: LOG-DISKS.
." LOG-DISKS: "
a-buff len-buff + a-buff
DO I C@ DUP 0= IF DROP SPACE ELSE EMIT THEN LOOP ;

\EOF
LOG-DISKS.

_________________
С уважением, chess


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
То же самое без глобальных переменных

Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

: LOG-DISKS:
LATEST ID. SPACE
100 DUP ALLOCATE THROW DUP -ROT SWAP
GetLogicalDriveStringsA OVER + SWAP
DO I C@ DUP 0= IF DROP SPACE ELSE EMIT THEN LOOP ;

\ EOF
LOG-DISKS:

_________________
С уважением, chess


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
chess писал(а):
Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

0 VALUE a-buff 0 VALUE len-buff
100 DUP ALLOCATE THROW DUP -ROT SWAP
GetLogicalDriveStringsA TO len-buff TO a-buff

: LOG-DISKS.
a-buff len-buff + a-buff
DO I C@ DUP 0= IF DROP SPACE ELSE EMIT THEN LOOP ;

LOG-DISKS.

41 слово

_________________
Меня нет, не будет и не было.


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Ну без украшательств только 22 слова будет :)

Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

: LOG-DISKS:
100 DUP ALLOCATE THROW DUP -ROT SWAP  GetLogicalDriveStringsA
OVER + SWAP  DO I C@ EMIT LOOP ;

_________________
С уважением, chess


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
А если еще вдруг вспомнить, что EMIT это 1 TYPE, и есть слово TUCK, то вообще 14-ти хватит:

Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

: LOG-DISKS:
100 DUP ALLOCATE THROW TUCK SWAP
GetLogicalDriveStringsA TYPE ;

_________________
С уважением, chess


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Похоже это минимум - 13 слов.
Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

: LOG-DISKS:  100 ALLOCATE THROW DUP 100 GetLogicalDriveStringsA TYPE ;

_________________
С уважением, chess


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

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
chess писал(а):
Похоже это минимум - 13 слов.
Код:
WINAPI: GetLogicalDriveStringsA KERNEL32.DLL

: LOG-DISKS:  100 ALLOCATE THROW DUP 100 GetLogicalDriveStringsA TYPE ;

А чего-то 5 насчитал ALLOCATE THROW DUP GetLogicalDriveStringsA TYPE и 6 само определение


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Alexander
Считай как интерпретатор - BL WORD :)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

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


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

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


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

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