home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga Shareware Floppies / ma91.dms / ma91.adf / KonwersjaLib.lha / Opis / konwersja.doc
Text File  |  1997-07-08  |  12KB  |  300 lines

  1. ZAWARTOÔÊ
  2.  
  3. konwersja.library/Konwertuj
  4. konwersja.library/PobierzStandard
  5. konwersja.library/RozpoznajStandard
  6. konwersja.library/--informacje--
  7. konwersja.library/Konwertuj                       konwersja.library/Konwertuj
  8.  
  9.    NAZWA
  10.          Konwertuj - funkcja przeprowadza konwersjë pliku
  11.  
  12.    ROZPISKA
  13.          blad = Konwertuj(bufor, rozmiar, atrybuty, nowybufor, nowyrozmiar,
  14.          D0               A0     D0       D1        A1         A2
  15.                          zrodlowy, docelowy, flagi, funkcja, dane)
  16.                          D2:16     D3:16     D4:8   A3       A4
  17.  
  18.          ULONG Konwertuj(UBYTE *, ULONG, ULONG, UBYTE **, ULONG *,
  19.                          WORD, WORD, UBYTE, BOOL (*)(), APTR);
  20.  
  21.    OPIS
  22.          Funkcja  ta  spowoduje  przekonwertowanie  tekstu ze standardu
  23.          úródîowego na standard docelowy.
  24.  
  25.          UWAGA: Konwertowane  dane zapisywane sâ do nowego bufora!
  26.                 Jest to jedyne wyjôcie poniewaû przy zmianie LF na
  27.                 CR+LF  zwiëksza  sië  dîugoôê  bufora  i  úródîowy
  28.                 zostaîby przepeîniony.
  29.  
  30.          Konwersja na zwykîej A500 wynosi przeciëtnie 40 KB/sek.
  31.  
  32.          Moûna  równieû  przekazaê  jej  adres  funkcji,  która  bëdzie
  33.          wywoîywana  podczas  konwertowania  zawartoôci bufora. Funkcja
  34.          powinna mieê nastëpujâcâ postaê:
  35.  
  36.          BOOL __stdargs mojaFunkcja (ULONG calosc, ULONG gotowe, APTR dane);
  37.  
  38.          Jeôli  nie ûyczysz sobie podawania wîasnej funkcji, podaj w to
  39.          miejsce NULL. Funkcja moûe byê wywoîana z dwóch powodów:
  40.  
  41.           - aby  przekazaê  uûytkownikowi iloôê przekonwertowanych danych
  42.           - aby przerwaê konwersjë
  43.  
  44.          Do   funkcji  uûytkownika  bëdâ  przekazywane  trzy  argumenty
  45.          (argumenty sâ przekazywane na stosie):
  46.  
  47.          calosc - caîkowita dîugoôê bufora
  48.          gotowe - dîugoôê juû przekonwertowanych danych
  49.          dane   - dane uûytkownika
  50.  
  51.          Jeôli    funkcja   zwróci   wartoôê TRUE,   konwersja   bëdzie
  52.          przebiegaîa   nadal,  w  przypadku  wartoôci  FALSE  konwersja
  53.          zostanie przerwana.
  54.  
  55.          Uûytkownicy  SAS/C powinni dodaê __saveds jeôli kompilujâ swój
  56.          program  w modelu 'smalldata', a chcâ uûywaê danych globalnych
  57.          w swojej funkcji.
  58.  
  59.          Jeûeli   piszemy   funkcjë   w  asemblerze  naleûy  przechowaê
  60.          zawartoôê wszystkich rejestrów;
  61.  
  62.          PRZYKÎAD:
  63.  
  64.          BOOL __stdargs __saveds mojafunkcja (ULONG calosc, ULONG gotowe, APTR dane)
  65.          {
  66.            if (SetSignal (0L, SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C)
  67.              {
  68.                printf ("Konwersja przerwana!\n");
  69.                return (0);
  70.              }
  71.            else
  72.              {
  73.                printf ("Przekonwertowane: %d%%\n", (gotowe * 100) / calosc);
  74.                return (1)
  75.              }
  76.          }
  77.  
  78.    WEJÔCIE
  79.          bufor        - bufor zawierajâcy wczytany plik tekstowy
  80.          rozmiar      - rozmiar bufora
  81.          atrybuty     - typ pamiëci, która bëdzie zarezerwowana jako nowy
  82.                         bufor (MEMF_CHIP, MEMF_FAST, MEMF_PUBLIC)
  83.          &nowybufor   - adres zmiennej, w której bëdzie umieszczony adres
  84.                         pamiëci przydzielonej dla bufora wyjôciowego
  85.          &nowyrozmiar - adres zmiennej, która bëdzie zawieraîa dîugoôê
  86.                         przydzielonego bufora wyjôciowego
  87.          zrodlowy     - numer standardu úródîowego
  88.          docelowy     - numer standardu docelowego
  89.          flagi        - flagi dla konwersji
  90.          dane         - dane uûytkownika, te dane bëdâ przekazywane do
  91.                         funkcji uûytkownika jako trzeci argument
  92.  
  93.                         KONWF_ZMIENNL:  ustawienie  tej flagi spowoduje
  94.                                         zmianë  znaków koïca lini z: LF
  95.                                         na CR+LF i odwrotnie.
  96.  
  97.                         KONWF_DODAJEOF: ustawienie  tej flagi spowoduje
  98.                                         dodanie  znaku  EOF  na  koniec
  99.                                         pliku.  Opcja  ta  dziaîa tylko
  100.                                         jeôli  nastëpuje zmiana z LF na
  101.                                         CR+LF,  a wiëc musi byê równieû
  102.                                         ustawiona opcja KONWF_ZMIENNL.
  103.  
  104.          funkcja      - funkcja uûytkownika (patrz wyûej)
  105.  
  106.    WYNIK
  107.          blad - wynik konwersji
  108.                 KONBLAD_OK:                    jeôli konwersja przebiegîa
  109.                                                prawidîowo.
  110.                 KONBLAD_KONWERSJA_PRZERWANA:   taki  wynik  jest zwracany
  111.                                                kiedy  konwersja  zostanie
  112.                                                przerwana.
  113.                 KONBLAD_STANDARD_NIE_ISTNIEJE: podany  przez  uûytkownika
  114.                                                standard nie istnieje.
  115.                 KONBLAD_BRAK_PAMIECI:          zabrakîo pamiëci.
  116.  
  117.    ZOBACZ
  118.          RozpoznajStandard, libraries/konwersja.h
  119.  
  120. konwersja.library/PobierzStandard           konwersja.library/PobierzStandard
  121.  
  122.    NAZWA
  123.          PobierzStandard - funkcja zwraca wskaúnik do struktury Standard
  124.  
  125.    ROZPISKA
  126.          standard = PobierzStandard(numer)
  127.          D0                         D0
  128.  
  129.          struct Standard *PobierzStandard(WORD);
  130.  
  131.    OPIS
  132.          Funkcja  zwraca  wskaúnik  do struktury Standard. Nie jest ona
  133.          moûe zbytnio uûyteczna, ale nóû sië komuô przyda.
  134.  
  135.    WEJÔCIE
  136.          numer - numer standardu
  137.  
  138.    WYJÔCIE
  139.          standard - wskaúnik na strukturë Standard
  140.  
  141.    ZOBACZ
  142.          libraries/konwersja.h
  143.  
  144. konwersja.library/RozpoznajStandard       konwersja.library/RozpoznajStandard
  145.  
  146.    NAZWA
  147.          RozpoznajStandard - próbuje rozpoznaê standard liter w pliku
  148.  
  149.    ROZPISKA
  150.          numer = RozpoznajStandard(bufor, rozmiar)
  151.          D0                      A0     D0
  152.  
  153.          WORD RozpoznajStandard(UBYTE *, ULONG);
  154.  
  155.    OPIS
  156.          Funkcja ta próbuje rozpoznaê standard polskich liter w pliku.
  157.  
  158.    WEJÔCIE
  159.          bufor   - bufor zawierajâcy wczytany plik tekstowy
  160.          rozmiar - rozmiar bufora
  161.  
  162.    WYNIK
  163.          numer - numer  rozpoznanego  standardu, lub -1 w przypadku gdy
  164.                  operacja sië nie powiedzie.
  165.  
  166.    ZOBACZ
  167.          libraries/konwersja.h
  168.  
  169. konwersja.library/--informacje--
  170.  
  171.    STANDARDY DYSKOWE:
  172.  
  173.          Biblioteka   ta   sîuûy   do   konwersji   plików   tekstowych
  174.          zawierajâcych  polskie  znaki  zapisane w róûnych standardach.
  175.          Standardów  moûe  byê  wîaôciwie  nieograniczona  iloôê  (max.
  176.          32767).  Iloôê  standardów  zaleûy  tylko  wîaôciwie od iloôci
  177.          posiadanej pamiëci.
  178.  
  179.          Biblioteka posiada wbudowane 5 standardów, natomiast dodatkowe
  180.          8 znajduje sië w katalogu 'LIBS:Standardy'.
  181.  
  182.          Jeôli  potrzebujesz  jakiegoô innego standardu, który nie jest
  183.          rozpowszechniany wraz z bibliotekâ to moûesz stworzyê go sobie
  184.          samemu. Podajë przykîadowâ strukturë dla standardu Amiga PL.
  185.  
  186.          [STANDARD]
  187.          NAZWA="Amiga PL";
  188.          KODY=194,202,203,206,207,211,212,218,219,226,234,235,238,239,243,244,250,251;
  189.          ZL=164;
  190.  
  191.          '[STANDARD]' - jest   to   nagîówek,   po  którym  biblioteka
  192.                         orientuje sië czy wczytaîa wîaôciwy plik.
  193.  
  194.          'NAZWA='     - tutaj  naleûy  podaê  nazwë  standardu.  Jeôli
  195.                         nazwa   zawiera   spacje  to  naleûy  jâ  ujâê
  196.                         w  cudzysîów  '"'.  Nazwa  moûe  mieê  wraz ze
  197.                         spacjami  maksymalnie  8  znaków, w przeciwnym
  198.                         razie plik zostanie uznany za bîëdny.
  199.  
  200.          'KODY='      - tutaj  naleûy  podaê  18 kodów polskich znaków
  201.                         w  danym  standardzie.  Litery  naleûy podawaê
  202.                         w kolejnoôci - najpierw DUÛE, potem MAÎE. Kody
  203.                         naleûy  podawaê w formie ASCII, oddzielajâc je
  204.                         od siebie przecinkiem.
  205.  
  206.          'ZL='        - tutaj  naleûy  podaê kod znaku '¤' (zî). Jeôli
  207.                         standard  nie  posiada  takiego  znaku  trzeba
  208.                         wpisaê 'BRAK'.
  209.  
  210.          Kaûdâ  definicjë ('NAZWA=', 'KODY=', 'ZL=') naleûy zakoïczyê
  211.          ôrednikiem '; '.
  212.  
  213.          Sîowa  kluczowe  mogâ byê pisane zarówno duûymi jak i maîymi
  214.          literami, np. '[staNdArd]', 'nazwa='.
  215.  
  216.          Nie waûna jest równieû kolejnoôê podawania parametrów, tzn.
  217.  
  218.          NAZWA=        NAZWA=        ZL=           ZL=
  219.          KODY=         ZL=           KODY=         NAZWA=
  220.          ZL=           KODY=         NAZWA=        KODY=
  221.  
  222.    OPIS STRUKTURY STANDARD:
  223.  
  224.          Wîaôciwie nie ma o czym pisaê poniewaû opis znajdujë sië juû
  225.          w plikach INCLUDE, no ale...
  226.  
  227.          struct Standard                      STRUCTURE Standard,MLN_SIZE
  228.            {                                     WORD   stan_Numer
  229.              struct MinNode stan_Node;           UBYTE  stan_Flagi
  230.              WORD  stan_Numer;                   STRUCT stan_Nazwa,9
  231.              UBYTE stan_Flagi;                   STRUCT stan_Kody,20
  232.              UBYTE stan_Nazwa[9];                LABEL  Standard_SIZE
  233.              UBYTE stan_Kody[20];
  234.            };
  235.  
  236.          Pierwsze pole to struktura MinNode, której opis jest w pliku
  237.          'exec/nodes.h'.
  238.  
  239.          stan_Numer  - oznacza  numer przyporzâdkowany standardowi. Nie
  240.                        NALEÛY  wnioskowaê, ûe dany standard bëdzie miaî
  241.                        zawsze  taki  sam  numer. Standardy po wczytaniu
  242.                        sortowane   sâ   w   kolejnoôci   alfabetycznej,
  243.                        a  dopiero  póúniej  sâ numerowane, wiëc dodanie
  244.                        nowego  standardu  moûe spowodowaê zmianë numeru
  245.                        poprzednich.
  246.  
  247.          stan_Flagi  - mogâ tu wystëpowaê nastëpujâce flagi:
  248.  
  249.                        STANF_MAZL:  oznacza, ûe standard posiada znak
  250.                                     '¤' (zî).
  251.  
  252.                        STANF_WBUD:  ta  flaga uûywana jest tylko przez
  253.                                     bibliotekë  i oznacza, ûe standard
  254.                                     jest w niâ wbudowany.
  255.  
  256.                        NIE NALEÛY ZMIENIAÊ STANU TYCH FLAG!!!
  257.  
  258.          stan_Nazwa  - tutaj  znajduje  sië  nazwa standardu zakoïczona
  259.                        bajtem '\0'.
  260.  
  261.          stan_Kody   - tutaj znajduje sië 18 kodów polskich znaków oraz
  262.                        kod  znaku  '¤'  (zî)  lub  '\0' jeôli standard
  263.                        takiego znaku nie posiada.
  264.  
  265.     JAK POBRAÊ STANDARDY:
  266.  
  267.          Program  uûywajâcy  tej biblioteki musi w jakiô sposób pobraê
  268.          standardy, które oferowane sâ przez bibliotekë.
  269.  
  270.          W   bazie  biblioteki  znajduje  sië  lista  ze  standardami:
  271.          kon_Standardy. Jest to struktura typu MinList, wiëc standardy
  272.          naleûy odczytywaê tak samo jak 'wëzîy' (nodes) z listy.
  273.  
  274.          Poniûej znajduje sië przykîad w jëzyku C i w asemblerze.
  275.  
  276.          dla C:
  277.  
  278.          struct Standard *s;
  279.  
  280.          for (s = (struct Standard *) (KonBase->Kon_Standardy.mlh_Head);
  281.               (s->stan_Node.mln_Succ);
  282.               (s = (struct Standard *) s->stan_Node.mln_Succ))
  283.              )
  284.                s - wskazuje na strukturë Standard
  285.  
  286.          dla asemblera:
  287.  
  288.          move.l  _KonBase,a6
  289.          move.l  kon_Standardy(a6),a0
  290.      .pobierz_nastepny:
  291.          tst.l   MLN_SUCC(a0)
  292.          beq.s   .koniec_listy
  293.  
  294.          a0 - wskazuje na strukturë Standard
  295.  
  296.          move.l  MLN_SUCC(a0),a0
  297.          bra.s   .pobierz_nastepny
  298.      .koniec_listy:
  299.          rts
  300.