  SMB-Howto
  Autor:David Wood, dwood@plugged.net.au v1.0, 10 August 1996
  WWeerrssjjaa ppoollsskkiieeaa:: BBaarrttoosszz MMaarruusszzeewwsskkii
  BB..MMaarruusszzeewwsskkii@@zzssmmeeiiee..ttoorruunn..ppll
  v1.12, 26 Lipca 1997

  Jest to dokument z serii HOWTO (Jak To Zrobi). Opisuje on jak uywa
  Session Message Protocol, zwanego te NetBIOS lub LanManager z Linux-
  em.  Dokument ten zosta napisany w standardzie ISO-8859-2.  Orygina
  mona znale pod adresem ftp.icm.edu.pl w katalogu /pub/Linux/sun
  site/docs/HOWTO.
  ______________________________________________________________________

  Table of Contents:

  1.      Wprowadzenie.

  1.1.    Dalsze informacje.

  2.      Instalacja.

  3.      Uruchamianie demonw.

  4.      Oglna konfiguracja. (/etc/smb.conf)

  5.      Udostpnianie dysku Linux-owego komputerom z Windows.

  6.      Udostpnianie dysku spod Windows maszynom z Linux-em.

  7.      Udostpnianie drukarki Linux-owej komputerom z Windows.

  8.      Udostpnianie drukarki spod Windows komputerom z Linux-em.

  9.      Prawa autorskie i Zakoczenie.

  9.1.    Prawa autorskie.

  9.2.    Podzikowania.

  9.3.    Od tumacza.
  ______________________________________________________________________

  11..  WWpprroowwaaddzzeenniiee..

  Jest to dokument z serii HOWTO (Jak To Zrobi). Opisuje on jak uywa
  z Linuxem Session Message Protocol, zwanego te NetBIOS lub
  LanManager.

  Dokument ten jest prowadzony przez Davida Wooda dwood@plugged.net.au.
  Wszelkie dodatki, modyfikacje lub poprawki mog by przesane do mnie,
  aby je pniej umieci w nastpnej wersji.

  Protok SMB uywany jest przez Microsoft Windows 3.11, NT i 95 aby
  wspdzieli zasoby dyskowe i drukarki. Maszyny Unix-owe (w tym take
  Linux) mog korzysta z tych zasobw uywajc narzdzi stworzonych
  przez Andrew Tridgella.

  S cztery rzeczy, ktre mona zrobi Samb:

  1. Udostpnia dysk Linux-owy dla komputerw z Windows.

  2. Udostpnia dysk Windows-owy dla komputerw z Linux-em.

  3. Udostpnia drukark pod Linux-em dla Windows.

  4. Udostpnia drukark pod Windows dla Linux-a.

  Wszystko to zostao opisane w tym dokumencie.

  Disclaimer. Procedury i skrypty albo dziaay u autora, albo zostay
  opisane jako dziaajce przez tych, ktrzy je napisali.  Rne
  konfiguracje mog nie dziaa z podanymi tutaj informacjami.  Jeli
  odkryjesz tak sytuacj moesz napisa do autora list z sugesti na
  ulepszenie tego dokumentu, ale autor nic nie gwarantuje. A czego si
  spodziewae ? W kocu autor jest tyklo konsultantem.

  11..11..  DDaallsszzee iinnffoorrmmaaccjjee..

  Dokument ten jest prb opisania jak skonfigurowa na Linux-ie
  podstawowe serwisy SMB zwizane z plikami i drukarkami. Samba jest
  bardzo zoonym i kompletnym pakietem. Nie ma sensu, eby kopiowa
  tutaj wszystko to co jest zawarte w dokumentacji dla tego pakietu.

  Dalszych informacji moesz szuka w:

    Dokumentacji do Samby, ktra jest czci dystrybucji.  Dystrybucja
     jest dostpna pod adresem: ftp.icm.edu.pl

    HOWTO dotyczcym drukowania (Printing HOWTO)

    oraz w mini-HOWTO Print2Win.

  22..  IInnssttaallaaccjjaa..

  Najwiesze rda Samby dostpne s pod adresem ftp.icm.edu.pl w
  katalogu /pub/samba.

  Jeli instalowae dystrybucj Red Hat moge wybra instalacj Samby
  jako jedn z opcji. Niektre inne dystrybycje te oferuj binaria
  Samby.

  Nastpujce demony s wymagane do pracy z Samb. Zwykle znajduj si
  one w katalogu /usr/sbin i s uruchamiane w momencie startu systemu
  albo przez demon inetd. Przykadowe skrypt znajduj si w sekcji
  ``Uruchamianie    demonw.''

  ______________________________________________________________________
        smbd (Demon SMB) i nmbd (wiadczy usugi nameservera NetBIOS-u)
  ______________________________________________________________________

  Zwykle w systemie instalowane s nastpujce binaraia w katalogu
  /usr/bin:

  ______________________________________________________________________
     smbclient (Klient dla maszyn Unix-owych), smbprint (skrypt do
     drukowania na drukarce przyczonej do hosta SMB), smbprint.sysv
     (To samo co wczeniej, ale dla systemu UNIX SVR4), smbstatus
     (Wywietla biece poczenia SMB na lokalnym hocie), smbrun
     (Gwny skrypt do uruchamiania aplikacji na hocie SMB)
  ______________________________________________________________________

  Dodatkowo zawarty jest w tym dokumencie skrypt o nazwie "print", ktry
  jest poytecznym dokoczeniem skryptu smbprint.

  Pakiet Samba jest prosty w instalacji. cignij go z podanego
  wczeniej miejsca i przeczytaj plik README znajdujcy si w
  dystrybucji. Jest jeszcze plik docs/INSTALL.txt, ktry podaje krok po
  kroku co naley zrobi, aby zainstalowa Samb.

  Postpujc wraz z instalacj, umie demony w /usr/sbin i binaria w
  /usr/bin. Zainstaluj strony do podrcznika systemowego "man" w
  /usr/local/man.

  Kiedy bdziesz instalowa pakiet Samba, bdziesz musia poda miejsce,
  gdzie ma si znajdowa plik konfiguracyjny smb.conf.  Z reguy jest to
  katalog /etc, ale moesz go umieci, gdzie ci si podoba. Dla
  dalszych instrukcji zaoymy, e plik konfiguracyjny umiecie w
  /etc, plik logujcy to /var/log/samba-log.%m i katalog blokujcy to
  /var/lock/samba.

  Zainstaluj plik konfiguracyjny smb.conf. Przejd do katalogu, gdzie
  zostaa skompilowana Samba. Zajrzyj do katalogu examples/simple i
  przeczytaj plik README. Skopiuj znaleziony tam plik smb.conf do /etc.
  OOSSTTRROONNIIEE !!!!!!  Jeli masz dystrybucj Linux-a, ktra miaa Samb i
  zainstalowae j to pewnie masz ju plik smb.conf w katalogu /etc i
  lepiej zacznij od tego pliku.

  Jeli nie chcesz umieszcza pliku konfiguracyjnego w /etc, to umie
  go tam, gdzie chcesz i zrb symboliczne doczenie:

  ______________________________________________________________________
       ln -s /gdzie/jest/smb.conf /etc/smb.conf
  ______________________________________________________________________

  33..  UUrruucchhaammiiaanniiee ddeemmoonnww..

  Dwoma demonami SMB s: /usr/sbin/smbd i /usr/sbin/nmbd.  Moesz je
  uruchomi przez demona inetd lub jako osobne procesy. Jeli
  konfigurujesz na stae serwer plikowy, to powinny one by uruchamiane
  przez inetd po to, eby je ponownie uruchomi jeli z jakiego powodu
  przestan dziaa. Jeli chcesz korzysta z Samby tylko czasami, to
  moesz je uruchomi z ktrego ze skryptw startowych w katalogu
  /etc/rc.d albo po prostu od rki wtedy kiedy je potrzebujesz.

  Aby uruchomi demony przez inetd umie nastpujce linie w pliku
  /etc/inetd.conf:

  ______________________________________________________________________
   Serwis NetBIOS dla Samby
        # netbios-ssn
        stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait
        root /usr/sbin/nmbd nmbd
  ______________________________________________________________________

  Nastpnie wylij sygna HUP do procesu nr 1:

  ______________________________________________________________________
       kill -HUP 1
  ______________________________________________________________________

  Dla uytkownikw dystrybucji Red Hat.  Aby uruchomi te demony ze
  skryptw startowych, umie nastpujcy skrypt w katalogu
  /etc/rc.d/init.d/smb i docz je symbolicznie do plikw podanych w
  komentarzu:

  ______________________________________________________________________
       #!bin/sh

       #
       # /etc/rc.d/init.d/smb - startuje i zatrzymuje serwis SMB
       #
       # Nastpujce pliki powinny by symbolicznymi doczeniami do
       # tego pliku:
       # /etc/rc.d/rc1.d/K35smb (Zatrzymuje serwis SMB podczas
       # zamknicia systemu.
       # /etc/rc.d/rc3.d/S91smb (Startuje serwis SMB w trybie
       # wielouytkownikowym
       # /etc/rc.d/rc6.d/K35smb (zatrzymuje serwis SMB podczas resetu)
       #

       # Biblioteka funkcji
       etc/rc.d/init.d/functions

       # Konfiguracja sieci
       etc/sysconfig/network

       # Sprawd czy jestemy w sieci
       [ ${NETWORKING} = "no" ] && exit 0

       # Zobacz jak zostalimy wywoani
       case "$1" in
          start) echo -n "Starting SMB services: "
                  daemon smbd -D
                  daemon nmbd -D
                  echo touch /var/lock/subsys/smb
          ;;
          stop) echo -n "Shutting down SMB services: "
                  killproc smbd
                  killproc nmbd
                  rm -f /var/lock/subsys/smb echo ""
          ;;
          *) echo "Usage: smb {start|stop}" exit 1
       esac
  ______________________________________________________________________

  Od tumacza: Jeli uywasz dystrybucji Slackware.  Umie poniszy
  fragment w skrypcie startowym /etc/rc.d/rc.local:

  ______________________________________________________________________

     # czy jestemy w sieci
     [ ${NETWORKING} = "no" ] && exit 0

     # Uruchmon demony Samby
     /usr/sbin/smbd -D
     /usr/sbin/nmbd -D
  ______________________________________________________________________

  44..  OOggllnnaa kkoonnffiigguurraaccjjaa.. ((//eettcc//ssmmbb..ccoonnff))

  Konfiguracja Samby na Unix-ie jest kontrolowana jednym plikiem:
  /etc/smb.conf. W pliku tym umieszczasz zasoby jakie chcesz udostpni
  dla wiata i jakie restrykcje chcesz wprowadzi.

  Poniewa ta sekcja opisuje udostpnianie dyskw i drukarek Linux-owych
  Windowsom, plik smb.conf bdzie najprostszym z moliwych.

  Nie martw si o szczegy. Pniejsze sekcje wprowadz oglny koncept.

  Kada sekcja pliku zaczyna si od nazwy jak np.: global, homes,
  printers itp.

  Sekcja global definiuje kilka oglnych zmiennych, ktre bd si
  odnosi do wszystkich udostpnianych zasobw.

  Sekcja homes pozwala uytkownikom na dostp do ich (i tyklo ich)
  katalogw domowych na lokalnej maszynie Linux-owej. Jeli jaki
  uytkownik Windows bdzie chcia skorzysta z udostpnianych zasobw,
  to zostanie podczony do swojego katalogu domowego.  Zauwa, e aby
  to zrobi uytkownik musi mie swoje konto na maszynie Linux-owej.

  Poniszy przykadowy plik smb.conf pozwala uytkownikom na dostp do
  swoich katalogw domowych i na zapis do katalogu tymczasowego.  Aby
  uytkownik Windows zobaczy udostpniane zasoby, Linux musi by w tej
  samej sieci lokalnej. Uytkownik Windows po prostu docza dysk
  sieciowy z Menedera Plikw lub Eksploratora Windows.

  W nastpnych sekcjach bd dodawane kolejne linie do tego pliku, aby
  umoliwi dostp do wikszej iloci zasobw.

  ______________________________________________________________________
   etc/smb.conf
     ;
     ; Po wprowadzeniu zmian do tego pliku zrestartuj demony Samby
     ; kill -9 `pidof smbd`; kill -9 `pidof nmbd`
     ; /usr/sbin/smbd; /usr/sbin/nmbd
     [global] Umie to w pliku jeli chcesz konto anonimowe guest account = nobody
        log file = /var/log/samba-log.%m lock directory = /var/lock/samba share
        modes = yes

     [homes] comment = Katalogi Domowe browseable = no read only = no create
        mode = 0750

     [tmp] comment = Miejsce na pliki tymczasowe path = /tmp read only = no
        public = yes
  ______________________________________________________________________

  55..  UUddoossttppnniiaanniiee ddyysskkuu LLiinnuuxx--oowweeggoo kkoommppuutteerroomm zz WWiinnddoowwss..

  Jak wida na powyszym przykadzie udostpnianie dyskw Linux-owych
  uytkownikom Windows jest proste. Dostp do zasobw udostpnianych
  poprzez Samb mona w bardzo duym stopniu kontrolowa.

  Aby udostpni wszystkim jakie zasoby, dodaj ponisze linie do
  smb.conf:

  ______________________________________________________________________
     [public]
     comment = Public Stuff path = /home/public public = yes writable = yes
        printable = yes
  ______________________________________________________________________

  Aby umoliwi zapis do tego katalogu tylko dla czonkw grupy staff,
  zmodyfikuj te linie w nastpujcy sposb:

  ______________________________________________________________________
     [public]
     comment = Public Stuff path = /home/public public = yes writable = yes
        printable = no write list = @staff
  ______________________________________________________________________

  Wicej informacji na temat rnych sposobw udostpniania zasobw
  znajdziesz w dokumentacji do Samby.

  66..  UUddoossttppnniiaanniiee ddyysskkuu ssppoodd WWiinnddoowwss mmaasszzyynnoomm zz LLiinnuuxx--eemm..

  Wraz z dystrybucj Samby otrzymujemy klienta dla Unix-w. Jego
  interfejs polece jest podobny do ftp. Moesz go uywa, aby przenosi
  pliki midzy Windowsowym "serwerem" a klientem Linux-owym.

  Aby zobaczy jakie zasoby sa udostpnione na danym hocie napisz:

  ______________________________________________________________________
       /usr/sbin/smbclient -L host
  ______________________________________________________________________

  gdzie host jest nazw maszyny, ktrej zasoby chcesz zobaczy.
  Polecenie to zwrci list nazw serwisw - to znaczy nazw dyskw lub
  drukarek, ktre moe udostpni. Serwer Samby bdzie ci pyta o
  haso, o ile nie ma skonfigurowanego bezpiecznego dostpu.

  Np.

  ______________________________________________________________________
       smbclient -L zimmermann
  ______________________________________________________________________

  Polecenie to powinno wywietli co na ksztat:

  ______________________________________________________________________
   Server time is Sat Aug 10 15:58:27 1996 Timezone is UTC+10.0
  Password: Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]

     Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]

             Sharename      Type      Comment
             ---------      ----      -------
             ADMIN$         Disk      Remote Admin public Disk Public C$ Disk
             Default share IPC$ IPC Remote IPC OReilly Printer OReilly print$
             Disk Printer Drivers

     This machine has a browse list:

             Server               Comment
             ---------            -------
             HOPPER               Samba 1.9.15p8 KERNIGAN Samba 1.9.15p8 LOVELACE
             Samba 1.9.15p8 RITCHIE Samba 1.9.15p8 ZIMMERMAN
  ______________________________________________________________________

  Browse list pokazuje inne serwery SMB udostpniajce zasoby w sieci.

  Aby uy klienta napisz:

  ______________________________________________________________________
       /usr/sbin/smbclient serwis <haso>
  ______________________________________________________________________

  gdzie serwis jest nazw maszyny i zasobu. Na przykad jeli prbujesz
  dosta si do katalogu, ktry jest udostpniany jako public na
  maszynie o nazwie zimmermann, serwisem byoby: \zimmermanublic.
  Chocia z powodu powoki w Linux-ie bdziesz musia oznaczy znaki
   specjalnie i polecenie ostatecznie wyglda tak:

  ______________________________________________________________________
       usr/sbin/smbclient \\\\zimmerman\\public haso
  ______________________________________________________________________

  gdzie haso jest acuchem znakw bdcym twoim hasem.

  Pojawi si wtedy znak zachty klienta Samby:

  ______________________________________________________________________
      Server time is Sat Aug 10 15:58:44 1996 Timezone is UTC+10.0
      Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager
      3.51] smb: \>
  ______________________________________________________________________

  Napisz 'h', aby uzyska pomoc:

  ______________________________________________________________________
       smb: \> h ls dir lcd cd pwd get mget put mput rename more mask del rm
       mkdir md rmdir rd prompt recurse translate lowercase print printmode
       queue cancel stat quit q exit newer archive tar blocksize tarmode
       setmode help ?  !  smb: \>
  ______________________________________________________________________

  Jeli umiesz uywa ftp, to nie powiniene potrzebowa czyta
  podrcznika systemowego na temat smbclient.

  77..  UUddoossttppnniiaanniiee ddrruukkaarrkkii LLiinnuuxx--oowweejj kkoommppuutteerroomm zz WWiinnddoowwss..

  Aby udostepni drukark Linux-ow Windowsom musisz si upewni, e
  drukarka dziaa dobrze pod Linux-em. Jeli moesz drukowa spod Linux-
  a to ustawienie serwera SMB dla drukarki jest bardzo proste.

  Przeczytaj Priniting-HOWTO na temat ustawienia drukarki pod Linux-em.

  Poniewa autor uywa drukarki poczonej z Windows NT, sekcja ta nie
  powinna by brana za definicj, ale bardziej jako sugestia.  Jeli
  ktokolwiek ma ochot si podzieli szczegami na temat innych
  konfiguracji prosz o kontakt, aby ta sekcja moga zosta skoczona:
  dwood@plugged.net.au.

  Dodaj konfiguracj na temat drukowania do smb.conf:

  ______________________________________________________________________
       [global]
       printing = bsd printcap name = /etc/printcap load printers = yes
       log file = /var/log/samba-log.%m lock directory = /var/lock/samba

       [printers] comment = Wszystkie drukarki security = server path = /var/spool/lpd/lp
       browseable = no printable = yes public = yes writable = no
       create mode = 0700

       [ljet] security = server path = /var/spool/lpd/lp printer name = lp
       writable = yes public = yes printable = yes
       print command = lpr -r -h -P %p %s
  ______________________________________________________________________

  Upewnij si, e cieka do drukarki (w tym wypadku w sekcji ]ljet[)
  jest taka sama jak katalog zada w etc/printcap.

  UWAGA: S pewne problemy przy udostpnianiu drukarki Unixowej przez
  Samb komputerom z Windows NT. Jeden problem to taki, eby NT widziao
  poprawnie drukark. Aby go zlikwidowa przeczytaj plik docs/WinNT.txt,
  ktry jest dostarczany wraz z dystrybucj. Drugi problem to hasa.
  Przeczytaj ten sam plik, aby rozwiza ten problem.

  88..  UUddoossttppnniiaanniiee ddrruukkaarrkkii ssppoodd WWiinnddoowwss kkoommppuutteerroomm zz LLiinnuuxx--eemm..

  Aby udostpni drukark spod Windows-w musisz zrobi nastpujce
  rzeczy:

  a) Musisz mie poprawne pola w /etc/printcap i musz one odpowiada
  lokalnej strukturze katalogw (katalog dla drukarki itp.)

  b) Musisz mie skrypt /usr/bin/smbprint. Skrypt ten znajduje si w
  rdach Samby, ale nie w kadym pakiecie binarnym.  Poniej znajduje
  si troch zmodyfikowana wersja tego skryptu.

  c) Jeli chcesz zamienia pliki ASCII na PostScript, musisz mie
  nenscript albo jego ekwiwalent. nenscript jest konwerterem PostScript-
  owym i jest z reguy instalowany w /usr/bin.

  d) Moesz uatwi drukowanie poprzez Samb piszc skrypt. Poniej
  podany jest prosty skrypt w Perl-u obsugujcy pliki ASCII, PostScript
  i stworzony PostScript.

  Ponisze pola w /etc/printcap s dla drukarki HP 5MP doczonej do
  komputera z Windows NT.

  ______________________________________________________________________
       cm - komentarz; lp - urzdzenie, na ktre ma by wysany wydruk;
       sd - katalog zada dla drukarki (na lokalnym komputerze); af -
     katalog accounting; mx - maksymalny rozmiar pliku (0 - bez
     ograniczenia); if - nazwa filtru wejciowego (skryptu).
  ______________________________________________________________________

  Wicej informacji znajdziesz w Printing-HOWTO lub w podrczniku
  systemowym dla "printcap".

  ______________________________________________________________________
   etc/printcap
     #
     # //zimmerman/oreilly przez smbprint
     #
     lp:\ cm=HP 5MP Postscript OReilly na zimmerman:\ lp=/dev/lp1:\
             :sd=/var/spool/lpd/lp:\ af=/var/spool/lpd/lp/acct:\ mx#0:\
             :if=/usr/bin/smbprint:
  ______________________________________________________________________

  Upewnij si, e katalogi zada i accounting istniej i s zapisywalne
  oraz e if ma poprawn ciek do scryptu smbprint (patrz poniej) i
  e lp wskazuje poprawne urzdzenie (plik specjalny w katalogu /dev)

  Nastpnym krokiem jest skrypt smbprint. Zwykle znajduje si on w
  /usr/bin i jest przypisywany Andrew Tridgellowi - osobie, ktra
  stworzya Samb o ile wiem. Przychodzi on wraz z dystrybucj rde
  Samby, ale nie ma go w dystrybucji binariw, wic go tutaj stworzyem.

  Moesz przejrze go dokadniej. Przerobiem go troch, poniewa
  przerbki wydaway mi si uyteczne.

  ______________________________________________________________________
     #!/bin/sh
     # Skrypt ten jest filtrem wejciowym do drukowania na drukarce
     # doczonej do Unix-a. Uywa programu smbclient do drukowania
     # pliku. Na przykad twj printcap mgby wyglda nastepujco:
     #
     #
     # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
     #
     #
     # Stworzyby on drukark o nazwie smb, ktra drukowaaby poprzez
     # ten skrypt. Musiaby stworzy katalog zada /usr/spool/smb z
     # odpowiednimi dla twojego systemu prawami dostpu i wacicielem.
     #
     # Ustaw nastpujce rzeczy na serwer i serwis przez, ktry chcesz
     # drukowa. W tym przykadzie mam PC-ta z WfWg o nazwie "lapland",
     # ktry ma drukark o nazwie printer bez hasa.
     #
     #
     # W dalszej czci skrypt zosta przerobiony przez hamilton@ecnz.co.nz
     # (Michael Hamilton, tak aby serwer, serwis i haso mogy by
     # przeczytane z pliku /usr/var/spool/lpd/PRINTNAME/.config
     #
     # Aby to dziaao /etc/printcap musi mie pole af:
     #
     #   cdcolour:\ cm=CD IBM Colorjet on 6th:\ sd=/var/spool/lpd/cdcolour:\
     #       :af=/var/spool/lpd/cdcolour/acct:\ if=/usr/local/etc/smbprint:\
     #       :mx=0:\ lp=/dev/null:
     #
     # Plik /usr/var/spool/lpd/PRINTNAME/.config powinien zawiera:
     #   server=PC_SERVER service=PR_SHARENAME password="password"
     #
     # Np. server=PAULS_PC service=CJET_371 password=""

     #
     # Plik, do ktrego maj byc zapisywane wiadomoci ze ledzenia;
     # moesz zmieni na /dev/null jeli chcesz:
     #
     logfile=/tmp/smb-print.log logfile=/dev/null

     #
     # Ostatnim parametrem do filtra jest nazwa pliku accounting.
     #
     spool_dir=/var/spool/lpd/lp config_file=$spool_dir/.config

     # Powinien czyta te zmienne z pliku konfiguracyjnego: serwer
     # serwis haso uytkownik
     eval `cat $config_file`

     # Trcoh pomocy, zmie >> na > jeli chcesz zachowa troch
     # miejsca na dysku.
     #
     echo "server $server, service $service" >> $logfile

     (UWAGA Moesz doda lini `echo translate' jesli chcesz
     # automatycznego tumaczenia CR/LF podczas drukowania.
          echo translate echo "print -" cat
     ) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user
     -N -P >>
     $logfile
  ______________________________________________________________________

  Wikszo dystrybucji Linux-owych posiada nenscript do zamiany
  dokumentw ASCII na PostScript. Nastpujcy skrypt w Perl-u uatwia
  ycie stwarzajc prosty interfejs dla drukowania w Linux-ie przez
  smbprint.

  ______________________________________________________________________
       Stosowanie: print [-a|c|p] <nazwa_pliku>
       -a drukuje <nazwa_pliku> jako ASCII; c drukuje <nazwa_pliku>
       sformatowane jako rdo; -code p drukuje <nazwa_pliku> jako
       PostScript.
       Jeli nie ma adnej opcji, print prbuje odgadn typ pliku i
      odpowiednio go wydrukowa.
  ______________________________________________________________________

  Uycie smbprint do drukowania plikw ASCII powoduje obcinanie dugich
  linii. Ten skrypt dzieli dugie linie w miejscu spacji (zamiast w
  rodku sowa) jeli jest to moliwe.

  Formatowanie rda odbywa sie przy pomocy programu nenscript.  Bierze
  on plik ASCII i formatuje go w dwie kolumny z dodatkowym nagwkiem
  (data, nazwa pliku, itp.) Zlicza take ilo linii.  Wzorujc si na
  tym przykadzie moesz zrobi inne typy formatowania.

  Dokumenty PostScript-owe s ju sformatowane wic przechodz
  bezporednio do drukarki.

  ______________________________________________________________________
   usr/bin/perl

  # Skrypt:   print Autorzy: Brad Marshall, David Wood
  #           Plugged In Communications Date: 960808
  #
  # Skrypt do drukowania na drukarce oreilly, ktra jest doczona do
  # komputera zimmerman. Opis dziaania: Jako argumenty przyjmuje pliki
  # rnych typw i wysya je odpowiednio do skryptu drukujacego Samby
  #
  # Obecnie obsugiwane typy plikw:
  #
  # ASCII         - Upewnij si, e linie dusze ni $line_length zostay
  #               podzielone w miejscu spacji.
  # PostScript    - Nie robi nic.
  # Code          - Formatuje na PostScript uywajc "nenscript", aby wszystko
  #               byo odpowiednio wywietlone (uoenie, czcionki, itd.)
  #
  #
  # Ustaw maksymaln ilo znakw w linii dla plikw ASCII. line_length
  $= 76;

  # Ustaw ciek i nazw skryptu drukujcego Samby print_prog =
  $"/usr/bin/smbprint";

  # Ustaw ciek i nazw "nenscript-u" (zamiana ASCII-->PostScript)
  $nenscript = "/usr/bin/nenscript";

  unless ( -f $print_prog ) { die "Can't find $print_prog!";
  }
  unless ( -f $nenscript ) { die "Can't find $nenscript!";
  }

  &ParseCmdLine(@ARGV);

  # DBG print "filetype is $filetype\n";

  if ($filetype eq "ASCII") { ero;wrap($line_length); elsif ($filetype eq
          &"code") {
  } ero;codeformat; elsif ($filetype eq "ps") {
          &createarray; else {
  } print "Sorry..no known
          &file type.\n"; exit
  } 0;
  }
  # Wylij tablc do smbprint open(PRINTER, "|$print_prog") || die "Can't
  open $print_prog: $!\n"; foreach
  $line (@newlines) {
          print PRINTER $line;
  }
  # Wylij dodatkowy znak LF jeli plik ma niekompletn ostatni lini. print
  PRINTER "\n"; close(PRINTER); print "Completed\n"; exit 0;

  # --------------------------------------------------- #
  #        Wszystko poniej jest procedur              #
  # --------------------------------------------------- #

  sub ParseCmdLine { Interpretuje wiersz polece, szukajc jakiego typu jest
          # plik

          # Gets $arg and $file to be the arguments (if they exists) and the
          # filename
          if ($#_ < 0) { ero;usage;
          }
          # DBG foreach $element (@_) { print "*$element* \n";
  #       }
          $arg = shift(@_); if ($arg =~ /\-./) { cmd = $arg; DBG print "\$cmd
          found.\n";

                  $file = shift(@_); else { file = $arg;
          }

          # Definiowanie typu pliku dopki ($cmd) { Nie mamy argumentw

                  if ($file =~ /\.ps$/) { filetype = "ps"; elsif ($file =~
                          $/\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/)
                          ${ filetype = "code"; else { filetype = "ASCII";
                  }

                  # Przerb $file odpowiednio do jego typu i zwr $filetype
          } else { Mamy typ pliku w $arg if ($cmd =~ /^-p$/) {
                  filetype = "ps"; elsif ($cmd =~
                          $/^-c$/) { filetype
                  } = "code"; elsif ($cmd =~
                          $/^-a$/) {
                  } filetype = "ASCII"
                  }
          }
  }

  sub usage { print " Stosowanie: print [-a|c|p] <plik>
         -a drukuje <plik> jako ASCII c drukuje <plik> sformatowany jako
           rdo
         -code p drukuje <plik> jako PostScript
          Jeli nie ma adnej opcji, print prbuje odgadn typ pliku i
          odpowiednio go wydrukowa.\n
  ";
          exit(0);
  }

  sub wrap { Stwrz tablic linii w pliku, gdzie kada linia jest krtsza od
          # podanej iloci znakw i jest podzielona tylko w miejscach spacji

          # Pobierz ilo znakw jaka moe by w linii.  limit =
          $pop(@_);

          # DBG print "Entering subroutine wrap\n"; print "The line length
          #limit is $limit\n";

          # Wczytaj plik, sformatuj i umie w tablicy.  open(FILE,
          "<$file") || die "Can't open $file: $!\n"; while(<FILE>) {
                  $line = $_;

                  # DBG print "The line is:\n$line\n";

                  # Podziel lini jeli jest dusza ni podana ilo znakw.  while (
                  length($line) > $limit ) {

                          # DBG print "Wrapping...";

                          # Pobierz pierwsze $limit+1 znakw.  part =
                          $substr($line,0,$limit +1);

                          # DBG print "The partial line is:\n$part\n";

                          # Sprawd czy ostatni znak jest spacj.
                          $last_char = substr($part,-1, 1);
                          if ( " " eq $last_char ) { Jeli tak, wydrukuj reszt.

                              # DBG print "The last character was a space\n";

                              substr($line,0,$limit + 1) = "";
                              substr($part,-1,1) = "";
                              push(@newlines,"$part\n");
                          } else { Jeli nie, znajd ostatni spacj w
                                  # pod-linii i drukuj do niej

                              # DBG print "The last character was not a
                              #space\n";

                               # Usu znaki dalsze ni $limit
                               substr($part,-1,1) = ""; Odwr lini
                               # aby uatwi odnajdywanie ostatniej spacji
                               $revpart = reverse($part);
                               $index = index($revpart," ");
                               if ( $index > 0 ) {
                                 substr($line,0,$limit-$index) = "";
                                 push(@newlines,substr($part,0,$limit-$index)
                                     . "\n"); else { Nie byo spacji w linii
                               } wic
                                 # wydrukuj do $limit.
                                 substr($line,0,$limit) = "";
                                 push(@newlines,substr($part,0,$limit)
                                     . "\n");
                               }
                          }
                  }
                  push(@newlines,$line);
          }
          close(FILE);
  }

  sub codeformat { Wywoaj procedur wrap i przefiltruj przez nenscript
          &wrap($line_length);

          # Przepu wynik przez nenscript, aby utworzy plik PostScript,
          # ktry pasuje do jakiego przyzwoitego formatu rde do drukowania
          # (uoenie, czcionki Courier, ilo linii). Najpierw wydrukuj to do
          # pliku tymczasowego.
          $tmpfile = "/tmp/nenscript$$";
          open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || die "Can't
                  open nenscript: $!\n"; foreach $line (@newlines)
          {
                  print FILE $line;
          }
          close(FILE);

          # Wczytaj plik tymczasowy spowrotem do tablicy, tak aby mg by
          # wysany do skryptu print Samby.
          @newlines = ("");
          open(FILE, "<$tmpfile") || die "Can't open $file: $!\n";
          while(<FILE>) {
                  push(@newlines,$_);
          }
          close(FILE); system("rm $tmpfile");
  }

  sub createarray { Stwrz tablic dla PostScript-u open(FILE, "<$file") ||
          # die "Can't
          open $file: $!\n"; while(<FILE>) {
                  push(@newlines,$_);
          }
          close(FILE);
  }
  ______________________________________________________________________

  99..  PPrraawwaa aauuttoorrsskkiiee ii ZZaakkoocczzeenniiee..

  99..11..  PPrraawwaa aauuttoorrsskkiiee..

  Dokument ten jest chroniony prawami autorskimi Davida Wooda 1996.
  Moe on by reprodukowany w kadej formie i dystrybuowany bez
  ogranicze tak dugo jak nie zmieni si jego zawarto i zawarte jest
  w nim to stwierdzenie.

  99..22..  PPooddzziikkoowwaanniiaa..

  Jeli tylko przylesz mi jakie sugestie, umieszcz ci tutaj w
  nastpnej wersji.

  99..33..  OOdd ttuummaacczzaa..

  Tumaczenie to jest chronione prawami autorskimi  Bartosza
  Maruszewskiego.  Dozwolone jest rozprowadzanie i dystrybucja na
  prawach takich samych jak dokument oryginalny.

  Jeli znalaze jakie race bdy ortograficzne, gramatyczne,
  skadniowe, techniczne to pisz do mnie:

  B.Maruszewski@zsmeie.torun.pl

  Oficjaln stron tumacze HOWTO jest http://www.jtz.org.pl/

  Aktualne wersje przetumaczonych dokumentw znajduj si na teje
  stronie. Dostpne s take poprzez anonimowe ftp pod adresem
  ftp.ippt.gov.pl w katalogu /pub/Linux/JTZ/.

  Przetumaczone przeze mnie dokumenty znajduj si take na mojej
  stronie WWW. <http://www.zsmeie.torun.pl/~bart/tlumaczenie.html> S
  tam te odwoania do Polskiej Strony Tumaczeniowej.

  Kontakt z nasz grup, grup tumaczy moesz uzyska poprzez list
  dyskusyjn jtz@ippt.gov.pl. Jeli chcesz sie na ni zapisa, to wylij
  list o treci subscribe jtz Imi Nazwisko na adres
  listproc@ippt.gov.pl

