:: Visual Foxpro, Foxpro for DOS
Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Давно столкнулся с этой проблемой. Сделал костыль, но сейчас опять всплыло.
Суть в том, что портится кириллица в переменных окружения при запуске FPD. Ну то есть если, например, в Far написать "set", то выдаст:
rus=РусскиеБуквы
а если в FPD сделать "!set" или "!cmd/c set", то выдаст
RUS=' бЁ<Ёc' бЁ<сЄ
Количество букв одинаковое, то есть, похоже, в какой-то момент происходит какая-то конвертация. Но никакой обратный CpConvert() не поможет, потому что при
set rus=АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё
в FPD потом выдаёт
RUS=__'_":&#9532;&#9578;_%_<_____''""--_T_>____ Ўў_¤_&#9474;§ЁcЄ<&#9488;-RЇабвгдежзийклмнопрс
то есть некоторые буквы превращаются в один и тот же символ "_". Никакие игры с CHCP непосредственно перед запуском foxprox.exe ситуацию не исправляют.

Кто-то сталкивался, как победить?
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Какая ось?
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Simple777
Какая ось?
Коротко – все. Ну то есть под Win9x уже не помню, а вот сейчас под рукой WinXP и Win7 – проявляется.
Под Win10 ещё хлеще, у меня в запускающем bat-нике написано: «21.09.2015 под Win10 вылетает: что-то насчёт not connected (надо разбираться)», и запускаю не "FoxProX.exe -t %A%", а "start FoxProX.exe -t %A%", при этом создаётся новый процесс, первое окно закрывается, но по крайней мере работает.
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Насчет 10-ки. Там есть такой нюанс - надо установить в свойствах командной строки "старая версия".

Насчет окружения. Никогда не пробовал кириллицу через SET передавать. В конце концов можно ведь и через текстовый файл передавать данные.

В WIN 7 еще есть известный глюк, когда падает кодовая таблица при вызове командной строки. Но если установить в свойствах растровый шрифт, то кодовая страница сохраняется.



Исправлено 2 раз(а). Последнее : Simple777, 04.06.18 17:03
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
И всё же скорее всего это именно проблема с кодовой страницей консоли...
P.S. Т.е. это не сами set-ы портятся, а их вывод в консоль.


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 04.06.18 18:26
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А как вы читаете переменную окружения RUS (я забюыл).
Но когда я извне создал CONFIG.FP с Set RUS=русское и сохранил файл в кодировке 1251, то в фоксе получил:
MODI FILE (SYS(2019)) - испорченный русский текст (правда с псевдографикой, а не с подчеркиванием)
кодга же сделал файл CONFIG.FP в корировке 866 (OEM)
то MODI FILE (SYS(2019)) показал нормальный русский текст

Как прочитать "переменную окружения" в FPD ? (поленился лезть в хелп FPD, ?rus возвращает ошибку, GETENV("rus") возвращает пусто...)

B SET("rus") тоже в ошибку уходит...



Исправлено 1 раз(а). Последнее : of63, 04.06.18 18:39
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Однако тема FPD нынче в тренде.

Назад, в будущее? [sm021] :danc: [sm128]
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Как прочитать "переменную окружения" в FPD ?
говори как прочитать этот SET CONFIG.FP собственно в IDE ?! ^)

Доб. > Назад, в будущее
Нет у ФПД никакого будущего, кроме как если не нарисует кто-нибудь эмулятор проца x86 (+доса на нем) на "универсальном" языке под не менее "универсальную" ОС, на открытом бесплатном ПО (под чем и на чём, правда... ). МС должны бы встроить в свои ОСи этот эмулятор, но это вряд-ли, слишком много работающего добра под ДОСом сделано, вдруг оно оживет, включая игры.



Исправлено 1 раз(а). Последнее : of63, 04.06.18 19:05
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Речь идёт про переменные окружения DOS, а не фокса. Они создаются/устанавливаются командой set (которая реализована либо как внутренняя команда command.com, либо как отдельная утилита set.com/exe - давно было, не помню таких нюансов), а никакими не config.fp
При работе под эмулятором доса, в эти переменные попадают аналогичные по сути Win переменные окружения. И как именно работает с ними инициированная DOS приложением команда set уже виндового командного интерпретатора (cmd.exe) - большая загадка...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я не понимаю... речь о DosBox... речь о dosbox.conf что-ли... где там SETы эти ставить... задачу не осознал )

Доб. Да, я так настроил это ДосБокс, что он мне сразу FPD запускает, в досе посмотреть ничего не могу (и лень, и не понимаю насущности вопроса с русской переменной SET). Проще перейти на VFP, чем бесконечно мучать этот FPD, старый прибор сдох, да здраствует новый прибор - VFP )



Исправлено 1 раз(а). Последнее : of63, 04.06.18 20:08
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
of63
задачу не осознал )

Технологии развиваются - шапками не закидаешь. [sm128]
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вряд ли досбокс - скорее всего речь про обычный ntvdm - как в обычных x86 виндах (ещё и XP) досовский антиквариат и запускается...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Технологии верят только слезам деньгам, и их фрикам

> Вряд ли досбокс - скорее всего речь про обычный ntvdm - как в обычных x86 виндах (ещё и XP) досовский антиквариат и запускается...

Если обо мне, то полноценный ДосБокс (может, он есть ntvdm, может Криспа может его перекомпилировать, может вам это все "запросто", но, я настройки ДосБокса в тему FPD выкладывал неск. лет назад. Не считай всех совсем уж дураками )

> в 7-64x, как мне иначе запустить пой ФПД (мне он нужен для редактирования старых FRX-ов, для печати на старых символьных принтерах DFX-8500 в символьном режиме! В графическом режиме любой идиот может напечатать текст и Мону ЛИзу, ... вот )



Исправлено 2 раз(а). Последнее : of63, 04.06.18 20:40
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
akvvohinc

Сообщений: 4222
Откуда: Москва
Дата регистрации: 11.11.2008
andrewk
Суть в том, что портится кириллица в переменных окружения при запуске FPD. Ну то есть если, например, в Far написать "set", то выдаст:
rus=РусскиеБуквы

а если в FPD сделать "!set" или "!cmd/c set", то выдаст

RUS=' бЁ<Ёc' бЁ<сЄ

У меня под Win XP SP3 нет проблем при таком порядке:

1) в TC в кодировке Win 1251 набран следующий start.bat
CD c:\fox26
set rus=русские буквы
pause
FOXPROX

2) в момент остановки на паузе я вижу:
C:\fox26>set rus=Ёєёёъшх сєът&#8730;

3) снимаю с паузы, работа bat-файла продолжается и запускается Фокс.

4) В Фоксе команда
? GETENV('rus')
выдает
русские буквы

-------------
Если же я наберу "русские буквы" в 866-кодировке, то
2) в момент остановки на паузе я вижу:
C:\fox26>set rus=русские буквы

4) а Фокс
? GETENV('rus')
выдает
агббЄЁ_ ЎгЄўл

andrewk
Количество букв одинаковое, то есть, похоже, в какой-то момент происходит какая-то конвертация. Но никакой обратный CpConvert() не поможет, потому что при

set rus=АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё

в FPD потом выдаёт

RUS=__'_":&#9532;&#9578;_%_<_____''""--_T_>____ Ўў_¤_&#9474;§ЁcЄ<&#9488;-RЇабвгдежзийклмнопрс

то есть некоторые буквы превращаются в один и тот же символ "_". Никакие игры с CHCP непосредственно перед запуском foxprox.exe ситуацию не исправляют.

Проверял - у меня такого не происходит - соответствие буква в букву не теряется.
Да и у тебя, возможно, тоже - ведь проверять надо не внешнее отображение, а коды символов.



Исправлено 2 раз(а). Последнее : akvvohinc, 04.06.18 20:38
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Simple777
Насчет 10-ки. Там есть такой нюанс - надо установить в свойствах командной строки "старая версия".
Глянул у сына на ноуте, там есть "использовать предыдущую версию оболочки" – оно?

Simple777
Никогда не пробовал кириллицу через SET передавать. В конце концов можно ведь и через текстовый файл передавать данные.
Да не, речь не о передаче данных через SET, это ж я для примера написал. Вдобавок есть ограничение на объём памяти под переменные окружения. Проблема в получении таких вещей, как ComputerName, UserName в случае, когда в них кириллица. Да, в своё время не получилось это победить, сделал костыль: в батнике, запускающем FPD перед стартом foxprox.exe делаю SET>env.tmp, а в проге его читаю, сохраняю нужное, файл удаляю. Но вот сейчас понадобилась LocalAppData в bat-нике, запускаемом из FPD, и опять вспомнил про эту проблему. Возмутился своему костылю и решил спросить))

Simple777
В WIN 7 еще есть известный глюк, когда падает кодовая таблица при вызове командной строки. Но если установить в свойствах растровый шрифт, то кодовая страница сохраняется.
Что-то не понял. Сейчас нахожусь на Win7. Меняю шрифт в свойствах courier<->растр, в обоих случаях CHCP выдаёт 866, SET выводит по-русски. Если есть под рукой ссылка на обсуждение или описание проблемы, брось, пожалуйста.


Igor Korolyov
P.S. Т.е. это не сами set-ы портятся, а их вывод в консоль.
Такой пример. UserName=Андрей.
!cmd/c set UserName
USERNAME=_-¤?_c

Пишем env.vbs:
v = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%UserName%")
Set txt = CreateObject("Scripting.FileSystemObject").CreateTextFile("env.txt")
txt.WriteLine(v)
txt.Close
WScript.Echo v
Если его запустить из-под Far-а, выводит нормально на экран и в файл в cp1251.
А в FPD:
!cmd/c CScript //Nologo env.vbs
_-¤?_c
причём, содержимое файла выглядит так (в разных кодировках): 1251:
_-¤а_c
866:
_-др_c
Если этот скрипт запустить через батник, в котором предварительно переключить CHCP 1251, то содержимое файла останется таким же (asc-коды символов), а на экран выведет как это выглядит при 866.
Я к тому, что vbscript ведь наверняка это дело получает откуда-то типа реестра или типа того, и в файл выводит сам. И раз и cmd, и csсript, и wscript выдают одинаковые кривые файлы, значит "порча" происходит где-то глубже.
Более того. Если запустить bat-файл, в котором написать "START CScript //Nologo env.vbs", то есть вроде как запустить вообще новый процесс, то да, мелькнёт новое окно, но результат будет тот же. В том числе при "start /i". Ну как так-то? Чем отличается cmd, запущенный из FPD (вернее, из command.com) от запущенного «напрямую»?


Igor Korolyov
Речь идёт про переменные окружения DOS, а не фокса.
Конечно, о них. Так-то Фокс вообще не причём. Всё это происходит если запустить и просто command.com, без Фокса, просто в его IDE проверять легче))

Igor Korolyov
При работе под эмулятором доса, в эти переменные попадают аналогичные по сути Win переменные окружения.
Ну да, они и попадают. Не аналогичные, а прямо они. Можно в свойствах системы добавить переменную окружения, запустить command.com, и она там появится. В command.com обычным образом работает переменная PATH.

of63
Я не понимаю... речь о DosBox... речь о dosbox.conf что-ли... где там SETы эти ставить... задачу не осознал )
Там же, где настраиваются общесистемные (Виндовые) переменные PATH и TEMP)) На клавиатуре Win+Break, или правой кнопкой по Мой компьютер и Свойства, «Дополнительные параметры системы», вкладка Дополнительно, кнопка «Переменные среды».

of63
старый прибор сдох, да здраствует новый прибор - VFP )
... чуть менее сдохший))
Да на самом деле просто увидел, что здесь несколько людей что-то помнят о FPD, наверняка сталкивались. Вот и спросил, вдруг сходу пальцем ткнут в очевидное)) Не прокатило, да и ладно. Зато вон про
Вин10 Симпле подсказал))
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
Да и у тебя, возможно, тоже - ведь проверять надо не внешнее отображение, а коды символов.
Ну конечно же дело не в отображении. Я пишу упрощённо, чтоб понятнее было.

akvvohinc
У меня под Win XP SP3 нет проблем при таком порядке
Хм. Тогда давай по порядку. Говорю тоже на примере WinXP sp3. (Между строк: лучше не использовать для своих bat-ников и exe-шников имена, совпадающие со встроенными командами, в том числе start.bat, иначе возможны коллизии при написании без расширения).
1. Если имя пользователя (переменная UserName) и имя компьютера (ComputerName) в латинице, то добавь в свойствах системы какую-нибудь переменную VV=вася. Дальше пишу на примере VV.
2. Запусти Пуск, Стандартные, Командная строка. Ну или просто Выполнить cmd.exe. Там набери CHCP. Что выдаёт, 866/1251/437?
3. Запусти Выполнить command.com. Там CHCP что пишет?
4. И там и там напиши set. Как отображает VV, нормально?
5. В своём start.bat после SET допиши "SET VV>env.txt"
Уже потом в Фоксе:
6. Что пишет на "!chcp" ?
7. Что на "!type env.txt" ?

upd: и, кстати, приложи FoxProX.pif



Исправлено 1 раз(а). Последнее : andrewk, 04.06.18 23:47
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
akvvohinc

Сообщений: 4222
Откуда: Москва
Дата регистрации: 11.11.2008
andrewk
akvvohinc
Да и у тебя, возможно, тоже - ведь проверять надо не внешнее отображение, а коды символов.
Ну конечно же дело не в отображении. Я пишу упрощённо, чтоб понятнее было.

Нет, ты пишешь не упрощенно, а вполне однозначно:
andrewk
то есть некоторые буквы превращаются в один и тот же символ "_".

Я тоже на экране вижу одинаковые символы подчеркивания, но если отобразить коды этих внешне одинаковых подчеркиваний, то они разные.

andrewk
Хм. Тогда давай по порядку.
1) Создал vv = вася
2) выдает 866
3) ничего не выдает - "CHCP" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
4) в cmd.exe - vv=вася
в command.com - VV=ў бп
6) Активная кодовая страница: 866
7) vv=вася

Приложить FoxProX.pif не могу - у меня его нет, из start.bat запускал foxprox.exe



Исправлено 1 раз(а). Последнее : akvvohinc, 05.06.18 01:05
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
Я тоже на экране вижу одинаковые символы подчеркивания, но если отобразить коды этих внешне одинаковых подчеркиваний, то они разные.
Запуск.bat (в cp-866, об этом ниже):
set r866=АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё
FPD:
set talk off
ss = gete("r866")
?
for i = 1 to len(m.ss)
?? asc(subs(m.ss, m.i))
endf
результат:
95 95 39 95 34 58 197 216 95 37 95 60 95 95 95 95 95 39 39 34 34 7 45 45
95 84 95 62 95 95 95 95 255 246 247 95 253 95 179 21 240 99 242 60 191 45 82 244
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 224 225
95 – это asc('_')

akvvohinc
3) ничего не выдает - "CHCP" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Оп! CHCP – это команда, которая была, насколько помню, ещё в DOS 5.2, не важно. Реализована она не как внутренняя команда (типа DIR), а как исполняемый файл CHCP.COM. В WinXP, о которой говорим, находится в C:\WINDOWS\system32\. И cmd.exe, и command.com используют этот файл – если его переименовать, то и cmd напишет ошибку. У тебя command.com её просто не находит. Напиши в нём команду PATH. Там должно быть типа такого:
C:\DOCUME~1\5D8D~1>path
PATH=C:\DOCUME~1\ALLUSE~1.WIN\APPLIC~1\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\s

Если нет, то, вероятно, это тот же косяк, что у меня в примере в конце – не хватает памяти под переменные окружения и обрезает.
Либо (когда-то сталкивался, не помню в какой ОС) в переменной PATH спереди есть путь к папке, которая уже отсутствует.
Для проверки поиска в system32 можно там же написать, например, calc.exe – должен запуститься калькулятор; у тебя, видимо, не запустится.
Хм, кстати, ведь и сам command.com находится в system32... Ничё не понимаю, как у тебя вообще может работать command.com :al:

Да, но почему тогда FPD
akvvohinc
6) Активная кодовая страница: 866
не ругается?! Капец.

Попробуем понять.
8) ты точно запускаешь "в чистом виде", то есть не под каким-нибудь ДосБокс?
9) ещё раз переспрошу: рядом с foxprox.EXE (в той же папке) точно нет foxprox.PIF? Может скрытый?
10) если нет, то используется C:\WINDOWS\system32\_default.pif, брось его.
11) покажи что пишет command.com по команде SET насчёт ComSpec:
COMSPEC=C:\WINDOWS\SYSTEM32\COMMAND.COM
так?
12) как ты вообще запускаешь Фокс? Типа есть ярлык на рабочем столе к батнику start.bat или руками из TC или Far? Если ярлык, то прикрепи его тоже, файл.lnk


И вот что. Проверил у себя твои шаги.
akvvohinc
в TC в кодировке Win 1251 набран следующий start.bat
Именно в батнике сделал SET r1251=вася именно в cp-1251. И Фокс потом выдал gete('r1251') правильно. Несмотря на то, что и батник выполняется в 866 (в подтверждение этому кракозябры при PAUSE после SET), и Фокс в 866.
Дальше будет вилами по воде, прошу не ухмыляться :-[ Похоже, что в момент запуска command.com (или Фокса) «стартующая это дело подсистема» (ntvdm) полагает, что все переменные в cp-1251, а поскольку «целевой» command.com в 866, то перекодирует их. А может, это происходит при старте самого ntvdm, когда она получает переменные. Но происходит эта перекодировка как-то странно. Пишу в bat:
set r866=АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё
set r1251=<та же строка, но в cp-1251>
foxprox.exe
Как говорилось выше, FPD потом и при "!set", и при GetEnv() для r866 выдаёт чушь, а для r1251 – верный текст. Но гадство в том, что никакие CpConvert(?,?,GetEnv('r866')) не возвращают желаемый текст. И поскольку нужны никакие не SET-ы, а реальные системные переменные (ComputerName, UserName, LocalAppData, UserProfile, AppData), а их значения во время выполнения батника представлены именно в cp-866, а не в 1251, то так и не вижу другого выхода, кроме как сделать там SET>tmp.tmp, а в Фоксе его прочитать



Исправлено 3 раз(а). Последнее : andrewk, 05.06.18 08:49
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
To andrewk


Обсуждение проблемы с кодовой страницей 866 в Win 7 32

forum.foxclub.ru

Насчет Win 10.

Насчет предыдущей оболочки - не уверен, что это тот самый параметр.

Надо выбрать значок "Командная строка", щелкнуть правой кнопкой мыши и выбрать "Свойства".

Один из настраиваемых параметров - "использовать предыдущую версию командной строки".

Сейчас Win 10 нет под рукой, но по памяти, так думаю, я правильно написал.
Ratings: 0 negative/1 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Simple777
1. Спасибо за наводку №1, пошёл читать.
2. Память не подвела)) Как раз 10 под рукой, проверил, всё так, работает. Спасибо №2.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 vech alex; krin  (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика