RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > %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 и убедиться, что я ничего не придумываю, можно на сайте http://kannegieser.net/ > > 2vladest: Только что зашел на эту страничку, там ко всем программам есть сорцы! Так что, у самого автора > можно не консультироваться, а разобраться во всем самому! > > WBR, > Валерий >
_, _, _,
/ \ (_ / ~ )
\ / , ) / /
~ ~ ~~~
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.