TITLE=DOSLIB ROUTE=/dos/doslib LOCALE=hu MODIFIED=1792180394 URL=https://wiki.teletypegames.org/hu/dos/doslib L=1 #16 L=2 #18 L=3 #15 L=4 #49 L=5 https://git.teletypegames.org/dos/doslib q│ A DOSLIB a 1DOSINST, a 2GMENU, a 3BMAGIC és a 4TTGWIKI DOS-programok közös kódja q│ (C++, Open Watcom, 16 bites DOS és Win32), és a szabályok, amelyeket a q│ kódjuk követ. Mindegyik program cSOURCE/libq mappájában git subtree-ként van q│ benne, így önállóan fordul. • bRepó:0 5git.teletypegames.org/dos/doslib 1Mi van benne 1════════════ t┌──────────────────────────────┬─────────────────────────────────────────────┐ t│h Mappa t│h Tartalom t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 ccore0 t│0 I/O nélkül: szövegek és 8.3-as nevek, t│ t│0 t│0 INI-fájlok, UTF-8 és 437-es kódlap, a t│ t│0 t│0 437-es és 852-es kódlap karakterenként egy t│ t│0 t│0 bájttal (ccode_page0), CRC-32, a közös cError0. t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 cplatform0 t│0 A gép interfészei: cScreen0, cKeyboard0, cMouse0, t│ t│0 t│0 cClock0, cFileSystem0, cNetwork0, ... t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 cplatform/dos0, cplatform/win320 t│0 A megvalósításaik: videomemória, BIOS, INT t│ t│0 t│0 33h, a Watcom C-könyvtár; a Win32-konzol. t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 cnet0 t│0 FTP-kliens a cNetwork0 interfészen. t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 cui0 t│0 Rajzolás egy cScreen0-re, a t│ t│0 t│0 BIOS-billentyűkódok, listakurzor. t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 ctesting0 t│0 A tesztbuildek kampói (szkriptelt t│ t│0 t│0 billentyűk, képernyőmentés), és t│ t│0 t│0 tesztpótlékok a fejlesztőgépes t│ t│0 t│0 unit-tesztekhez. t│ t├──────────────────────────────┼─────────────────────────────────────────────┤ t│0 ctools0 t│0 A Watcom-build segédje, a rétegellenőrzés, t│ t│0 t│0 a unit-tesztfuttató, a formázó. t│ t└──────────────────────────────┴─────────────────────────────────────────────┘ 1Rétegek 1═══════ Egy program rétegekből áll; mindegyik csak az alatta lévőket használja, azokat is csak az interfészükön át: p main_*.cpp a gép: kiválasztja a platform-megvalósításokat p app/ összerakja a rétegeket p controller/ billentyűk és parancsok -> service-hívások p view/ rajzol p service/ amit a program csinál p repository/ a tárolás interfészei; a repository// valósítja meg ők» p et p model/ az adatok és a szabályaik, I/O nélkül p platform/ a program saját gépinterfészei és megvalósításaik p lib/ a DOSLIB A ctools/check_layers.py0 ezt a CI-ban ellenőrzi: melyik mappa mit include-olhat, hogy DOS- és Windows-fejléc csak a platformkódban van, hogy nincs cgoto0, és cexit()0 csak a cmain0-ben. A platform fölött minden a fejlesztőgépen is lefordul, így ott unit-tesztelhető, DOSBox nélkül. 1A kód 1═════ • C++98, amennyit az Open Watcom ismer: osztályok, tisztán virtuális interfészek, referenciák, egyszerű template-ek; nincs kivétel, RTTI, STL és C++11. • Az interfész neve azt mondja meg, mi (cFileSystem0), a megvalósításé azt, hogyan (cDosFileSystem0, cFakeFileSystem0). A függőségek a konstruktoron jönnek; konkrét objektumot csak az capp/0 és a cmain_*.cpp0 hoz létre. • A hiba egy cbool0 és egy közös cError0; a platformkódon kívül nincs globális állapot. • Fájlok csnake_case0, típusok cPascalCase0, függvények ccamelCase0, tagok cname_0; clang-format 18 a repó c.clang-format0-jával. 1Egy program frissítése 1══════════════════════ p git subtree pull --prefix=SOURCE/lib ssh://git@git.teletypegames.org:2222/do» p s/doslib master --squash Egy program cSOURCE/lib0 mappájában tett változtatás a cgit subtree push c--prefix=SOURCE/lib ... master0 paranccsal megy vissza. 1Open Watcom-buktatók 1════════════════════ • A large modell 16 bites fordítója összeomlik 25 karakternél hosszabb modulnévnél; a build c-nm0-mel levágja. • A 32 KB-nál nagyobb statikus objektum az EXE-fájlba kerül: a nagy objektumok a heapen vannak. • 16 biten a rétegeknek mérete van (far mutatók, konstruktorok, virtuális táblák): a GMENU 30-ról 45 KB-ra, a DOSINST 77-ről 90 KB-ra nőtt.