for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 82
Дата: 04.06.18 16:41:33ОтветитьЦитировать
Давно столкнулся с этой проблемой. Сделал костыль, но сейчас опять всплыло.
Суть в том, что портится кириллица в переменных окружения при запуске 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

Сообщений: 19764
Дата: 04.06.18 16:47:44ОтветитьЦитировать
Какая ось?
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 82
Дата: 04.06.18 16:56:53ОтветитьЦитировать
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

Сообщений: 19764
Дата: 04.06.18 17:02:27ОтветитьЦитировать
Насчет 10-ки. Там есть такой нюанс - надо установить в свойствах командной строки "старая версия".

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

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



Исправлено: Simple777, 04.06.18 17:03
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
Igor Korolyov

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


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




Исправлено: Igor Korolyov, 04.06.18 18:26
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
of63

Сообщений: 11806
Откуда: Н.Новгород
Дата: 04.06.18 18:35:46ОтветитьЦитировать
А как вы читаете переменную окружения 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") тоже в ошибку уходит...



Исправлено: of63, 04.06.18 18:39
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
Simple777

Сообщений: 19764
Дата: 04.06.18 18:44:03ОтветитьЦитировать
Однако тема FPD нынче в тренде.

Назад, в будущее? [sm021] :danc: [sm128]
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
of63

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

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



Исправлено: of63, 04.06.18 19:05
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
of63

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

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



Исправлено: of63, 04.06.18 20:08
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
Simple777

Сообщений: 19764
Дата: 04.06.18 20:05:34ОтветитьЦитировать
of63
задачу не осознал )

Технологии развиваются - шапками не закидаешь. [sm128]
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
Igor Korolyov

Сообщений: 31943
Дата: 04.06.18 20:26:44ОтветитьЦитировать
Вряд ли досбокс - скорее всего речь про обычный ntvdm - как в обычных x86 виндах (ещё и XP) досовский антиквариат и запускается...


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
of63

Сообщений: 11806
Откуда: Н.Новгород
Дата: 04.06.18 20:28:15ОтветитьЦитировать
Технологии верят только слезам деньгам, и их фрикам

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

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

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



Исправлено: of63, 04.06.18 20:40
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
akvvohinc

Сообщений: 2791
Откуда: Москва
Дата: 04.06.18 20:35:55ОтветитьЦитировать
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 ситуацию не исправляют.

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



Исправлено: akvvohinc, 04.06.18 20:38
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 82
Дата: 04.06.18 22:47:00ОтветитьЦитировать
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
Автор

Сообщений: 82
Дата: 04.06.18 23:15:18ОтветитьЦитировать
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



Исправлено: andrewk, 04.06.18 23:47
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
akvvohinc

Сообщений: 2791
Откуда: Москва
Дата: 05.06.18 01:04:23ОтветитьЦитировать
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



Исправлено: akvvohinc, 05.06.18 01:05
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 82
Дата: 05.06.18 08:44:22ОтветитьЦитировать
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, а в Фоксе его прочитать



Исправлено: andrewk, 05.06.18 08:49
Ratings: 0 negative/0 positive

Re: Порча переменных окружения в FPD
Simple777

Сообщений: 19764
Дата: 05.06.18 09:18:00ОтветитьЦитировать
To andrewk


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

forum.foxclub.ru

Насчет Win 10.

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

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

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

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

Re: Порча переменных окружения в FPD
andrewk
Автор

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



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

On-line: 35 of63 Simple777  and Guests: 33


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