home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
ma91.dms
/
ma91.adf
/
KonwersjaLib.lha
/
Opis
/
konwersja.doc
Wrap
Text File
|
1997-07-08
|
12KB
|
300 lines
ZAWARTOÔÊ
konwersja.library/Konwertuj
konwersja.library/PobierzStandard
konwersja.library/RozpoznajStandard
konwersja.library/--informacje--
konwersja.library/Konwertuj konwersja.library/Konwertuj
NAZWA
Konwertuj - funkcja przeprowadza konwersjë pliku
ROZPISKA
blad = Konwertuj(bufor, rozmiar, atrybuty, nowybufor, nowyrozmiar,
D0 A0 D0 D1 A1 A2
zrodlowy, docelowy, flagi, funkcja, dane)
D2:16 D3:16 D4:8 A3 A4
ULONG Konwertuj(UBYTE *, ULONG, ULONG, UBYTE **, ULONG *,
WORD, WORD, UBYTE, BOOL (*)(), APTR);
OPIS
Funkcja ta spowoduje przekonwertowanie tekstu ze standardu
úródîowego na standard docelowy.
UWAGA: Konwertowane dane zapisywane sâ do nowego bufora!
Jest to jedyne wyjôcie poniewaû przy zmianie LF na
CR+LF zwiëksza sië dîugoôê bufora i úródîowy
zostaîby przepeîniony.
Konwersja na zwykîej A500 wynosi przeciëtnie 40 KB/sek.
Moûna równieû przekazaê jej adres funkcji, która bëdzie
wywoîywana podczas konwertowania zawartoôci bufora. Funkcja
powinna mieê nastëpujâcâ postaê:
BOOL __stdargs mojaFunkcja (ULONG calosc, ULONG gotowe, APTR dane);
Jeôli nie ûyczysz sobie podawania wîasnej funkcji, podaj w to
miejsce NULL. Funkcja moûe byê wywoîana z dwóch powodów:
- aby przekazaê uûytkownikowi iloôê przekonwertowanych danych
- aby przerwaê konwersjë
Do funkcji uûytkownika bëdâ przekazywane trzy argumenty
(argumenty sâ przekazywane na stosie):
calosc - caîkowita dîugoôê bufora
gotowe - dîugoôê juû przekonwertowanych danych
dane - dane uûytkownika
Jeôli funkcja zwróci wartoôê TRUE, konwersja bëdzie
przebiegaîa nadal, w przypadku wartoôci FALSE konwersja
zostanie przerwana.
Uûytkownicy SAS/C powinni dodaê __saveds jeôli kompilujâ swój
program w modelu 'smalldata', a chcâ uûywaê danych globalnych
w swojej funkcji.
Jeûeli piszemy funkcjë w asemblerze naleûy przechowaê
zawartoôê wszystkich rejestrów;
PRZYKÎAD:
BOOL __stdargs __saveds mojafunkcja (ULONG calosc, ULONG gotowe, APTR dane)
{
if (SetSignal (0L, SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C)
{
printf ("Konwersja przerwana!\n");
return (0);
}
else
{
printf ("Przekonwertowane: %d%%\n", (gotowe * 100) / calosc);
return (1)
}
}
WEJÔCIE
bufor - bufor zawierajâcy wczytany plik tekstowy
rozmiar - rozmiar bufora
atrybuty - typ pamiëci, która bëdzie zarezerwowana jako nowy
bufor (MEMF_CHIP, MEMF_FAST, MEMF_PUBLIC)
&nowybufor - adres zmiennej, w której bëdzie umieszczony adres
pamiëci przydzielonej dla bufora wyjôciowego
&nowyrozmiar - adres zmiennej, która bëdzie zawieraîa dîugoôê
przydzielonego bufora wyjôciowego
zrodlowy - numer standardu úródîowego
docelowy - numer standardu docelowego
flagi - flagi dla konwersji
dane - dane uûytkownika, te dane bëdâ przekazywane do
funkcji uûytkownika jako trzeci argument
KONWF_ZMIENNL: ustawienie tej flagi spowoduje
zmianë znaków koïca lini z: LF
na CR+LF i odwrotnie.
KONWF_DODAJEOF: ustawienie tej flagi spowoduje
dodanie znaku EOF na koniec
pliku. Opcja ta dziaîa tylko
jeôli nastëpuje zmiana z LF na
CR+LF, a wiëc musi byê równieû
ustawiona opcja KONWF_ZMIENNL.
funkcja - funkcja uûytkownika (patrz wyûej)
WYNIK
blad - wynik konwersji
KONBLAD_OK: jeôli konwersja przebiegîa
prawidîowo.
KONBLAD_KONWERSJA_PRZERWANA: taki wynik jest zwracany
kiedy konwersja zostanie
przerwana.
KONBLAD_STANDARD_NIE_ISTNIEJE: podany przez uûytkownika
standard nie istnieje.
KONBLAD_BRAK_PAMIECI: zabrakîo pamiëci.
ZOBACZ
RozpoznajStandard, libraries/konwersja.h
konwersja.library/PobierzStandard konwersja.library/PobierzStandard
NAZWA
PobierzStandard - funkcja zwraca wskaúnik do struktury Standard
ROZPISKA
standard = PobierzStandard(numer)
D0 D0
struct Standard *PobierzStandard(WORD);
OPIS
Funkcja zwraca wskaúnik do struktury Standard. Nie jest ona
moûe zbytnio uûyteczna, ale nóû sië komuô przyda.
WEJÔCIE
numer - numer standardu
WYJÔCIE
standard - wskaúnik na strukturë Standard
ZOBACZ
libraries/konwersja.h
konwersja.library/RozpoznajStandard konwersja.library/RozpoznajStandard
NAZWA
RozpoznajStandard - próbuje rozpoznaê standard liter w pliku
ROZPISKA
numer = RozpoznajStandard(bufor, rozmiar)
D0 A0 D0
WORD RozpoznajStandard(UBYTE *, ULONG);
OPIS
Funkcja ta próbuje rozpoznaê standard polskich liter w pliku.
WEJÔCIE
bufor - bufor zawierajâcy wczytany plik tekstowy
rozmiar - rozmiar bufora
WYNIK
numer - numer rozpoznanego standardu, lub -1 w przypadku gdy
operacja sië nie powiedzie.
ZOBACZ
libraries/konwersja.h
konwersja.library/--informacje--
STANDARDY DYSKOWE:
Biblioteka ta sîuûy do konwersji plików tekstowych
zawierajâcych polskie znaki zapisane w róûnych standardach.
Standardów moûe byê wîaôciwie nieograniczona iloôê (max.
32767). Iloôê standardów zaleûy tylko wîaôciwie od iloôci
posiadanej pamiëci.
Biblioteka posiada wbudowane 5 standardów, natomiast dodatkowe
8 znajduje sië w katalogu 'LIBS:Standardy'.
Jeôli potrzebujesz jakiegoô innego standardu, który nie jest
rozpowszechniany wraz z bibliotekâ to moûesz stworzyê go sobie
samemu. Podajë przykîadowâ strukturë dla standardu Amiga PL.
[STANDARD]
NAZWA="Amiga PL";
KODY=194,202,203,206,207,211,212,218,219,226,234,235,238,239,243,244,250,251;
ZL=164;
'[STANDARD]' - jest to nagîówek, po którym biblioteka
orientuje sië czy wczytaîa wîaôciwy plik.
'NAZWA=' - tutaj naleûy podaê nazwë standardu. Jeôli
nazwa zawiera spacje to naleûy jâ ujâê
w cudzysîów '"'. Nazwa moûe mieê wraz ze
spacjami maksymalnie 8 znaków, w przeciwnym
razie plik zostanie uznany za bîëdny.
'KODY=' - tutaj naleûy podaê 18 kodów polskich znaków
w danym standardzie. Litery naleûy podawaê
w kolejnoôci - najpierw DUÛE, potem MAÎE. Kody
naleûy podawaê w formie ASCII, oddzielajâc je
od siebie przecinkiem.
'ZL=' - tutaj naleûy podaê kod znaku '¤' (zî). Jeôli
standard nie posiada takiego znaku trzeba
wpisaê 'BRAK'.
Kaûdâ definicjë ('NAZWA=', 'KODY=', 'ZL=') naleûy zakoïczyê
ôrednikiem '; '.
Sîowa kluczowe mogâ byê pisane zarówno duûymi jak i maîymi
literami, np. '[staNdArd]', 'nazwa='.
Nie waûna jest równieû kolejnoôê podawania parametrów, tzn.
NAZWA= NAZWA= ZL= ZL=
KODY= ZL= KODY= NAZWA=
ZL= KODY= NAZWA= KODY=
OPIS STRUKTURY STANDARD:
Wîaôciwie nie ma o czym pisaê poniewaû opis znajdujë sië juû
w plikach INCLUDE, no ale...
struct Standard STRUCTURE Standard,MLN_SIZE
{ WORD stan_Numer
struct MinNode stan_Node; UBYTE stan_Flagi
WORD stan_Numer; STRUCT stan_Nazwa,9
UBYTE stan_Flagi; STRUCT stan_Kody,20
UBYTE stan_Nazwa[9]; LABEL Standard_SIZE
UBYTE stan_Kody[20];
};
Pierwsze pole to struktura MinNode, której opis jest w pliku
'exec/nodes.h'.
stan_Numer - oznacza numer przyporzâdkowany standardowi. Nie
NALEÛY wnioskowaê, ûe dany standard bëdzie miaî
zawsze taki sam numer. Standardy po wczytaniu
sortowane sâ w kolejnoôci alfabetycznej,
a dopiero póúniej sâ numerowane, wiëc dodanie
nowego standardu moûe spowodowaê zmianë numeru
poprzednich.
stan_Flagi - mogâ tu wystëpowaê nastëpujâce flagi:
STANF_MAZL: oznacza, ûe standard posiada znak
'¤' (zî).
STANF_WBUD: ta flaga uûywana jest tylko przez
bibliotekë i oznacza, ûe standard
jest w niâ wbudowany.
NIE NALEÛY ZMIENIAÊ STANU TYCH FLAG!!!
stan_Nazwa - tutaj znajduje sië nazwa standardu zakoïczona
bajtem '\0'.
stan_Kody - tutaj znajduje sië 18 kodów polskich znaków oraz
kod znaku '¤' (zî) lub '\0' jeôli standard
takiego znaku nie posiada.
JAK POBRAÊ STANDARDY:
Program uûywajâcy tej biblioteki musi w jakiô sposób pobraê
standardy, które oferowane sâ przez bibliotekë.
W bazie biblioteki znajduje sië lista ze standardami:
kon_Standardy. Jest to struktura typu MinList, wiëc standardy
naleûy odczytywaê tak samo jak 'wëzîy' (nodes) z listy.
Poniûej znajduje sië przykîad w jëzyku C i w asemblerze.
dla C:
struct Standard *s;
for (s = (struct Standard *) (KonBase->Kon_Standardy.mlh_Head);
(s->stan_Node.mln_Succ);
(s = (struct Standard *) s->stan_Node.mln_Succ))
)
s - wskazuje na strukturë Standard
dla asemblera:
move.l _KonBase,a6
move.l kon_Standardy(a6),a0
.pobierz_nastepny:
tst.l MLN_SUCC(a0)
beq.s .koniec_listy
a0 - wskazuje na strukturë Standard
move.l MLN_SUCC(a0),a0
bra.s .pobierz_nastepny
.koniec_listy:
rts