---
title: BMAGIC
url: 'https://wiki.teletypegames.org/hu/dos/bmagic'
markdown: 'https://wiki.teletypegames.org/hu/dos/bmagic.md'
lang: hu
date: '2026-10-13'
description: 'A Boot Magic (BMAGIC.EXE) egy DOS-program (C++, Open Watcom, 16 bites, kb. 64 KB), amely az MS-DOS 6 és újabb bootmenüjét szerkeszti. Beolvassa az indítómeghajtó gyökerében lévő CONFIG.SYS-t, AUTOEXEC.BAT-ot és MSDOS.SYS-t, feltérképezi bennük a menüt, és menüpontokat lehet vele felvenni, szerkesz…'
taxonomy:
  tag:
    - howto
---

# BMAGIC

> A Boot Magic (`BMAGIC.EXE`) egy DOS-program (C++, Open Watcom, 16 bites, kb. 64 KB), amely az MS-DOS 6 és újabb bootmenüjét szerkeszti. Beolvassa az indítómeghajtó gyökerében lévő `CONFIG.SYS`-t, `AUTOEXEC.BAT`-ot és `MSDOS.SYS`-t, feltérképezi bennük a menüt, és menüpontokat lehet vele felvenni, szerkeszteni, másolni, átnevezni, mozgatni és törölni, a soraikat szerkeszteni, és beállítani az alapértelmezett pontot, a várakozási időt, a színeket és a NumLockot. A Windows 95/98 `MSDOS.SYS` indítási beállításait is kezeli.
> 
> Csak azokat a sorokat módosítja, amelyeket muszáj. Minden mentés előtt diffben megmutatja a változásokat, és elmenti a fájlokat; bármelyik mentés összevethető a lemezen lévő fájlokkal, vagy visszaállítható. Rétegezve épül a [DOSLIB](https://wiki.teletypegames.org/hu/dos/doslib)-re, mint a [GMENU](https://wiki.teletypegames.org/hu/dos/gmenu) és a [DOSINST](https://wiki.teletypegames.org/hu/dos/dosinst).

- **Repó:** [git.teletypegames.org/dos/bmagic](https://git.teletypegames.org/dos/bmagic)
- **Letöltés, v0.1.0:** [BMAGIC-v0.1.0.zip](https://git.teletypegames.org/dos/bmagic/releases/download/v0.1.0/BMAGIC-v0.1.0.zip) · csak a programfájl: [BMAGIC.EXE](https://git.teletypegames.org/dos/bmagic/releases/download/v0.1.0/BMAGIC.EXE)
- **Kiadások:** [git.teletypegames.org/dos/bmagic/releases](https://git.teletypegames.org/dos/bmagic/releases)

![A Boot Magic egy bootmenü nélküli meghajtón](https://wiki.teletypegames.org/wiki-assets/bmagic/bmagic-menu.png)

# Telepítés

- **DOSINST-tel:** a `DOSINST INSTALL BMAGIC` a [DOSINST](https://wiki.teletypegames.org/hu/dos/dosinst) programtárából a legfrissebb kiadást a `C:\APPS\BMAGIC`-be telepíti, újra futtatva frissíti. A frissítés megtartja a mentéseket (a DOSINST nem nyúl a nem általa telepített fájlokhoz); a `DOSINST REMOVE BMAGIC` a mappát a mentésekkel együtt törli.
- **Kézzel:** a `BMAGIC.EXE`-t bármelyik mappába másold, például a `C:\APPS\BMAGIC\`-be.

```
BMAGIC        az indítómeghajtó bootfájljai
BMAGIC D:     egy másik meghajtó bootfájljai (például egy előkészített lemezé)
```

Az indítómeghajtót a DOS-tól kérdezi (4.0-tól); ha a DOS nem tudja, a `C:`-t használja. DOSBoxban add meg a meghajtót (`BMAGIC C:`), mert a DOSBox nem ezekből a fájlokból indul. A kilépési kód 0, ha írt fájlt, 1, ha nem, és 2 hiba esetén. Mentés után indítsd újra a gépet: a DOS csak induláskor olvassa ezeket a fájlokat.

# A bootmenü

```
CONFIG.SYS                          AUTOEXEC.BAT
  [MENU]                              @ECHO OFF
  MENUITEM=NORMAL,Normal start        PATH C:\DOS        <- minden konfiguráció
  MENUITEM=GAMES,Games (EMS)          GOTO %CONFIG%
  MENUDEFAULT=NORMAL,10               :NORMAL
  MENUCOLOR=15,1                      LH SMARTDRV
  NUMLOCK=OFF                         GOTO END
                                      :GAMES
  [COMMON]                            LH MOUSE
  DOS=HIGH,UMB      <- minden pont    GOTO END
                                      :END
  [NORMAL]
  DEVICE=C:\DOS\HIMEM.SYS
  [GAMES]
  DEVICE=C:\DOS\HIMEM.SYS
  DEVICE=C:\DOS\EMM386.EXE RAM
```

Egy menüpont a `[MENU]` egy `MENUITEM` sora, egy `[NÉV]` blokk a `CONFIG.SYS`-ben, és az `AUTOEXEC.BAT` egy szakasza a `:NÉV` címkétől a következő címkéig. A DOS a `CONFIG` változóba a választott pont nevét teszi, a `GOTO %CONFIG%` pedig a címkéjére ugrik. A szakaszok egy közös zárócímkére mutató `GOTO`-val végződnek (`:END`, ha a fájl nem mást használ).

| Művelet | Billentyű | Mi változik |
|---|---|---|
| Új pont | Ins | Egy `MENUITEM` sor az utolsó után, egy `[NÉV]` blokk az utolsó menüpont-blokk után, egy szakasz a zárócímke előtt `GOTO END`-del. Lehet egy másik pont másolata is. Menü nélküli `CONFIG.SYS`-ben az első pont létrehozza a `[MENU]`-t, a már meglévő sorok pedig a `[COMMON]` alá kerülnek. |
| Átnevezés | F3 | A `MENUITEM` sor, a `[NÉV]` sor, a `MENUDEFAULT`, az `INCLUDE=NÉV` sorok és a `:NÉV` címke. |
| Törlés | Del, majd Y | A `MENUITEM` sor, a blokk, a szakasz, a `MENUDEFAULT` és az `INCLUDE` sorok. Az utolsó pont törlése a `[MENU]`-t és a `GOTO %CONFIG%`-ot is eltávolítja. |
| Mozgatás | Ctrl+PgUp / Ctrl+PgDn | Két `MENUITEM` sort cserél meg, vagyis a menü sorrendjét. |
| Menü | F6, F5 | `MENUDEFAULT` (pont és 0-90 mp várakozás), `MENUCOLOR`, `NUMLOCK`; az F5 a kijelölt pontot teszi alapértelmezetté. |
| Sorok | Enter, F8 | Egy pont blokkja és szakasza, vagy egy teljes fájl (Tab: a következő fájl). A sorok 200 karakterig szerkeszthetők. |
| MSDOS.SYS | F7 | `BootMenu`, `BootMenuDefault`, `BootMenuDelay`, `BootGUI`, `Logo`, `BootKeys` a Windows 95/98 `MSDOS.SYS` `[Options]` blokkjában; az attribútumai megmaradnak. Az MS-DOS 6 bináris `MSDOS.SYS`-éhez nem nyúl. |

A név 1-8 betű, számjegy, `_` vagy `-`, és nem lehet `MENU` vagy `COMMON`. A batch-címkéknek csak az első 8 karaktere számít, ezért annak különböznie kell a többi pontétól. Az a pont, amelynek hiányzik a blokkja vagy a címkéje, pirosan `none` vagy `no label` jelzést kap: a hiányzó címke megakasztja a `GOTO %CONFIG%`-ot. Az F1 minden billentyűt megmutat.

# Mentés és visszaállítás

Mentésig semmi nem íródik ki. Az F4 megmutatja az eddigi változásokat, az F2 előbb ugyanezt az áttekintést: a törölt sorok pirosak, az újak zöldek, körülöttük 3 változatlan sor. Az áttekintésben az F2 ment:

1. Új mentéskészlet kerül a `BMAGIC.EXE` melletti `BACKUP\NNN\`-be: minden bootfájl bájtra pontos másolata és egy `SET.INI` a dátummal, idővel, meghajtóval és egy megjegyzéssel. Ha a mentés nem sikerül, nincs írás.
2. Minden módosított fájl `X.$$$` néven íródik ki; a régi `X.BM$` nevet kap, az új átveszi a nevét, aztán az `X.BM$` törlődik. Ha bármelyik lépés elakad, a régi fájl visszakerül. A sorvégek és az EOF-bájt változatlanok maradnak.
3. A csak olvasható, rejtett vagy rendszer attribútumú fájlok visszakapják az attribútumukat.

Az F9 kilistázza a mentéseket. Az Enter ugyanabban a diff-nézetben veti össze a kijelöltet a lemezen lévő fájlokkal, az Ins most készít mentést, a Del töröl egyet, az R pedig visszaállít egyet — előtte elmenti a fájlokat, amelyeket felülír.

# Fordítás és tesztek

A fordításhoz [Open Watcom v2](https://github.com/open-watcom/open-watcom-v2) kell (a `~/.local/opt/watcom`-ban, vagy `WATCOM=<mappa>`), ugyanaz az eszközlánc, mint a többi DOS-programnál:

```sh
SOURCE/build.sh                      # ../BMAGIC.EXE
SOURCE/build.sh test                 # a tesztváltozat (billentyűk a TESTKEYS.TXT-ből)
SOURCE/test/unit/run.sh              # unit-tesztek a fejlesztőgépen, előtte rétegellenőrzés
python3 SOURCE/test/run.py           # képernyőtesztek DOSBoxban, minta-bootmeghajtókon
```

A rétegek a [DOSLIB](https://wiki.teletypegames.org/hu/dos/doslib) szabályait követik: `model` (a menütérkép, a szerkesztő, a diff, I/O nélkül), `repository` (a bootfájlok és a mentéskészletek), `service`, `controller`, `view`, `platform` (az indítómeghajtó, az attribútumok, az óra) és `app`; a DOSLIB git subtree-ként van a `SOURCE/lib`-ben.

A Woodpecker minden pushnál lefuttatja a stílusellenőrzést, a rétegellenőrzést és a unit-teszteket, aztán a fordítást és a DOSBox-teszteket. A `metadata.json` megemelt `version`-je (vele együtt a `SOURCE/app/version.h` `Version` értéke) a masterre pusholva a pipeline-tól megkapja a `vX.Y.Z` tagjét, és ez a tag Gitea-kiadást készít, és a katalógusba publikálja a kiadást, ahonnan a `BMAGIC` a DOSINST programtárába kerül. 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.

# Korlátok

- Legfeljebb 9 menüpont, ahogy a DOS is mutatja. A további `MENUITEM` és a `SUBMENU` sorok megmaradnak, de nem látszanak; a fájlszerkesztővel (F8) elérhetők.
- Az `AUTOEXEC.BAT`-ból csak a `GOTO %CONFIG%` szerkezetet térképezi fel. Az `IF "%CONFIG%"=="GAMES" ...` sorok megmaradnak, de átnevezéskor nem változnak.
- Egy fájl legfeljebb 16000 bájt és 500 sor lehet.
- A diff legfeljebb 50 sort néz előre, hogy hol egyeznek újra a fájlok; a nagyobb áthelyezések törölt és új sorokként jelennek meg.

'; 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)
- Next: [DOSINST](https://wiki.teletypegames.org/hu/dos/dosinst.md)
