DJGPP ^^^^^ Tak kompiler máme za sebou. Ted něco napíšu o jeho dosáckem portu. Ten začal dělat Dj Delorie. Jak on píše začal o tom uvažovat v roce 1986(tehdy se jmenovalo djgcc), kdy se ptal RMS, jestli GNU plánuje dosácký port. Ten se mu ale jen vysmál, že na tak ošklivý OS GNU nikdy dělat nebude. Napřed trochu historie. Jako první verzi zkompiloval gcc pod ICS Unixem na 386/16. Přepsal systémová volání, potom slinkoval s ICS c knihovnou a pomocí programu výsledek předelal do 32 bitového EXE pro Phar Lab extender. Protože ale Phar Lab neměl virtualní pamět, napsal vlastní extended go32. A byla na světě první verze gcc(1.32) která sama sebe zkompilovala. Potom vzal BSD zdrojáky a preportil c knihovnu pro DOS. První použitelná verze byla 1.03. Práce mu trvala opravdu dlouho, protože 1.03 vyšla před třema rokama. Verze 1 používala go32. Ten ale nebyl zrovna nejlepší. Vyznačoval se velkou nesnášenlivostí (neběžel ani pod emm386). Potom přidal G++ a přejmenoval výtvor na DJGPP. Verze 1.05 už podporovala VCPI, 1.10 DPMI a 1.11 přidala DPMIEMU. Byl tu ale pořád jeden nedostatek. Go32 se kompilovalo v Borlandech a to nebylo zrovna nejlepší - vůbec to nebyl IMO dobrý extender. Dost nesnášenlivý. Verze 1.03 mě tehdy dost zklamala. Prací na odstranění tohoto nedostatku začala pro verzi 2. Jako první napsali assembler, který vygeneruje 16ti bitový zavadeč. Tento zavaděč ale vyžadoval DPMI a tak aplikace už zase neběžely všude. A tak se go32 používalo dál, jako DPMI server. To se vyřešílo až pomoci CWSDPMI, to je dost dobrý DPMI server dodávaný z djgpp. Zavaděč ho umí sám spustit když dpmi není k dizpozici, takže vpodstatě to vypadá skoro jako extender, ale není. Vyvinout verzi 2 trvalo celé dva roky. Byla vypuštěna v polovině roku 1996. Verzi 2 jsem si ztáhnul jen tak ze zvedavosti a opravdu mě nadchla. Jen několik parametrů: Plně 32 bitový (jako Watcom) Funguje jako DPMI client (tedy se snáší z windowsema atd) Nepoužívá extender (ušetří se cca 200KB za něco jako dos4gw. Taky by to mělo být rychlejší - uštří se context switch mezi programem a extenderem.) Má vlastní DPMI server - takže stejne .exe navíc ale jenom 20KB místo 200.. DPMI server umí swapovat..tedy 4GB ram... Podpora win95kových dlouhých názvů atd.. To dělá z djgpp nejlepší mně známý kompiler pro dos. Je velice podobný watcomu. Vyznačuje se opravdu slušnou stabilitou. Testoval jsem ho pod windows, čistým dosem, emm386, qemm386, qemm386 s jeho DPMI serverem, Linuxovým dosemulátorem a všude fungoval skvěle. Autoři uvádějí problémy s novell dos DPMI serverem, který ma bugy a tak to moc nefunguje. Stačí ho jenom vypnout a už to funguje. Potobný problém je se starým QEMM DPMI serverem. Poslední verze je dneska 2.01. Ta odstraňuje pár chyb, které byly ve verzi 2. Zejména kolem dlouhých názvů ve woknech. Ve srovnání s watcomem mě opravdu žádná výhoda watcomu nenapadá. U Borlandů jsem jednu vymyslel. To je rychlost volání služeb dosu/biosu. Každé takové volání si vynucuje několikanásobné přepínaní mezi v86 a realným modem. (to je u každé DPMI aplikace). Takže čtení souboru je asi o 10% pomalejší. Druhá, co mě napadí je velikost exe souboru. U klasického hello word jde velikost stáhnout na cca 10KB což ke sice hodně ale je v tom celý 32 bitový zavaděč. Oproti 200KB dos4gw to je ale pořád krásné. Bylo samozdřejmě přeportěno hodně programů pod GNU (EMACS, indent, make ...) ale vzniklo i hodně zajímavých nových dosových věcí: Allegro - grafická knihovna specializovaná na hry a dema. Umí jenom 256 barevný mody ale zato je dost rychlá, umí hodně modu X ( třeba 256x256), práci s fonty, sprajty, zvuky (SB), VESA mody ale má i svoje drivery pro S3, tridenta atd.. v případě, že vesa není, podporuje VESA2, 3D grafiku, jednoduchá GUI, časování atd. Rhide - To je docela věrná kopie Borlandího prostředí. Je sice často plná bug (alespoň poslední verze, kterou jsem testoval..nepoužívám ho) Umí skoro všechno co borland9 - debugovaní, syntax highigting ( pro C, C++, pascal, ASM a další, co si nadefinujete) atd.. Volá samozdřejmě externí kompiler, takže to není taková prasárna. A ma některá hezká rozšíření, jako další textové mody apod. Gpc - Pascal byl předělán tak, aby se co nejvíc podobal borlandímu. Grx - něco jako gnu verze bgiček. Je pomalejší než alegro. Stejně v tom jde ale napsat akční hry. Umí ale víc bgi style grafickej funkcí, taky pracuje s VESA a má svoje drivery a umí i černobíle, 16ti barevné, 256ti barevné, hi color a truecolor mody. Djp - Velice kvalitní pakovač exáčů-rozbalí 10MB do sekundy, takže ja tím mam zabalenej i kompiler jptui - celkem hezke GUI co vypadá jako z nortonových utilit mikmod - player modu apod. Nechá se použít pro zvuk ve hrách/demách ta2as - převaděč klasického assembleru to AT&T syntaxe djgpptsr- ukázka, že v djgpp lze psát i rezidenty. cwsdpmi - velmi kvalitní DPMI server pmode - port watcomího extenderu, když nechcete cwsdpmi(víc nesnášenlivý než cwsdpmi ale trochu rychlejší. Má víc bug) xlib - port borlandí xliby jlib - jiná herní knihovna midas - přeportěný zvukový server (zatím v alpha verzi) A samozdřejmě fůra dalších (jako třeba turbovision, emulace BGI, 3D knihovny apod). Pokud chcete nějaký příklad programu pod DJGPP můžete zkusit třeba Quake, demo Hard Rox, Info-ZIP (teď archivuje i dlouhé názvy), GhostScript, Executor - emul8tor MACu, WatTCP, Xemu, DESQview/X developers kit, náš zoomer XaoS, naše demo BB atd. Djgpp funguje také pod okny ale to jsem netestoval. Ti, co dočetli až sem se možná už zajímají o tak, jak se DJGPP instaluje výheň