.\" 1999 PTM Przemek Borys
.\" Last update: Andrzej M. Krzysztofowicz <ankry@pld.org.pl>, Apr 2002
.\"
.TH MAGIC 5 "Ogólnie dostępne"
.\" install as magic.4 on USG, magic.5 on V7 or Berkeley systems.
.SH NAZWA
magic \- plik liczb magicznych polecenia file
.SH OPIS
\fI Uwaga! To tłumaczenie może być nieaktualne!\fP
.PP
Ta strona podręcznika systemowego opisuje format pliku magicznego, używanego
przez polecenie
.BR file (1)
w wersji 3.37. Polecenie
.B file
rozpoznaje typ pliku, korzystając (poza innymi metodami) z testu,
polegającego na sprawdzeniu, czy plik nie rozpoczyna się od pewnej
.IR "liczby magicznej" .
Plik
.I /usr/share/misc/magic
określa jakie liczby sprawdzać i jakie komunikaty drukować w wypadku 
znalezienia określonej liczby magicznej oraz dodatkowe dane, które
mają zostać pobrane z pliku.
.PP
Każdy wiersz pliku określa test, które ma być wykonany. Test porównuje dane,
rozpoczynające się przy określonym przesunięciu względem początku pliku z 1,
2 lub 4-bajtową wartością numeryczną lub łańcuchem. Jeśli test zakończy się
pomyślnie, wypisywany jest komunikat. Wiersz składa się z następujących pól:
.IP offset \w'message'u+2n
Liczba, określająca w bajtach przesunięcie względem początku pliku, przy
którym należy szukać testowanych danych.
.IP typ
Typ testowanych danych. Dopuszczalne wartości to:
.RS
.IP byte \w'message'u+2n
Wartość jednobajtowa.
.IP short
Wartość dwubajtowa (w większości systemów) w natywnej kolejności bajtów
maszyny.
.IP long
Wartość czterobajtowa (w większości systemów) w natywnej kolejności bajtów
maszyny.
.IP string
Łańcuch bajtów. Po specyfikacji typu łańcucha może opcjonalnie wystąpić
/[Bbc]*. Znacznik ,,B'' kondensuje białe znaki w testowanym tekście, który
musi zawierać co najmniej jeden biały znak. Jeśli liczba magiczna zawiera
"n" kolejnych białych znaków, to aby nastąpiło dopasowanie, testowany tekst
musi zawierać co najmniej "n" kolejnych białych znaków. Znacznik ,,b''
powoduje traktowanie wszystkich białych znaków w testowanym tekście jako
opcjonalne. Wreszcie, znacznik ,,c'' określa dopasowanie ignorujące wielkość
liter: małe litery w liczbie magicznej pasują zarówno do małych, jak i do
wielkich liter w testowanym tekście, podczas gdy wielkie litery w liczbie
magicznej pasują tylko do wielkich liter.
.IP date
Czterobajtowa wartość, interpretowana jako data uniksowa.
.IP ldate
Czterobajtowa wartość, interpretowana jako data w stylu uniksowym, ale
interpretowana jako czas lokalny, a nie UTC.
.IP beshort
Wartość dwubajtowa (w większości systemów) w grubokońcej (big-endian)
kolejności bajtów.
.IP belong
Wartość czterobajtowa (w większości systemów) w grubokońcej kolejności bajtów.
.IP bedate
Wartość czterobajtowa (w większości systemów) w grubokońcej kolejności bajtów,
interpretowana jako data uniksowa.
.IP leshort
Wartość dwubajtowa (w większości systemów) w ostrokońcej (little-endian)
kolejności bajtów.
.IP lelong
Wartość czterobajtowa (w większości systemów) w ostrokońcej kolejności bajtów.
.IP ledate
Wartość czterobajtowa (w większości systemów) w ostrokońcej kolejności bajtów,
interpretowana jako data uniksowa.
.IP leldate
Wartość czterobajtowa (w większości systemów) w ostrokońcej kolejności bajtów,
interpretowana jako data w stylu uniksowym, ale interpretowana jako czas
lokalny, a nie UTC.
.RE
.PP
Typy numeryczne mogą występować w parze z (następującym po nich) znakiem
.B &
i wartością numeryczną wskazującą, że dana wartość ma być poddana operacji
AND z zadaną wartością numeryczną przed dokonaniem porównania. Poprzedzenie
typu przez
.B u
wskazuje, że porównane wartości powinny być bez znaku.
.IP test
Wartość, które ma być porównywana z wartością z pliku. Jeśli typ jest
numeryczny, to wartość jest podawana w postaci zgodnej z językiem C. Jeśli
typ jest łańcuchowy, to wartość jest podawana jako łańcuch języka C
z dozwolonymi znakami specjalnymi (np. \en dla nowej linii).
.IP
Wartości numeryczne mogą być poprzedzone znakami określającymi operację,
jaka ma zostać wykonana. Znakiem operacji może być
.BR = ,
określający, że wartość z pliku musi się równać wartości podanej,
.BR < ,
określający, że wartość z pliku musi być mniejsza od podanej,
.BR > ,
określający, że wartość z pliku musi być większa od podanej,
.BR & ,
określający, że wartość z pliku musi mieć wszystkie bity, które są ustawione
w podanej wartości,
.BR ^ ,
określający, że wartość z pliku musi mieć wyzerowane wszystkie bity, które
są ustawione w podanej wartości, lub
.BR x ,
określający, że pasować może dowolna wartość. Jeśli znak operacji jest
pominięty, używany jest
.BR = .
.IP
Wartości numeryczne są podawane w postaci zgodnej z językiem C, np.
.B 13
to liczba dziesiętna,
.B 013
to liczba ósemkowa,
.B 0x13
to liczba szesnastkowa.
.IP
Dla wartości łańcuchowych łańcuch bajtów z pliku musi odpowiadać podanemu
łańcuchowi bajtów. Do łańcuchów mogą być stosowane operatory
.BR = ,
.B <
i
.B >
(lecz nie
.BR & ).
Długość, używana do porównywania jest długością argumentu łańcuchowego z
pliku magicznego. Znaczy to, że wiersz można dopasować do dowolnego łańcucha
i wypisać go, stosując
.B >\e0
(ponieważ wszystkie łańcuchy są większe od łańcucha zerowego).
.IP komunikat
Komunikat, wypisywany po pomyślnym dopasowaniu. Jeśli łańcuch zawiera
specyfikację formatu
.BR printf (3)
to wartość z pliku jest wypisywana (po odpowiednim maskowaniu) przy użyciu
komunikatu jako łańcucha formatującego.
.PP
Niektóre formaty plików zawierają dodatkowe dane, które mają być wypisane
razem z danym typem pliku. Wiersz, rozpoczynający się od znaku
.B >
oznacza dodatkowe testy i komunikaty. Liczba
.B >
w linii określa poziom testu; wiersz bez
.B >
jest na poziomie 0. Każdy wiersz w poziomie
.IB n \(pl1
jest pod kontrolą wiersza w poziomie
.IR n ,
poprzedzającego go najbliżej w pliku magicznym.
Jeśli test wiersza na poziomie 
.I n
się powiedzie, dokonywane będą dalsze testy na poziomach
.IB n \(pl1\fR.
Proces ten kończy następny wiersz na poziomie
.IR n .
Jeśli pierwszy znak za ostatnim
.B >
to
.BR ( ,
to łańcuch za nawiasem jest interpretowany jako pośrednie przesunięcie. Znaczy
to, że liczba po nawiasie służy jako przesunięcie w pliku. Przy tym
przesunięciu odczytywana jest wartość używana następnie jako przesunięcie
w pliku. Przesunięcia pośrednie są postaci:
.BI ( x [.[bslBSL]][+-][ y ])\fR.
Wartość
.I x
jest używana jako przesunięcie w pliku. Następnie przy tym przesunięciu
odczytywany jest z niego bajt, słowo lub podwójne słowo, zależnie od
specyfikatora typu
.BR [bslBSL] .
Wielkie litery oznaczają liczby jako wartości grubokońce (big-endian), podczas
gdy małe litery oznaczaja wartości (ostrokońce) little-endian. Do liczby tej
dodawana jest wartość
.IR y ,
a wynik służy jako przesunięcie w pliku. Domyślnym typem przesunięcia jest
long.
.PP
Czasami dokładne przesunięcie nie jest znane, gdyż może ono zależeć od
długości poprzednich pól. Można podać przesunięcie względem końca ostatniego
pola wyższego poziomu (oczywiście można to wykonać tylko przy testach na
podpoziomach, tj. testach rozpoczynających się od
.BR > ).
Takie względne przesunięcie podawane jest za pomocą przedrostka
.B &
w przesunięcia.
.SH BŁĘDY
Formaty
.IR long ,
.IR belong ,
.IR lelong ,
.IR short ,
.IR beshort ,
.IR leshort ,
.IR date ,
.I bedate
i
.I ledate
zależą od systemu; może powinny być podawane jako liczba bajtów (2B, 4B,
itd), gdyż rozpoznawane pliki zwykle pochodzą z systemu, gdzie długości są
niezmienne.
.PP
Nie ma (obecnie) obsługi dla korzystania z danych o określonej końcowości
(endianness) przy przesunięciach pośrednich.
.SH "ZOBACZ TAKŻE"
.BR file (1)
\- polecenie, która czyta ten plik.
.\"
.\" From: guy@sun.uucp (Guy Harris)
.\" Newsgroups: net.bugs.usg
.\" Subject: /etc/magic's format isn't well documented
.\" Message-ID: <2752@sun.uucp>
.\" Date: 3 Sep 85 08:19:07 GMT
.\" Organization: Sun Microsystems, Inc.
.\" Lines: 136
.\" 
.\" Here's a manual page for the format accepted by the "file" made by adding
.\" the changes I posted to the S5R2 version.
.\"
.\" Modified for Ian Darwin's version of the file command.
.\" @(#)$Id: magic.5,v 1.2 2002/04/09 22:30:22 ankry Exp $
.SH "INFORMACJE O TŁUMACZENIU"
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i 
\fImoże nie być aktualne\fR. W razie zauważenia różnic między powyższym opisem
a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie 
się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
.IP
man \-\-locale=C 5 magic
.PP
Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod
adresem http://sourceforge.net/projects/manpages\-pl/.
