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/libmappájában git subtree-ként van benne, így önállóan fordul.
| 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ó. |
Egy program rétegekből áll; mindegyik csak az alatta lévőket használja, azokat is csak az interfészükön át:
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.
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.bool és egy közös Error; a platformkódon kívül nincs globális állapot.snake_case, típusok PascalCase, függvények camelCase, tagok name_; clang-format 18 a repó .clang-format-jával.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.
-nm-mel levágja.