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

Сообщений: 34580
Дата регистрации: 28.05.2002
andrewk
Igor Korolyov
При работе под эмулятором доса, в эти переменные попадают аналогичные по сути Win переменные окружения.
Ну да, они и попадают. Не аналогичные, а прямо они.
Имелось в виду что "физически" Process Environment устроен по разному в Винде и в Досе. В Винде переменные окружения могут быть юникодными (это определяется при старте процесса - обычно "явно" блок переменных не создают, а наследуют от запускающего процесса - и так по цепочке вплоть до explorer.exe, потому чаще всего юникод и будет использоваться), и уже АПИ функции доступа к ним могут переводить их в ANSI (при использовании *A вариантов функций).
В DOS однозначно никакого юникода нет - так что блок переменных обязан быть переведен в ANSI - и уж как именно это будет сделано эмулятором (от чего будет зависеть "кодовая страница" выбранная для перевода), и не повредятся ли при этом не-латинские символы - и составляет суть проблемы.


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

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
andrewk
Попробуем понять.

3) после того, как я выполнил CHCP по полному пути - C:\windows\system32\chcp - получил:
Текущая кодовая страница: 866

8) ДосБокса нет, запускаю start.bat из TC.

9) рядом с foxprox.EXE точно нет foxprox.PIF

10) _default.pif есть, но не в SYSTEM32, а здесь C:\WINDOWS\
yadi.sk

11) COMSPEC=C:\WINDOWS\SYSTEM32\COMMAND.COM

12) запускаю start.bat руками из TC
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
10) _default.pif есть, но не в SYSTEM32, а здесь C:\WINDOWS\
Ага, там. Файл скачал, можешь удалять.
Ну самый обычный стандартный pif, ссылается на стандартные *.nt. Почему не ищет в system32 – наверное, в связи с тем, о чём я выше писал про PATH.

К теме не относится, но раз уж дошли до pif-файлов. Если тебя всё устраивает, то и ладно.
У меня рядом с exe свой pif, который ссылается на свои Config.nt и Autoexec.nt. В стандартном Config.nt files=40, чего может сильно не хватать. Стандартный Autoexec.nt запускает mscdexnt.exe и redir.exe, которые не нужны, и устанавливает ненужную SET BLASTER. При этом не запускает русификатор клавиатуры. У меня так, работает под WinXP–Win10:
@echo off
if not '%FPD%'=='' goto ok
rem Если FPD сразу вылетает при запуске:
rem в FoxProX.pif прописать полные пути к Autoexec.nt и Config.nt
rem про Win10 читай в Запуск.bat
rem Текущий каталог во время выполнения Autoexec.nt - C:\ - возможно, это %SystemDrive%\ или %HomeDrive%\
rem К этому моменту кириллица в переменных бесповоротно искаверкана, поэтому переменные, где она может быть, оставлять нет смысла
rem Запуск.bat пишет путь к Fox-у в %FPD% и устанавливает %PATH%
rem а для запуска вручную пишем здесь
rem В PATH оставляем только нужное, чтобы освободить память для переменных окружения на потом
set FPD=C:\Rent\Fox
set path=%FPD%;%SystemRoot%;%SystemRoot%\system32
k
lh %FPD%\ResFree.com 1
if exist %FPD%\..\bin\KeyRus.com lh %FPD%\..\bin\KeyRus.com /click=off >nul
if not exist %FPD%\..\bin\KeyRus.com lh %SystemRoot%\system32\kb16.com ru
lh %SystemRoot%\system32\dosx
set FPD=



Да, собственно, тема, видимо, себя исчерпала.
Как и сказал Игорь, проблема в конвертации NTVDM-ом переменных из юникода. Пока работает запускающий батник, CMD, как нативный виндовый процесс, использует «родные» значения, в юникоде. Вот, например, test.bat:
@echo off
set A=Вася
chcp 1251
set>env1251.txt
chcp 866
set>env866.txt
set A=
В результате получим файлы с правильными текстами в соответствующих кодировках. Ну то есть, и A=Вася, и UserName конвертируются в момент обращения к ним (по SET) в кодовую страницу, выбранную в этот момент (по CHCP).
При запуске ntvdm тоже происходит конвертация, но какая-то кривая. Кто это делает: процесс, запускающий ntvdm, или сам ntvdm на старте запрашивает окружение (и либо получает криво, либо сам потом портит), или ntvdm при запуске целевой программы передаёт ей кривое окружение – уже не важно, всё это глубокие внутренности, повлиять на которые, к сожалению, не удалось.
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
andrewk
В стандартном Config.nt files=40, чего может сильно не хватать. Стандартный Autoexec.nt запускает mscdexnt.exe и redir.exe, которые не нужны, и устанавливает ненужную SET BLASTER. При этом не запускает русификатор клавиатуры.

Я просто поправил нужным образом эти стандартные файлы, и они используются для всех FPD-программ.
Ratings: 0 negative/0 positive
Re: Порча переменных окружения в FPD
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
поправил нужным образом эти стандартные файлы
Не, если чисто для себя, то конечно. Я это написал из соображений универсальности, чтоб на чужих компьютерах работало так же, как на моём.
Ratings: 0 negative/0 positive


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

On-line: 13 kornienko_ru Sergey_K  (Гостей: 11)

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