9. PRYWATNA SKRZYNKA ELEKTRONICZNA


  Skrzynka elektroniczna programu pozwala na zapis prywatnych wiadomości i ich dalsz± retransmisję w sieci. Dodatkowo możliwa jest także automatyczna rejestracja wiadomości za pomoc± funkcji odczytu ("Mail scan") lub poprzez monitor selektywny.
    W nagłówkach zapisywanych wiadomości podawany jest czas UTC, przy czym różnica czasu lokalnego w stosunku do UTC musi być podana w konfiguracji programu. Wiadomości w skrzynce s± uporz±dkowane w postaci rubryk, analogicznie jak w regularnych skrzynkach sieci. Wybór i założenie odpowiednich rubryk należy do operatora stacji. Rubryki niepoż±dane wymienione s± w zbiorze BADNAMES.WGT. Retransmisja poczty wymaga dokładnego wypróbowania w celu uniknięcia zakłóceń w pracy regularnych stacji sieci pakiet-radio. Zestaw rozkazów obsługi skrzynki i ich składnia s± wzorowane na systemie Die-Box. W obecnej wersji nie można wywoływać programów dodatkowych (znanych np. ze skrzynek BCM pod nazw± RUN).

9.1. ZESTAW ROZKAZÓW

    Pisownia rozkazów jest dowolna - program nie odróżnia dużych i małych liter. Większość rozkazów może być skrócona do części podanej w instrukcji dużymi literami. Niektóre z rozkazów s± dostępne tylko dla operatora stacji względnie dla osób którym przyznano uprawnienia operatora. Część rozkazów (np. odczyt, kasowanie) wymaga podania jako parametru zakresu numerów wiadomości. Użycie numeracji nie różni się od stosowanej w skrzynkach innych systemów. Przykłady:
2-5 - oznacza wiadomości od drugiej do pi±tej.
1- - oznacza wszystkie wiadomości wł±cznie z pierwsz±.
-3 - oznacza wiadomości o numerach mniejszych lub równych 3.
10 - oznacza pojedyńcz± wiadomość.
W rozkazie CHECK można jako parametr podać hasło selekcji, np.
CHECK 1-100 < JNOS
Hasło poszukiwane jest w tytule wiadomości lub w adresie nadawcy (może to być więc znak wywoławczy).
    Parametry nieobowi±zkowe podane s± w nawiasach kwadratowych (nie należy ich podawać w rozkazie). Alternatywne parametry rozkazów oddzielone s± pionow± kresk±.
Spis rozkazów:
BBS - wywołuje informacje o znanych skrzynkach elektronicznych. Jest ona zawarta w zbiorze HPATH.WGT. Jako parametr można podać znak skrzynki. Rozkaz BBS < WinGT wywołuje spis stacji, w których opisie znajduje się symbol WinGT.
BID [identyfikator][-] - pozwala sprawdzić, czy w skrzynce występuje wiadomość o podanym identyfikatorze BID. Podanie po identyfikatorze znaku minus powoduje skasowanie wiadomości. Do jej odzyskania służy rozkaz NEU.
BIDCHECK - odpowiada rozkazowi CHECK z tym, że zamiast daty zapisu wiadomości wyświetlany jest jej identyfikator BID. Może to ułatwiać automatyczn± selekcję wiadomości. Dopuszczalnymi skrótami rozkazu s± BC lub CHECKB.
CHECK [rubryka][zakres][< hasło] - wyświetla spis wszystkich wiadomości albo spis wiadomości spełniaj±cych podane kryteria.
Przykład: CHECK TCPIP 1-10 COMP ON|OFF - wł±czenie lub wył±czenie kompresji. Kompresja wiadomości została przedstawiona powyżej.
DEFLT - wyświetla domyślny czas składowania wiadomości w rubrykach, dla których brak jest definicji w zbiorze RUBRIKEN.WGT. Wartość ta zawarta jest w zbiorze WINGT.CFG w linii DEFAULTLT.
DES ON Dir - wywołuje spis rubryk wraz z podaniem liczby wiadomości w każdej z nich. Liczba ta uwzględnia wiadomości skasowane logicznie.
ERASE [nazwa rubryki][zakres] - służy do logicznego skasowania wiadomości. Wiadomości mog± być kasowane przez nadawcę, adresata albo operatora stacji.
ESTAT - wywołanie statystyki wypełnienia rubryk częściowo w postaci graficznej.
FORward [rubryka][zakres] > adres - rozkaz dostępny dla operatora. Pozwala on na retransmisję wybranych wiadomości. Przykład: FOR TNC 1-5 > OE1KDA.
GARBAGE [+] - rozkaz dostępny tylko dla operatora. Powoduje fizyczne skasowanie wiadomości usuniętych za pomoc± rozkazu ERASE. Znak plus powoduje skopiowanie także nie zmienionych rubryk.
GTODOS - rozkaz dostępny tylko dla operatora. Służy do przejścia na poziom systemu emulacji operacyjnego DOS. Do dyspozycji stoj± rozkazy: DIR, CD, MD, MKDIR, RD, RMDIR, SPGET, DPGET, COPY, DEL, REN, VER i EXIT. Rozkazy SPGET i BPGET służ± do odczytu zbiorów dwójkowych w formatach odpowiednio SP i DP.
HEAP [0|1|2] - powoduje wyświetlenie pojemności wolnego obszaru hałdy. Rozkaz ma znaczenie diagnostyczne. Do jego wywołania konieczny jest poziom uprawnień operatora (127).
HELP [rozkaz]- wywołanie pomocy. Teksty pomocy zawarte s± w zbiorze HELP.HLP znajduj±cym się w katalogu \MAIL\HELP. Podanie jako parametru nazwy rozkazu powoduje wywołanie bardziej szczegółowych informacji. Informacje te s± zawarte w zbiorach nosz±cych nazwę rozkazu i rozszerzenie HLP, np. ERASE.HLP. Teksty pomocy mog± zawierać metasymbole identyczne jak w tekstach powitalnych (patrz: WINGT.CON).
HOLD - wywołanie spisu wiadomości zatrzymanych do dyspozycji operatora.
INFO - służy do wywołania informacji znajduj±cej się w zbiorze WINBOX.INF. Tekst informacji może zawierać metasymbole.
ISREG - informuje o tym, czy operator korzysta z zarejestrowanej wersji WINGT. LEVEL znak uprawnienia - służy do przyznania korespondentom odpowiednich uprawnień. Operator stacji otrzymuje poziom 127 - poziom ten jest automatycznie dostępny z konsoli.
LIFETIME rubryka [zakres] #wartość - ustala czas składowania wiadomości lub dokonuje jego zmiany. Przykład LIFETIME TCPIP 1-100 #30.
Dopuszczalnym zakresem jest #0 do #365. Zero oznacza czas nieograniczony.
List [rubryka][zakres] - wywołanie spisu treści podanej albo bież±cej rubryki.
LOG [znak] - wywołanie wyciagu z dziennika stacji.
LT - odpowiada rozkazowi LIFETIME.
MBX rubryka zakres > @nowy_adres - powoduje retransmisję wiadomości pod nowy adres. Mog± to być np. wiadomości błędnie zaadresowane.
MSG znak tekst - nadanie krótkiej wiadomości do użytkownika poł±czonego ze skrzynk±, np. MSG oe1kda Cześć!.
MYBBS znak - podanie znaku skrzynki macierzystej. NAME imię - podanie imienia przez użytkownika. Dane odnosz±ce się do użytkowników stacji znajduj± się w zbiorze USERLOG.BIB.
PRINT [rubryka][zakres] - wydruk spisu treści podanej albo bież±cej rubryki.
PS - informacja o stacjach poł±czonych ze skrzynk±.
PW [hasło_dostępu] [-] - pozwala na wprowadzenie, zmianę lub skasowanie hasła dostępu do skrzynki.
PWTYPE BCM|MD2|MD5|DES - służy do wyboru algorytmu generacji i sprawdzania hasła dostępu. Najlepsze zabezpieczenie zapewniaj± ostatnie dwa algorytmy.
Quit - przerwanie poł±czenia. Nadawany jest tekst pożegnalny znajduj±cy się w zbiorze WINBOX.DIS. Tekst może zawierać metasymbole.
READ [rubryka] zakres - odczyt wiadomości.
READLONG - odpowiada rozkazowi READ z tym, że wyświetlany jest pełny nagłówek wiadomości.
RELEASE - udostępnienie dla wszystkich wiadomości zatrzymanych dla operatora (patrz HOLD).
RELOAD - powoduje ponowne wczytanie zbiorów zawieraj±cych informacje organizacyjne np. RUBRIKEN.WGT po dokonaniu w nich zmian.
Możliwymi parametrami s± SF (zbiory dotyczace retransmisji poczty), PATH (WINGT.LIN), TRANSFER (TRANSFER.WGT), BADNAMES (BADNAMES.WGT), RUBRIKEN (RUBRIKEN.WGT) i ALL (wszystkie). W nawiasach podano nazwy wczytywanych zbiorów.
REPLY [rubryka numer] - służy do nadania odpowiedzi na ostatnio przeczytan± albo wymienion± wiadomość.
REROUTE - bez parametrów służy do sprawdzenia czy spis adresów dcelowych zawarty w zbiorze I.IDX jest aktualny,czy tez wiadomości musz± być przekazane pod inny adres. Parametr "zakres < skrzynka_docelowa" służy do zmiany adresu docelowego dla wybranych wiadomości.
RESLOG - służy do wczytania protokółu resynchronizacji do rubryki RESYNC.
SEND znak @skrzynka #czas tytuł - służy do nadania wiadomości. W przypadku opuszczenia szasu składowania przyjmowana jest domyślnie wartość 10 dni. Opuszczenie w adresie części @skrzynka powoduje nadanie wiadomości do skrzynki macierzystej adresata (podanej za pomoc± rozkazu MYBBS) albo w przypadku braku tej informacji pozostawienie wiadomości w lokalnej skrzynce.
SETPW znak hasło|[-] - wprowadzenie hasła dostępu dla użytkownika lub jego skasowanie.
SF znak - ręczne rozpoczęcie retransmisji poczty do danej skrzynki.
SFEXP - Rozkaz dostępny jest tylko dla operatora i powoduje zapis wiadomości przeznaczonych do retransmisji w zbiorze o rozszerzeniu EXP, zamiat rzeczywistej retransmisji. Zbiór pod nazw± .EXP znajduje się w katalogu \SFEXPORT.
SFIMP - rozkaz dostępny jest tylko dla operatora i służy do wczytania do skrzynki wiadomości ze zbioru EXP.
SFPW znak +|- - wł±czenie lub wył±czenie automatycznej generacji hasła dostępu używanego w trakcie retransmisji poczty.
SHOWFILT - wyswietla spis zainstalowanych filtrow wiadomości. Filtry te musz± znajdować się w katalogu FILTER.
STAT - wywołanie statystyki dotycz±cej pracy skrzynki.
SYSOP - rozpoczecie procedury zgłoszenia operatora skrzynki. Format zgłoszenia odpowiada formatom TNN i BCM.
SYSCHK - sprawdzenie czy otrzymano uprawnienia. Odpowiedzi± jest słowo "OK".
TRANSFER rubryka zakres > rubryka_docelowa [@skrzynka] - służy do kopiowania lub przesuwania wiadomości w skrzynce. Biuletyny s± przesuwane do rubryki docelowej, natomiast wiadomości prywatne s± kopiowane.
USER [znak] - wywołanie spisu użytkowników wraz z ew. dodatkowymi informacjami.
UTC - służy do wprowadzenia różnicy czasu w stosunku do UTC.

9.2. ZBIORY KONFIGURACYJNE

    Zbiory konfiguracyjne skrzynki musz± znajdować się w katalogu MAIL.
    Zbiór BADNAMES.WGT zawiera spis rubryk nie przyjmowanych przez skrzynkę.
    BOXLOG.WGT jest zakładany automatycznie i zawiera spis wiadomości znajduj±cych się w skrzynce. Spis ten wykorzystywany jest przez rozkaz CHECK.
    HPATH.WGT zawiera informacje o znanych skrzynkach sieci i trasach poł±czeń. Informacje te odczytywane s± z nagłówków otrzymanych wiadomości (z linii zawieraj±cej oznaczenie "R:"). Informacje te wykorzystywane s± w trakcie retransmisji poczty dodatkowo do tras wprowadzonych przez operatora. Mapa poł±czeń może być wyświetlona w oknie "Mapa" ("BBS MAP"). Zawartość okna może być przesuwana za pomoc± pasków lub klawiszy znacznika, POS1 i END. Podwójne zaznaczenie okna za pomoc± prawego lub lewego klawisza myszy powoduje jego powiększenie wzgl. zmniejszenie. Ten sam efekt osi±gany jest za pomoc± klawiszy "+" lub "-" na bocznej klawiaturze numerycznej. Zaznaczenie stacji mysz± przy naciśniętym klawiszu CTRL powoduje wyświetlenie znanych informacji o niej. Okno informacyjne zamykane jest za pomoc± przycisku "OK".
    MSGIDLOG.BIB zawiera spis identyfikatorów biuletynów (BID).
    LISTSERV.WGT zawiera spisy adresów (pseudorubryk) dla wewnętrznego rozdziału poczty. Dla każdej z pseudorubryk należy następnie założyć zbiór o tej samej nazwie i rozszerzeniu LST zawieraj±cy rozdzielnik (znaki i adresy docelowe użytkowników). Wiadomości adresowane do każdej z wymienionych pseudorubryk s± kopiowane do prywatnych rubryk adresatów wg. rozdzielnika. Przykład: spis LISTSERV.WGT zawiera nazwę GRUPA_A. W zbiorze GRUPA_A.LST znajduje się zapis OE1KDA @OE1XAB.AUT.EU itd. Wiadomość nadana pod adres GRUPA_A (S GRUPA_A ....) zostanie więc przesłana m.in do OE1KDA jako wiadomość prywatna.
    RUBRIKEN.WGT zawiera spis rubryk, przyznanych im czasów składowania wiadomości i niezbędnych uprawnień dostępu, składnia
RUBRYKA:CZAS:UPRAWNIENIA.
Rubryki nie wymienione w zbiorze otrzymuj± domyślne czasy składowania.
    TCPIP.BOX zawiera spis stacji TCPIP.
    TRANSFER.WGT zawiera przyporz±dkowanie nazw rubryk lokalnych do adresów otrzymywanych w trakcie retransmisji poczty, np. TNC2 TNC powoduje, że wszystkie wiadomości przeznaczone do rubryki TNC2 znajduj± się w lokalnej rubryce TNC. Ułatwia to zachowanie przejrzystej struktury rubryk.
    USERLOG.BIB zawiera informacje o znanych użytkownikach skrzynki. Należ± do nich znak wywoławczy, imię, znak skrzynki macierzystej i czas ostatniej ł±czności.
    WINBOX.CON zawiera teksty powitalne. W tekstach mog± znajdować się metasymbole.
    WINBOX.DIS zawiera teksty pożegnalne.
    WINBOX.INF zawiera informacje o skrzynce.
    CMDLEVEL.WGT zawiera spis minimalnych poziomów uprawnień koniecznych dla skorzystania z odpowiednich rozkazów skrzynki. Poziomy uprawnień nie mog± być niższe aniżeli wartości graniczne zakodowane w programie. Zapobiega to np. przed skorzystaniem z rozkazów zarezerwowanych dla operatora skrzynki.
    REJECT.WGT - zawiera kryteria odrzucania poczty otrzymywanej w drodze retransmisji. Mog± to być nazwy rubryk (oznaczone w zbiorze symbolem "%RUBRYKA"), znaki skrzynek z których pochodzi poczta (symbol "@ZNAK"), znaki nadawców ("<ZNAK") albo identyfikatory ("$BID").
    Każda z linii zbioru zawiera jeden z podanych symboli wraz z dalszymi danymi - znakami, nazwami rubryk itp. Przykłady:
%PORNO, %SOFTWARE@WW, <DG2MMV.

9.3. KATALOGI

    Katalog MAIL zawiera następuj±ce katalogi podrzędne:
- HELP - znajduj± się w nim teksty pomocy ogólne (zbiór HELP.HLP) i szczegółowe (zbiory rozkaz.HLP). Zawartość zbiorów jest dowolna pod warunkiem, że będ± one stanowić rzeczywist± pomoc dla użytkowników.
- SF - znajduj± się w nim zbiory *.SF zawieraj±ce informacje o trasach retransmisji poczty. Zbiory te s± wczytywane tylko w momencie wywołania programu. Po dokonaniu zmian należy więc ponownie uruchomić program.

9.4. RETRANSMISJA POCZTY

    Retransmisja poczty w zależności od jej adresu docelowego (członu @skrzynka lub @obszar, np. @SP6KBL albo @POL) wymaga wprowadzenia przez operatora dodatkowych informacji znajduj±cych się w zbiorach znak.SF (np. SP6KBL.SF). Format zbiorów przejęty został z programu DP. Operator stacji musi zwrócić szczególn± uwagę na poprawność informacji zwi±zanych z retransmisj± i starannie skontrolować jej przebieg w celu uniknięcia zakłóceń w pracy sieci.
    Zbiory zawieraj± następuj±ce informacje, poprzedzone słowami zarezerwowanymi:
- SFPARMS - częstotliwości i czasy poł±czeń z dan± skrzynka sieci. Podane jest 9 parametrów, z których tylko część jest wykorzystywana przez WINGT. Parametrami tymi s± w kolejności:
- odstęp czasu (częstotliwość poł±czeń) w minutach
- numer kontrolera tnc
- warunek - 0 brak poł±czeń, 1 w momencie napływu wiadomości, 2 jak w (1) albo po upływie czasu "C2"
- maks. liczba użytkowników, parametr nie używany
- maks. liczba biuletynów, parametr nie używany
- maks. liczba propozycji, parametr nie używany
- czas C2, maksymalny czas oczekiwania dla warunku 2
- start, godzina poczatku, np. 1510 albo 0000
- zakończenie, najpóźniejsza godzina zakończenia, np. 2359.
Znaczenie słów zarezerwowanych:
- FOR - podaje adresy albo nazwy rubryk retransmitowanych do danej skrzynki.
- NOT - podaje adresy pomijane w retransmisji.
- NOTRUBRIK - podaje nazwy rubryk pomijane w retransmisji.
- NOTFROM - podaje znaki skrzynek, z których nie jest przyjmowana poczta.
Przykład (zawartość SP6KBL.SF):
FOR SP*
wszystkie wiadomości adresowane do stacji SP,
FOR EU POL WW
wszystkie wiadomości adresowane do @EU, @POl, @WW
NOTFROM OK1XYZ
wiadomości pochodz±ce od OK1XYZ nie s± retransmitowane dalej,
NOTRUBRIK GIF
wiadomości z rubryki GIF nie s± retransmitowane,
NOT THEBOX
wiadomości adresowane do @THEBOX nie s± retransmitowane.
    Dla każdej ze skrzynek partnerskich (tu przykładowo SP6KBL) należy założyć zbiór o nazwie znak.SF i podanej powyżej zawartości. W zbiorze WINGT.CFG należy podać nazwę katalogu zawieraj±cego zbiory w postaci:
MAILDIR=C:\WINGT\MAIL
lub podobnie w zależnosci od instalacji programu. W powyższym przykładzie zbiory *.SF musz± więc znajdować się w katalogu C:\WINGT\MAIL\SF. Automatyczne poł±czenie ze skrzynk± SP6KBL (i każd± inn±) wymaga umieszczenia w zbiorze SP6KBL wpisu "NODE=KBL_BOX". Zbiór WINGT.LIN musi też zawierać wpis trasy "=KBL_BOX..".
    Program WINGT może odczytywać imiona nadawców i znaki ich skrzynek macierzystych z nagłówków retransmitowanej poczty podobnie jak w przypadku bazy danych "WP" skrzynek F6FBB (patrz: "Literatura").

9.4.1. FILTRY WIADOMOŚCI

    Treść i znaki nadawców lub adresatów wiadomości poczty otrzymywanej w drodze retransmisji lub wpisywanej lokalnie do skrzynki mog± być sprawdzane za pomoc± dodatkowych programów filtrujacych. Pozwala to na automatyczne kasowanie lub zatrzymywanie do użytku operatora wiadomości zawieraj±cych wybrane słowa, terminy lub adresy w celu zapobieżenia rozpowszechnianiu poczty o treści obraźliwej lub niezgodnej z przepisami o ł±czności amatorskiej. Odczyt wiadomości zatrzymanych wymaga poziomu uprawnień operatora lub co najmniej poziomu 120. Wiadomości zatrzymane s± niewidoczne dla użytkowników o niższych poziomach uprawnień. Filtry używane musz± być zainstalowane w katalogu FILTER natomiast pozostałe rozprowadzane z porgramem w katalogu UNUSED. Operator może więc wybrać zestaw aktywnych filtrow zgodny z potrzebami. Zainstalowanie nowego filtru wymaga skopiowania go do katalogu FILTER i ponownego uruchomienia programu WINGT/WINBOX.

9.4.1.1. FILTR GREPBAD.DLL

    Filtr służy do poszukiwania w tekstach wybranych haseł lub ich fragmentów. Po ich znalezieniu podejmowana jest akcja ustalona przez operatora. Działanie filtru polega na porównywaniu ciagów liter stanowi±cych hasła z tekstem, dlatego też warto dobrze przemyśleć wybór haseł tak aby np. fragmenty znalezionych słów nie powodowaly błędnej reakcji. Zbyt duża liczba haseł odbija się niekorzystnie na szybkości pracy. Zbiór haseł i poż±danych reakcji zawarty jest w zbiorze GREPBAD.TXT o następujacym formacie:
H/D hasło, gdzie H oznacza zatrzymanie wiadomości a D jej skasowanie. Wiadomości s± kasowane dopiero po znalezieniu w nich co najmniej 10 niedozwolonych słów lub ich powtórzeń.
Przykłady:
D głupek
powoduje kasowanie wiadomości zawieraj±cych słowo "głupek".
D głup
powoduje skasowanie wiadomości zawieraj±cych sylabę "głup", a więc także i niewinne słowo "głupstwo".
H PZK
powoduje zatrzymanie do przejrzenia przez operatora wiadomości, które mog± zawierać wypowiedzi nt. PZK.

9.4.1.2. FILTR HOLDNOC.DLL

    Powoduje zatrzymanie wiadomości pochodz±cych od nadawcy o nieprawidłowym znaku (patrz: spis dozwolonych znaków).

9.4.1.3. INFORMACJE DLA PROGRAMISTÓW

    Programy filtrów moga być pisane w dowolnym jezyku i kompilowane za pomoc± dowolnego kompilatora pozwalaj±cego na generowanie 16-bitowych bibliotek DLL. Poniższy przykład napisany jest dla kompilatora Delphi, doswiadczeni programiści mog± jednak bez trudu wykorzystać go do pisania filtrów w jezyku "C":

Library Wgtplug;

Uses SysUtils, WinTypes, WinProcs;

Const  md_Forward = $01;
       md_Bin     = $02;
       md_Comp    = $04;
       md_Trans   = $08;
       md_NoUnDel = $10;
.      md_Voice   = $20;

{--- MsgFlags ---}

       mf_Ack      = $01;
       mf_Private  = $02;
       mf_Bulletin = $04;
       mf_System   = $08;
       mf_Readed   = $10;
       mf_Hold     = $20;   {--- dodano 17.6.97 ---}

       HFILE_ERROR = $FFFF;

Type TSenderStr = String[6];
     TBoardStr  = String[8];
     TBidStr    = String[12];
     TMBXStr    = String[40];
     TTitleStr  = String[80];



CONST fa_OK            = $0000;
      fa_Hold          = $0001;
      fa_Delete        = $0002;

      TheFilterVersion = $0100;

      TheFilterInfo    = 'Beta-Demofilter fuer WinBox und WinGT >= 3.00 (c)1997 Gerd Mitlaender';

Function FilterVersion: Word; export;
         Begin
            Result:= TheFilterVersion;
         end;

Function FilterInfo(AInfo: PChar; MaxLen: Word): Word; export;
         Begin
            Try
               StrPCopy(AInfo, Copy(TheFilterInfo, 1, MaxLen));
               Result:= strlen(AInfo);
            Except
               Result:= 0;
            end;
         end;

function FilterProc(Var BID         :  TBidStr;
                    Var Destination :  TBoardStr;
                    DestIsCall      :  Bool;
                    Var Sender      :  TSenderStr; { 24 senders call   }
                    SenderIsCall    :  Bool;
                    Var MBX_field   :  TMBXStr;    { 32 @mbx           }
                    MBXIsCall       :  Bool;
                    Var Title       :  TTitleStr;  { 74 subject        }
                    Var Datum       :  LongInt;
                    Var TXDatum     :  LongInt;
                    Var LifeTime    :  Word;       {164 lifetime       }
                    Var TXlifetime  :  Word;       {166 original lifetime }
                    Var BodyCRC     :  Word;       {168 for PACSAT broadc.}
                    Start           :  LongInt;    {170 offset in .IFO}
                    PackSize        :  LongInt;    {174 stored size   }
                    Size            :  LongInt;    {178 original size }
                    Var RXQrg       :  LongInt;    {182 receive QRG   }
                    Var RXFrom      :  TSenderStr; {186 received from  }
                    Var Deleted     :  boolean;    {194 delete flag    }
                    Var Mode        :  byte;       {195 binary, comp.type}
                    Var Level       :  byte;       {196 min. level for read}
                    Var Fwdct       :  byte;       {197 n * forwarded  }
                    Var Gate        :  byte;       {198 via tnc (unused)}
                    Var Msgflags    :  byte;       {199 special        }

                    Var AHandle     : THandle;
                    Var TheStart,
                        TheLen      : LongInt): WORD; export;
         Var AText  : Array[0..255] of Char;
             Written: Word;
         Begin

            Try
               Result:= fa_OK;
            {--- szukanie do końca zbioru ---}
               _llseek(AHandle, 0, 2);
            {--- pisanie tekstu ---}
               StrCopy(AText, #13#10#13#10'Filtered by: '#13#10'*** ');
               StrCat(AText, TheFilterInfo);
               StrCat(AText, ' ***'#13#10);
            {--- ustalenie nowej długości zbioru ---}
               Written:= _lwrite(AHandle, AText, StrLen(AText));
               If (Written <> HFILE_ERROR) Then
               Begin
                  TheLen := TheLen + Written;
               end;
            Except
               Result:= fa_OK;
            end;
         end;

Exports FilterVersion,
        FilterInfo,
        FilterProc;

begin
end.


    Biblioteka filtru musi zawierać trzy dostępne z zewn±trz funkcje o nazwach FILTERVERSION, FILTERINFO i FILTERPROC.
    Funkcja FILTERVERSION zwraca w odpowiedzi numer wersji API, dla której jest przeznaczony. W przypadku programów WINGT/WINBOX jest to $0100 lub 0x0100. Jest to zmienna typu WORD (Pascal, Delphi) lub "unsigned int" ("C") - o długości 2 bajtów.
    Funkcja FILTERINFO zwraca w odpowiedzi tekst opisuj±cy biblioteke DLL. Jest to zmienna łańcuchowa (łańcuch znaków, ang. string) typu PCHAR - tzn. zakończony znakiem 0x0 wg. konwencji języka "C". Długość tekstu znajduje się w zmiennej typu WORD lub "unsigned int".
    Funkcja FILTERPROC jest własciw± funkcj± filtruj±c± - tzn. wykonuje zamierzone zadanie. Wynik działalności opisany jest przez wartość odpowiedzi - stał± fa_OK ($0001 lub 0x0001), fa_Hold ($0002 lub 0x0002) albo fa_Delete ($0003_albo 0x0003). Znaczenie odpowiedzi wynika z ich nazw i nie wymaga dalszego wyjaśnienia.
    Identyfikatory zbiorów (dla funkcji Windows _lread, _lwrite itp.) zwi±zane z odczytem lub zapisem w zbiorze przekazywane s± w zmiennej "AHandle". Pocz±tek i koniec analizowanej wiadomości przekazywane s± za pomoc± zmiennych "TheStart" i "TheLen" typu LongInt lub "long". Znaczenie zmiennych wynika z ich nazwy i nie wymaga komentarzy. Zmienna MODE kombinowana jest ze stałymi zaczynaj±cymi się od "md_" za pomoc± funkcji "or" natomiast zmienna "MsgFlags" - z "mf_".
    Stałe o nazwach zaczynaj±cych się od "md_" opisuj± właściwości wiadomości (ang. mode), natomiast stałe o nazwach zaczynaj±cych się od "mf_" - stan wiadomości.
    Definicje j.np. TSenderStr odpowiadaj± definicjom zmiennych łańcuchowych w języku Pascal, tzn. długość łancucha znajduje się w pierwszym bajcie. W powyższym przykładzie TSenderStr [6] oznacza zmienn± o długości 7 bajtów, z tym że zasadnicza treść znajduje się w bajtach o numerach 1 do 6, natomiast długość w bajcie o numerze 0. W odróżnieniu od standardu języka "C" na końcu brak jest znaku 0x0.
    Biblioteka kompresji COMPDLL.DLL napisana jest częściowo w języku Pascal (deklaracje) a częściowo w jezyku Asembler (właściwa treść podprogramów). Zawarte w niej podprogramy mog± być wykorzystywane przez większ± liczbę progamów pracuj±cych w środowisku Windows. Deklaracje biblioteki przedstawione s± poniżej:
Unit Comp;
{$A+,B-,D+,E-,F-,G+,I-,L-,N-,O-,Q-,R-,S-,T-,V-}
{$C MOVEABLE DEMANDLOAD DISCARDABLE}
Interface
Function COMPVersion: Word;
Function COMPCode(Const Source; Len1: Word; Var Dest; Size: Word): Word;
Function COMPDecode(Const Source; Len1: Word; Var Dest; Size: Word): Word;
Implementation
   Function COMPVersion; External 'COMPDLL';
   Function COMPCode;    External 'COMPDLL';
   Function COMPDecode;  External 'COMPDLL';
end.

    Parametry SOURCE i DEST s± wskazaniami (ang. pointer) adresuj±cymi obszary zawieraj±ce dane do kompresji wgzl. dane skomprymowane, LEN1 jest długości± obszaru danych źródłowych a SIZE - maksymaln± długość obszaru docelowego. Długość ta musi być co najmniej o 1 bajt większa od długości obszaru źródłowego. Dane umieszczane w obszarze docelowym s± przekazywane jako odpowiedź funkcji. Funkcja COMPVersion zwraca w odpowiedzi numer wersji - część przed przecinkiem w wyższym bajcie natomiast część po przecinku - w niższym.
    Przykład kompresji (maksymalna długość tekstu źródłowego nie może przekraczać 254 znaków):
Byte(ZStr[0]):= COMPCode(QStr[1], Byte(QStr[0]), ZStr[1], SizeOf(ZStr)-1);
    Przykład dekompresji:
Byte(ZStr[0]):= COMPDecode(QStr[1], Byte(QStr[0]), ZStr[1], SizeOf(ZStr)-1);
    Pierwszy bajt skomprymowanego tekstu zawiera jego długość - 1. Zawartość 255 oznacza tekst nie skomprymowany. W przypadku obróbki zbiorów dwójkowych może się zdarzyć, że zawartość pierwszego bajtu nie odpowiada podanym kryteriom. Dlatego też mozna podj±ć próbę dekompresji danych wygl±daj±cych na skomprymowane. Jeżeli długość tekstu zdekomprymowanego jest dokładnie o jeden bajt większa od długości tekstu źródłowego oznacza to, ze zbiór źródłowy był skomprymowany.

9.5. POZIOMY UPRAWNIEŃ

    Poziomy uprawnień mog± być przyznawane tylko przez operatora stacji i maj± na celu ograniczenie dostępu użytkowników do poszczególnych rubryk skrzynki. Dopuszczalnym zakresem wartości jest 1 do 127. Operator stacji w trakcie dostępu z konsoli lub po zgłoszeniu się zdalnym otrzymuje zawsze poziom równy 127. Minimalne uprawnienia dostępu do rubryk skrzynki podane s± w zbiorze RUBRIKEN.WGT. Wartości± domyśln± jest 1. Po dokonaniu zmian w zbiorze należy wczytać go ponownie za pomoc± rozkazu RELOAD ALL lub jeszcze raz uruchomić program.
    Poziom uprawnień dla poszczególnych korespondentów definiowany jest za pomoc± rozkazu LEVEL znak poziom, np. LEVEL OE1KDA 100. Korespondenci o wyższych poziomach uprawnień musz± podać właściwe hasło dostępu.
    Hasła dostępu dla użytkowników mog± być wprowadzone przez operatora za pomoc± rozkazu SETPW lub przez użytkowników za pomoc± rozkazu PW (patrz: spis rozkazów). Operator może też wprowadzić hasła ograniczaj±ce dostęp do retransmisji poczty (patrz rozkaz: SFPW).

9.6. AUTOMATYCZNE POBIERANIE POCZTY

    WINGT wczytuje do skrzynki automatycznie wiadomości znajduj±ce się w katalogu maildir\IMPORT. Sprawdzanie zawartości katalogu odbywa się w odstępach 5-minutowych. Wiadomości te, zapisane przez dowolny inny program mog± być więc regularnie rozprowadzane w sieci. Wiadomości musz± mieć następuj±cy format:
OE1KDA @OE1KDA     de:SP6FIG 09.01.1995 09:35  10      0 Bytes
treść.....


    Główn± różnic± w stosunku do wiadomości w skrzynce jest brak linii zawieraj±cej identyfikator BID. Identyfikator ten jest generowany automatycznie po wczytaniu poczty do skrzynki. Pole "de:" musi zaczynać się na pozycji 18 w linii. Wszystkie linie musz± być zakończone znakami CR-LF.



Wydanie z dn. 10.09.1998.

© Prawa autorskie Krzysztof D±browski, OE1KDA.