EN /HU | Belépés

DOSLIB

A DOSLIB a DOSINST, a GMENU, a BMAGIC és a TTGWIKI DOS-programok közös kódja (C++, Open Watcom, 16 bites DOS és Win32), és a szabályok, amelyeket a kódjuk követ. Mindegyik program SOURCE/lib mappájában git subtree-ként van benne, így önállóan fordul.

Mi van benne

Mappa Tartalom
core I/O nélkül: szövegek és 8.3-as nevek, INI-fájlok, UTF-8 és 437-es kódlap, a 437-es és 852-es kódlap karakterenként egy bájttal (code_page), CRC-32, a közös Error.
platform A gép interfészei: Screen, Keyboard, Mouse, Clock, FileSystem, Network, ...
platform/dos, platform/win32 A megvalósításaik: videomemória, BIOS, INT 33h, a Watcom C-könyvtár; a Win32-konzol.
net FTP-kliens a Network interfészen.
ui Rajzolás egy Screen-re, a BIOS-billentyűkódok, listakurzor.
testing A tesztbuildek kampói (szkriptelt billentyűk, képernyőmentés), és tesztpótlékok a fejlesztőgépes unit-tesztekhez.
tools A Watcom-build segédje, a rétegellenőrzés, a unit-tesztfuttató, a formázó.

Rétegek

Egy program rétegekből áll; mindegyik csak az alatta lévőket használja, azokat is csak az interfészükön át:

TXT
main_*.cpp     a gép: kiválasztja a platform-megvalósításokat
app/           összerakja a rétegeket
controller/    billentyűk és parancsok -> service-hívások
view/          rajzol
service/       amit a program csinál
repository/    a tárolás interfészei; a repository/<fajta>/ valósítja meg őket
model/         az adatok és a szabályaik, I/O nélkül
platform/      a program saját gépinterfészei és megvalósításaik
lib/           a DOSLIB

A tools/check_layers.py ezt a CI-ban ellenőrzi: melyik mappa mit include-olhat, hogy DOS- és Windows-fejléc csak a platformkódban van, hogy nincs goto, és exit() csak a main-ben. A platform fölött minden a fejlesztőgépen is lefordul, így ott unit-tesztelhető, DOSBox nélkül.

A kód

  • 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 (FileSystem), a megvalósításé azt, hogyan (DosFileSystem, FakeFileSystem). A függőségek a konstruktoron jönnek; konkrét objektumot csak az app/ és a main_*.cpp hoz létre.
  • A hiba egy bool és egy közös Error; a platformkódon kívül nincs globális állapot.
  • Fájlok snake_case, típusok PascalCase, függvények camelCase, tagok name_; clang-format 18 a repó .clang-format-jával.

Egy program frissítése

SH
git subtree pull --prefix=SOURCE/lib ssh://git@git.teletypegames.org:2222/dos/doslib master --squash

Egy program SOURCE/lib mappájában tett változtatás a git subtree push --prefix=SOURCE/lib ... master paranccsal megy vissza.

Open Watcom-buktatók

  • A large modell 16 bites fordítója összeomlik 25 karakternél hosszabb modulnévnél; a build -nm-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.