AmigaDOS

A amigaspirit.hu - pegasos.hu Wiki wikiből

A lap korábbi változatát látod, amilyen Chain-Q (vitalap | szerkesztései) 2011. november 29., 17:03-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Az AmigaDOS az AmigaOS lemez- és I/O kezelő alrendszerének a neve. Bár külön névvel illetjük, szerves részét képezi a rendszernek. Fizikailag az AmigaDOS a Kickstartban helyezkedik el, a dos.library nevű függvénykönyvtárban. Az AmigaDOS külső fejlesztés volt, a Commodore utólag vásárolta meg és integrálta a rendszerbe, miután az eredeti lemezes alrendszer fejlesztése jelentős késéseket szenvedett. Az AmigaDOS-t eredetileg BCPL nyelven írták, míg a rendszer többi része C és M68K assembly nyelven készült. Bár a jelenlegi változatot már újraimplementálták C nyelven, a BCPL hatásának nyomai ma is megtalálhatók az AmigaOS API-ban. A MorphOS és az AROS egy, az AmigaDOS-sal API kompatibilis lemezkezelő alrendszert tartalmaz.

Tartalomjegyzék

Általános ismertető

Az AmigaDOS érdekes keveréke a CP/M és a Unix rendszereknek. Bár a rendszer a CP/M-hez hasonlóan meghajtókat kezel, ezeknek nem betűjelük, hanem több karakterből alló nevük van, amelyeket tetszés szerint változtathatunk. Például az első floppymeghajtó hagyományos elnevezése DF0:, míg az első CD-meghajtóé általában CD0:. A rendszer nem case-sensitive. Viszont igen erősen a Unixra hasonlít pl. a fájlattribútumok felépítése, vagy az, hogy a kiterjesztések csak jelképes szerepűek, nincs jelentőségük pl. annak megállapításában hogy egy állomány futtatható-e. Az AmigaDOS kezel soft- vagy másnéven symlinkeket és hardlinkeket is. Eszközöket a Unixhoz hasonlóan futási időben csatolhatunk le és fel, tetszőleges fájlrendszer használatával. Az RDB-nek köszönhetően a merevlemezeinken is rugalmasan variálhatjuk a fájlrendszereket. A Commodore eleinte OFS, később FFS filerendszerrel szállította az AmigaOS-t. Ezek a filerendszerek maximum 32 karakteres fájlneveket engedtek meg, bár az elméleti korlát 107 karakter. Az AmigaOS-en ma használt filerendszerek mint pl. az FFS2, a PFS3 és az SFS már képesek kezelni a 32 karakternél hosszabb neveket is. Az rendszer legnagyobb korlátja, hogy maximálisan 2GB-os fájlok kezelését engedi meg. Az ennél nagyobb fájlok kezeléséhez szükséges új API még nem készült el, bár valamennyi Amiga-eredetű rendszer készítői dolgoznak rajta.

A shell

A shellt legegyszerűbben úgy érhetjük el, ha a Workbench menü Execute command... almenüjében kiadjuk a newshell parancsot. Ekkor megjelenik egy shell ablak, amely használatra kész. A prompt alapértelmezésben az éppen használatban lévő meghajtó volume nevét, és az éppen használt könyvtár elérési útját jeleníti meg. Nagyjából igy fest:

Ram Disk:>
  • Tipp: MorphOS alatt használhatjuk a Right-Command - N billentyűkombinációt is a shell indításához.
  • Tipp: A newshell helyett a newcli parancsot is használhatjuk (CLI).

Alapvető műveletek

Meghajtót úgy válthatunk, ha kiadjuk a meghajtó nevét, mint parancsot. Használhatjuk a volume és a device nevét is mint parancsot. A különbség, hogy pl. floppylemez esetén a device neve mindíg állandó (DF0) míg a volume név az éppen a meghajtóban lévő lemez nevét jelenti. Tehát, ha berakjuk a floppyba mondjuk az Install nevű lemezt, kétféleképpen is átléphetünk rá. A prompt viszont mindig a volume nevet fogja megjeleníteni. Például:

Ram Disk:> Install:
Install:> Ram:
Ram Disk:> DF0:
Install:> System:
System:>

Zseniális. A könyvtárakba is hasonló módszerrel léphetünk be. Vagyis, bár létezik cd parancs, könyvtárváltáshoz, azt nem minden esetben szükséges kiadni. A parent directory jele a /, mig az adott meghajtó gyökérkönyvtárát : jelöli. Amennyiben van olyan parancsnév, amilyen könyvtárba be szeretnénk lépni, tegyünk a könyvtárnév végére egy / jelet, így a kiadott parancs biztosan a könyvtárra fog vonatkozni. Vagy ilyen esetben használhatjuk a cd parancsot. A könyvtárváltást összevonhatjuk a meghajtóváltással. Néhány példa:

System:> Devs
System:Devs> Monitors
System:Devs/Monitors> /
System:Devs> :Storage/DOSDrivers
System:Storage/DOSDrivers> :
System:> Work:Develop/Demo/Breakpoint2006
Work:Develop/Demo/BreakPoint2006> //
Work:Develop> System:
System:>
  • Tipp: A shell alapból tartalmaz history funkciót, azaz megjegyzi korábban kiadott parancsainkat. Ezek között a fel-le gombok lenyomásával "válogathatunk".
  • Tipp: Bármely parancs lehetséges paramétereit lekérhetjük a neve után "?"-et írva: "dir ?"

Hozzunk létre könyvtárat. Ezt a makedir paranccsal tehetjük meg. Az állományok és a könyvtárak, sőt, a meghajtók nevében is szerepelhet szóköz. Ekkor tegyük az adott nevet idézőjelbe, így a rendszer egy paraméterként fogja kezelni. Viszont könyvtárak esetében ekkor mindenképpen használni kell a cd parancsot. Például:

System:> makedir "Napos Csibe"
System:> "Napos Csibe"
object not found
System:> cd "Napos Csibe"
System:Napos Csibe> /
System:>

Könyvtárat és állományt egyaránt a delete paranccsal törölhetünk.

System:> delete "Napos Csibe"
Napos Csibe  Deleted
System:>

Fájlok kilistázására két parancs létezik, a dir valamint a list egyelőre elég annyit tudni róluk, hogy a dir parancs egy rövid, csak neveket felsoroló listát, míg a list parancs egy részletesebb listát ad.

System:> Ram:
Ram Disk:> dir
     T (dir)
     Clipboards (dir)
     ENV (dir)
  disk.info
Ram Disk:> list
T                            Dir ----rwed Tuesday   22:25:12
Clipboards                   Dir ----rwed Tuesday   22:25:07
ENV                          Dir ----rwed Tuesday   22:25:23
disk.info                   1648 ----rw-d 17-May-02 12:14:32  
1 file - 3 directories - 262 blocks used
Ram Disk:>

A shellben a joker karakter a ?. Ha elétesszük egy #-t az azt jelenti, hogy az adott karakter helyén ismeretlen számú karakter van. A joker karaktert többször is alkalmazhatjuk. Például:

Ram Disk:> dir disk#?
  disk.info
Ram Disk:> dir c?ipbo#?
     Ram Disk:Clipboards (dir)
Ram Disk:> 

És most néhány fejlettebb trükk. Adott mintát tartalmazó fájlok listázásának tiltása, a ~ (tilde) karakter használatával. A példa nem listázza az .info kiterjesztésű állományokat, egyébként mindent.

Ram Disk:> dir ~(#?.info)
     Ram Disk:T (dir)
     Ram Disk:Clipboards (dir)
     Ram Disk:ENV (dir)
Ram Disk:>

Minták kombinálása. Kilistázza a .pas és a .c végű fájlokat. Nem csak kettő, hanem több minta is kombinálható.

Ram Disk:> dir Work:Develop/HelloWorld/#?.(pas|c)
  example.c                          first.c
  first.pas                          hello.c
  hello.pas
Ram Disk:>

A dir és a list parancs további lehetőségeket is rejt, amelyről bővebben itt olvashatsz.

Az assignok

Az assign rendszer talán az AmigaDOS legjellegzetesebb, legegyedibb funkciója. Hasonló persze sok más rendszerben van - vagyis hogy virtuális hivatkozást készíthetünk egy fizikai kötet vagy meghajtó egy könyvtárára, külön "meghajtónevet" adva neki, de egyetlen más rendszerben sem annyira megkerülhetetlen ez, mint az AmigaDOS-ban. A rendszer ugyanis alapértelmezetten is létrehoz jónéhány assignt, például a SYS: nevű assign a mindenkori bootparticióra mutat. A C: assign minden esetben a SYS:C/ könyvtárra mutat, ahol a rendszer alapvető parancsai találhatók. A LIBS: assign, pedig a SYS:Libs/-re mutat alapértelmezetten - az AmigaOS itt fogja keresni a különböző külső függvénykönyvtárakat, library-kat. Ezen kívül van néhány további alapértelmezett assign is, például az L:, S:, ENVARC: vagy a DEVS:, ezekről később lesz szó.

Többszörös assignok

Az eddigiek persze bármely rendszerben megvannak - akár symlink, akár meghajtó-hozzárendelés formájában - az AmigaDOS-on az igazi csavart a történetben a többszörös assignok jelentik. Vagyis, egyetlen assign-névhez több könyvtárat is hozzárendelhetünk! Ha egy assign-hoz több könyvtárt rendeltünk hozzá, akkor arra a következő szabályok érvényesek:

  • minden fájl listázási, írási és törlési művelet a legelőször assignolt könyvtárban fog megtörténni
  • minden fájl megnyitási és olvasási művelet érinti a további könyvtárakat is

Hogy ez miért jó? Nos, tételezzük fel, hogy letöltöttünk például egy külső függvénykönyvtárat, amelyet ahhoz, hogy az azt használó programok is megtaláljanak, a LIBS:-be kellene bemásolnunk. Könnyen belátható, hogy aktívan használt rendszeren a LIBS: elég hamar megtellik különféle - ki tudja honnan származó - #?.library állományokkal. Ezt elkerülhetjük, ha létrehozunk egy további könyvtárat (például: SYS:MyLibs/), és ezt a könyvtárat hozzáadjuk a LIBS: assignhoz. Ezekután a rendszer az ebbe a könyvtárba másolt #?.library állományokat éppen úgy meg fogja találni, mintha az alapértelmezett SYS:Libs/ alatt lennének. Ez a módszer segít elkerülni a rendszer- és a saját beszerzésű függvénykönyvtárak keveredését, és emellett jó példa a többszörös assignokra is. Könnyen belátható, hogy a módszer sok más esetben is hasznos lehet (például egyes könyvtárak ideiglenes hozzáadása assignokhoz - elkerülendő a másolgatást), stb.

  • Tipp: A MorphOS alapértelmezetten többszörös assignokat hoz létre a fontosabb rendszerkönyvtárakhoz (például a C:-re, és a LIBS:-re is), ahol az első assign a rendszer részét nem képező fájlok számára szabadon használható, elkerülve a fent említett "szemetesedés" effektust.

Műveletek assignokkal

Az assignok használata igen egyszerű, az assign parancs segítségével. A példában a KACSA: nevű assignt hozzuk létre, amely a Ram Disk:-re mutat:

Ram Disk:> SYS:
System:> assign KACSA: "Ram Disk:"
System:> dir KACSA:
     Ram Disk:T (dir)
     Ram Disk:Clipboards (dir)
     Ram Disk:ENV (dir)
System:>

A többszörös assignokat az assign parancs ADD paraméterével hozhatunk létre. Például, ha az imént létrehozott KACSA: assignunkhoz hozzá kívánjuk adni a Ram Disk:T/ könyvtárat, ezt a következőképpen tehetjük meg:

System:> assign KACSA: "Ram Disk:T/" ADD
System:> 

Remek, lett egy többszörös assignunk! Most győződjünk meg róla, valóban többszörös assignt hoztunk létre. Ezt több módon is megtehetjük. Hogy megértsük a működését, előbb nézzünk egy manuális példát. Hozzunk létre egy könyvtárat a Ram Disk:T/ könyvtár alatt, majd lépjünk bele a KACSA: assignon keresztül. A fentiek alapján ez például a következőképpen lehetséges:

System:> Ram:T
Ram Disk:T> makedir KalapUr
Ram Disk:T> dir KACSA:
     Ram Disk:T (dir)
     Ram Disk:Clipboards (dir)
     Ram Disk:ENV (dir)
Ram Disk:T> KACSA:KalapUr
Ram Disk:T/KalapUr> KACSA:
Ram Disk:> makedir KalapUr
Ram Disk:> dir KACSA:
     Ram Disk:T (dir)
     Ram Disk:Clipboards (dir)
     Ram Disk:ENV (dir)
     Ram Disk:KalapUr (dir)
Ram Disk:> KACSA:KalapUr
Ram Disk:KalapUr>

Mint az látható, a KACSA: assign ugyan továbbra is az először assignolt könyvtárra mutat (amely esetünkben a Ram Disk:), mégis, a rendszer feloldja nekünk a további assignok esetén is a szükséges elérési útvonalakat. Fontos megjegyezni, hogy amennyiben több assignolt könyvtár alatt is létezik azonos nevű célfájl, vagy könyvtár, akkor az azonos nevűek közül a legelsőre lesz érvényes a hivatkozás, mint az a fenti példa második felében is látható.

Természetesen, ennél van egyszerűbb módszer is a többszörös assignok "ellenőrzésére", vagy annak lekérdezésére, hogy egy assignhoz milyen könyvtárak tartoznak. Az assign parancs EXISTS paramétere pontosan erre való:

Ram Disk:> assign KACSA: EXISTS
KACSA          Ram Disk:
             + Ram Disk:T
Ram Disk:> assign KACSA: SYS: ADD
Ram Disk:> assign KACSA: EXISTS
KACSA          Ram Disk:
             + Ram Disk:T
             + System:
Ram Disk:>

Ezekután nem maradt más hátra, mint használni az assignunkat, majd eltávolítani, ha már nincs rá szükség. Az assignolt könyvtárakat az assign parancs REMOVE paraméterével egyenként távolíthatjuk el. Ezt tetszőleges sorrendben tehetjük meg, tehát nem kötelező az assignolás sorrendjét használni. Vagy, egy másik lehetőség, hogy nem adunk meg paramétert az assignunk neve után, ekkor az egész assign, az összes könyvtárral együtt eltávolításra kerül. Természetesen ez nem jelenti a könyvtárak fizikai eltávolítását a lemezekről, csak a "logikai" assign-láncot szünteti meg:

Ram Disk:> assign KACSA: "Ram Disk:T" REMOVE
Ram Disk:> assign KACSA: EXISTS
KACSA          Ram Disk:
             + System:
Ram Disk:> assign KACSA:
Ram Disk:> assign KACSA: EXISTS
KACSA: not assigned
Ram Disk:>

Az assign parancsot további feladatokra is használhatjuk, de erről majd a későbbiekben lesz szó.

Ötletek haladóknak

A type parancs lehetőségei

A type parancsot (részben más rendszerekről származó beidegződésként) általában szövegfájlok megjelenítésére használjuk, azonban ennél jóval szerteágazóbbak a lehetőségei. A programozással foglalkozók örömmel fogadják majd a HEX (vagy OPT H) paramétert, amellyel bármely fájl hexadecimális "dump" formájában is kiíratható:

Ram Disk:> type Ram:test.txt HEX
0000: 657A2065 67792070 656C6461 2066616A ez egy pelda faj
0010: 6C2C2061 6D697420 6B696972 6174756E l, amit kiiratun
0020: 6B206B75 6C6F6E66 656C6520 6D6F646F k kulonfele modo
0030: 6B6F6E2C 20657A61 6C74616C 616C2064 kon, ezaltalal d
0040: 656D6F6E 73747261 6C766120 61207479 emonstralva a ty
0050: 70652070 6172616E 63736F74 0A       pe parancsot.


TODO: további parancskészlet, attribútumok, scriptek, stb. FIXME

Személyes eszközök