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] 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.
Jeśli <Liczba> przyjmie wartość: -1, to <Liczba> jest interpretowana jako maksymalna możliwa wartość.
Jeśli <Deklaracja_obiektu> przyjmie wartość: <sep> 1 <sep> 1, t o deklaracja obiektu jest traktowana jako deklaracja pusta.
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 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]
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 .
Katalog panelu aktywnego: C:\test
Katalog panelu nieaktywnego: C:\drugi
Obiekt przeznaczony do kopiowania (plik): plik.tst
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]).