TITLE=GMENU ROUTE=/dos/gmenu LOCALE=hu MODIFIED=1792417593 URL=https://wiki.teletypegames.org/hu/dos/gmenu L=1 #16 L=2 #17 L=3 https://git.teletypegames.org/dos/gmenu L=4 https://git.teletypegames.org/dos/gmenu/releases/download/v2.3.0/GMENU-v2.3.0.zip L=5 https://git.teletypegames.org/dos/gmenu/releases/download/v2.3.0/GMENUPRG.EXE L=6 https://git.teletypegames.org/dos/gmenu/releases/download/v2.3.0/GMEDIT.EXE L=7 https://git.teletypegames.org/dos/gmenu/releases L=8 https://github.com/open-watcom/open-watcom-v2 q│ A GMENU egy DOS-program (C++, Open Watcom, 8086-os kód, kb. 45 KB). Egy q│ könyvtár (alapból c\COLLECTq) játékmappáit listázza címmel, műfajjal, évvel és q│ játékosszámmal, és elindítja a kiválasztott játékot. Amíg a játék fut, nincs q│ a memóriában, így a játék megkapja az összes szabad memóriát. q│ q│ Az 1.1.1-ig NASM assemblyben készült, és a programjai c.COMq fájlok voltak; a q│ 2.0.0 ugyanez a menü C++-ban újraírva, a 1DOSINST eszközláncával, a q│ programjai pedig a cGMENUPRG.EXEq és a cGMEDIT.EXEq. A 2.1.0 rétegekbe szervezve q│ épül a 2DOSLIB-re, a DOSINST-tel közös könyvtárra; a menü ugyanaz. A 2.3.0 a q│ gyorsítótárából indul, a játékmappák bejárása nélkül, és a játékok számát q│ csak a szabad memória korlátozza. A programtárban és a játéklista címsorában q│ GMenu Launcher a neve; a mappa és a programok neve nem változott. • bRepó:0 3git.teletypegames.org/dos/gmenu • bLetöltés, v2.3.0:0 4GMENU-v2.3.0.zip · csak a programok: 5GMENUPRG.EXE, 6GMEDIT.EXE • bKiadások:0 7git.teletypegames.org/dos/gmenu/releases i[Kép: GMENU játéklista] r────────────────────────────────────────────────────────────────────────────── 1Mit tud 1═══════ • bJátéklista0 minden mappa cMETADATA.INI0-jéből (vagy a cNAME.TXT0 első sorából, vagy a mappanévből). • bKeresés0 gépelés közben, a címekben, a mappanevekben és a leírásokban. • bSzűrők0 műfajra (F2), évre vagy évtizedre (F3) és játékosszámra (F4); csak a kedvencek (F7); csak a cMETADATA.INI0 nélküli játékok (Shift+F7). • bRendezés0 cím, év, műfaj vagy a legtöbbet játszott szerint (F9); véletlen játék (F10). • bKedvencek0 (F6) és az butolsó 10 játszott játék0 (F8); játékonként a játszások száma és az utolsó játék dátuma. • bRészletek oldal0 (Enter): az összes adat, görgethető, többsoros leírás és a játék indítható c.COM0 / c.EXE0 / c.BAT0 fájljai. • bJáték0 Ctrl+Enterrel vagy dupla kattintással (a cRUN0 parancs), bsetup Ctrl+S-sel. • bSzerkesztő0 (Ctrl+E, cGMEDIT.EXE0): űrlapon hozza létre vagy szerkeszti a játék cMETADATA.INI0-jét. • Billentyűzet és egér, a görgővel együtt (CuteMouse WheelAPI). Az F1 az összes billentyűt listázza. i[Kép: GMENU részletek oldal] 1Telepítés 1═════════ Hálózatos DOS-gépen a legegyszerűbb a 1DOSINST: a cDOSINST INSTALL GMENU0 a legfrissebb kiadást a cC:\APPS\GMENU0 alá telepíti, újra futtatva frissíti. Kézzel: 1. Töltsd le a cGMENU-vX.Y.Z.zip0-et a kiadások közül, és csomagold ki a DOS-meghajtóra, például cC:\APPS\GMENU\0 alá (ez az alapértelmezett, a DOSINST is ide telepít). A menünek a cGMENU.BAT0 és a cGMENUPRG.EXE0 kell, a szerkesztéshez a cGMEDIT.EXE0 is. 2. Minden játék a saját mappájába kerüljön, egy közös könyvtár alá, mindegyikben egy cMETADATA.INI0-vel (vagy legalább egy cNAME.TXT0-vel): p C:\COLLECT\ p DOOM\ p METADATA.INI p DOOM.EXE p PRINCE\ p NAME.TXT <- első sor: "Prince of Persia" p PRINCE.EXE 3. A játékkönyvtárat a cGMENU.BAT0-ban állítsd be (a cGMENUPRG.EXE0 sor utolsó argumentuma, a c/B0 maradjon): p %GMENU%PRG.EXE /B \COLLECT Másik meghajtó is jó (cD:\GAMES0). A c/A0 a részletek oldalon az összes fájlt mutatja, nem csak a futtathatókat. 4. Indítás: cGMENU0. A cGMENU.BAT0 abból a névből találja meg a programjait, amellyel elindították, így a mappa bárhol lehet; c.BAT0 kiterjesztéssel indítva (például Total Commanderből vagy Windows 98-ról) ezt nem tudja, és a cC:\APPS\GMENU0-ből futtatja őket (a cset GMENU=0 sor: ezt írd át, ha a menü máshol van). DOSBoxban indulhat bootkor is: p [autoexec] p mount c /Users/.../Dosbox p c: p path Z:\;C:\APPS\GMENU p gmenu Telepített menü frissítéséhez másold a mappájába a cGMENUPRG.EXE0-t, a cGMEDIT.EXE0-t és a cGMENU.BAT0-ot, és a cGMENU.BAT0-ban állítsd be újra a játékkönyvtárat. 1.x-ről frissítve az új cGMENU.BAT0 kötelező, mert a régi a cGMENUPRG.COM0-ot indítja; a régi c.COM0 fájlok törölhetők. A DOSINST mindezt elvégzi, a törlést is. 1METADATA.INI 1════════════ Minden sor opcionális, a kulcsok kis- és nagybetűre nem érzékenyek, a c[GAME] és a c;0-vel kezdődő sorok nem számítanak: p [GAME] p NAME=Doom p GENRE=Shooter p YEAR=1993 p PLAYERS=1-4 p DESCRIPTION=The whole description in one line... p DESCRIPTION=A second DESCRIPTION line starts a new line.\nSo does \n inside » p the text. p RUN=DOOM.EXE -nomusic p ARGS=-skill 3 p SETUP=SETUP.EXE t┌─────────────┬──────────────────────────────────────────────────────────────┐ t│h Kulcs t│h Jelentés t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cNAME0 t│0 A cím. Ha nincs: cNAME.TXT0, aztán a mappanév. t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cGENRE0, cYEAR0 t│0 A listában látszik, a szűrők és a rendezés használja. t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cPLAYERS0 t│0 Szám (c20), tartomány (c1-40) vagy nyitott (c2+0). A szűrő azokat t│ t│0 t│0 a tartományokat adja, amelyek tartalmazzák a számot. t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cDESCRIPTION0 t│0 A c\n0 sortörés, a c\\0 backslash; több sor sortöréssel fűződik t│ t│0 t│0 össze. t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cRUN0 t│0 Amit a Ctrl+Enter indít: a játék mappájának egy fájlja, t│ t│0 t│0 opcionális argumentumokkal. t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cARGS0 t│0 A cRUN0-hoz fűződik, akkor is, ha a cRUN0 fájlt a részletek t│ t│0 t│0 oldalról indítod. t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 cSETUP0 t│0 A setup parancs, Ctrl+S indítja. t│ t└─────────────┴──────────────────────────────────────────────────────────────┘ A fájlok lehetnek UTF-8-ak (BOM-mal vagy anélkül) vagy 437-es kódlaposak. Az UTF-8 betűk 437-es kódlapra konvertálódnak; amelyik nincs benne (cő0, cű0, cÁ0), az a legközelebbi lesz (cö0, cü0, cA0). bSzerkesztés a GMEDIT-tel:0 a Ctrl+E egy űrlapot nyit a mezőkkel. Új fájl abból indul, amit a mappa elárul (cNAME.TXT0, az egyetlen futtatható mint cRUN0, az első cSETUP*0 / cINSTALL*0 mint cSETUP0). Mentéskor csak a megváltozott értékek íródnak át; a kommentek, a többi kulcs és az érintetlen értékek maradnak. F2 ment, Esc elvet. Önállóan is fut: cGMEDIT C:\COLLECT\DOOM0. 1Hogyan működik 1══════════════ A cGMENU.BAT0 egy ciklus a program körül, így a menü sosem marad a memóriában a játék alatt: 1. A cGMENU.BAT0 lefuttatja a cGMENUPRG.EXE /B0-t a játékkönyvtárral. 2. Játékválasztáskor a program megírja a saját mappájába a cGMENURUN.BAT0-ot (meghajtó- és mappaváltás, a játék indítása, visszaváltás), és kilép. 3. A cGMENU.BAT0 meghívja a cGMENURUN.BAT0-ot, aztán újraindítja a menüt — ugyanazon a játékon, ugyanazzal a kereséssel, szűrőkkel és rendezéssel. A Ctrl+E ugyanígy működik, csak a cGMENURUN.BAT0 a cGMEDIT.EXE0-t indítja. c/B nélkül a program csak annyit ír ki, hogy a cGMENU.BAT0-tal kell indítani. Indításkor a menü a cGMENU.IDX0-ből veszi a játékokat, és nem nézi meg a játékmappákat, így lassú gépen, sok játékkal is gyorsan indul; csak a kiválasztott játékot ellenőrzi, így a Ctrl+E-vel szerkesztett adat azonnal látszik. A bejárás — az első indításkor, ha nincs cGMENU.IDX0 vagy más játékkönyvtáré, illetve bCtrl+F0-re — listázza a mappákat, csak azokat a cMETADATA.INI0 / cNAME.TXT0 fájlokat olvassa újra, amelyeknek a dátuma, ideje vagy mérete változott, és újraírja a cGMENU.IDX0-et. Új, törölt vagy átnevezett játékmappa a Ctrl+F után jelenik meg. Futás közben létrejövő fájlok, a cGMENUPRG.EXE0 mellett (a formátumuk az 1.1.0 óta nem változott, így a frissített menü megtartja az állapotát; a cGMENU.IDX0 a 2.3.0-ban új verziót kapott, ezért a frissítés utáni első indítás egyszer bejárja a mappákat): t┌───────────┬────────────────────────────────────────────────────────────────┐ t│h Fájl t│h Tartalom t│ t├───────────┼────────────────────────────────────────────────────────────────┤ t│0 cGMENU.SEL0 t│0 Utolsó játék, keresés, szűrők, rendezés, legutóbbi játékok t│ t├───────────┼────────────────────────────────────────────────────────────────┤ t│0 cGMENU.FAV0 t│0 Kedvencek, soronként egy mappanév t│ t├───────────┼────────────────────────────────────────────────────────────────┤ t│0 cGMENU.STA0 t│0 Játékonként a játszások száma és az utolsó játék dátuma t│ t├───────────┼────────────────────────────────────────────────────────────────┤ t│0 cGMENU.IDX0 t│0 A játékmappák és a cMETADATA.INI0 / cNAME.TXT0 adataik t│ t│0 t│0 gyorsítótára; a Ctrl+F újraépíti, bármikor törölhető t│ t└───────────┴────────────────────────────────────────────────────────────────┘ 1Fordítás és tesztek 1═══════════════════ A fordításhoz 8Open Watcom v2 kell (a snapshot kiadásban macOS-es és linuxos binárisok is vannak; ha nem a c~/.local/opt/watcom0 alatt van, a cWATCOM0 változó mutasson rá): p cd SOURCE p ./build.sh # a GMENUPRG.EXE és a GMEDIT.EXE a szülőmappába p ./build.sh test # a tesztváltozatok a SOURCE/build/ alá A forrás rétegekből áll, mindegyik csak az alatta lévőket használja, azokat is csak interfészen át (a szabályok a 2DOSLIB oldalán): cmodel0 (játékok, szűrők, munkamenet, METADATA.INI), crepository0 (a fájlok: a játékmappák a cGMENU.IDX gyorsítótárral, kedvencek, statisztika, munkamenet, cGMENURUN.BAT0), cservice0 (a játéklista, az indítás, a választók, a GMEDIT szerkesztése), ccontroller0 és cview0 (az oldalak), capp0 (összerakja őket), a DOS-os belépés pedig a cmain_gmenu.cpp0 és a cmain_gmedit.cpp0. A cSOURCE/lib0 a DOSLIB. Az alapértelmezett játékkönyvtár a cgmenu.ini0 ccollect_dir0 kulcsából jön. A unit-tesztek DOSBox nélkül, a fejlesztőgépen futnak, a teljes menü és a szerkesztő is, szkriptelt billentyűkkel, memóriabeli lemezen; előtte a rétegeket is ellenőrzik: p SOURCE/test/unit/run.sh A képernyőtesztek DOSBoxban futtatják a tesztváltozatokat: a cSOURCE/test/cases.txt0 minden esetének billentyűsorozata a cTESTKEYS.TXT0-be kerül, és amikor elfogy, a program elmenti a képernyőt, amit a teszt a cSOURCE/test/expected/0 tartalmával vet össze. Python 3, Open Watcom és DOSBox (Staging vagy 0.74) kell hozzájuk: p python3 SOURCE/test/run.py # minden eset p python3 SOURCE/test/run.py --update # a mostani eredmény elfogadása 1Kiadások 1════════ A Woodpecker minden pusht lefordít és letesztel. Egy cvX.Y.Z0 tag ezen felül Gitea-kiadást is publikál, a cRELEASE_NOTES.md0 szövegével és három fájllal: a telepítéshez a cGMENU-vX.Y.Z.zip0, a telepített menü frissítéséhez a cGMENUPRG.EXE0 és a cGMEDIT.EXE0. Ugyanez a tag a menüt a 1DOSINST programtárába (cftp://ftp.teletypegames.org/APPS0) is felteszi, az cINFO.INI0-ben a tag a verzió. A teszt lépés a Gitea-registry cdos-ci0 image-ében fut (cgit.teletypegames.org/build/dos-ci:bookworm0), amelyben az eszközlánc előre telepítve van: a cscripts/ci-toolchain.sh0 csak akkor telepít, ha az image verziói eltérnek a rögzítettektől. A képernyőtesztek egyszerre négy esetet futtatnak (cJOBS0, mindegyiket a saját mappájában). A release lépés a cci-tools image-ben fut, telepítés nélkül. A store lépés tarként, SSH-n küldi a mappát a szerver cdeploy0 felhasználójának (cdeploy-ssh0 image, digest szerint), akinek a kulcsa egyetlen rögzített parancshoz, a cci-deploy0-hoz kötött (cinfra/host-config0); a pipeline-nak nem kellenek trusted volume-ok. p git tag v2.3.0 p git push origin v2.3.0 1Korlátok 1════════ • A játékmappák számát csak a szabad memória korlátozza (játékonként kb. 100 bájt plusz az adatai, legfeljebb 16000); mappánként legfeljebb 600 fájlt listáz. A legutóbbiak listája 10 játékot, a statisztika az utolsó 1000 játszott játékot tartja meg. • Cím 50 karakter, műfaj 24, év és játékosszám 10, leírás 2000, cRUN0 / cSETUP0 / cARGS0 60. A cMETADATA.INI0-ből 4 KB-ot olvas, a GMEDIT 8 KB-ig szerkeszt. • A képernyő a 437-es kódlapot használja.