RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : кажется, многие ничего не поняли, тогда объясняю :)


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : valerius
To : ;jgf c eifvb
Subj : кажется, многие ничего не поняли, тогда объясняю :)

> %subj%

Так... Кажется, никто не врубился в то, что я написал выше, и кое-кто подумал, что сам
я пишу все это спьяну %)

Попытаюсь объяснить. Просто, отвечая vladest'у и прочитав свой последний мессадж,
я обнаружил, что у меня возникла гениальная мысль и решил ею поделитьтся с народом,
возможно, зря :)

Многие из нас держали в руках загрузочный компакт с eComStation (хотя есть такие
уникумы, что испытывают аллергию не только к e-Co, но и к eCS, а потому ее
игнорируют. И поэтому не знают о многих фичах eCS. Для них делается данное разъяснение :))

На загрузочном диске с eCS, если мы заглянем внутрь config.sys, то увидим знакомые
директивы, окруженные трудночитаемыми вставками, из-за которых файл смотрится очень
коряво:

[===============cut config.sys====================]

REM #########################################
REM JFS (off/5Mi/40Mi)

^JFS:"--":REM=^IFS=E:\OS2\JFS.IFS /C:^JFSCACHE:*****^ /AUTOCHECK:^AUTOCHECK:"normal":*^^AUTOCHECK:"forced":+*^ /L:1000,30,30


REM #########################################
REM FAT32 (off/read/r+w). readonly irgnored for now.

^FAT32:"off":REM=^IFS=E:\OS2\FAT32.IFS /Q /CACHE:2048
^FAT32:"off":REM=^CALL=E:\OS2\CACHEF32.EXE


REM #########################################
REM RamFS (off/99M/99M resident)
REM create & label & make temp directory

^RAMFS:"99":IFS=D:\extra\ramfs.ifs /!3 /S:100M^
^RAMFS:"99R":IFS=D:\extra\ramfs.ifs /!3 /S:100M /R^
^RAMFS:"---":REM ^call=D:\extra\ramdisk_.exe m: RAMFS
^RAMFS:"---":REM ^call=e:\os2\cmd.exe /c "(label m:RAMFS) && (mkdir m:\tmp)"


REM #########################################
REM CMD/TShell/PMShell/WPS/FC2/...

MAXWAIT=1
^TSHELL:TRUE:MAXWAIT=4^
MEMMAN=SWAP,PROTECT
^TSHELL:TRUE:MEMMAN=NOSWAP,PROTECT,COMMIT^
PROTSHELL=E:\OS2\CMD.EXE
^SHELL:1:PROTSHELL=E:\OS2\CMD.EXE^
^SHELL:2:PROTSHELL=D:\EXTRA\FC2\FC.EXE^
^SHELL:3,4,5:PROTSHELL=E:\OS2\PMSHELL.EXE^
^SHELL:6:PROTSHELL=D:\EXTRA\TSHELL\TSHELL.EXE^
^TSHELL:FALSE:SWAPPATH=E:\ 100000 2048^
^TSHELL:FALSE:SET C1=SDDGRADD^
^TSHELL:FALSE:SET GRADD_CHAINS=C1^
^TSHELL:FALSE:SET GREEXT=SDDGREXT^
SET RUNWORKPLACE=E:\OS2\PMSHELL.EXE
^SHELL:3:SET RUNWORKPLACE=E:\OS2\CMD.EXE^
^SHELL:4:SET RUNWORKPLACE=D:\EXTRA\FC2\FC.EXE^
^SHELL:5:SET RUNWORKPLACE=E:\OS2\PMSHELL.EXE^
^SHELL:6:SET RUNWORKPLACE=NONE^
^TSHELL:TRUE:SET VIO_SVGA=DEVICE(BVHVGA)^
^TSHELL:FALSE:SET VIO_SVGA=DEVICE(BVHVGA,BVHSVGA)^
^TSHELL:FALSE:DEVICE=E:\OS2\BOOT\PMDD.SYS^
^TSHELL:FALSE:DEVICE=E:\OS2\SDDHELP.SYS /Q^
^TSHELL:FALSE:DEVICE=E:\OS2\GRADD.SYS^

[===============cut config.sys====================]

По сути, это директивы препроцессора для config.sys, но мне не очень нравится его
корявый синтаксис -- вид конфигов должен вызывать эстетические чувства :)

Я предлагаю заменить

[===============cut config.sys====================]
^TSHELL:TRUE:SET VIO_SVGA=DEVICE(BVHVGA)^
^TSHELL:FALSE:SET VIO_SVGA=DEVICE(BVHVGA,BVHSVGA)^
^TSHELL:FALSE:DEVICE=E:\OS2\BOOT\PMDD.SYS^
^TSHELL:FALSE:DEVICE=E:\OS2\SDDHELP.SYS /Q^
^TSHELL:FALSE:DEVICE=E:\OS2\GRADD.SYS^
[===============cut config.sys====================]

на более читаемый синтаксис, например, как у препроцессора C:

[===============cut config.sys====================]
#ifdef TSHELL
SET VIO_SVGA=DEVICE(BVHVGA)
#else
SET VIO_SVGA=DEVICE(BVHVGA,BVHSVGA)
DEVICE=E:\OS2\BOOT\PMDD.SYS
DEVICE=E:\OS2\SDDHELP.SYS /Q
DEVICE=E:\OS2\GRADD.SYS
#endif
[===============cut config.sys====================]

Синтаксис PPWizard еще удобнее и читаемее, в нем можно делать,
например, так (за идею использовать PPWizard спасибо Андрею Белову
и его FAQ'у про то, как не переустанавливать OS/2):

[===============cut config.sys====================]
#OneLine ""
SET HIBEROPT=/c
#ifndef NO_TVFS
/u1"C:\OS2\TVFS\TVKILL" /u2"cmd /c tvfsinit"
#endif
#OneLineEnd
RUN=<$C>\OS2\SYSTEM\HYBERSET.EXE
[===============cut config.sys====================]

или так:

[===============cut config.sys====================]
#OneLine ""
LIBPATH=
C:\OS2\SHDLL;<$C>\OS2\DLL;
#ifndef NO_LAN
E:\IBMLAN\NETLIB;E:\MUGLIB\DLL;
#endif
; Retain an MPTN subset for limited functionality (sockets, etc.)
E:\MPTN\DLL;E:\ibmcom\dll;C:\OS2\TCPIP\dll;
#ifndef NO_MPTS
C:\OS2\TCPIP\INJOY;C:\OS2\NETSCAPE;E:\OS2APPS\NETSCAPE\PROGRAM;
#endif
...
#OneLineEnd
[===============cut config.sys====================]

(обратите внимание на директиву #OneLine, а также на возможность комментариев,
которые удаляет препроцессор).

А теперь про технологию, лежащую в основе всего этого. Она называется os2csm
и создана Veit'ом Kannegieser'ом, автором многих замечательных программ, в част-
ности, memdisk'а и бут-менеджера VPart. Как пишет сам Kannegieser, идея появилась
в какой-то проге, еще времен DOS'а, которая изменяла досовый config.sys в памяти.
Каннегизер решил реализовать подобную идею в OS/2, для чего он написал низкоуровневую
программу, которая при загрузке os2ldr показывает меню, и, согласно выбранным опциям, опреде-
ляет значения переменных, по сути препроцессорных символов. Потом эти символы подставляются
в config.sys аналогом директивы #ifdef.

Она заменяет os2ldr на себя, а оригинальный os2ldr переименовывает в os2ldr.bin.
При загрузке OS/2 вместо os2ldr грузится os2csm и делает так, что все вызовы os2boot
ею перехватываются, в config.sys прописываются через каждые 512 байт (каждый сектор файла
config.sys) комментарии спец. вида, и по ним, как по сигнатуам, определяется, что читаются
именно данные из config.sys. В моей идее главная проблема -- как избавиться от этих сигнатур,
ведь мы хотим, чтобы config.sys выглядел "эстетичнее" :).

os2csm активизируется, когда ядро вызывает функции в os2boot (так называемый mini file system
driver, через который ядро грузит config.sys, драйвера и IFS'ы до загрузки hpfs.ifs) и заменяет
вставки типа "^TSHELL:FALSE:...^" (-- это фактически, аналог директивы #ifdef) на то, что полагается.

Если бы к возможностям этого препроцессора еще добавить директиву, аналогичную #include... -- то проблема
Владеста решается.

На этом закончу, скачать os2csm и убедиться, что я ничего не придумываю, можно на сайте kannegieser.net

2vladest: Только что зашел на эту страничку, там ко всем программам есть сорцы! Так что, у самого автора
можно не консультироваться, а разобраться во всем самому!

WBR,
Валерий


Sun 21 May 2006 17:51 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.10) Gecko/2005




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.