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

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

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

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


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

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

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

Сообщений: 82
Дата: 06.06.18 11:58:51ОтветитьЦитировать
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  
    
  :ok  
  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

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

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

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

Сообщений: 82
Дата: 06.06.18 21:09:44ОтветитьЦитировать
akvvohinc
поправил нужным образом эти стандартные файлы
Не, если чисто для себя, то конечно. Я это написал из соображений универсальности, чтоб на чужих компьютерах работало так же, как на моём.
Ratings: 0 negative/0 positive



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

On-line: 38 of63 Simple777  and Guests: 36


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