  Traducido a 9 de Octubre de 1996 SMB COMO
  David Wood, dwood@plugged.net.au
  Traducido por: Ricardo Javier Cárdenes Medina,
  a1402@correo.dis.ulpgc.es
  v1.0, 10 de Agosto de 1996

  Este el es SMB COMO. Describe la manera de usar el protocolo Session
  Message Block (SMB), también llamado protocolo NetBIOS o LanManager,
  con el Linux.
  ______________________________________________________________________

  Índice General:

  1.      Introducción

  2.      Más Información

  3.      Instalación

  4.      Ejecutando los demonios

  5.      Configuración General ( /etc/smb.conf )

  6.      Compartiendo Una Unidad Linux Con Máquinas Windows

  7.      Compartiendo Una Unidad Windows Con Máquinas Linux

  8.      Compartiendo Una Impresora Linux Con Máquinas Windows

  9.      Compartiendo Una Impresora Windows Con Máquinas Linux

  10.     Copyright

  11.     Reconocimientos

  12.     Notas sobre/del traductor

  13.     Anexo: Grupos LiNUXeros en España.
  ______________________________________________________________________

  1.  Introducción

  Este el es SMB COMO. Describe cómo usar el protocolo Session Message
  Block (SMB), también llamado protocolo NetBIOS o LanManager, con el
  Linux.

  Este documento es mantenido por David Wood (dwood@plugged.net.au).
  Cualquier añadido, modificación o corrección puedes enviarla aquí para
  incluirla en la siguiente entrega.

  El protocolo SMB es usado por Microsoft Windows 3.11, NT y 95 para
  compartir discos e impresoras. Usando el paquete de herramientas Samba
  creado por Andrew Tridgell, las máquinas UNIX (incluyendo Linux)
  pueden compartir discos e impresoras con servidores Windows.

  Hay cuatro cosas que uno puede hacer con Samba:

  1. Compartir una unidad de Linux con máquinas Windows.

  2. Compartir una unidad de Windows con máquinas Linux.

  3. Compartir una impresora de Linux con máquinas Windows.

  4. Compartir una impresora de Windows con máquinas Linux.

  Todos estos puntos están cubiertos en este documento.

  Excusatorio: Los procedimientos y scripts le funcionan al autor o se
  sabe que les funciona a la gente que los donó. Algunas configuraciones
  pueden dar problemas con la información que aquí se da. Si te
  encuentras en tal situación, puedes mandar un e-mail al autor con
  sugerencias para mejorar este documento, pero el autor no garantiza
  nada. ¿Qué esperabas? El autor también es un experto, después de
  todo...

  2.  Más Información

  Este COMO intenta explicar la configuración de servicios SMB básicos
  de ficheros e impresoras en una máquina Linux. Samba es un paquete muy
  complejo y completo.  No debería haber razón para duplicar toda la
  documentación de Samba aquí.

  Para mayor información, por favor lee alguno de estos documentos:

  ·  La documentación de Samba, disponible en el paquete de distribución
     del Samba. El paquete está disponible en:
     ftp://nimbus.anu.edu.au/pub/tridge/samba/

  ·  El COMO "Imprimiendo en Linux". (Linux Printing HOWTO)

  ·  El Mini-HOWTO Print2Win.

  3.  Instalación

  La última versión del código de Samba está disponible en:

  ftp://nimbus.anu.edu.au/pub/tridge/samba/

  De todas maneras, si has instalado la distribución RedHat de Linux,
  tienes la opción de instalarlo como paquete. Algunas otras
  distribuciones también incluyen los ejecutables de Samba.

  Se requieren los dos demonios siguientes para el paquete Samba. Se
  suelen instalar en /usr/sbin y se pueden ejecutar tanto desde los
  scripts de arranque del sistema como desde inetd. Algunos scripts de
  ejemplo los puedes ver en ``Ejecutando los demonios''.

  ·  smbd (El demonio de SMB)

  ·  nmbd (Provee un nameserver de NetBIOS para soporte de clientes)

  Habitualmente, se instalan en /usr/bin los siguientes ejecutables de
  Samba, aunque la localización (como de costumbre) es opcional.

  ·  smbclient       (Un cliente SMB para maquinas UNIX)

  ·  smbprint        (Un script para imprimir a una impresora en un
     servidor SMB)

  ·  smbprint.sysv   (Como el de encima, pero para máquinas UNIX SVR4)

  ·  smbstatus       (Lista de las conexiones SMB en marcha en el
     servidor local)

  ·  smbrun          (Un script 'cola' para facilitar la ejecución de
     aplicaciones en servidores )

  Adicionalmente, se incluye en este COMO un script llamado 'print', que
  sirve como un útil front end para el script smbprint.

  El paquete Samba es sencillo de instalar. Simplemente consigue el
  código fuente del servidor que nombramos antes, y lee el fichero
  README de la distribución.  Hay también un fichero llamado
  docs/INSTALL.txt en la distribución que te da un sencillo conjunto de
  instrucciones paso a paso.

  Siguiendo con la instalación, pon los demonios en /usr/sbin y los
  ejecutables en /usr/bin. Instala las páginas del manual en
  /usr/local/man.

  Cuando compiles el paquete Samba, deberías especificar en el Makefile
  la localización del fichero de configuración, smb.conf. Generalmente
  debería estar en /etc, pero puedes ponerlo donde quieras. A estas
  alturas, presumimos que especificaste la localización del fichero de
  configuración como /etc/smb.conf, el fichero de registro como
  /var/log/samba-log.%m y el directorio de bloqueo como /var/lock/samba

  Instala el fichero de configuración, smb.conf. Ve al directorio donde
  se compiló el Samba. Mira en el directorio examples/simple y lee el
  fichero README. En ese directorio encontrarás el fichero smb.conf.
  Cópialo en /etc. ¡TEN CUIDADO! Si tienes una distribución de Linux que
  tiene el Samba instalado ya, puede que ya tengas un fichero de
  configuración en /etc. Probablemente deberías usar el antiguo.

  Si no quieres que tu configuración esté en /etc, ponla donde quieras y
  luego pon un enlace simbólico en /etc:

               ln -s /path/to/smb.conf /etc/smb.conf

  4.  Ejecutando los demonios

  Los dos demonios de SMB son /usr/bin/smbd y /usr/sbin/nmbd.

  Puedes ejecutar los demonios de Samba desde inetd o como procesos
  independientes . Si estás configurando un servidor de ficheros
  permanente, deberían ejecutarse desde inetd para que sean reejecutados
  si 'mueren'. Si solo quieres usar los servicios SMB de vez en cuando o
  como ayuda a la administración del sistema, puedes ejecutarlos con un
  script en /etc/rc.d/init.d o incluso a mano cuando los necesites.

  Para ejecutar los demonios desde inetd, pon las siguientes líneas en
  el fichero de configuración de inetd, /etc/inetd.conf:

           # Servicios SAMBA NetBIOS (para compartición de ficheros e impresoras en PC)
           netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
           netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

  Entonces reejecuta inetd con el siguiente comando:

           kill -HUP 1

  Para ejecutarlos desde los scripts de inicio del sistema, pon las
  siguientes líneas en /etc/rc.d/init.d/smb y hazle un enlace simbólico
  con los ficheros indicados en los comentarios:

       ______________________________________________________________________
           #!/bin/sh
           #
           # /etc/rc.d/init.d/smb - comienza y termina los servicios SMB.
           #
           # Se deben crear los siguientes ficheros como enlaces simbolicos a este fichero:
           # symlinks: /etc/rc.d/rc1.d/K35smb  (Termina los servicios SMB al cerrar el sistema)
           #           /etc/rc.d/rc3.d/S91smb  (Comienza los servicios SMB en modo multiusuario)
           #           /etc/rc.d/rc6.d/K35smb  (Termina los servicios SMB al hacer un reboot)
           #

           # Libreria de funciones
           . /etc/rc.d/init.d/functions

           # Configuracion de red
           . /etc/sysconfig/network

           # Asegurarse que la red esta a punto
           [ ${NETWORKING} = "no" ] && exit 0

           # Comprobar como fuimos llamados
           case "$1" in
             empezar)
               echo -n "Poniendo en marcha los servicios SMB: "
               daemon smbd -D
               daemon nmbd -D
               echo
               touch /var/lock/subsys/smb
               ;;
             parar)
               echo -n "Terminando los servicios SMB: "
               killproc smbd
               killproc nmbd
               rm -f /var/lock/subsys/smb
               echo ""
               ;;
             *)
               echo "Modo de uso: smb {empezar|parar}"
               exit 1
           esac

       ______________________________________________________________________

  5.  Configuración General ( /etc/smb.conf )

  La configuración de Samba en un Linux (u otra máquina UNIX) es
  controlada por un solo fichero, /etc/smb.conf. Este fichero determina
  qué recursos del sistema quieres compartir con el mundo exterior y que
  restricciones deseas poner en ellos.

  Como las siguientes secciones 'direccionarán' la compartición de
  unidades e impresoras de Linux con máquinas Windows, el fichero
  smb.conf mostrado en esta sección es lo más simple posible, solo para
  propósitos introductorios.

  No te preocupes por los detalles, aún. Otras secciones más adelante
  introducirán los conceptos más importantes.

  Cada sección del fichero empieza con una cabecera como [global],
  [impresoras], etc.

  La sección [global] define unas pocas variables que Samba usará para
  definir la compartición de todos los recursos.

  La sección [homes] permite a los usuarios remotos acceder a sus
  respectivos directorios principales en la máquina Linux local (cada
  uno al suyo nada más). Esto es, si un usuario de Windows intenta
  conectar a este recurso desde su máquina Windows, será conectado a su
  directorio personal. A tener en cuenta que para hacer esto, tiene que
  tener una cuenta en la máquina Linux. ;-)

  El fichero smb.conf que viene debajo como ejemplo permite a los
  usuarios remotos acceder a su directorio principal en la máquina local
  y escribir en un directorio temporal. Para que un usuario de Windows
  vea estos recursos, la máquina Linux debe estar en la red local.
  Entonces el usuario simplemente conecta una unidad de red desde el
  Explorador de Windows o el Windows File Manager.

  Fíjate que en las siguientes secciones, se darán entradas adicionales
  a este fichero para permitir la compartición de más recursos.

  ______________________________________________________________________

  ; /etc/smb.conf
  ;
  ; Reinicia el servidor cada vez que hagas cambios a este fichero, ej:
  ; /etc/rc.d/init.d/smb parar
  ; /etc/rc.d/init.d/smb empezar

  [global]
  ; Quita el comentario a la siguiente linea si quieres cuentas de invitado
  ; guest account = nobody
     log file = /var/log/samba-log.%m
     lock directory = /var/lock/samba
     share modes = yes

  [homes]
     comment = Directorios principales
     browseable = no
     read only = no
     create mode = 0750

  [tmp]
     comment = Espacio de ficheros temporales
     path = /tmp
     read only = no
     public = yes

  ______________________________________________________________________

  6.  Compartiendo Una Unidad Linux Con Máquinas Windows

  Como se muestra en el fichero smb.conf anterior, compartir una unidad
  Linux con usuarios Windows es fácil. De todas maneras, como todo lo
  demás con Samba, puedes tener las cosas MUY controladas. Aquí tienes
  unos pocos ejemplos:

  Para compartir un directorio con todo el mundo, crea una copia de la
  sección [tmp] añadiendo algo como esto al smb.conf:

       ______________________________________________________________________

       [public]
          comment = Cosas publicas
          path = /home/public
          public = yes
          writable = yes
          printable = yes

       ______________________________________________________________________

  Para que este directorio lo pueda leer todo el mundo, pero que sólo lo
  puedan cambiar gente del grupo 'laborales', modifica la entrada de
  esta manera:

       ______________________________________________________________________

       [public]
          comment = Cosas publicas
          path = /home/public
          public = yes
          writable = yes
          printable = no
          write list = @laborales

       ______________________________________________________________________

  Para aprender otros truquillos con que jugar con las unidades
  compartidas, mira la documentación de Samba o las páginas del man.

  7.  Compartiendo Una Unidad Windows Con Máquinas Linux

  Se incluye un programa cliente de SMB para máquinas UNIX con la
  distribución de Samba. Provee un interfaz estilo ftp para la línea de
  comandos. Puedes usar esta utilidad para transferir ficheros entre un
  'servidor' Windows y un cliente unix.

  Para ver qué recursos están disponibles en un host dado, ejecuta:

           /usr/sbin/smbclient -L host

  donde 'host' es el nombre de la máquina que quieres 'ver'. Esto
  devolverá un lista de nombres de 'servicios' --esto es, nombres de
  unidades o impresoras que puede compartir contigo--. A menos que el
  servidor SMB no tenga la seguridad configurada, te preguntará por una
  clave. Dale la clave de la cuenta de 'invitados' o de tu cuenta
  personal en esa máquina.

  Por ejemplo:

           smbclient -L zimmerman

  La salida de este comando debería ser algo parecido a esto:

  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

  La lista muestra otros servidores SMB con recursos para compartir con
  la red.

  Para usar el cliente, ejecuta:

           /usr/sbin/smbclient servicio <password>

  donde 'servicio' es una máquina y un servicio. Por ejemplo, si estás
  intentando entrar en un directorio que ha sido compartido como
  'public' en una máquina llamada zimmerman, el servicio debería
  llamarse \zimmermanublic.
  De todas maneras, debido a restricciones del shell, necesitarás poner
  las barras invertidas con secuencias de escape, por lo que al final
  saldrá algo parecido a esto:

           /usr/sbin/smbclient \\\\zimmerman\\public miclave

  donde 'miclave' es una cadena literal con tu password.

  Entonces te aparecerá el 'prompt' del smbclient:

  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: \>

  Escribe 'h' para obtener una ayuda de como usar el cliente:

       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: \>

  Si sabes usar el ftp, no deberías necesitar las páginas del man del
  smbclient.

  8.  Compartiendo Una Impresora Linux Con Máquinas Windows

  Para compartir una impresora Linux con máquinas Windows, necesitas
  asegurarte de que la impresora está preparada para trabajar bajo
  Linux. Si puedes imprimir desde Linux, preparar una 'compartición' SMB
  de la impresora es automático.

  Mírate el COMO Imprimir (Printing HOWTO) para poner a punto la
  impresora con Linux.

  Como el autor usa una impresora conectada a una máquina Windows NT,
  esta sección no debería ser vista como algo definitivo, sino como mera
  sugerencia.  Cualquiera que tenga detalles que compartir con el autor,
  por favor, que los mande a dwood@plugged.net.au para que esta sección
  pueda ser completada.

  Añade la configuración de la impresora a tu 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 = Todas las impresoras
     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

  ______________________________________________________________________

  ¡Asegúrate de que el 'path' de la impresora (en este caso bajo [ljet])
  se corresponde al directorio de 'spool' en /etc/printcap!

  NOTA: Hay algunos problemas compartiendo impresoras conectadas a UNIX
  con máquinas Windows NT usando Samba. Un problema es que NT 'vea' la
  impresora compartida correctamente. Para conseguirlo, mírate las notas
  en la distribución de Samba en el fichero docs/WinNT.txt. El otro va
  con problemas con las claves. Mírate los comentarios en ese mismo
  fichero para conseguir una molesta ganancia de conocimientos y fallos
  (jejeje) para arreglar el problema.

  9.  Compartiendo Una Impresora Windows Con Máquinas Linux

  Para compartir una impresora en una máquina Windows, debes hacer lo
  siguiente:

  a) Debes tener las entradas adecuadas en /etc/printcap y deben
  corresponderse a la estructura de directorios local (el directorio de
  spool, etc)

  b) Debes tener el script /usr/bin/smbprint. Viene con las fuentes de
  Samba, pero no con la distribución de ejecutables del Samba. Más abajo
  comentamos una copia ligeramente modificada.

  c) Si quieres convertir ficheros ASCII a PostScript, debes tener el
  'nenscript' o su equivalente. nenscript es un conversor de PostScript
  y habitualmente está instalado en /usr/bin.

  d) Puedes desear que las impresiones de Samba sean más sencillas
  teniendo un front end fácil de usar. Más abajo tienes un sencillo
  script en perl para manejar ASCII, PostScript o PostScript generado.
  La entrada para /etc/printcap que tenemos debajo es para una impresora
  HP 5MP en un host Windows NT. Las entradas son las siguientes:

  ______________________________________________________________________

          cm - comentario
          lp - nombre del dispositivo a abrir para salida
          sd - el directorio de spool de la impresora (en la máquina local)
          af - el fichero de cuentas
          mx - el tamano maximo del fichero (cero es ilimitado)
          if - nombre del fichero de entrada (script)

  ______________________________________________________________________

  Para más información, lee el COMO Imprimir (Printing HOWTO) o la
  página del man de printcap.

       ______________________________________________________________________

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

       ______________________________________________________________________

  Asegúrate de que los directorios de spool y cuentas existe y se puede
  escribir en ellos. Asegura también que la línea 'if' tiene el path
  adecuado para el script smbprint (que damos debajo) y que apunta al
  dispositivo adecuado. (el fichero /dev especial).

  Lo siguiente es el propio script smbprint. Normalmente está en
  /usr/bin y es atribuible a Andrew Tridgell, la persona que creó el
  Samba (que yo sepa). Viene con la distribución de las fuentes del
  Samba, pero está ausente de algunas distribuciones de ejecutables, por
  lo que lo he recreado aquí.

  Te podría interesar mirarlo con cuidado. Hay algunas pequeñas
  alteraciones que han demostrado ser útiles.

  ______________________________________________________________________

  #!/bin/sh -x

  # Este script es un filtro de entrada para la impresion de printcap en
  # una maquina unix. Usa el programa smbclient para imprimir un fichero
  # en el servidor y servicio basados en smb especificados.
  # Por ejemplo, puedes tener una entrada en printcap como esta
  #
  # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
  #
  # que creara una impresora unix llamada "smb" que imprimira a traves de
  # este script. Necesitarras crear el directorio de spool /usr/spool/smb
  # con los permisos y pertenencias apropiados para tu sistema.

  # Ahora preparalos con el servidor y servicio en que quieras imprimir
  # En este ejemplo tengo un PC WfWg llamado "lapland" que tiene una
  # impresora exportada llamada "printer" sin password.

  #
  # Script alterado por hamilton@ecnz.co.nz (Michael Hamilton)
  # para que servicio, servidor y clave puedan ser leidos desde un
  # fichero /usr/var/spool/lpd/PRINTNAME/.config
  #
  # Para que esto funcione la entrada en /etc/printcap debe incluir un
  # fichero de cuentas (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:
  #
  # El fichero /usr/var/spool/lpd/PRINTNAME/.config deberia contener:
  #   servidor=SERVIDOR_PC
  #   servicio=NOMBRE_IMP
  #   clave="clave"
  #
  # Ej.
  #   servidor=PAULS_PC
  #   servicio=CJET_371
  #   clave=""

  #
  # Fichero de registro para correcciones, cambiar a /dev/null si se quiere
  #
  fichreg=/tmp/smb-print.log
  # fichreg=/dev/null

  #
  # El ultimo parametro para el filtro es el nombre del fichero de
  # cuentas
  #
  dir_spool=/var/spool/lpd/lp
  fich_config=$dir_spool/.config

  # Deberia leer las siguientes variables activadas en el fichero de
  # configuracion:
  #   servidor
  #   servicio
  #   clave
  #   usuario
  eval `cat $fich_config`
  #
  # Algo de ayuda en la correccion de errores. Cambia el >> por > si
  # quieres salvar algo de espacio.
  #
  echo "servidor $servidor, servicio $servicio" >> $fichreg

  (
  # NOTA: Puede que quieras anadir la linea `echo translate' si quieres CR/LF
  # automatico cuando imprimes.
          echo translate
          echo "print -"
          cat
  ) | /usr/bin/smbclient "\\\\$servidor\\$servicio" $clave -U $usuario -N -P >> $fichreg

  ______________________________________________________________________

  La mayoría de las distribuciones de Linux vienen con el nenscript para
  convertir los documentos ASCII a Postscript. El siguiente script perl
  hace la vida más fácil dando un interfaz sencillo para que linux
  imprima a través de smbprint.

  ______________________________________________________________________

  Forma de uso: print [-a|c|p] <nombre_fichero>
                -a imprime <nombre_fichero> como ASCII
                -c imprime <nombre_fichero> formateado como codigo fuente
                -p imprime <nombre_fichero> como Postscript
        Si no se pasa ningun parametro, print intenta
        averiguar el tipo de fichero e imprimirlo
        adecuadamente.

  ______________________________________________________________________

  smbprint tiende a truncar las líneas demasiado largas cuando imprime
  ficheros ASCII. Este rompe las líneas largas donde haya un espacio en
  blanco (en lugar de en mitad de una palabra), si es posible.

  El formateado de código fuente se hace con nenscript. Coge un fichero
  ASCII y lo formatea en 2 columnas con una cabecera mu' mona (fecha,
  nombre de fichero , etc). Además enumera las líneas. Usándolo como
  ejemplo, se pueden lograr otros tipos de formateado.

  Los documentos Postscript también se imprimen correctamente, por lo
  que pasan directamente.

  ______________________________________________________________________

  #!/usr/bin/perl

  # Script:   print
  # Autores:  Brad Marshall, David Wood
  #           Plugged In Communications
  # Fecha:    960808
  # Cambios:  Ricardo Javier Cardenes Medina
  # Razon:        Traduccion de comentarios y codigo a espanol para
  #               mayor comprension.
  # Fecha:    961109 (Sab 9 de Noviembre de 1996)
  #
  # Script para imprimir a Oreilly que esta actualmente en zimmerman.
  # Proposito: Toma ficheros de varios tipos como parametros y
  # los procesa apropiadamente para mandarlos al script de impresion de Samba.
  #
  # Tipos soportados actualmente:
  #
  # ASCII      - Asegura que las lineas con mas de $largo_linea caracteres seran
  #              divididas aprovechando los espacios en blanco.
  # PostScript - No hace nada.
  # Codigo     - Lo formatea en PostScript (usando nenscript) para una mejor
  #              presentacion (fuente, etc...).
  #

  # Maxima longitud permitida para cada linea de texto ASCII.
  $largo_linea = 76;

  # Path y nombre del script 'print' de Samba.
  $prog_print = "/usr/bin/smbprint";

  # Path y nombre del nenscript (el convertidor ASCII-->PostScript)
  $nenscript = "/usr/bin/nenscript";

  unless ( -f $prog_print ) {
          die "¡No encuentro $prog_print!";
  }
  unless ( -f $nenscript ) {
          die "¡No encuentro $nenscript!";
  }

  &InterpLinCom(@ARGV);

  # DBG
  print "El tipo de fichero es $tipofich\n";

  if ($tipofich eq "ASCII") {
          &Rompe($largo_linea);
  } elsif ($tipofich eq "codigo") {
          &FormateaCodigo;
  } elsif ($tipofich eq "postscript") {
          &CreaTabla;
  } else {
          print "Lo siento..tipo de fichero desconocido.\n";
          exit 0;
  }
  # Enviar el array a smbprint
  open(IMPRESORA, "|$prog_print") || die "¡No puedo abrir $prog_print: $!\n";
  foreach $linea (@newlines) {
          print IMPRESORA $linea;
  }
  # Enviar un avance de linea extra en caso de que el fichero tenga una
  # ultima linea incompleta.
  print IMPRESORA "\n";
  close(IMPRESORA);
  print "Terminado\n";
  exit 0;

  # --------------------------------------------------- #
  #         Todo lo de debajo es una subrutina          #
  # --------------------------------------------------- #

  sub InterpLinCom {
          # Interpreta la linea de comando, averiguando el tipo de fichero

          # Toma $par y $fich como parametro (si existe) y nombre del
          # fichero.
          if ($#_ < 0) {
                  &FormaUso;
          }
          # DBG
          #       foreach $elemento (@_) {
          #               print "*$elemento* \n";
          #       }

          $par = shift(@_);
          if ($par =~ /\-./) {
                  $com = $par;
          # DBG
          #       print "\Encontrado $com.\n";

                  $fich = shift(@_);
          } else {
                  $fich = $par;
          }

          # Defining the file type
          unless ($com) {
                  # No tenemos parámetro

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

                  # Procesa $fich buscando el tipo y devuelve $tipofich
          } else {
                  # Tenemos el tipo en $par
                  if ($com =~ /^-p$/) {
                          $tipofich = "postscript";
                  } elsif ($com =~ /^-c$/) {
                          $tipofich = "codigo";
                  } elsif ($com =~ /^-a$/) {
                          $tipofich = "ASCII"
                  }
          }
  }

  sub FormaUso {
          print "
  Forma de uso: print [-a|c|p] <nombre_fichero>
                -a imprime <nombre_fichero> como ASCII
                -c imprime <nombre_fichero> formateado como codigo fuente
                -p imprime <nombre_fichero> como Postscript
        Si no se pasa ningun parametro, print intenta
        averiguar el tipo de fichero e imprimirlo
        adecuadamente.\n
  ";
          exit(0);
  }

  sub Rompe {
          # Crea una tabla con las lineas del fichero, donde cada linea es
          # menor que el numero de caracteres especificado, y las rompe
          # solo en los espacios en blanco

          # Toma el numero de caracteres a los que limitar la linea.
          $limite = pop(@_);

          # DBG
          #print "Entrando en la subrutina Rompe\n";
          #print "El limite de caracteres es $limit\n";

          # Lee en el fichero, lo interpreta y pone en la tabla.
          open(FICHERO, "<$fich") || die "¡No puedo abrir $fich: $!\n";
          while(<FICHERO>) {
                  $linea = $_;

                  # DBG
                  #print "La linea es:\n$linea\n";

                  # Rompe la linea si se pasa del limite.
                  while ( length($linea) > $limite ) {

                          # DBG
                          #print "Rompiendo...";

                          # Toma los primeros $limite +1 caracteres.
                          $cacho = substr($linea,0,$limite +1);

                          # DBG
                          #print "La linea parcial es:\n$cacho\n";

                          # Mira a ver si el ultimo caracter es un espacio.
                          $ultimo_car = substr($cacho,-1, 1);
                          if ( " " eq $ultimo_car ) {
                              # Si lo es, imprime el resto.

                              # DBG
                              #print "El ultimo caracter era un espacio\n";

                              substr($linea,0,$limite + 1) = "";
                              substr($cacho,-1,1) = "";
                              push(@newlines,"$cacho\n");
                          } else {
                               # Si no lo es, busca el ultimo espacio en la
                               # sub-linea e imprime hasta alli.

                              # DBG
                              #print "El ultimo caracter no era un espacio\n";

                               # Borra el ultimo caracter que pasa de $limite
                               substr($cacho,-1,1) = "";
                               # Da la vuelta a la linea para hacer mas
                               # sencillo buscar el espacio.
                               $cachoreves = reverse($cacho);
                               $indice = index($revpart," ");
                               if ( $indice > 0 ) {
                                 substr($linea,0,$limite-$indice) = "";
                                 push(@newlines,substr($cacho,0,$limite-$indice)
                                     . "\n");
                               } else {
                                   # No hay espacios en la linea, por lo que
                                   # se imprime hasta $limite.
                                 substr($linea,0,$limite) = "";
                                 push(@newlines,substr($cacho,0,$limite)
                                     . "\n");
                               }
                          }
                  }
                  push(@newlines,$linea);
          }
          close(FICHERO);
  }

  sub FormateaCodigo {
          # Llama a la subrutina Rompe cuando filtra a traves de nenscript
          &Rompe($largo_linea);

          # Manda los resultados a traves de nenscript para crear un
          # fichero Postscript que de una forma decente a nuestro codigo
          # fuente para imprimirlo (fuente Courier, numero de lineas, ...).
          # E imprime todo esto a un fichero temporal.
          $fichtmp = "/tmp/nenscript$$";
          open(FICHERO, "|$nenscript -2G -i$fich -N -p$fichtmpfich -r") ||
                  die "¡No pude abrir nenscript: $!\n";
          foreach $linea (@newlines) {
                  print FICHERO $linea;
          }
          close(FICHERO);

          # Vuelca el fichero temporal en una tabla para que pueda
          # ser pasado al script de impresion de Samba.
          @newlines = ("");
          open(FICHERO, "<$fichtmp") || die "¡No puedo abrir $fichtmp: $!\n";
          while(<FICHERO>) {
                  push(@newlines,$_);
          }
          close(FICHERO);
          system("rm $fichtmp");
  }

  sub CreaTabla {
          # Crear la tabla para postscript
          open(FICHERO, "<$fich") || die "¡No puedo abrir $fich: $!\n";
          while(<FICHERO>) {
                  push(@newlines,$_);
          }
          close(FICHERO);
  }

  ______________________________________________________________________

  10.  Copyright

  This HOWTO is copyright 1996 by David Wood.  It may be reproduced in
  any form and freely distributed as long as the file stays intact,
  including this statement.

  Este COMO tiene un copyright de 1996 por David Wood. Puede ser
  reproducido en cualquier forma y distribuido libremente mientras el
  fichero se mantenga intacto , incluyendo esta línea.

  11.  Reconocimientos

  Tan pronto como me mandes sugerencias, te pondré aquí en la siguiente
  entrega.

  12.  Notas sobre/del traductor

  Este es mi primer trabajo para el INSFLUG, grupo del que tuve
  conocimiento esta misma semana (esto fue escrito el sábado 9 de
  noviembre de 1996). Para que veáis que aquí nos damos prisa con las
  cosas y que esto va rápido.

  Ricardo Cárdenes es un simple estudiante de la E.U. de Informática en
  la ULPGC (Universidad de Las Palmas de Gran Canaria).

  Ahora mismo está en su tercer año y tiene dos cosas que agradecer a la
  uni: Internet y el LiNUX. La primera la tiene presente desde el primer
  mes en la escuela. El segundo lo descubrió y empezó a quererlo y
  mimarlo desde que se vio obligado a ceder casi la mitad de su disco
  duro (210MB -sigh!-) para poder cumplir con unas prácticas de S.
  Operativos en mitad del segundo curso (hasta ahora no se ha
  arrepentido)

  Cualquier donación para la compra de un nuevo disco duro y poder
  rebajar el 88-95% de ocupación que se mantiene constantemente en las
  particiones, y así poder dedicarse con más holgura a la traducción de
  COMOs, FAQs y cosas de esas que tan bien os vienen, será bien recibida
  }8-)))))

  Si quieres contactar con él por alguna de esas extrañas razones de la
  vida (por ejemplo, una donación para su nuevo disco duro 8-))))),
  podéis dejarle un mensaje aquí: a1402@correo.dis.ulpgc.es

  13.  Anexo: Grupos LiNUXeros en España.

  Francisco José Montilla, pacopepe@nova.es, FidoNet 2:345/402.22 es
  coordinador del INSFLUG: (Impatient & Novatous Spanish Fidonet LiNUX
  Users Group) uno de los varios grupos de usuarios existentes en
  España, y más concretamente en la mejor ;-) área de FidoNet: R34.LINUX
  junto con LuCas (LinUx en CAStellano).

  El INSFLUG se orienta preferentemente a la traducción de documentos
  breves, como los Howtos y FAQs, etc.

  LuCas Coordina y realiza las traducciones de las guides, es decir,
  documentos más extensos.

  Por supuesto, la orientación de cada grupo no tiene carácter
  excluyente; si quieres colaborar en las dos, ¡mejor! ;-).

  Actualmente están siendo traducidos varios COMOs y FAQs, además de las
  ``guides''.  Otra fuente de información obligada para el recién
  incorporado son las FAQ elaboradas a partir del correo circulante por
  R34.LINUX por Pablo Gómez, pgomez@p12.laereas.encomix.com,
  2:341/43.40, disponibles próximamente en los formatos habituales de
  documentación (ps, dvi, html, sgml, etc) en los servidores de Internet
  especificados más adelante, así como en el mismo área.

  ¡Necesitamos tu colaboración para futuras traducciones! si quieres
  unirte a nosotros ponte en contacto con:

  INSFLUG:

  Francisco José Montilla, pacopepe@nova.es, FidoNet 2:345/402.22

  LuCas:

  1. Juan José Amor,   jjamor@infor.es, FidoNet 2:341/12.19

  2. Alfonso Belloso, alfon@bipv02.bi.ehu.es, FidoNet 2:344/17.2

     Puedes obtener traducciones de:

  FidoNet:

  ·  Elektra (95) 4164934/4161749 28k8/14k4

  ·  La Voix (95) 4275081/4275321 28k8/14k4

  Si se da el caso de que carezcas de acceso a Internet, y no encuentras
  los COMOs en alguna de estas dos direcciones, no dudes en ponerte en
  contacto conmigo, y me encargaré de subirlas a alguna de las dos.

  Por último, recordarte que un inmejorable lugar para estar informado,
  así como consultar y discutir todo lo relacionado con LiNUX lo tienes
  en FidoNet, en R34.LINUX.

  Actualmente, ambos grupos poseen las siguientes listas de correo:

  ·  LuCas: lucas@bipv02.bi.ehu.es

  ·  INSFLUG: insflug@nova.es

  Ambas son listas tipo majordomo; para suscribirte, por ejemplo a la
  del INSFLUG, envía un email a majordomo@nova.es, con "subscribe
  insflug" en el cuerpo del mensaje.

  Dispones de todos los ``COMOs'' traducidos hasta ahora, así como
  información puntual sobre el INSFLUG y temas relacionados en:

  http://www.insflug.nova.es en sus versiones html, y listas para bajar,
  en http://ftp.insflug.nova.es

  Otro buen punto de búsqueda, consulta, y obtención de la documentación
  traducida, en formato HTML, con links a los demás formatos, así como
  las traducciones de las guías traducidas por LuCAS es:

  http://www.infor.es/LuCAS/

  junto con su ftp:

  ftp://ftp.infor.es/pub/LuCAS/

  Tanto el INSFLUG, como LuCAS, y todos los traductores implicados,
  esperamos que esta traducción te haya sido de utilidad.

