4

Praca magisterska - Pośrednictwo użytkowe systemu MS DOS

Opis pliku konfiguracyjnego

Plik konfiguracyjny o nazwie nck.cfg znajduje się w kartotece macierzystej programu wraz ze zbiorem wsadowym nck.bat i programem nck_.exe. Część jego zawartości jest odczytywana przy każdym ponownym uruchomieniu pośrednictwa. Stan oznaczony jako "Każde ponowne uruchomienie" następuje po wywołaniu polecenia zewnętrznego lub po wczytaniu po raz pierwszy programu do pamięci komputera.

Plik konfiguracyjny podzielono na sekcje.

Sekcje [Setup] i [Class] są wczytywane do pamięci po każdym ponownym uruchomieniu i przetrzymywane do czasu usunięcia z pamięci części pośrednictwa odpowiedzialnej za komunikację z użytkownikiem.

Sekcja [Method] jest interpretowana na bieżąco, w czasie działania pośrednictwa.

Sekcja Setup

Sekcja [Setup] jest sekcją przechowującą informacje dotyczące zbiorów tymczasowych programu NCK. Deklaruje się tu również, które kolumny ze zwracanych przez polecenie dir wierszy, będą interpretowane jako nazwa obiektu, rozszerzenie i komentarz.

Kolejność występowania elementów jest dowolna.

W sekcji [Setup] muszą wystąpić wszystkie wymienione elementy.


Definicja Metasymboli.


<Nazwapliku> ::= <nazwa>.<rozszerzenie>|<nazwa>

<Plik> ::= <ścieżka>\<Nazwapliku>

<Katalog> ::= <ścieżka>

<Cyfra> ::= 0|1|2...8|9

<Znak_spacji> ::= 0x32

<Liczba_całkowita > ::= <Liczba_całkowita> <Cyfra> | <Cyfra>

<Liczba> ::= +<Liczba_całkowita> | -<Liczba_całkowita>

<Deklaracja_pliku> ::= <znak_spacji><Plik>

<Deklaracja_katalogu> ::= <znak_spacji> <Katalog>

<Deklaracja_obiektu> ::= <sep> <Liczba> <sep> <Liczba>

<sep> ::= <sep> <Znak_spacji> | <Znak_spacji>

<nazwa> ::= nazwa pliku bez rozszerzenia

<rozszerzenie> ::= część 3 literowego rozszerzenia nazwy pliku

<ścieżka> ::= ścieżka dostępu do katalogu bez znaku \ na końcu

<Koniec_sekcji> ::= "["|EOF



Postać sekcji:


[Setup]

Batch <Deklaracja_pliku>

Destructor <Deklaracja_pliku>

ProcessAnswer <Deklaracja_pliku>

DirtyData <Deklaracja_pliku>

Temp1 <Deklaracja_pliku>

Temp2 <Deklaracja_pliku>

Help <Deklaracja_katalogu>

Object <Deklaracja_obiektu>

Extension <Deklaracja_obiektu>

Remarq <Deklaracja_obiektu>

<Koniec_Sekcji>


W sekcji można umieszczać komentarze. Komentarz zaczyna się w pierwszej kolumnie znakiem ';' (średnik), pozostała część wiersza, aż do znaku zmiany wiersza jest traktowana jako komentarz.



Przykład sekcji [Setup]:


[Setup]

Batch C:\nck\common\process.bat

Destructor C:\nck\common\destruct.bat

ProcessAnswer C:\nck\common\answer.tmp

DirtyData C:\nck\common\dirty.dta

Temp1 C:\nck\common\nck1.tmp

Temp2 C:\nck\common\nck2.tmp

Help C:\nck\help

Object 45 -1

Extension 1 1

Remarq 17 30


Taka sekcja [Setup] zostanie stworzona przez program instalacyjny jeśli proces instalacji zostanie przeprowadzony dla systemu WINDOWS 95 i katalogu docelowego C:\nck


Warunkiem poprawnej pracy pośrednictwa dla takiej postaci sekcji [Setup], jest zbliżona do poniższej, postać zwracanych informacji przez polecenie dir.


Volume in drive C is MURO HD120

Volume Serial Number is 0800-1952

Directory of C:\nck


. <DIR> 95.08.27 14:42 .

.. <DIR> 95.08.27 14:42 ..

COMMON <DIR> 95.08.27 14:42 common

HELP <DIR> 95.08.27 14:42 help

NCK CFG 1 591 95.09.12 0:35 nck.cfg

NCK_ EXE 29 418 95.08.29 14:05 nck_.exe

NCK BAT 354 95.09.12 0:35 nck.bat

NCK PIF 967 95.09.09 22:38 nck.PIF

NCK ICO 766 95.09.09 21:55 nck.ico

5 file(s) 33 096 bytes

4 dir(s) 70 615 040 bytes free


Jeśli informacje o plikach i katalogach są pobierane z innych kolumn zwracanych przez polecenie dir, należy plik konfiguracyjny zmodyfikować. Tzn: Wpisać nowe wartości deklaracji obiektów w polach Object, Extension i Remarq.


Sekcja Class

Sekcja Class przechowuje informacje o zadeklarowanych obiektach.


Dodatkowe metasymbole potrzebne do definicji sekcji [Class] to:


& lt;typ> ::= SHELL|BATCH

& lt;Znak> ::= Znak ASCII z wyjątkiem znaku separatora

& lt;Id$> ::= <Id$>|<Znak>

& lt;ClassDef> ::= <Znak> <sep> <Liczba> <sep>

<Liczba> <typ> <sep>

& lt;Deklaracja_Class> ::= <Deklaracja_Class> <ClassDef> |

<ClassDef>


Gdzie znak $ zastępuje znak spacji.


Definicja sekcji [Class] przedstawia się następująco:


[Class]

<Deklaracja_Class>

<Koniec_sekcji>


Zrozumiała stanie się definicja sekcji [Class] jeśli zostanie przytoczony przykład.


[Class]

\ <DIR> 17 17 SHELL

? $EXE$ 10 10 BATCH

? $COM$ 10 10 BATCH

? $BAT$ 10 10 BATCH


Powyżej zadeklarowano 4 typy obiektów występujących w systemie zbiorów.

Rozpoznanie typu obiektu odbywa się na podstawie wierszy zwracanych przez polecenie dir i informacji zawartych w sekcji [Class]

Kolejność zadeklarowanych obiektów jest znacząca. Na postawie kolejności zadeklarowanych obiektów ustalane są później priorytety przy identyfikacji obiektów.

W pierwszej kolumnie znajduje się informacja zawierająca identyfikator obiektu. W drugiej kolumnie znajduje się wzorzec na podstawie którego obiekty są identyfikowane. W kolumnie trzeciej i czwartej znajduje się informacja o miejscu występowania wzorca. W ostatniej kolumnie znajduje się informacja o sposobie przetwarzania obiektów.

Obiekty oznaczone jako "\" i "?" są na traktowane przez pośrednictwo jako katalogi i pliki wykonywalne. Zaleca się nie usuwać linii opisujących te obiekty.

Jeśli chcemy zadeklarować nowy typ w sekcji [Class] należy dodać jego deklaracje.

I tak np. Zadeklarowane obiektu "Program w języku C++" może się wiązać z dodaniem następującej linii do sekcji [Class]


C $CPP$ 10 10 BATCH


Od tej chwili pojawia się w naszym pośrednictwie nowy obiekt: "program w języku C++". Można zadeklarować sposób jego edycji, uruchamiania lub kompilacji. Wszystkie te operacji deklaruje się w sekcji [Method]

Sekcja Method

W sekcji [Method] definiuje się metody. Wykorzystuje się do tego celu język poleceń wsadowych interpretera COMMAND.COM.


Dodatkowe metasymbole potrzebne do definicji sekcji [Method] to:


& lt;Comm> ::= $SPC | $EOL | $OBJECT | $EXT | $ARG |

$PATH | $PATH2 | $TEMP1 | $TEMP2 | $ANSWER |

$DRV | $COMMAND | $STATE | $DIRTYDATA |

polecenie interpretera poleceń

& lt;Polecenie> ::= <Polecenie> <sep> <Comm> <sep> |

<Comm> <sep>

& lt;Method> ::= GET | SET | RET | COPY | MOVE |

REN | DEL | CREA | EDIT | PROC

& lt;MethodDef> ::= <Znak> <sep> <Method> <sep>

<Polecenie> $END

& lt;Deklaracja metod> ::= <Deklaracja metod>

<sep> <MethodDef> | <MethodDef>


Definicja sekcji [Method]:


[ Method]

& lt;Deklaracja metod>

& lt;Koniec_sekcji>


Ta prosta definicja umożliwia stworzenie pełnego zestawu metod operujących na systemie zbiorów.

Zmienne i polecenia podlegające interpretacji:

$SPC

Spacja - polecenie wstawienia znaku spacji

$EOL

Znak końca linii - polecenie wstawienia znaku Enter< /FONT>

$OBJECT

Obiekt zadeklarowany w sekcji [Setup]

$EXT

Rozszerzenie zadeklarowane w sekcji [Setup]

$ARG

Argument polecenia

$PATH

Ścieżka z panelu aktywnego

$PATH2

Ścieżka z panelu nieaktywnego

$TEMP1

Zbiór tymczasowy panelu aktywnego

$TEMP2

Zbiór tymczasowy panelu nieaktywnego

$ANSWER

Zbiór w którym przechowywane są odpowiedzi pro cesu

$DRV

Nazwa dysku (litera) z panelu aktywnego

$COMMAND

Polecenie

$STATE

Zmienne stanu pośrednictwa

$DIRTYDATA

Zbiór w którym przechowywane jest poprzednie p olecenie

$END

Polecenie - koniec definicji metody


Identyfikatory metod:

SET

Konstruktor

GET

Destruktor

RET

Operacja "Przetwórz"

COPY

Operacja "Kopiuj"

MOVE

Operacja "Przenieś"

REN

Operacja "Zmień nazwę"

DEL

Operacja "Usuń obiekt"

CREA

Operacja "Utwórz"

EDIT

Operacja "Edytuj"

PROC

Operacja "Przetwórz"


Przykład pokazujący w jaki sposób należy zadeklarować sekcję [Method]


[Method]

;

; Konstru ktory i destruktory

;

;Definicja destruktora dla obiektu typu Katalog

\ GET @ REM $SPC dir $SPC desctructor $EOL

@ cd $SPC > $TEMP1 $EOL

@ dir /oge $SPC >> $TEMP1 $END

;Definicja konstruktora dla obiektu typu Katalog

\ SET @ REM $SPC dir $SPC constructor $EOL

@ $DRV : $EOL

@ cd $SPC " $PATH " $END

;Definicja destruktora dla obiektu dowolnego typu

* GET @ REM $SPC destructor $EOL

@ cd $SPC > $TEMP1 $EOL

@ dir /oge $SPC >> $TEMP1 $EOL

@ echo $SPC $PATH2 > $TEMP2 $EOL

@ dir /oge $SPC " $PATH2 " >> $TEMP2 $END

;Definicja konstruktora dla obiektu dowolnego typu

* SET @ REM $SPC constructor $EOL

@ $DRV : $EOL

@ cd $SPC " $PATH " $EOL

@ echo $SPC $COMMAND > $DIRTYDATA $EOL

@ echo $SPC $STATE >> $DIRTYDATA $EOL

@ type $SPC nul > $ANSWER $END


;

; Operacj a dla zbiorów wykonywalnych

;

;Definicja operacji "Uruchomienie" dla obiektu typu "Wykonywalny"

? RET $OBJECT $END

;Definicja operacji "Przetwórz"

? PROC start/m $SPC $OBJECT $END


;

; Operacj e dla katalogu

;

;operacja "Uruchomienie" dla obiektu typu Katalog

\ RET @ cd $SPC " $OBJECT " $END

;operacja "Kopiuj" dla katalogu

\ COPY @ xcopy32 $SPC " $OBJECT " $SPC " $ARG " >> $ANSWER $END

;operacja "Utwórz" dla katalogu

\ CREA @ mkdir " $OBJECT " $END

;operacja "Usuń" dla katalogu

\ DEL @ deltree /Y $SPC " $OBJECT " >> $ANSWER $END

;operacja "edytuj" dla katalogu

\ EDIT @ cd $SPC " $OBJECT " $END


;

; Operacj e dla domyślnego obiektu (pliku)

;

;operacja "Kopiuj" dla domyślnego obiektu

* COPY @ xcopy32 $SPC " $OBJECT " $SPC " $ARG " >> $ANSWER $END

;operacja "przenieś" dla domyślnego obiektu

* MOVE @ move $SPC " $OBJECT " $SPC " $ARG " >> $ANSWER $END

;operacja "Zmień nazwę" dla domyślnego obiektu

* REN @ ren $SPC " $OBJECT " $SPC " $ARG " >> $ANSWER $END

;operacja "Usuń" dla domyślnego obiektu

* DEL @ del $SPC " $OBJECT " >> $ANSWER $END

;operacja "Utwórz" dla domyślnego obiektu (tworzony jest plik)

* CREA @ type $SPC nul> " $OBJECT " $END

;operacja "Edytuj" dla domyślnego obiektu

* EDIT @ edit $SPC " $OBJECT " $END

;operacja "Przetwórz" dla domyślnego obiektu

* PROC @ echo $SPC processing..." $OBJECT " $END


Na powyższych przykładach, widać w jaki sposób należy deklarować metody. Pierwszy znak, określa klasę obiektu dla której metoda jest deklarowana.

Jeśli klasa obiektu oznaczona jest przez * (gwiazdkę) to mamy do czynienia z metodą dla obiektu klasy domyślnej.

Definicję klasy kończymy poleceniem $END.

Separatory pomiędzy poleceniami i zmiennymi są pomijane. Wstawianie separatora do tekstu polecenia można wymusić poleceniem $SPC.

Interpretacja metod w sekcji [Method] odbywa się na bieżąco, w czasie działania pośrednictwa.

Np zakładając że .

To operacja "kopiowanie" dla tego przykładu jest tłumaczona następująco.


@ REM constructor

@ C:

@ cd "C:\TEST"

@ echo >C:\nck\common\dirty.dta

@ echo 1 2>>C:\nck\common\dirty.dta

@ type nul>C:\nck\common\answer.tmp

@ xcopy32 "PLIK.TST" "C:\DRUGI">>C:\nck\common\answer.tmp

@ REM destructor

@ cd >C:\nck\common\nck1.tmp

@ dir/oge >>C:\nck\common\nck1.tmp

@ echo C:\DRUGI>C:\nck\common\nck2.tmp

@ dir/oge "C:\DRUGI">>C:\nck\common\nck2.tmp


Tak przygotowany zbiór wsadowy jest uruchamiany przez program NCK.

Sposób uruchomienia zbioru wsadowego jest zależny od typu wywoływanej metody oraz deklaracji sposobu uruchamiania (sekcja [Class]).