2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: idn2 for windows
Сообщение23.05.2018, 17:13 
Заслуженный участник


20/08/14
11867
Россия, Москва
Зашибись, функция IdnToAscii вообще реализована в kernel32.dll и обращается к RtlIdnToAsccii из ntdll.dll, которая и делает всю работу, ничего лишнего не нужно.
Чувствую щас таки запилю себе утилитку на дельфи с удобными форматами вызова ...

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение23.05.2018, 19:13 
Заслуженный участник


20/08/14
11867
Россия, Москва
wrest
Сварганил, ссылка (хранится 30 дней после последнего скачивания), исходник и пример запуска приложены: http://files.webi.ru/m_down/idn2.zip.html
Принимает текст или из первого параметра командной строки, или, если та пустая, со стандартного ввода. Одну строку. Пример запуска (кодировка везде консольная OEM=DOS=CP866):
Код:
Z:\>idn2.exe президент.рф
xn--d1abbgf6aiiy.xn--p1ai
Z:\>echo президент.рф|idn2.exe
xn--d1abbgf6aiiy.xn--p1ai
Z:\>
Под вистой и выше ничего не требует, работает как x86/x32 приложение. Под XP не запускается, в kernel32.dll нет функций конвертации, писать самому лень.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение23.05.2018, 20:48 


05/09/16
12108
Dmitriy40 в сообщении #1314381 писал(а):
Под вистой и выше ничего не требует, работает как x86/x32 приложение. Под XP не запускается,

Спасибо! У меня дома XP и 10-ка, завтра попробую на 7-ке.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 10:26 


05/09/16
12108
Dmitriy40
Работает! Спасибо огромное. И за for -- тоже работает. Написал такой "батник" из одной строки и назвал его idn3.bat:
Код:
for /f %%s in ('idn2 %2') do %1 %%s

Теперь ping, nslookup и проч. можно вызывать им:
Код:
C:\>idn3 nslookup мама.мыла.раму


Ну ясно, что нет в мире совершенства :) А зачем вы сделали так, что если параметров нет, то надо ждать их (ReadLn) до упора?
Мне кажется было бы логично вместо
Код:
   if ParamCount = 0 then begin
      s2 := PChar(StringOfChar(#0, max));
      Readln(s1);
      OemToChar(PChar(s1), s2);
      StringToWideChar(s2, s, max);
   end else

сделать что-то типа
Код:
   if ParamCount = 0 then Writeln('Usage: idn2 domain_name');
       else

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 16:19 
Заслуженный участник


20/08/14
11867
Россия, Москва
wrest в сообщении #1314525 писал(а):
А зачем вы сделали так, что если параметров нет, то надо ждать их (ReadLn) до упора?
Для таких утилит часто удобно получать строку по конвейеру, ну сравните с тем же find/sort, можно организовывать длинные цепочки команд/фильтров. А уж откуда взять входной поток строк - вариантов множество.

Но Вы правы, хелп это сила, доработал программу до выдачи короткой справки о формате вызова (при вызове без параметров или с параметрами /? или -?), пришлось изменить указание на ожидание входного потока, теперь на это указывает единственный параметр вызова "--". Плюс обрабатывается не одна строка, а все из входного потока или все параметры из командной строки. Плюс на ошибочные строки (например символ табуляции в строке) не выдаёт код ошибки, а молча их пропускает. Ссылка: http://files.webi.ru/m_down/idn2v2.zip.html (предыдущая тоже действует).
Пример вызова:
код: [ скачать ] [ спрятать ]
Используется синтаксис Text
Z:\>idn2
Usage: idn2.exe domain_name [domain_name [domain_name ... ] ]
Or: echo domain_name| idn2.exe --
Or: idn2.exe -- <textfile

Z:\>idn2 президент постпред президент.рф
xn--d1abbgf6aiiy
xn--d1ab0adbgfi
xn--d1abbgf6aiiy.xn--p1ai

Z:\>echo президент.рф| idn2 --
xn--d1abbgf6aiiy.xn--p1ai

Z:\idn2 -- <idn2.sample
xn--d1abbgf6aiiy
xn--d1ab0adbgfi
xn--d1abbgf6aiiy.xn--p1ai

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 16:59 


05/09/16
12108
Dmitriy40 в сообщении #1314601 писал(а):
пришлось изменить указание на ожидание входного потока, теперь на это указывает единственный параметр вызова "--".

Дык перенаправление (которое pipe) работало и так, без "--":
Код:
C:\>idn2 президент.рф
xn--d1abbgf6aiiy.xn--p1ai

C:\>echo президент.рф| idn2
xn--d1abbgf6aiiy.xn--p1ai

C:\>
Просто символ | надо ставить впритык, иначе пробел тоже кодируется

Да, и с вашего позволения, я поделюсь утилитой с коллегами? Так что ещё можете вставить копирайт куда-неть в help (и написать там же что это freeware).

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 17:24 
Заслуженный участник


16/02/13
4214
Владивосток
wrest в сообщении #1314612 писал(а):
перенаправление (которое pipe) работало и так
Вы ж сами просили, чтоб вызов без параметров выдавал справку

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 17:30 
Заслуженный участник


20/08/14
11867
Россия, Москва
wrest в сообщении #1314612 писал(а):
Да, и с вашего позволения, я поделюсь утилитой с коллегами? Так что ещё можете вставить копирайт куда-неть в help (и написать там же что это freeware).
Разумеется делитесь, выложено же публично (а не Вам лично в ЛС).
Добавлять копирайт и лицензию не вижу смысла, пусть будет общественным достоянием, тем более что никаких гарантий я не даю, а исходный код приложен.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 17:32 


05/09/16
12108
iifat в сообщении #1314621 писал(а):
Вы ж сами просили, чтоб вызов без параметров выдавал справку

Работоспособность pipe (который | ) тут вообще не при чем, кмк.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 17:35 
Заслуженный участник


20/08/14
11867
Россия, Москва
wrest в сообщении #1314625 писал(а):
Работоспособность pipe (который | ) тут вообще не при чем, кмк.
Да, но вопрос по какому критерию выдавать справку. Могу убрать справку на вызов без параметров (и оставить на /? и -?), думаете будет лучше?

-- 24.05.2018, 18:07 --

Пожалуй да, лучше, даже станет более одинаково с прочими dos командами. Убрал, ссылка: http://files.webi.ru/m_down/idn2v3.zip.html

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 18:29 


05/09/16
12108
Dmitriy40 в сообщении #1314628 писал(а):
Да, но вопрос по какому критерию выдавать справку. Могу убрать справку на вызов без параметров (и оставить на /? и -?), думаете будет лучше?

Я честно сказать не понимаю дилеммы. Вот есть команда ping например. И конвейеры поддерживает и все что надо.

-- 24.05.2018, 18:35 --

Dmitriy40 в сообщении #1314628 писал(а):
Убрал, ссылка:

Не работает если без параметров :)
Вернее работает, но не завершается, выход только по Ctrl+C
Зря вы затеяли вот это:
Dmitriy40 в сообщении #1314601 писал(а):
Плюс обрабатывается не одна строка, а все из входного потока или все параметры из командной строки.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 19:09 
Заслуженный участник


20/08/14
11867
Россия, Москва
wrest в сообщении #1314643 писал(а):
Я честно сказать не понимаю дилеммы.
Очень просто: что делать при пустой командной строке? Выдавать справку или ждать stdin? И если выдавать справку, то как переключиться на ожидание ввода? В v3 работает ровно как sort, без параметров ждёт ввода, с /? выдаёт справку. Мне бывает удобно использовать pipe, Вы же можете про это забыть и указывать имена в командной строке - и всем будет счастье.

wrest в сообщении #1314643 писал(а):
Вот есть команда ping например. И конвейеры поддерживает и все что надо.
Да ладно, зачем же тогда сами спрашивали как заставить ping принимать данные со ввода, а не из командной строки, а? Так что не поддерживает.

wrest в сообщении #1314643 писал(а):
Зря вы затеяли вот это:
Ну а это просто ничему не мешает и с предыдущим не связано, цикл добавлен в другое место, это просто удобно.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 20:18 


05/09/16
12108
Dmitriy40 в сообщении #1314660 писал(а):
Очень просто: что делать при пустой командной строке? Выдавать справку

Мне кажется что да.
Dmitriy40 в сообщении #1314660 писал(а):
Мне бывает удобно использовать pipe

Извините но я не понимаю при чем тут pipe. Первая версия вашей программы работает с pipe.
Dmitriy40 в сообщении #1314660 писал(а):
Ну а это просто ничему не мешает

Сейчас (v3) если запустить без параметров, то программа ждет ввода, затем конвертирует и опять ждет ввода, и такой режим не заканчивается.

Dmitriy40 в сообщении #1314660 писал(а):
Да ладно, зачем же тогда сами спрашивали как заставить ping принимать данные со ввода, а не из командной строки, а? Так что не поддерживает.

Да, ping не поддерживает, действительно.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение24.05.2018, 20:39 
Заслуженный участник


20/08/14
11867
Россия, Москва
wrest в сообщении #1314688 писал(а):
Сейчас (v3) если запустить без параметров, то программа ждет ввода, затем конвертирует и опять ждет ввода, и такой режим не заканчивается.
О, какая красота, очень удобно для тестирования руками. :D И повторю, sort ведёт себя точно так же. Да, ping по другому, ну и что, данная утилита ближе к преобразованию текста, чем к работе с сетью, потому и конвейер, и преобразование "за раз" всего входного потока (или файла через перенаправление), и хелп по /?. Повторю, для утилит работы с текстом это нормально и привычно.

wrest в сообщении #1314688 писал(а):
Извините но я не понимаю при чем тут pipe. Первая версия вашей программы работает с pipe.
Зато не выдаёт справки. Чего Вы же и захотели, ну и я потом тоже.

В общем я готов сделать ровно как Вам нужно, под номером v4 (или уже v5) - если объясните чётко как же Вам хочется. Когда выдавать хелп, когда преобразовывать командную строку (и всю или только первый параметр), когда и надо ли брать строку (или строки?) из входного потока. Как заготовку предлагаю при запуске без параметров выводить хелп, с параметрами - преобразовывать каждый в отдельную строку, на stdin забить, при ошибках молчать. Устраивает или надо как-то ещё по другому - тогда как? Если устраивает, то ссылка: http://files.webi.ru/m_down/idn2v4.zip.html

PS. Кстати начиная с v2 можно запускаемый файл переименовывать как угодно, хелп выдаётся правильно.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение25.05.2018, 10:02 


05/09/16
12108
Dmitriy40 в сообщении #1314697 писал(а):
Устраивает или надо как-то ещё по другому - тогда как? Если устраивает, то ссылка:

v4 устраивает, огромное спасибо! :!:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group