---
title: GMENU
url: 'https://wiki.teletypegames.org/hu/dos/gmenu'
markdown: 'https://wiki.teletypegames.org/hu/dos/gmenu.md'
lang: hu
date: '2026-10-10'
description: 'A GMENU egy DOS-program (C++, Open Watcom, 8086-os kód, kb. 45 KB). Egy könyvtár (alapból \COLLECT) játékmappáit listázza címmel, műfajjal, évvel és játékosszámmal, és elindítja a kiválasztott játékot. Amíg a játék fut, nincs a memóriában, így a játék megkapja az összes szabad memóriát. Az 1.1.1-i…'
taxonomy:
  tag:
    - howto
---

# GMENU

> A GMENU egy DOS-program (C++, Open Watcom, 8086-os kód, kb. 45 KB). Egy könyvtár (alapból `\COLLECT`) játékmappáit listázza címmel, műfajjal, évvel és játékosszámmal, és elindítja a kiválasztott játékot. Amíg a játék fut, nincs a memóriában, így a játék megkapja az összes szabad memóriát.
> 
> Az 1.1.1-ig NASM assemblyben készült, és a programjai `.COM` fájlok voltak; a 2.0.0 ugyanez a menü C++-ban újraírva, a [DOSINST](https://wiki.teletypegames.org/hu/dos/dosinst) eszközláncával, a programjai pedig a `GMENUPRG.EXE` és a `GMEDIT.EXE`. A 2.1.0 rétegekbe szervezve épül a [DOSLIB](https://wiki.teletypegames.org/hu/dos/doslib)-re, a DOSINST-tel közös könyvtárra; a menü ugyanaz. A 2.3.0 a 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 csak a szabad memória korlátozza. A programtárban és a játéklista címsorában GMenu Launcher a neve; a mappa és a programok neve nem változott.

- **Repó:** [git.teletypegames.org/dos/gmenu](https://git.teletypegames.org/dos/gmenu)
- **Letöltés, v2.3.0:** [GMENU-v2.3.0.zip](https://git.teletypegames.org/dos/gmenu/releases/download/v2.3.0/GMENU-v2.3.0.zip) · csak a programok: [GMENUPRG.EXE](https://git.teletypegames.org/dos/gmenu/releases/download/v2.3.0/GMENUPRG.EXE), [GMEDIT.EXE](https://git.teletypegames.org/dos/gmenu/releases/download/v2.3.0/GMEDIT.EXE)
- **Kiadások:** [git.teletypegames.org/dos/gmenu/releases](https://git.teletypegames.org/dos/gmenu/releases)

![GMENU játéklista](https://wiki.teletypegames.org/wiki-assets/gmenu/gmenu-list.png)

---

# Mit tud

- **Játéklista** minden mappa `METADATA.INI`-jéből (vagy a `NAME.TXT` első sorából, vagy a mappanévből).
- **Keresés** gépelés közben, a címekben, a mappanevekben és a leírásokban.
- **Szűrők** műfajra (F2), évre vagy évtizedre (F3) és játékosszámra (F4); csak a kedvencek (F7); csak a `METADATA.INI` nélküli játékok (Shift+F7).
- **Rendezés** cím, év, műfaj vagy a legtöbbet játszott szerint (F9); véletlen játék (F10).
- **Kedvencek** (F6) és az **utolsó 10 játszott játék** (F8); játékonként a játszások száma és az utolsó játék dátuma.
- **Részletek oldal** (Enter): az összes adat, görgethető, többsoros leírás és a játék indítható `.COM` / `.EXE` / `.BAT` fájljai.
- **Játék** Ctrl+Enterrel vagy dupla kattintással (a `RUN` parancs), **setup** Ctrl+S-sel.
- **Szerkesztő** (Ctrl+E, `GMEDIT.EXE`): űrlapon hozza létre vagy szerkeszti a játék `METADATA.INI`-jét.
- Billentyűzet és egér, a görgővel együtt (CuteMouse WheelAPI). Az F1 az összes billentyűt listázza.

![GMENU részletek oldal](https://wiki.teletypegames.org/wiki-assets/gmenu/gmenu-detail.png)

# Telepítés

Hálózatos DOS-gépen a legegyszerűbb a [DOSINST](https://wiki.teletypegames.org/hu/dos/dosinst): a `DOSINST INSTALL GMENU` a legfrissebb kiadást a `C:\APPS\GMENU` alá telepíti, újra futtatva frissíti. Kézzel:

1. Töltsd le a `GMENU-vX.Y.Z.zip`-et a kiadások közül, és csomagold ki a DOS-meghajtóra, például `C:\APPS\GMENU\` alá (ez az alapértelmezett, a DOSINST is ide telepít). A menünek a `GMENU.BAT` és a `GMENUPRG.EXE` kell, a szerkesztéshez a `GMEDIT.EXE` 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 `METADATA.INI`-vel (vagy legalább egy `NAME.TXT`-vel): ```
    C:\COLLECT\
     DOOM\
       METADATA.INI
       DOOM.EXE
     PRINCE\
       NAME.TXT      <- első sor: "Prince of Persia"
       PRINCE.EXE
    ```
3. A játékkönyvtárat a `GMENU.BAT`-ban állítsd be (a `GMENUPRG.EXE` sor utolsó argumentuma, a `/B` maradjon): ```bat
    %GMENU%PRG.EXE /B \COLLECT
    ```

    Másik meghajtó is jó (`D:\GAMES`). A `/A` a részletek oldalon az összes fájlt mutatja, nem csak a futtathatókat.
4. Indítás: `GMENU`. A `GMENU.BAT` abból a névből találja meg a programjait, amellyel elindították, így a mappa bárhol lehet; `.BAT` kiterjesztéssel indítva (például Total Commanderből vagy Windows 98-ról) ezt nem tudja, és a `C:\APPS\GMENU`-ből futtatja őket (a `set GMENU=` sor: ezt írd át, ha a menü máshol van). DOSBoxban indulhat bootkor is: ```
    [autoexec]
    mount c /Users/.../Dosbox
    c:
    path Z:\;C:\APPS\GMENU
    gmenu
    ```

Telepített menü frissítéséhez másold a mappájába a `GMENUPRG.EXE`-t, a `GMEDIT.EXE`-t és a `GMENU.BAT`-ot, és a `GMENU.BAT`-ban állítsd be újra a játékkönyvtárat. 1.x-ről frissítve az új `GMENU.BAT` kötelező, mert a régi a `GMENUPRG.COM`-ot indítja; a régi `.COM` fájlok törölhetők. A DOSINST mindezt elvégzi, a törlést is.

# METADATA.INI

Minden sor opcionális, a kulcsok kis- és nagybetűre nem érzékenyek, a `[GAME]` és a `;`-vel kezdődő sorok nem számítanak:

```ini
[GAME]
NAME=Doom
GENRE=Shooter
YEAR=1993
PLAYERS=1-4
DESCRIPTION=The whole description in one line...
DESCRIPTION=A second DESCRIPTION line starts a new line.\nSo does \n inside the text.
RUN=DOOM.EXE -nomusic
ARGS=-skill 3
SETUP=SETUP.EXE
```

| Kulcs | Jelentés |
|---|---|
| `NAME` | A cím. Ha nincs: `NAME.TXT`, aztán a mappanév. |
| `GENRE`, `YEAR` | A listában látszik, a szűrők és a rendezés használja. |
| `PLAYERS` | Szám (`2`), tartomány (`1-4`) vagy nyitott (`2+`). A szűrő azokat a tartományokat adja, amelyek tartalmazzák a számot. |
| `DESCRIPTION` | A `\n` sortörés, a `\\` backslash; több sor sortöréssel fűződik össze. |
| `RUN` | Amit a Ctrl+Enter indít: a játék mappájának egy fájlja, opcionális argumentumokkal. |
| `ARGS` | A `RUN`-hoz fűződik, akkor is, ha a `RUN` fájlt a részletek oldalról indítod. |
| `SETUP` | A setup parancs, Ctrl+S indítja. |

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 (`ő`, `ű`, `Á`), az a legközelebbi lesz (`ö`, `ü`, `A`).

**Szerkesztés a GMEDIT-tel:** a Ctrl+E egy űrlapot nyit a mezőkkel. Új fájl abból indul, amit a mappa elárul (`NAME.TXT`, az egyetlen futtatható mint `RUN`, az első `SETUP*` / `INSTALL*` mint `SETUP`). 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: `GMEDIT C:\COLLECT\DOOM`.

# Hogyan működik

A `GMENU.BAT` egy ciklus a program körül, így a menü sosem marad a memóriában a játék alatt:

1. A `GMENU.BAT` lefuttatja a `GMENUPRG.EXE /B`-t a játékkönyvtárral.
2. Játékválasztáskor a program megírja a saját mappájába a `GMENURUN.BAT`-ot (meghajtó- és mappaváltás, a játék indítása, visszaváltás), és kilép.
3. A `GMENU.BAT` meghívja a `GMENURUN.BAT`-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 `GMENURUN.BAT` a `GMEDIT.EXE`-t indítja. `/B` nélkül a program csak annyit ír ki, hogy a `GMENU.BAT`-tal kell indítani.

Indításkor a menü a `GMENU.IDX`-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 `GMENU.IDX` vagy más játékkönyvtáré, illetve **Ctrl+F**-re — listázza a mappákat, csak azokat a `METADATA.INI` / `NAME.TXT` fájlokat olvassa újra, amelyeknek a dátuma, ideje vagy mérete változott, és újraírja a `GMENU.IDX`-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 `GMENUPRG.EXE` mellett (a formátumuk az 1.1.0 óta nem változott, így a frissített menü megtartja az állapotát; a `GMENU.IDX` 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):

| Fájl | Tartalom |
|---|---|
| `GMENU.SEL` | Utolsó játék, keresés, szűrők, rendezés, legutóbbi játékok |
| `GMENU.FAV` | Kedvencek, soronként egy mappanév |
| `GMENU.STA` | Játékonként a játszások száma és az utolsó játék dátuma |
| `GMENU.IDX` | A játékmappák és a `METADATA.INI` / `NAME.TXT` adataik gyorsítótára; a Ctrl+F újraépíti, bármikor törölhető |

# Fordítás és tesztek

A fordításhoz [Open Watcom v2](https://github.com/open-watcom/open-watcom-v2) kell (a snapshot kiadásban macOS-es és linuxos binárisok is vannak; ha nem a `~/.local/opt/watcom` alatt van, a `WATCOM` változó mutasson rá):

```sh
cd SOURCE
./build.sh          # a GMENUPRG.EXE és a GMEDIT.EXE a szülőmappába
./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 [DOSLIB](https://wiki.teletypegames.org/hu/dos/doslib) oldalán): `model` (játékok, szűrők, munkamenet, METADATA.INI), `repository` (a fájlok: a játékmappák a `GMENU.IDX` gyorsítótárral, kedvencek, statisztika, munkamenet, `GMENURUN.BAT`), `service` (a játéklista, az indítás, a választók, a GMEDIT szerkesztése), `controller` és `view` (az oldalak), `app` (összerakja őket), a DOS-os belépés pedig a `main_gmenu.cpp` és a `main_gmedit.cpp`. A `SOURCE/lib` a DOSLIB. Az alapértelmezett játékkönyvtár a `gmenu.ini` `collect_dir` 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:

```sh
SOURCE/test/unit/run.sh
```

A képernyőtesztek DOSBoxban futtatják a tesztváltozatokat: a `SOURCE/test/cases.txt` minden esetének billentyűsorozata a `TESTKEYS.TXT`-be kerül, és amikor elfogy, a program elmenti a képernyőt, amit a teszt a `SOURCE/test/expected/` tartalmával vet össze. Python 3, Open Watcom és DOSBox (Staging vagy 0.74) kell hozzájuk:

```sh
python3 SOURCE/test/run.py              # minden eset
python3 SOURCE/test/run.py --update     # a mostani eredmény elfogadása
```

# Kiadások

A Woodpecker minden pusht lefordít és letesztel. A `metadata.json` megemelt `version`-je a masterre pusholva a pipeline-tól megkapja a `vX.Y.Z` tagjét, és ez a tag ezen felül Gitea-kiadást is publikál, a `RELEASE_NOTES.md` szövegével és három fájllal: a telepítéshez a `GMENU-vX.Y.Z.zip`, a telepített menü frissítéséhez a `GMENUPRG.EXE` és a `GMEDIT.EXE`. Ugyanez a tag a katalógusba is publikálja a kiadást, onnan kerül a menü a [DOSINST](https://wiki.teletypegames.org/hu/dos/dosinst) programtárába (`ftp://ftp.teletypegames.org/APPS`), az `INFO.INI`-ben a tag a verzió. Minden lépés a [dos-tools](https://wiki.teletypegames.org/hu/platforms/dos) builder image-ének (`git.teletypegames.org/build/dos-builder`) egy parancsa, előre telepített eszközlánccal; a repóban csak a `platform: dos` marker és a `metadata.json` van, amelynek `dos` szakasza mondja meg, mi kerül egy kiadásba. A képernyőtesztek egyszerre négy esetet futtatnak (`JOBS`, mindegyiket a saját mappájában). A Gitea-kiadást a [WarpEngine](https://wiki.teletypegames.org/hu/engines/warp-engine) közös release lépése készíti a `dos-pack` által felsorolt fájlokból. Store lépés nincs: a DOSINST programtára az engine DOS-polca, amelyet minden publikáláskor a katalógusból épít újra, így a pipeline-nak nem kell deploy-kulcs.

```sh
# "version": "2.4.0" a metadata.json-ban, aztán
git commit -am "Version 2.4.0"
git push origin master
```

# Korlátok

- 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, `RUN` / `SETUP` / `ARGS` 60. A `METADATA.INI`-ből 4 KB-ot olvas, a GMEDIT 8 KB-ig szerkeszt.
- A képernyő a 437-es kódlapot használja.

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [DOS](https://wiki.teletypegames.org/hu/dos.md)
- Previous: [DOSLIB](https://wiki.teletypegames.org/hu/dos/doslib.md)
- Next: [TTGWIKI](https://wiki.teletypegames.org/hu/dos/ttgwiki.md)
